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,我就获得token
和secret
,然后使用我的app consumer_key
和consumer_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']
我有一个(撬)断点,在那里我运行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-limit
和x-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调用。