使用 twitter API 有时会出错
Using twitter API get error sometimes
我使用下面的代码,它有时可以工作,但它不稳定,当我 运行 程序有时我得到错误 420 和 json 解析错误,它没有给你很多提示如何解决它.知道我做错了什么吗?
错误是:
Error getting tweets: Error: Status Code: 420 Error getting tweets:
SyntaxError: Unexpected token E in JSON at position 0
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 的信息,但不确定如何修复它...
HTTP 420 is returned when you are being rate limited.
有一个 https://publish.twitter.com/oembed
resource URL,它既不受速率限制也不需要身份验证。我认为它 returns 与您的程序所期望的相同。如果您传递具有 link 的查询参数 url
来发送推文,则可以使用它。尝试使 link 像:
"https://publish.twitter.com/oembed?url=https://twitter.com/"+data.user.screen_name+"/statuses/"+data.id_str
对于 Twitter 返回的示例数据,请单击 here
根据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"});
});
我使用下面的代码,它有时可以工作,但它不稳定,当我 运行 程序有时我得到错误 420 和 json 解析错误,它没有给你很多提示如何解决它.知道我做错了什么吗?
错误是:
Error getting tweets: Error: Status Code: 420 Error getting tweets: SyntaxError: Unexpected token E in JSON at position 0
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 的信息,但不确定如何修复它...
HTTP 420 is returned when you are being rate limited.
有一个 https://publish.twitter.com/oembed
resource URL,它既不受速率限制也不需要身份验证。我认为它 returns 与您的程序所期望的相同。如果您传递具有 link 的查询参数 url
来发送推文,则可以使用它。尝试使 link 像:
"https://publish.twitter.com/oembed?url=https://twitter.com/"+data.user.screen_name+"/statuses/"+data.id_str
对于 Twitter 返回的示例数据,请单击 here
根据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"});
});