Twitter api表示速率限制为180(按用户身份validation),但使用twitter gem仅限于15个呼叫

我正在使用twitter gem与twitter API进行交互。 我正在使用single user authentication (不是仅应用程序身份validation),如下所示https://github.com/sferik/twitter/blob/master/examples/Configuration.md#single-user-authentication

我有一个页面,用户点击以使用twitter登录(我正在使用http://sign-in-with-twitter.herokuapp.com/ )

一旦用户通过身份validation,我就获得tokensecret ,然后使用我的app consumer_keyconsumer_secret以及签名用户的tokensecret来初始化Twitter::REST::Client ,如下所示

 module Ktwitter class Manager attr_accessor :client def initialize token, token_secret @client = Twitter::REST::Client.new do |config| config.consumer_key = XXXXXXXXXXXXX config.consumer_secret = ZZZZZZZZZZZZZ config.access_token = token config.access_token_secret = token_secret end end def user @client.user end end end obj = Ktwitter::Manager.new request.env['omniauth.auth']['credentials']['token'], request.env['omniauth.auth']['credentials']['secret'] 

我有一个(撬)断点,在那里我运行obj.client.user 15次(不到1分钟 – 只是继续点击)然后我得到rate_limit警告

 [1] pry(#)> obj.client.user => # [2] pry(#)> obj.client.user => # [3] pry(#)> obj.client.user => # [4] pry(#)> obj.client.user => # [5] pry(#)> obj.client.user => # [6] pry(#)> obj.client.user => # [7] pry(#)> obj.client.user => # [8] pry(#)> obj.client.user => # [9] pry(#)> obj.client.user => # [10] pry(#)> obj.client.user => # [11] pry(#)> obj.client.user => # [12] pry(#)> obj.client.user => # [13] pry(#)> obj.client.user => # [14] pry(#)> obj.client.user => # [15] pry(#)> obj.client.user => # [16] pry(#)> obj.client.user Twitter::Error::TooManyRequests: Rate limit exceeded from /Users/xyz/.rvm/gems/ruby-2.1.1/gems/twitter-5.8.0/lib/twitter/rest/response/raise_error.rb:17:in `on_complete' 

我假设twitter gem client.user调用/1.1/users/show.json https://github.com/sferik/twitter/blob/master/lib/twitter/rest/users.rb#L257 ?

这意味着twitter api在15分钟的窗口内获得15个电话的限制率限制? 但是根据API文档https://dev.twitter.com/docs/api/1.1/get/users/show它是180,而不是15.那么为什么我在15次通话后受到限制?

当我使用Twitter API控制台https://dev.twitter.com/console时 ,我打电话给/1.1/get/users/show ,它显示180为速率限制。 所以我不确定为什么twitter gem最终会在15次通话后获得限制。

在此处输入图像描述

无论如何,我还可以在twitter gem中获得整个响应头,这样调试就很容易读取x-rate-limit-limitx-rate-limit-remaining

任何帮助将不胜感激。

如果有人发出同样的麻烦,

使用/1.1/users/show/{user_id}.json请求格式而不是/1.1/users/show.json

我通过检查apigee的要求找到了这个问题。

这是访问速率限制的更具体方式:

 @client = Twitter::REST::Client.new do |config| config.consumer_key = XXXXXXXXXXXXX config.consumer_secret = ZZZZZZZZZZZZZ config.access_token = token config.access_token_secret = token_secret end response = @client.get('/1.1/application/rate_limit_status.json') 

然后你可以检查response哈希。

我希望这可以帮助别人。 目前版本的ruby gem是5.14.0。

我有类似的情况,但在Twitter上有另一个终点。

15限制来自每次拨打电话时创建新客户端。

确保只创建一个客户端,然后使用该客户端进行api调用。