1

我正在使用 nettutplus 介绍系列学习 node.js。在本系列中,有一个使用 twitter 流 api 创建 node.js 应用程序的课程,视频中显示的代码与我编写的代码完全相同,但是它不起作用。

这是我的代码

var https = require("https");
var options = {
host: 'stream.twitter.com',
path: '/1/statuses/filter.json?track=bieber',
method: 'GET',
headers: {
    "Authorization": "Basic " + new Buffer("username:password").toString("base64")
}
};

var request = https.request(options, function(response){
var body = '';
response.on("data", function(chunk){
    var tweet = JSON.parse(chunk);
    console.log("Tweet: "+ tweet.text);
});

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

request.end();

错误是得到是这个

未定义:1

^

语法错误:意外的令牌 <

at Object.parse (native)
at IncomingMessage.<anonymous> (C:\Users\monk\Desktop\folder\node\twitter.js:14:20)
at IncomingMessage.EventEmitter.emit (events.js:95:17)
at IncomingMessage.<anonymous> (_stream_readable.js:736:14)
at IncomingMessage.EventEmitter.emit (events.js:92:17)
at emitReadable_ (_stream_readable.js:408:10)
at emitReadable (_stream_readable.js:404:5)
at readableAddChunk (_stream_readable.js:165:9)
at IncomingMessage.Readable.push (_stream_readable.js:127:10)
at HTTPParser.parserOnBody [as onBody] (http.js:141:22)

我正在使用windows和cmd。

4

2 回答 2

4

您使用的代码适用于旧的 twitter api 版本 1。Twitter 最近推出了新版本的 api 1.1 并停止使用旧版本。新的 twitter api 要求您对每个请求进行身份验证,并且您可以在 twitter 开发人员站点中阅读的身份验证机制发生了一些变化。至于脚本中的上述错误,这是因为您正在尝试解析 JSON.parse(chunk); 其中 chunk 是 html 并且您会收到这些错误。尝试更新您的代码以获取最新版本的 twitter api。谢谢

于 2013-07-19T05:22:11.780 回答
1

您正在尝试解析来自请求的一小部分响应,这可能不是有效的 JSON。完整的响应是一个有效的 JSON。

它不断地流式传输 JSON,由端线分隔。你必须处理这些。您必须等待结束线然后解析收到的数据。在此处查看实现

于 2013-07-19T05:50:22.940 回答