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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。