Twitter API - 如果超出限额

时间:2011-11-05 15:17:55

标签: javascript jquery twitter jsonp

我正在为自己开发一个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
  }
}

但这似乎不起作用。 请帮忙。

谢谢:)

3 个答案:

答案 0 :(得分:3)

当您受到费率限制时,Twitter API会发送HTTP 400状态代码,因此请检查:

$.ajax({
    // ...
    statusCode: {
        400: function() {
            alert( 'rate limited.' );
        }
    }
});

另请注意,您的比较有点不对劲。当错误文本 data[0].error != 'undefined'时,'undefined'将始终生效。因此,即使您受到速率限制,错误文本也不会是'undefined',因此也会成功。您可能想要检查的是:

if ( !data[0].error ) { // data[0].error is not null
    // ...
}

答案 1 :(得分:1)

尝试类似$ .ajax({..})。fail(function(){});

$.ajax({..})
.done(function() { alert("success"); })
.fail(function() { alert("error"); })
.always(function() { alert("complete"); });

让我知道这是如何运作的。

欢呼声, /马尔钦

答案 2 :(得分:0)

如果您没有进行OAuth通话,则每小时限制为150次通话。但是,有一个小的解决方案对我有用。

根据关于速率限制的Twitter页面(http://dev.twitter.com/docs/rate-limiting),“速率限制适用于使用HTTP GET命令请求信息的方法。通常使用的API方法用于向Twitter提交数据的HTTP POST不受速率限制,但现在某些方法的速率有限。“

由于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

               });
      }

});

希望这有帮助!

詹姆斯