我目前正忙着使用NodeJS并尝试使用Twitter-Search API。使用curl
它可以正常工作 - 所以防火墙或其他什么都没有问题。然而,我从未在NodeJS中得到回应。
var sys = require("sys"),
http = require("http"),
events = require("events");
sys.puts("Hi there… ");
var client = http.createClient(80, "search.twitter.com"),
body = "",
query = "foobar";
function getResults() {
sys.puts("fetching for "+query);
var request = client.request("GET", "/search.json?q="+query);
request.on("response", function(data){
/* this somehow never gets fired :( */
sys.puts("BODY:"+ data);
});
}
var interval = setInterval(getResults, 5000);
欢迎任何提示或解决方案!
提前致谢。
答案 0 :(得分:8)
您从不发送请求。
您需要使用request.end()
注意:请求未完成。此方法仅发送请求的标头。需要调用request.end()来完成请求并检索响应。 (这听起来很复杂,但它为用户提供了使用request.write()将主体流式传输到服务器的机会。)
response
事件'参数也是response object
NOT 正文。您需要在data
上设置response object
事件,然后侦听end
事件以确保获得所有数据。
request.on('response', function (response) {
var body = '';
response.on('data', function (chunk) {
body += chunk;
});
response.on('end', function () {
console.log('BODY: ' + body);
});
});
request.end(); // start the request
请参阅:http://nodejs.org/api/http.html#http_class_http_clientrequest
更多提示
querystring.escape
对搜索参数进行urlencode Host
标头,否则Twitter将返回404 固定代码:
var querystring = require('querystring');
...
var request = client.request("GET", "/search.json?q=" + querystring.escape(query), {'Host': 'search.twitter.com'});