【问题标题】:Twitter api says rate limit is 180 (by user-auth), but using twitter gem restrict to 15 calls onlyTwitter api 说速率限制是 180(由用户授权),但使用 twitter gem 限制为 15 个调用
【发布时间】:2014-06-18 08:23:42
【问题描述】:

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

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

一旦用户通过身份验证,我会得到tokensecret,然后使用我的应用程序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(#<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'

我假设 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

任何帮助将不胜感激。

【问题讨论】:

  • 您发送这 15 个请求的频率如何?
  • 不到 1 分钟的 15 个请求。 Twitter 文档说我可以在 15 分钟内完成 180 次..对吗?
  • 请测量第15次请求的时间,第16次请求的结果如何?

标签: ruby rest twitter twitter-oauth twitter-gem


【解决方案1】:

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

15 个限制来自于您每次拨打电话时都会创建新客户端。

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

【讨论】:

    【解决方案2】:

    如果有人遇到同样的问题,

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

    我通过检查 apigee 的请求找到了解决方案。

    【讨论】:

      【解决方案3】:

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

      @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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-30
        • 1970-01-01
        • 2014-08-05
        • 1970-01-01
        • 2013-05-12
        • 2019-02-09
        • 1970-01-01
        相关资源
        最近更新 更多