[英]Proxy twitter stream via socket.io
我已经用node.js设置了socket.io。 我的情况是用户/客户端提供一个Twitter屏幕名称,然后,我需要使用提供的screen_name订阅该Twitter流(出于某些原因,API需要使用user_id而不是screen_name)。
我遇到了一个序列问题,在我知道screen_name(以及随后的user_id)之前,我必须先订阅流:
var tweetStream;
io.sockets.on('connection', function connect( socket )
{
socket.on('subscribe', function(data)
{
twitter.get(
'statuses/user_timeline',
{ "screen_name": data.screen_name },
function getTweets( err , tweets )
{
// …
// var user_id …
tweetStream = twitter.stream('statuses/filter', { "follow": user_id });
console.log('\n','tweetStream: ', tweetStream, '\n');
tweetStream.on('tweet', function onTweet(tweet)
{
console.log( '\ntweetStream -> new tweet: ', tweet, '\n' );
io.sockets.in( data.screen_name ).emit('tweets', tweet );
});
}
);
});
}
上面的内容不订阅tweetstream,也不会产生错误。 如果我将tweetStream代码移到socket.io之外并对user_id进行硬编码(因为否则它不可用),那么它将起作用:
var tweetStream;
io.sockets.on('connection', function connect( socket )
{
…
}
tweetStream = twitter.stream('statuses/filter', { "follow": 6253282 });
console.log('\n','tweetStream: ', tweetStream, '\n');
tweetStream.on('tweet', function onTweet(tweet)
{
console.log( '\ntweetStream -> new tweet: ', tweet, '\n' )
io.sockets.in( tweet.user.screen_name ).emit('tweets', data );
});
编辑
两种情况下的tweetStream
对象都是相同的(通过tweetStream
进行比较)。
这是完整代码的要点 。
问题在于, twitter
实例需要在socket.on('subscribe')回调内部实例化:
// …
var io = require('socket.io').listen(server);
var Twit = require('twit');
io.sockets.on('connection', function connect( socket )
{
//…
socket.on('subscribe', function subscribe( data )
{
var twitter = new Twit({ … });
// …
});
//…
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.