代理推特流通过socket.io
Proxy twitter stream via socket.io
我已经用node.js设置了socket.io。我的场景是用户/客户端提供一个twitter屏幕名称,然后我需要使用提供的屏幕名称订阅该twitter流(出于某种原因,API需要user_id而不是屏幕名称)。
我遇到了一个序列问题,在我知道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
对象是相同的(通过FileMerge进行比较)。
这是一个包含完整代码的Gist。
问题是twitter
实例需要在套接字内实例化。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({ … });
// …
});
//…
});
相关文章:
- 如何使用Socket.io将命令从客户端发送到服务器
- Socket.IO未定义变量
- Socket.io on Mozilla Rhino
- socket.io发射三次
- AngularJS$q承诺使用socket.io
- 如何知道使用socket.io订阅/取消订阅频道
- 通过socket.io发射给特定的人
- 通过socket.io从浏览器流式传输视频
- 通过node.js和socket.io向特定用户发送数据
- 如何使用socket.io在meanjs项目中配置jshint
- 如何使用Socket.io和Node.js开发大型聊天应用程序
- RangeError nodejs socket.io
- 通过node.js和socket.io在两个用户之间发送消息
- 使用socket.io更新express实时视图
- socket.io cookie解析握手错误
- 如何在同一端口上使用ExpressJS和Socket.io
- 使用cordova快速nodejs socket.io
- 通过socket.io与heroku应用程序进行通信
- Socket.io客户端在使用名称空间时忽略端口[Bug?]
- Node.js-socket.io-对io.sockets的引用突然未定义