【问题标题】:How can I use sleep for cursor method to avoid rate limiting?如何使用 sleep for cursor 方法来避免速率限制?
【发布时间】:2016-02-22 04:03:24
【问题描述】:

我正在尝试在不达到速率限制的情况下获取用户的所有关注者 ID (75K+)。我想您可以在光标上放置一个睡眠方法,以防止每 15 分钟调用超过 15 次。知道怎么做吗?提前致谢。 :)

【问题讨论】:

    标签: ruby api twitter rate-limiting


    【解决方案1】:

    我猜您正在使用twitter gem 与 Twitter API 进行交互。在他们的 wiki 的 one 中描述的正是您的场景:

    follower_ids = client.follower_ids('justinbieber')
    begin
      follower_ids.to_a
    rescue Twitter::Error::TooManyRequests => error
      # NOTE: Your process could go to sleep for up to 15 minutes but if you
      # retry any sooner, it will almost certainly fail with the same exception.
      sleep error.rate_limit.reset_in + 1
      retry
    end
    

    这个想法是在达到速率限制时简单地sleep 一段时间,然后retry API 调用。

    如果您想完全避免速率限制,您可以每隔x 秒从返回的游标中获取limit - 1 元素。在你的情况下,服用 15 个元素,然后睡 15 分钟。这是一个例子:

    follower_ids = client.follower_ids('justinbieber')
    loop do
      follower_ids.take(15)
      break if follower_ids.last?
      sleep 15 * 60 # 15 minutes
    end
    

    【讨论】:

    • 不会达到速率限制吗?我正在努力避免达到速率限制。
    • 如果.last?是私有的,你怎么能使用它?
    • 它不应该是私有的。我在这里查看了文档:rubydoc.info/gems/twitter#Cursors
    • 好的。好吧,我使用了您的代码,但它仍然有速率限制。我认为它来自您代码的第一行......出于某种原因:\
    • 第一行只是返回一个游标,遍历它实际上会触发 API 请求。你可以一步一步调试,看看会发生什么;你会更好地理解你的代码和 twitter gem。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2020-11-22
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2015-03-19
    相关资源
    最近更新 更多