使用ntwitter在Node.js中多次调用Twitter流API

时间:2012-01-31 22:52:13

标签: node.js twitter

我有以下代码:

var access_token_key, access_token_secret, consumer_key, consumer_secret, get_twitter, listen, twitter;

twitter = require('ntwitter');

consumer_key = 'bogus';
consumer_secret = 'fake';

// consumer
access_token_key = 'falsey';
access_token_secret = 'unreal';

get_twitter = function(key, secret) {
  return new twitter({
    consumer_key: consumer_key,
    consumer_secret: consumer_secret,
    access_token_key: key,
    access_token_secret: secret
  });
};

listen = function(feed) {
  var api = get_twitter(access_token_key, access_token_secret);
  return api.stream('statuses/filter', {track: feed.track}, function(stream) {
    console.log('setting up stream for %s', feed.track);        

    stream.on('data', function(data) {
      console.log('data for %s', feed.track);
      console.log('\t' + data.user.screen_name + ': ' + data.text);
    });

    stream.on('end', function(response) {
      console.log('ending stream for %s', feed.track);
    });

    stream.on('destroy', function(response) {
      console.log('destroying stream for %s', feed.track);
    });
  });
};

module.exports.listen = listen;

当我致电listen({track: 'superbowl'})时,它有效。欢呼!它做了一个应用程序应该做的一切!我在控制台中得到了这个:

setting up stream for superbowl
data for superbowl
    user: tweet

但在那之后,我调用listen({track: 'humble bundle'}),它会设置新的流,但是会发生这种情况:

setting up stream for humble bundle
ending stream for superbowl
destroying stream for superbowl
data for humble bundle
     user: tweet

我在这里做错了吗?我还没有完全掌握Node或Twitter的概念吗?

1 个答案:

答案 0 :(得分:6)

来自访问和速率限制下的Twitter流媒体API文档(https://dev.twitter.com/docs/streaming-api/concepts):

  

每个帐户只能与Streaming API建立一个常设连接。来自同一帐户的后续连接可能导致先前建立的连接断开。无论成功与否,过多的连接尝试都将导致自动禁止客户端的IP地址。连续失败的连接将导致您的IP地址被所有Twitter访问列入黑名单。

即,一次只能有一个流连接。要获得这两组结果,您需要使用listen({track: 'superbowl, humble bundle'})。这意味着您无法更改正在收听的内容,并且必须停止收听,修改查询并重新开始收听。