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批量修改文件编码格式
Jan 22 NodeJs
nodejs开发微博实例
Mar 25 NodeJs
nodejs初步体验篇
Nov 23 NodeJs
NodeJs——入门必看攻略
Jun 27 NodeJs
NodeJs的优势和适合开发的程序
Aug 14 NodeJs
NodeJs下的测试框架Mocha的简单介绍
Feb 22 NodeJs
nodejs+mongodb+vue前后台配置ueditor的示例代码
Jan 02 NodeJs
nodejs的路径问题的解决
Jun 30 NodeJs
nodejs基础之常用工具模块util用法分析
Dec 26 NodeJs
nodejs 递归拷贝、读取目录下所有文件和目录
Jul 18 NodeJs
NodeJS有难度的面试题(能答对几个)
Oct 09 NodeJs
Nodejs实现微信分账的示例代码
Jan 19 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
win平台安装配置Nginx+php+mysql 环境
2016/01/12 PHP
php禁用函数设置及查看方法详解
2016/07/25 PHP
php 输入输出流详解及示例代码
2016/08/25 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
利用XMLHTTP传递参数在另一页面执行并刷新本页
2006/10/26 Javascript
用javascript连接access数据库的方法
2006/11/17 Javascript
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
js 获取Listbox选择的值的代码
2010/04/15 Javascript
Jquery中对数组的操作代码
2011/08/12 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
jQuery插件jFade实现鼠标经过的图片高亮其它变暗
2015/03/14 Javascript
JavaScript中Function()函数的使用教程
2015/06/04 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
jQuery实现的调整表格行tr上下顺序
2016/01/10 Javascript
省市联动效果的简单实现代码(推荐)
2016/06/06 Javascript
jquery Ajax 全局调用封装实例详解
2017/01/16 Javascript
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
Vue中使用 setTimeout() setInterval()函数的问题
2018/09/13 Javascript
浅谈javascript错误处理
2019/08/11 Javascript
[50:45]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第一场
2018/04/10 DOTA
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
python实现百度语音识别api
2018/04/10 Python
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
python opencv捕获摄像头并显示内容的实现
2019/07/11 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
pip install命令安装扩展库整理
2021/03/02 Python
html5画布旋转效果示例
2014/01/27 HTML / CSS
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
大学生入党自我鉴定
2013/10/31 职场文书
灰雀教学反思
2014/04/28 职场文书
乡镇领导班子批评与自我批评材料
2014/09/23 职场文书
2014购房个人委托书范本
2014/10/12 职场文书
2015年房产销售工作总结范文
2015/05/22 职场文书
python实现批量提取指定文件夹下同类型文件
2021/04/05 Python
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技