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学习笔记之Connect中间件模块(二)
Jan 27 NodeJs
使用Angular和Nodejs、socket.io搭建聊天室及多人聊天室
Aug 21 NodeJs
基于nodejs+express(4.x+)实现文件上传功能
Nov 23 NodeJs
Nodejs从有门道无门菜鸟起飞必看教程
Jul 20 NodeJs
nodejs实例解析(输出hello world)
Jan 03 NodeJs
用nodeJS搭建本地文件服务器的几种方法小结
Mar 16 NodeJs
手把手教你把nodejs部署到linux上跑出hello world
Jun 19 NodeJs
NodeJs操作MongoDB教程之分页功能以及常见问题
Apr 09 NodeJs
Nodejs技巧之Exceljs表格操作用法示例
Nov 06 NodeJs
nodejs开发一个最简单的web服务器实例讲解
Jan 02 NodeJs
Nodejs在局域网配置https访问的实现方法
Oct 17 NodeJs
分享node.js实现简单登录注册的具体代码
Apr 26 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导出word文档与excel电子表格的简单示例代码
2014/03/08 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
mysql查找删除重复数据并只保留一条实例详解
2016/09/24 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
2018/06/11 PHP
Prototype1.5 rc2版指南最后一篇之Position
2007/01/10 Javascript
网站被黑的假象--ARP欺骗之页面中加入一段js
2007/05/16 Javascript
编写高性能的JavaScript 脚本的加载与执行
2010/04/19 Javascript
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
jQuery的deferred对象详解
2014/11/12 Javascript
javascript 数组的定义和数组的长度
2016/06/07 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
Koa2微信公众号开发之本地开发调试环境搭建
2018/05/16 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
2018/11/04 Javascript
Layer+Echarts构建弹出层折线图的方法
2019/09/25 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
Vue项目接入Paypal实现示例详解
2020/06/04 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
JS canvas实现画板和签字板功能
2021/02/23 Javascript
使用Python判断IP地址合法性的方法实例
2014/03/13 Python
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
python实现维吉尼亚加密法
2019/03/20 Python
Python中的全局变量如何理解
2020/06/04 Python
CSS3中的Media Queries学习笔记
2016/05/23 HTML / CSS
Aeropostale官网:美国著名校园品牌及青少年服饰品牌
2019/03/21 全球购物
zooplus德国:便宜地订购动物用品、动物饲料、动物食品
2020/05/06 全球购物
输入N,打印N*N矩阵
2012/02/20 面试题
汽车维修专业个人求职信范文
2014/01/01 职场文书
疾病捐款倡议书
2014/05/13 职场文书
研究生求职自荐书
2014/06/23 职场文书
2015年体检中心工作总结
2015/05/27 职场文书
结婚司仪主持词
2015/06/29 职场文书
基于Python实现的购物商城管理系统
2021/04/27 Python
用php如何解决大文件分片上传问题
2021/07/07 PHP
游戏《东方异文石:爱亚利亚黎明》正式版发布
2022/04/03 其他游戏