nodejs实现百度舆情接口应用示例


Posted in NodeJs onFebruary 07, 2020

本文实例讲述了nodejs实现百度舆情接口。分享给大家供大家参考,具体如下:

const URL = require('url');
const http = require('http');
const https = require('https');
const qs = require('querystring');
let trends = exports;
trends.getInstance = function () {
  return new Trends;
}
function Trends() {
  this.expireTime = 1800;
  this.accessKey = 'xxxxxxxx';
  this.secretKey = 'xxxxxxxx';
  this.userKey = 'xxxxxxxx';
  this.userSecret = 'xxxxxxxx';
  this.host = 'trends.baidubce.com';
  this.timestamp = _.time();
  this.utcTimestamp = _.utcTime();
}
Trends.prototype.request = async function (method, uri, params) {
  method = method.toUpperCase();
  let token = this.getToken();
  let headers = this.getHeaders(method, uri);
  params = Object.assign({}, params || {}, {
    'user_key': this.userKey,
    'token': token,
    'timestamp': this.timestamp
  });
  let url = `http://${this.host}${uri}`;
  return await this.httpRequest(method, url, params, headers);
}
Trends.prototype.getHeaders = function (method, uri) {
  let authorization = this.getAuthorization(method, uri);
  return {
    'Content-Type': 'application/x-www-form-urlencoded',
    'Host': this.host,
    'x-bce-date': this.utcTimestamp,
    'Authorization': authorization,
  };
}
Trends.prototype.getAuthorization = function (method, uri) {
  let authString = `bce-auth-v1/${this.accessKey}/${this.utcTimestamp}/${this.expireTime}`;
  let signinKey = _.hmac(authString, this.secretKey, 'sha256');
  let header = {
    'host': this.host,
    'x-bce-date': _.urlencode(this.utcTimestamp)
  };
  let headerArr = [];
  for (let name in header) {
    let val = header[name];
    headerArr.push(`${name}:${val}`);
  }
  let headerKeyStr = Object.keys(header).sort().join(';');
  let requestStr = `${method}\n${uri}\n\n${headerArr.join('\n')}`;
  let signautre = _.hmac(requestStr, signinKey, 'sha256');
  return `${authString}/${headerKeyStr}/${signautre}`;
}
Trends.prototype.getToken = function () {
  return _.hmac(this.userKey + this.timestamp, this.userSecret);
}
Trends.prototype.httpRequest = async function (method, url, params, headers) {
  let urlObj = URL.parse(url);
  let protocol = urlObj.protocol;
  let options = {
    hostname: urlObj.hostname,
    port: urlObj.port,
    path: urlObj.path,
    method: method,
    headers: headers,
    timeout: 10000,
  };
  let postData = qs.stringify(params || {});
  return new Promise((resolve, reject) => {
    let req = (protocol == 'http:' ? http : https).request(options, (res) => {
      let chunks = [];
      res.on('data', (data) => {
        chunks.push(data);
      });
      res.on('end', () => {
        let buffer = Buffer.concat(chunks);
        let encoding = res.headers['content-encoding'];
        if (encoding == 'gzip') {
          zlib.unzip(buffer, function (err, decoded) {
            resolve(decoded.toString());
          });
        } else if (encoding == 'deflate') {
          zlib.inflate(buffer, function (err, decoded) {
            resolve(decoded.toString());
          });
        } else {
          resolve(buffer.toString());
        }
      });
    });
    req.on('error', (e) => {
      _.error('request error', method, url, params, e);
      resolve('');
    });
    req.on("timeout", (e) => {
      _.error('request timeout', method, url, params, e);
      resolve('');
    })
    if (method.toUpperCase() == 'POST') {
      req.write(postData);
    }
    req.end();
  });
}
module.exports = function () {
  return new Script;
}
function Script() {}
Script.prototype.run = async function () {
  let rst = this.getTaskList();
  console.log(rst);
}
Script.prototype.getTaskList = async function () {
  let params = {};
  let method = 'post';
  let uri = '/openapi/getTasklist';
  let rst = await _.trends.getInstance().request(method, uri, params);
  return rst;
}

希望本文所述对大家node.js程序设计有所帮助。

NodeJs 相关文章推荐
nodejs文件操作模块FS(File System)常用函数简明总结
Jun 05 NodeJs
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
Sep 26 NodeJs
nodejs批量修改文件编码格式
Jan 22 NodeJs
详解nodejs微信公众号开发——1.接入微信公众号
Apr 10 NodeJs
Nodejs+express+ejs简单使用实例代码
Sep 18 NodeJs
nodejs实现OAuth2.0授权服务认证
Dec 27 NodeJs
详解nodejs通过响应回写的方式渲染页面资源
Apr 07 NodeJs
Nodejs对postgresql基本操作的封装方法
Feb 20 NodeJs
详解NodeJS Https HSM双向认证实现
Mar 12 NodeJs
NodeJS读取分析Nginx错误日志的方法
May 14 NodeJs
Sublime Text3 配置 NodeJs 环境的方法
May 20 NodeJs
Nodejs + sequelize 实现增删改查操作
Nov 07 NodeJs
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
Feb 06 #NodeJs
nodejs nedb 封装库与使用方法示例
Feb 06 #NodeJs
nodejs实现的http、https 请求封装操作示例
Feb 06 #NodeJs
Nodejs + Websocket 指定发送及群聊的实现
Jan 09 #NodeJs
nodeJs的安装与npm全局环境变量的配置详解
Jan 06 #NodeJs
Nodejs封装类似express框架的路由实例详解
Jan 05 #NodeJs
nodejs对mongodb数据库的增加修删该查实例代码
Jan 05 #NodeJs
You might like
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
php使用异或实现的加密解密实例
2013/09/04 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
jQuery中trigger()与bind()用法分析
2015/12/18 Javascript
jQuery+css实现的tab切换标签(兼容各浏览器)
2016/01/28 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
javascript中对Date类型的常用操作小结
2016/05/19 Javascript
JavaScript仿百度图片浏览效果
2016/11/23 Javascript
JavaScript实现随机数生成器(去重)
2017/10/13 Javascript
Angular2.0/4.0 使用Echarts图表的示例代码
2017/12/07 Javascript
详解组件库的webpack构建速度优化
2018/06/18 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
详解vue组件中使用路由方法
2019/02/12 Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
2019/06/03 Javascript
vue+elementUI中表格高亮或字体颜色改变操作
2020/11/02 Javascript
Python对两个有序列表进行合并和排序的例子
2014/06/13 Python
Python使用bs4获取58同城城市分类的方法
2015/07/08 Python
Python内置数据结构与操作符的练习题集锦
2016/07/01 Python
python中文分词,使用结巴分词对python进行分词(实例讲解)
2017/11/14 Python
Python使用wxPython实现计算器
2018/01/30 Python
python入门教程 python入门神图一张
2018/03/05 Python
Python 查找字符在字符串中的位置实例
2018/05/02 Python
详解python里的命名规范
2018/07/16 Python
Python %r和%s区别代码实例解析
2020/04/03 Python
keras自定义损失函数并且模型加载的写法介绍
2020/06/15 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
2020/11/24 Python
美国最大的骑马用品零售商:HorseLoverZ
2017/01/12 全球购物
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
.NET面试10题
2014/02/24 面试题
人力资源经理自我评价
2014/01/04 职场文书
2019公司借款合同范本2篇!
2019/07/24 职场文书
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
MySQL 如何设计统计数据表
2021/06/15 MySQL