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代码实现计算交社保是否合适
Mar 09 NodeJs
nodejs通过phantomjs实现下载网页
May 04 NodeJs
使用DNode实现php和nodejs之间通信的简单实例
Jul 06 NodeJs
NodeJs的优势和适合开发的程序
Aug 14 NodeJs
nodejs搭建本地服务器并访问文件的方法
Mar 03 NodeJs
angular2+nodejs实现图片上传功能
Mar 27 NodeJs
NodeJS实现视频转码的示例代码
Nov 18 NodeJs
nodejs前端模板引擎swig入门详解
May 15 NodeJs
详解NodeJS Https HSM双向认证实现
Mar 12 NodeJs
nodejs简单抓包工具使用详解
Aug 23 NodeJs
NodeJS 文件夹拷贝以及删除功能
Sep 03 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制作图型计数器的例子
2006/10/09 PHP
php使用curl存储cookie的示例
2014/03/31 PHP
PHP实现的博客欢迎提示功能(很特别哦)
2014/06/05 PHP
win平台安装配置Nginx+php+mysql 环境
2016/01/12 PHP
Smarty模板配置实例简析
2019/07/20 PHP
探讨javascript是不是面向对象的语言
2013/11/21 Javascript
js中的cookie的读写操作示例详解
2014/04/17 Javascript
[将免费进行到底]在Amazon的一年免费服务器上安装Node.JS, NPM和OurJS博客
2014/08/18 Javascript
js匿名函数的调用示例(形式多种多样)
2014/08/20 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
Avalonjs 实现简单购物车功能(实例代码)
2017/02/07 Javascript
jquery实现手机端单店铺购物车结算删除功能
2017/02/22 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)
2017/11/21 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
2019/06/10 jQuery
[50:28]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Newbee vs KG
2018/04/01 DOTA
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python 访问限制 private public的详细介绍
2018/10/16 Python
解决Pycharm后台indexing导致不能run的问题
2019/06/27 Python
python+numpy实现的基本矩阵操作示例
2019/07/19 Python
python视频按帧截取图片工具
2019/07/23 Python
Python Selenium 之数据驱动测试的实现
2019/08/01 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
编码实现字符串转整型的函数
2012/06/02 面试题
银行会计财务工作个人的自我评价
2013/10/29 职场文书
求职信模板怎么做
2014/01/26 职场文书
艺术设计专业求职自荐信
2014/05/19 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
2015年度合同管理工作总结
2015/05/22 职场文书
2015法院个人工作总结范文
2015/05/25 职场文书
每日六道java新手入门面试题,通往自由的道路
2021/06/30 Java/Android
SQL实现LeetCode(180.连续的数字)
2021/08/04 MySQL