[英]Twitter API - If Rate limit exceeded
我正在為自己開發一個Twitter網絡應用程序。 我正在檢索最新的熱門話題。
我是這樣做的:
$.ajax({
url: 'http://api.twitter.com/1/trends/1.json',
dataType: 'jsonp',
success: function(data){
$.each(data[0].trends, function(i){
$('div#trending').hide().append("<p><a href='"+data[0].trends[i].url+"'>"+data[0].trends[i].name+"</a></p>").fadeIn(1000);
//Cache into LocalStorage
localStorage["trending"+i] = data[0].trends[i].name; //Name
localStorage["trendurl"+i] = data[0].trends[i].url;//URL
});
}
});
但有時我在開發它時,會超出速率限制。
如何檢測是否超過了速率限制?
我似乎無法檢測是否顯示此錯誤:
{"error":"Rate limit exceeded. Clients may not make more than 150 requests per hour.","request":"\/1\/trends\/1.json"}
我試過了:
success: function(data){
if(data[0].error != 'undefined'){
//load localstorage cache
}
}
但這似乎不起作用。 請幫忙。
謝謝 :)
當您受到費率限制時,Twitter API會發送HTTP 400狀態代碼,因此請檢查:
$.ajax({
// ...
statusCode: {
400: function() {
alert( 'rate limited.' );
}
}
});
另請注意,您的比較有點不對勁。 當錯誤文本不是 'undefined'
時, data[0].error != 'undefined'
將始終產生true。 因此,即使您在速率受限時,錯誤文本也不會'undefined'
,因此成功。 您可能要檢查的是:
if ( !data[0].error ) { // data[0].error is not null
// ...
}
嘗試類似$ .ajax({..})。fail(function(){});
即
$.ajax({..})
.done(function() { alert("success"); })
.fail(function() { alert("error"); })
.always(function() { alert("complete"); });
讓我知道這是如何工作的。
歡呼,/ Marcin
如果您沒有進行OAuth通話,則每小時限制為150次通話。 但是,有一個小的解決方案對我有用。
根據速率限制的Twitter頁面(http://dev.twitter.com/docs/rate-limiting),“速率限制適用於使用HTTP GET命令請求信息的方法。通常使用HTTP POST的API方法向Twitter提交數據的速度並不受限制,但現在有些方法的速度有限。“
由於AJAX調用的默認類型是'GET',請嘗試將類型顯式更改為'POST',如下所示:
$.ajax({
url: 'http://api.twitter.com/1/trends/1.json',
type: 'POST',
dataType: 'jsonp',
success: function(data){
$.each(data[0].trends, function(i){
$('div#trending').hide().append("<p><a href='"+data[0].trends[i].url+"'>"+data[0].trends[i].name+"</a></p>").fadeIn(1000);
//Cache into LocalStorage
localStorage["trending"+i] = data[0].trends[i].name; //Name
localStorage["trendurl"+i] = data[0].trends[i].url;//URL
});
}
});
希望這可以幫助!
詹姆士
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.