Ruby TwitterAPI称速率限制为180(由用户授权),但使用TwitterGem时,只能调用15次

Ruby TwitterAPI称速率限制为180(由用户授权),但使用TwitterGem时,只能调用15次,ruby,rest,twitter,twitter-oauth,twitter-gem,Ruby,Rest,Twitter,Twitter Oauth,Twitter Gem,我正在使用twittergem与twitterapi交互。我使用的是单用户身份验证(不是仅应用程序身份验证),如图所示 我有一个页面,用户点击该页面登录twitter(我正在使用) 一旦用户获得身份验证,我将获得token和secret,然后使用我的应用程序consumer\u key和consumer\u secret以及登录用户的token和secret初始化Twitter::REST::Client,如下所示 module Ktwitter class Manager attr

我正在使用twittergem与twitterapi交互。我使用的是
单用户身份验证
(不是仅应用程序身份验证),如图所示

我有一个页面,用户点击该页面登录twitter(我正在使用)

一旦用户获得身份验证,我将获得
token
secret
,然后使用我的应用程序
consumer\u key
consumer\u secret
以及登录用户的
token
secret
初始化
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']
我有一个(pry)断点,在那里我运行了15次(不到1分钟-只需不断点击),然后我得到了rate_limit警告

[1] pry(#<T>)> obj.client.user
=> #<Twitter::User id=177777>
[2] pry(#<T>)> obj.client.user
=> #<Twitter::User id=177777>
[3] pry(#<T>)> obj.client.user
=> #<Twitter::User id=177777>
[4] pry(#<T>)> obj.client.user
=> #<Twitter::User id=177777>
[5] pry(#<T>)> obj.client.user
=> #<Twitter::User id=177777>
[6] pry(#<T>)> obj.client.user
=> #<Twitter::User id=177777>
[7] pry(#<T>)> obj.client.user
=> #<Twitter::User id=177777>
[8] pry(#<T>)> obj.client.user
=> #<Twitter::User id=177777>
[9] pry(#<T>)> obj.client.user
=> #<Twitter::User id=177777>
[10] pry(#<T>)> obj.client.user
=> #<Twitter::User id=177777>
[11] pry(#<T>)> obj.client.user
=> #<Twitter::User id=177777>
[12] pry(#<T>)> obj.client.user
=> #<Twitter::User id=177777>
[13] pry(#<T>)> obj.client.user
=> #<Twitter::User id=177777>
[14] pry(#<T>)> obj.client.user
=> #<Twitter::User id=177777>
[15] pry(#<T>)> obj.client.user
=> #<Twitter::User id=177777>
[16] pry(#<T>)> 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'
[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::错误::TooManyRequests:超出速率限制
来自/Users/xyz/.rvm/gems/ruby-2.1.1/gems/twitter-5.8.0/lib/twitter/rest/response/raise\u error.rb:17:in“on\u complete”
我假设twitter gem
client.user
调用
/1.1/users/show.json

这意味着twitter api在15分钟的窗口内对15个调用获得限制速率限制?但根据API文档,它是180,而不是15。那为什么我在打了15次电话后会受到限制

当我使用TwitterAPI控制台时,我在那里调用
/1.1/get/users/show
,它显示180作为速率限制。所以我不知道为什么
twittergem
在仅仅打了15次电话之后就被限制了

还有,我可以在
twitter
gem中获取整个响应头,这样调试将很容易阅读
x-rate-limit-limit
x-rate-limit-remaining


任何帮助都将不胜感激。

我也遇到过类似的情况,但在twitter上还有另一个终点

15个限制来自每次通话时创建新客户端


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

如果有人出现同样的问题

使用
/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')
然后可以检查
响应
散列


我希望这对某人有帮助。ruby gem的当前版本是5.14.0。

您发送这15个请求的频率是多少?在不到1分钟内发送15个请求。Twitter doc说我可以在15分钟内完成180个任务。对吗?请测量15个请求的时间,以及当你完成第16个请求时的结果?