簡體   English   中英

Twitter API - 如果超出限額

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM