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

4

I have the following code:

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个回答

6
从Twitter流API文档(https://dev.twitter.com/docs/streaming-api/concepts)中的访问和速率限制部分可以得知:
每个账户只能创建一个连接到流API的常驻连接。同一账户的后续连接可能会导致之前建立的连接被断开。过多的连接尝试,无论是否成功,都将导致客户端IP地址自动禁止。持续失败的连接将导致您的IP地址被列入Twitter所有访问的黑名单。
也就是说,您一次只能有一个流连接。为了接收两组结果,您需要使用listen({track: 'superbowl, humble bundle'})。这意味着您不能更改您正在侦听的内容,必须停止侦听,修改查询并重新开始侦听。

再次阅读,是的。我把流式API和站点流搞混了。谢谢! - Brian Hicks
你好,这里的账户是指开发者账户还是应用本身?因为我在一个账户中有6个应用程序,它们都在同一个node.js应用程序中同时启动,以捕获不同的内容。它已经运行了5个月而没有出现任何错误。 - Maziyar
我已经看到过这个答案几次,但似乎没有人记录如何断开流?我正在使用npm-twitter,似乎没有断开方法。 - dougajmcdonald

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接