1

Twitter4R 是否有一个事件循环,当用户提到机器人的句柄时,它会通知机器人?

我试图让它client.mentions_timeline每 5 秒检查一次,看看是否有新的推文提到了机器人的句柄。client.mentions_timeline它起作用了,但是,在多次检查后,通常会超过速率限制。有没有办法可以优化这个或者我错过了什么?

         6: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/twitter-6.2.0/lib/twitter/rest/users.rb:237:in `user'
         5: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/twitter-6.2.0/lib/twitter/rest/users.rb:53:in `verify_credentials'
         4: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/twitter-6.2.0/lib/twitter/rest/utils.rb:57:in `perform_get_with_object'
         3: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/twitter-6.2.0/lib/twitter/rest/utils.rb:72:in `perform_request_with_object'
         2: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/twitter-6.2.0/lib/twitter/rest/utils.rb:50:in `perform_request'
         1: from C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/twitter-6.2.0/lib/twitter/rest/request.rb:39:in `perform'
C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/twitter-6.2.0/lib/twitter/rest/request.rb:81:in `fail_or_return_response_body': Rate limit exceeded (Twitter::Error::TooManyRequests)

谢谢!

4

1 回答 1

1

gem 只是 API 的一个包装器,因此请参阅 Twitter 上的Rate Limits,我们可以在其中找到:

GET 端点 此表中描述的标准 API 速率限制是指 GET(读取)端点。请注意,图表中未列出的端点默认为每个分配的用户 15 个请求。所有请求窗口的长度均为 15 分钟。这些速率限制仅适用于标准 API 端点,不适用于高级 API。

GET statuses/mentions_timeline  statuses    75  0

所以看起来你每 15 分钟只能到达那个端点 75 次,简单的数学运算是

15 * 60 / 75 = 12

因此,为了安全起见,您可能不应该每 12-15 秒击打一次以上。

您还可以随着时间的推移跟踪您的呼叫,挽救异常并在您达到速率限制时重试请求。

于 2019-06-29T22:56:46.323 回答