2017-02-15 6 views
11

時々動作するが、そのプログラムが不安定な次のコードを使用すると、時々私はjsonの解析エラーでエラー420が発生する。私は間違って何を考えている?twitter APIを使用すると時々エラーが発生する

エラーは、次のとおりです。

エラーが発生したときにそれを無視し、現在のプロセスが停止しているため続行する方法があるかもしれない場合

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ではなく、それを修正する方法がわからについての情報がある...

答えて

3

としてpii_keの応答あたりのツイッターで返されたサンプルデータについては

"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"}); 
}); 
+0

ありがとう、私はそれを試しても、私は同じerorrを得た:(、他のアイデア? –

6

HTTP 420 is returned when you are being rate limited.

https://publish.twitter.com/oembed resource URLがあり、それはどちらもレート制限されています認証も必要ありません。あなたのプログラムが期待しているものと同じものを返すと思います。 tweetへのリンクを持つクエリパラメータurlを渡すと、これを使用できます。

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

フル修正:次のようにあなたは、単にtweet_idを変更する必要がありますhere

+0

ありがとう、あなたの例でそれを行う方法がわからない、私のコードでcompliteの例を提供できますか? –

+0

私はJavascriptであまりプログラムしません。あなたのコードに 'Twitter'と' client'オブジェクトを作る方法が分かりますが、オブジェクト 'request'、' stream'、 'io'についてはわかりません。これらを作成する方法を教えたら、私は何かをテストすることができます。 @shopiaT –

関連する問題