我可以使用以下代码从Twitter获取JSON流到客户端:
var command = 'curl -d @tracking https://stream.twitter.com/1/statuses/filter.json -uUsername:Password'
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
child = exec(command);
child.stdout.on('data', function(data) {
res.write(data);
});
}).listen(1337, "127.0.0.1");
但我无法从JSON中获取'text'或'id'值。我尝试过使用jQuery的parsJSON(),以及像这样的代码:
var command = 'curl -d @tracking https://stream.twitter.com/1/statuses/filter.json -uUsername:password'
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
child = exec(command);
child.stdout.on('data', function(data) {
for (i=0; i<data.length; i++) {
reduceJSON = data[i]["text"]
stringJSON = String(reduceJSON)
res.write(stringJSON);
}
});
}).listen(1337, "127.0.0.1");
我不断获取'undefined'或'readyStatesetRequestHeadergetAllResponseHeadersgetResponseHeader'或'object:object'的流。任何人都知道如何获得个人价值观?
答案 0 :(得分:4)
简短的回答是data
是一个字符串,而不是JSON。您需要缓冲所有数据,直到child
发出'结束'。结束运行后,您需要使用JSON.parse
将数据转换为JavaScript对象。
也就是说,使用一段时间单独的cURL过程在这里没有任何意义。我会使用request
模块,并执行以下操作:
var request = require('request');
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
var r = request.post(
'https://stream.twitter.com/1/statuses/filter.json',
{ auth: "Username:Password", 'body': "track=1,2,3,4" },
function(err, response, body) {
var values = JSON.parse(body);
console.log(values);
}
);
r.end();
}).listen(1337, "127.0.0.1");
如果这不起作用,请告诉我。我显然没有用户或密码,所以我无法测试它。