nodejs实现百度舆情接口应用示例
本文实例讲述了nodejs实现百度舆情接口。分享给大家供大家参考,具体如下:
constURL=require('url'); consthttp=require('http'); consthttps=require('https'); constqs=require('querystring'); lettrends=exports; trends.getInstance=function(){ returnnewTrends; } functionTrends(){ 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=asyncfunction(method,uri,params){ method=method.toUpperCase(); lettoken=this.getToken(); letheaders=this.getHeaders(method,uri); params=Object.assign({},params||{},{ 'user_key':this.userKey, 'token':token, 'timestamp':this.timestamp }); leturl=`http://${this.host}${uri}`; returnawaitthis.httpRequest(method,url,params,headers); } Trends.prototype.getHeaders=function(method,uri){ letauthorization=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){ letauthString=`bce-auth-v1/${this.accessKey}/${this.utcTimestamp}/${this.expireTime}`; letsigninKey=_.hmac(authString,this.secretKey,'sha256'); letheader={ 'host':this.host, 'x-bce-date':_.urlencode(this.utcTimestamp) }; letheaderArr=[]; for(letnameinheader){ letval=header[name]; headerArr.push(`${name}:${val}`); } letheaderKeyStr=Object.keys(header).sort().join(';'); letrequestStr=`${method}\n${uri}\n\n${headerArr.join('\n')}`; letsignautre=_.hmac(requestStr,signinKey,'sha256'); return`${authString}/${headerKeyStr}/${signautre}`; } Trends.prototype.getToken=function(){ return_.hmac(this.userKey+this.timestamp,this.userSecret); } Trends.prototype.httpRequest=asyncfunction(method,url,params,headers){ leturlObj=URL.parse(url); letprotocol=urlObj.protocol; letoptions={ hostname:urlObj.hostname, port:urlObj.port, path:urlObj.path, method:method, headers:headers, timeout:10000, }; letpostData=qs.stringify(params||{}); returnnewPromise((resolve,reject)=>{ letreq=(protocol=='http:'?http:https).request(options,(res)=>{ letchunks=[]; res.on('data',(data)=>{ chunks.push(data); }); res.on('end',()=>{ letbuffer=Buffer.concat(chunks); letencoding=res.headers['content-encoding']; if(encoding=='gzip'){ zlib.unzip(buffer,function(err,decoded){ resolve(decoded.toString()); }); }elseif(encoding=='deflate'){ zlib.inflate(buffer,function(err,decoded){ resolve(decoded.toString()); }); }else{ resolve(buffer.toString()); } }); }); req.on('error',(e)=>{ _.error('requesterror',method,url,params,e); resolve(''); }); req.on("timeout",(e)=>{ _.error('requesttimeout',method,url,params,e); resolve(''); }) if(method.toUpperCase()=='POST'){ req.write(postData); } req.end(); }); }
module.exports=function(){ returnnewScript; } functionScript(){} Script.prototype.run=asyncfunction(){ letrst=this.getTaskList(); console.log(rst); } Script.prototype.getTaskList=asyncfunction(){ letparams={}; letmethod='post'; leturi='/openapi/getTasklist'; letrst=await_.trends.getInstance().request(method,uri,params); returnrst; }
希望本文所述对大家node.js程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。