gpt4 book ai didi

node.js - 如何使用 Node.js 和 Websockets 创建 Twitter 流?

转载 作者:太空宇宙 更新时间:2023-11-04 02:44:14 24 4
gpt4 key购买 nike

几个月前(2011 年 8 月)我成功创建了一个连接到 Twitter 的 Streaming API 的 Node.js Websockets 服务器。使用基本的 HTTP 用户/密码身份验证。为此,我使用了 Andre Goncalves 的 twitter-nodejs-websocket图书馆。

自从创建此工作实现以来,Twitter 已经取消了通过基本 HTTP 身份验证对流 API 的访问,转而使用 OAuth。这次转变之后,我利用了 Ciaran Jessup 的 node-oauth库,它成功地让我再次访问 Streaming API(当我运行服务器时,我成功地通过 console.log(tweet) 输出推文 - 见下文)。

现在的问题是我的 websockets 服务器不再工作。当我从命令行运行服务器并从浏览器访问客户端网页时,立即触发 websocket“onclose”事件。

我已经尝试了一切我能想到的方法来让它工作。任何帮助将非常感激!

server.js

var sys    = require('sys'),
http = require('http'),
ws = require("./vendor/ws"),
base64 = require('./vendor/base64'),
arrays = require('./vendor/arrays')

var OAuth = require('./oauth/oauth').OAuth;

var consumer_key = '[...]'; //removed for obvious security reasons...
var consumer_secret = '[...]';
var access_token = '[...]';
var access_token_secret = '[...]';

oa = new OAuth("https://twitter.com/oauth/request_token",
"https://twitter.com/oauth/access_token",
consumer_key,
consumer_secret,
"1.0A",
null,
"HMAC-SHA1");

var request = oa.get("https://stream.twitter.com/1/statuses/filter.json?track=google", access_token, access_token_secret );

// Response Parsing -------------------------------------------- //

var clients = [];
var message = "";

request.addListener('response', function (response) {

response.setEncoding('utf8');

response.addListener("data", function (chunk) {

message += chunk;

var newlineIndex = message.indexOf('\r');
// response should not be sent until message includes '\r'.
// Look at the section titled "Parsing Responses" in Twitter's documentation.
if (newlineIndex !== -1) {
var tweet = message.slice(0, newlineIndex);

clients.forEach(function(client){
// Send response to all connected clients
client.write(tweet);
});

// this just tests if we are receiving tweets -- we are: terminal successfully outputs stream //
var pt = JSON.parse(tweet);
console.log('tweet: ' + pt.text);
}
message = message.slice(newlineIndex + 1);
});

});
request.end();

// Websocket TCP server

ws.createServer(function(websocket){
clients.push(websocket);
websocket.addListener("connect", function(resource){
// emitted after handshake
sys.debug("connect: " + resource);
}).addListener("close", function(){
// emitted when server or client closes connection
clients.remove(websocket);
sys.debug("close");
});
}).listen(8081);


// This basic http server works, so we know this port is open.
//
// var http = require('http');
// http.createServer(function (req, res) {
// res.writeHead(200, {'Content-Type': 'text/plain'});
// res.end('Hello World\n');
// }).listen(8081);

客户端代码

<script type="text/javascript" charset="utf-8">
ws = new WebSocket("ws://ec2-67-202-6-10.compute-1.amazonaws.com:8081");
ws.onmessage = function(evt) {
console.log('tweet')
};
ws.onclose = function() {
console.log("socket closed");
};
ws.onopen = function() {
console.log("connected...");
};
</script>

最佳答案

也许您更新了浏览器? Websocket 规范正在迅速变化。无论如何,我建议使用 socket.io因为如果浏览器过时或 websockets 再次不兼容或蹩脚的代理阻止 websockets 工作,它甚至仍然可以使用后备。

关于node.js - 如何使用 Node.js 和 Websockets 创建 Twitter 流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7984478/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com