Using twitter API get error sometimes
HTTP 420 is returned when you are being rate limited.
There is a https://publish.twitter.com/oembed
resource URL, that is neither rate limited nor requires authentication. I think it returns the same things that your program expects. You can use that if you pass a query parameter url
having the link to tweet. Try making the link like:
"https://publish.twitter.com/oembed?url=https://twitter.com/"+data.user.screen_name+"/statuses/"+data.id_str
For sample data returned by Twitter click here
As per pii_ke's response you should simply modify tweet_id
as follows:
var tweet_id = "https://publish.twitter.com/oembed?url=https://twitter.com/" + data.user.screen_name + "/statuses/" + data.id_str;
Full modified code you can copy paste:
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"});});