2012-09-08 41 views
1

我在node.js中编写了以下代码来访问Twitter Streaming API。如果我curl下面的URL,它的工作。但是,我无法让它与我的代码一起工作。获取Twitter流式API的Node.js - EADDRNOTAVAIL

var https = require('https'); 

https.request('https://USERNAME:[email protected]/1.1/statuses/sample.json', function(res) { 
    res.on('data', function(chunk) { 
    var d = JSON.parse(chunk); 
    console.log(d); 
    }); 
}); 

但我收到以下

node.js:201 
     throw e; // process.nextTick error, or 'error' event on first tick 
      ^
Error: connect EADDRNOTAVAIL 
    at errnoException (net.js:642:11) 
    at connect (net.js:525:18) 
    at Socket.connect (net.js:589:5) 
    at Object.<anonymous> (net.js:77:12) 
    at new ClientRequest (http.js:1073:25) 
    at Object.request (https.js:80:10) 
    at Object.<anonymous> (/Users/jordan/Projects/twitter-stream/app.js:3:7) 
    at Module._compile (module.js:441:26) 
    at Object..js (module.js:459:10) 
    at Module.load (module.js:348:31) 

如果任何人都可以提供一个替代的解决方案,或者向我解释为什么这是不行的,我将非常感激。

+0

您需要更改端口,它的不可用... :) –

+0

@AmirAbuShareb但卷曲曾与默认端口没有问题?我想我不确定我是否遵循。 –

+0

我可以在'app.js'中看到'10'行吗? –

回答

3

我最近面临同样的问题。这里的SOLN的

var https = require('https'); 
var options = { 
    host : 'stream.twitter.com', 
    path : '/1.1/statuses/filter.json?track=bob',  
    method : 'GET', 
    headers : { 
    "Authorization": "Basic "+new Buffer("userName:passwd").toString("base64") 
    } 
}; 
var request = https.request(options,function(response){ 
    var body = ''; 
    response.on("data",function(chunk){  
    var tweet = JSON.parse(chunk); 
    console.log(tweet.text); 
    }); 
}); 
request.end(); 
+0

这工作:)谢谢。这种方法会错过任何推文吗?我觉得试图解析一个块可能并不总是一个有效的JSON文档。 –

+0

一个人不能等待响应结束解析数据,因为它的一个流API和每个块接收是有效的JSON。所以我认为这不会是一个问题。 – deven98602

0

https.request()想要一个选项对象作为它的第一个参数,而不是一个字符串URL。但是,您最好使用mikeal的请求库,该库需要字符串URL。

0

1)作为ebohlman已经声明的https.request将选项对象作为第一个参数。

http://nodejs.org/api/https.html#https_https_request_options_callback 

2)你的JSON.parse将最有可能失败,因为“数据”活动将在每个块发出,响应可以跨越多个数据块,因此等到反应已经结束。

var data = "" 
res.on('data',function(chunk){ 
    data+=chunk 
}) 
res.on('end',function(){ 
    try { 
    var parsed = JSON.parse(data) 
    } catch(e) { 
    console.log('failed to parse...',e) 
    } 
}) 
+0

关键是它是一个流媒体API。我相信这些块是合适的,这样我就可以解析每个块。 –

0

JST试图通过killall node杀死进程节点或做ps -aux|grep node并杀死过程中,通过其ID.It将工作then.Yeah如果你正在linux上运行。

0

我遇到了同样的问题,问题是我使用的是旧版本的Nodejs(v0.6.19),该版本中http.get需要第一个参数作为具有至少主机和路径属性的选项对象。在新版本中,您可以简单地给出url字符串。

http.get({host:'www.google.com',path:'/index.html'}, function(res) { 
    console.log("Got response: " + res.statusCode); 
}).on('error', function(e) { 
    console.log("Got error: " + e.message); 
});