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连接MongoDB数据库时报错的快速解决方法
May 13 NodeJs
用NodeJS实现批量查询地理位置的经纬度接口
Aug 16 NodeJs
windows 下安装nodejs 环境变量设置
Feb 02 NodeJs
nodejs中使用HTTP分块响应和定时器示例代码
Mar 19 NodeJs
nodejs获取微信小程序带参数二维码实现代码
Apr 12 NodeJs
用Nodejs搭建服务器访问html、css、JS等静态资源文件
Apr 28 NodeJs
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
Sep 06 NodeJs
nodejs实现简单的gulp打包
Dec 21 NodeJs
nodejs超出最大的调用栈错误问题
Dec 27 NodeJs
Nodejs连接mysql并实现增、删、改、查操作的方法详解
Jan 04 NodeJs
NodeJS加密解密及node-rsa加密解密用法详解
Oct 12 NodeJs
使用nodejs分离html文件里的js和css详解
Apr 12 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 缓存实现代码及详细注释
2010/05/16 PHP
php购物车实现代码
2011/10/10 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
QQ登录简单实现代码
2021/03/09 Javascript
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
基于Jquery实现键盘按键监听
2014/05/11 Javascript
Extjs根据条件设置表格某行背景色示例
2014/07/23 Javascript
javascript使用正则表达式实现去掉空格之后的字符
2015/02/15 Javascript
jquery通过closest选择器修改上级元素的方法
2015/03/17 Javascript
JavaScript设置表单上传时文件个数的方法
2015/08/11 Javascript
JS实现的论坛Ajax打分效果完整实例
2015/10/31 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
漂亮实用的页面loading(加载)封装代码
2017/02/03 Javascript
jQuery插件zTree实现的多选树效果示例
2017/03/08 Javascript
ES6/JavaScript使用技巧分享
2017/12/14 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
2018/04/21 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
vue组件开发之用户无限添加自定义填写表单的方法
2018/08/28 Javascript
python切换hosts文件代码示例
2013/12/31 Python
python实现在pickling的时候压缩的方法
2014/09/25 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
对pandas数据判断是否为NaN值的方法详解
2018/11/06 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
基于Python采集爬取微信公众号历史数据
2020/11/27 Python
Canvas引入跨域的图片导致toDataURL()报错的问题的解决
2018/09/19 HTML / CSS
HSRP的含义以及如何工作
2014/09/10 面试题
linux面试题参考答案(11)
2016/11/26 面试题
木工主管岗位职责
2013/12/08 职场文书
金融与证券专业求职信
2014/06/22 职场文书
环卫个人总结
2015/03/03 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
儿子满月酒致辞
2015/07/29 职场文书
导游词之珠海轮廓
2019/10/25 职场文书
python 经纬度求两点距离、三点面积操作
2021/06/03 Python
Python+Matplotlib+LaTeX玩转数学公式
2022/02/24 Python