2012-09-08 40 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); 
});