2014-10-03 105 views
0

我想学习和理解nodejs。当试图连接到Twitter流和跟踪鸣叫的API,我得到以下错误:Twitter流api

undefined:1 

    <html>\n<head>\n<meta http-equiv="Content-Type" content="text/html; charset=ut 
    ^
    SyntaxError: Unexpected token < 
     at Object.parse (native) 
     at IncomingMessage.<anonymous> (/home/ytsejam/public_html/nodejs/11/twitter.js:15:20) 
     at IncomingMessage.emit (events.js:95:17) 
     at IncomingMessage.<anonymous> (_stream_readable.js:764:14) 
     at IncomingMessage.emit (events.js:92:17) 
     at emitReadable_ (_stream_readable.js:426:10) 
     at emitReadable (_stream_readable.js:422:5) 
     at readableAddChunk (_stream_readable.js:165:9) 
     at IncomingMessage.Readable.push (_stream_readable.js:127:10) 
     at HTTPParser.parserOnBody [as onBody] (http.js:142:22) 

这里是我的代码,我尝试连接:

var https = require("https"); 

var options = { 
    host: 'stream.twitter.com', 
    path: '/1.1/statuses/filter.json?track=bieber', 
    method: 'GET', 

    headers: { 
     "Authorization": "Basic " + new Buffer("username:password").toString("base64") 
    } 
}; 
var request = https.request('https://stream.twitter.com/1.1/statuses/filter.json?track=query', function(response){ 
    var body = ''; 
    response.on("data", function(chunk){ 
     var chunk = chunk.toString(); 
     try { 
      var tweet = JSON.parse(chunk); 
     } catch (err) { 
      console.log("JSON parse error:" + err); 
     } 


     console.log(tweet.text); 
    }); 
    response.on("end",function(){ 
     console.log("Disconnected"); 
    }); 
}); 

request.end(); 

我做了一个研究,并试图调试。我最好的猜测是var tweet = JSON.parse(chunk);可能会导致问题。第二个选项,我缺少oauth参数。

你能帮我吗?谢谢。

编辑:

我解决了这个答案用在这里Node.js and Twitter API 1.1

回答

1

JSON.parse()被扔SyntaxError,因为它试图解析数据是HTML而不是JSON。

一般来说,将JSON.parse()包装在try/catch区块中是一个好主意,因此您可以优雅地处理这些类型的事情。

(有可能你的oauth的东西存在问题,并且它没有通过验证,所以不是获取JSON,而是获得一个HTML页面,告诉你验证失败了,但这只是一个猜测。 )

+0

我用你的建议编辑了我的新代码。现在错误是:console.log(tweet.text); TypeError:无法读取未定义的属性'文本'。我想这是api的oauth问题。 – ytsejam 2014-10-03 07:02:59