使用twitter API有时会得到错误

我使用下面的代码有时工作,但它不稳定,当我运行程序有时我得到错误420与JSONparsing错误,这不给你很多提示如何解决它。 任何想法我做错了什么?

错误是:

获取推文时出错:错误:状态码:420获取推文时出错:SyntaxError:位于0的JSON中的意外标记E

var Twitter=require('twitter'); var lclconf = require('../config.json'); var client=new Twitter({ consumer_key: lclconf.twitter.consumer_key, consumer_secret: lclconf.twitter.consumer_secret, access_token_key: lclconf.twitter.access_token_key, access_token_secret: lclconf.twitter.access_token_secret }); stream.on("data", function(data){ console.log(data.id_str); var tweet_id="https://api.twitter.com/1.1/statuses/oembed.json?id="+data.id_str; request.get(tweet_id) .end(function(err,res){ if(err){ console.log("Error from Twitter API: " + err); }else{ //console.log(res.body); io.emit('tweet',res.body); } }); }); stream.on('error', function(err){ console.log("Error getting tweets: "+err); }); io.on('connection', function(client){ client.on("join", function(data){ console.log(data); }); client.emit("join",{"message":"running"}); }); 

也许如果有一种方法,当发生错误,忽略它,并从现在开始进程停止。

更新:

在Twitter文件中有关于HTTP 420的信息,但不知道如何解决它…

根据pii_ke的回应,你应该简单地修改tweet_id ,如下所示:

 var tweet_id = "https://publish.twitter.com/oembed?url=https://twitter.com/" + data.user.screen_name + "/statuses/" + data.id_str; 

完整修改后的代码可以复制粘贴:

 var Twitter=require('twitter'); var lclconf = require('../config.json'); var client=new Twitter({ consumer_key: lclconf.twitter.consumer_key, consumer_secret: lclconf.twitter.consumer_secret, access_token_key: lclconf.twitter.access_token_key, access_token_secret: lclconf.twitter.access_token_secret }); stream.on("data", function(data){ console.log(data.id_str); var tweet_id = "https://publish.twitter.com/oembed?url=https://twitter.com/" + data.user.screen_name + "/statuses/" + data.id_str; request.get(tweet_id) .end(function(err,res){ if(err){ console.log("Error from Twitter API: " + err); }else{ //console.log(res.body); io.emit('tweet',res.body); } }); }); stream.on('error', function(err){ console.log("Error getting tweets: "+err); }); io.on('connection', function(client){ client.on("join", function(data){ console.log(data); }); client.emit("join",{"message":"running"}); }); 

当您受限速时,会返回HTTP 420。

有一个https://publish.twitter.com/oembed资源URL ,既不限速也不要求validation。 我认为它返回的程序所期望的相同的东西。 你可以使用,如果你传递一个查询参数的链接到鸣叫。 尝试使链接如下所示:

 "https://publish.twitter.com/oembed?url=https://twitter.com/"+data.user.screen_name+"/statuses/"+data.id_str 

对于Twitter返回的样本数据,请点击这里