推特API -如果超过速率限制

Twitter API - If Rate limit exceeded

本文关键字:速率 API 如果 推特      更新时间:2023-09-26

我正在为自己开发一个Twitter web应用程序。我正在检索最新的热门话题。

我是这样做的:

    $.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(函数(){});

$.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向Twitter提交数据的API方法不受速率限制,但现在有些方法受到了速率限制。"

由于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
               });
      }

});

希望这对你有帮助!

詹姆斯