通过nodejs使用twitter令牌执行http请求

时间:2015-01-26 11:53:04

标签: node.js twitter

我有以下推特令牌:

var tokens = {
        consumer_key: 'xxx',
        consumer_secret: 'xxx',
        access_token_key: 'xxx',
        access_token_secret: 'xxx' 
};

以下http_options

var options = {
        host: 'https://api.twitter.com',
        path: '1.1/users/lookup.json?screen_name='+screen_name,
        method: 'GET',
        headers: {
            'Content-Type': 'application/json'
        }
    } 

我尝试了这个但是失败了

var options = {
        host: 'https://api.twitter.com',
        path: '/1.1/users/lookup.json?screen_name='+screen_name,
        method: 'GET',
        headers: {
            'Content-Type': 'application/json'
        },
        auth: {
            consumer_key: 'xxx',
            consumer_secret: 'xxx',
            access_token_key: 'xxx',
            access_token_secret: 'xxx'
        }
    } 

在以下代码中:

var http_client = require('http');
var reqPost = http_client.request(options, function(res) {

    res.on('data', function(d) {
            buffer = buffer+d;
        });
    res.on('end', function() {

           buffer = JSON.parse(buffer);

           console.log("inside stream, BUFFER:",buffer);
       });
  });

reqPost.write();
reqPost.end();

如果您打开此链接https://api.twitter.com/1.1/users/lookup.json?screen_name=testuser,您可能会看到{"errors":[{"message":"Bad Authentication data","code":215}]},因此我不确切知道应该如何完成此操作。有人能帮我吗?非常感谢你。

2 个答案:

答案 0 :(得分:0)

oauth请求访问Twitter API的方式不正确。您可能需要oauth模块才能完成此任务。查看此模块存储库中的README https://github.com/ciaranj/node-oauth


我建议你使用twitter模块来完成给定的任务。看看这个例子。

var Twitter = require('twitter');

var client = new Twitter({
  consumer_key: 'xxx',
  consumer_secret: 'xxx',
  access_token_key: 'xxx',
  access_token_secret: 'xxx'
});

var params = {screen_name: 'nodejs'};
client.get('users/lookup.json', params, function(error, tweets, response){
  if (!error) {
    console.log(tweets);
  }
});

答案 1 :(得分:0)

也一直在努力处理此代码。最终使它可以与Node native https一起使用。使我们现在有了反引号变得容易得多。我建议您首先让它在Postman中工作,单击代码按钮,然后将值插入此代码段中。 但是,您仍然需要执行一些OAuth活动以使其具有可重复性,并且需要epoc时间戳。可能更易于使用和oauth模块。

const http = require("https");
// prettier-ignore
const options = {
  "method": "GET",
  "hostname": "api.twitter.com",
  "port": 443,
  "path": "/1.1/collections/entries.json?id=custom-90708098097098-fake",
  "headers": {
    "authorization":`OAuth oauth_consumer_key="yourtwitterconsumerkey",oauth_token="yourregisteredtwittertoken", oauth_signature_method="HMAC-SHA1",oauth_timestamp="atimestame",oauth_nonce="anonceofyourchoic",oauth_version="1.0",oauth_signature="anoauthtweet"`,
    "cache-control": "no-cache"
  }
};
const req = http.request(options, function(res) {
  let chunks = [];

  res.on("data", function(chunk) {
    chunks.push(chunk);
  });

  res.on("end", function() {
    let body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();