Ruby TwitterAPI称速率限制为180(由用户授权),但使用TwitterGem时,只能调用15次
我正在使用twittergem与twitterapi交互。我使用的是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
单用户身份验证
(不是仅应用程序身份验证),如图所示
我有一个页面,用户点击该页面登录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 gemclient.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个请求时的结果?