我有以下代码:
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的概念吗?
答案 0 :(得分:6)
来自访问和速率限制下的Twitter流媒体API文档(https://dev.twitter.com/docs/streaming-api/concepts):
每个帐户只能与Streaming API建立一个常设连接。来自同一帐户的后续连接可能导致先前建立的连接断开。无论成功与否,过多的连接尝试都将导致自动禁止客户端的IP地址。连续失败的连接将导致您的IP地址被所有Twitter访问列入黑名单。
即,一次只能有一个流连接。要获得这两组结果,您需要使用listen({track: 'superbowl, humble bundle'})
。这意味着您无法更改正在收听的内容,并且必须停止收听,修改查询并重新开始收听。