2017-02-15 78 views
11

Bazen çalışır ancak kararsız olan aşağıdaki kodu kullanıyorum, bazen programı çalıştırdığımda json ayrıştırma hatasıyla 420 hata aldım, bu da size nasıl çözüleceğine dair ipuçları vermez. herhangi bir fikir neyi yanlış yapıyorum?Twitter API hatası alıyorum bazen hata

hatadır:

hata oluştu zaman bunu görmezden ve şimdi süreç durdurulur beri devam bir yolu yoktur Belki

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

.

Güncelleme: twitter docs yılında

HTTP 420 ama bunu düzeltmek için ne kadar emin değildi hakkında bilgi yoktur ... bir https://publish.twitter.com/oembed resource URL yoktur

cevap

3

olarak pii_ke 'ın tepkisi başına Twitter tarafından döndürülen örnek veriler için

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

tıklayın: gibi bağlantıyı oluşturmayı deneyin kod yapıştırmayı kopyalayabilirsiniz:

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

Teşekkürler deniyorum ama aynı erorr :(, başka bir fikrim var mı? –

6

HTTP 420 is returned when you are being rate limited.

, yani sınırlı ne oranıdır kimlik doğrulama gerektirmez. Bence programın beklediği aynı şeyleri döndürür. Tweet'e bağlantıya sahip bir sorgu parametresi url iletirseniz bunu kullanabilirsiniz.

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

Tam modifiye şu şekildedir: sadece tweet_id değiştirmesi gerektiğini here

+0

Teşekkürler, ancak örneğinizle nasıl yapılacağından emin değilsiniz, kod örneğiyle birlikte complite örneği verebilir misiniz? –

+0

Javascript'te program yapmıyorum. Kodunuzda 'Twitter' ve' client' nesnelerini nasıl oluşturabileceğimi görebiliyorum, ancak 'request',' stream' ve 'io' nesnelerini bilmiyorum. Bunları nasıl oluşturacağınızı söylerseniz, bir şeyleri test edebilirim. @shopiaT –