[我正在尝试从node.js中的twitter获取已登录用户的推文,但出现错误
{错误:[{代码:32,消息:'无法验证您的身份。' }]}
下面是我的代码段,任何帮助都会非常有用
var oauthSignature =require('oauth-signature');
var request = require('request');
var timestamp =Math.floor(Date.now() / 1000);
function guid() {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
return s4() + s4() + s4() + s4() +
s4() + s4() + s4() + s4();
}
var uuid = guid();
var options = {
encodeSignature: true // will encode the signature following the RFC 3986 Spec by default
}
var httpMethod = 'GET',
url = 'https://api.twitter.com/1.1/statuses/user_timeline.json',
parameters = {
oauth_consumer_key : 'wxyrliZD8VdweAzzS31FElIkhK',
oauth_token : '3724495214-DBOnDCGcWtsektrxb8o6N3eKsTnahvL7OjJDzAfS',
oauth_nonce : uuid,
oauth_timestamp : timestamp,
oauth_signature_method : 'HMAC-SHA1',
oauth_version : '1.0'
},
consumerSecret = 'MIQwmQveTqMsFBxoJTfx8Coh9ZQ41eaV0SgJsdGKquXWKThaCHv',
tokenSecret = 'JBxBAgXxUVh3RZHE9ZXRTYbujYhD9ekrYiCee0hxsWA2U',
// generates a RFC 3986 encoded, BASE64 encoded HMAC-SHA1 hash
encodedSignature = oauthSignature.generate(httpMethod, url, parameters, consumerSecret, tokenSecret);
var signature = oauthSignature.generate(httpMethod, url, parameters, consumerSecret, tokenSecret,
{ encodeSignature: false});
console.log(signature)
// generates a BASE64 encode HMAC-SHA1 hash
request.get({url:'https://api.twitter.com/1.1/statuses/user_timeline.json',
'headers':{'Authorization':' OAuth oauth_token="3724495214-DBOnDCGcWtseketrxb8o6N3KsTnahvL7OjJDzAfS",oauth_signature='+encodeURI(signature)+',oauth_version="1.0",oauth_nonce='+uuid+', oauth_signature_method="HMAC-SHA1", oauth_version="1.0", oauth_consumer_key = "wxyrliZD8VdwAzrzS31FElIkhK", oauth_timestamp='+timestamp},json:true,timeout: 5000},function (e, r, user) {
console.log(e,user);
});
我找到了解决方案。请检查下面的代码。我们可以使用节点模块'twitter-node-client'代替构建自定义代码
var Twitter = require('twitter-node-client').Twitter;
var error = function (err, response, body) {
console.log('ERROR [%s]', err);
};
var success = function (data) {
console.log('Data [%s]', data);
};
var config = {
"consumerKey": "key",
"consumerSecret": "secret",
"accessToken": req.session.twitterAccessToken,
"accessTokenSecret": req.session.twitterAccessSecret
};
var twitter = new Twitter(config);
twitter.getUserTimeline({user_id: req.session.influencer.twitterId,count: '1'}, error,success);