【问题标题】:Rate Limit Exceeded - Custom Twitter app超出速率限制 - 自定义 Twitter 应用
【发布时间】:2011-03-26 23:05:56
【问题描述】:

我正在使用 java Twitter 应用程序(使用 Twitter4J api)。我已经创建了应用程序,可以查看当前用户的时间线、用户的个人资料等。

但是,在使用该应用程序时,它似乎很快超过了 Twitter 客户端上设置的每小时 150 个请求的速率限制(我知道开发人员可以在给定的帐户上将其增加到 350 个,但这不会解决其他用户的问题)。

当然这不会影响所有客户,有什么想法可以解决这个问题吗?

有谁知道什么是请求?例如,当我查看用户的个人资料时,我加载用户对象 (twitter4j),然后将屏幕名称、用户名、用户描述、用户状态等放入 JSON 对象 - 这是否是获取对象的单个调用还是会包含所有 user.get... 调用?

提前致谢

【问题讨论】:

    标签: java twitter twitter4j


    【解决方案1】:

    在处理 Twitter 时,您确实需要跟踪当前的请求数。

    然而,twitter 似乎并没有减少 304 Not Modified 的计数(至少我上次处理它时没有),所以请确保没有任何东西破坏你对 HTTP 缓存的正常使用,并且你每小时的实际要求增加了。

    请注意,twitter 在 apache 上的 mod_gzip 中存在一个错误,其中电子标签在更改它以反映内容编码与非 gzip 实体的不同时形成错误(这是正确的事情做,在实现中只是一个错误)。因此,接受来自 twitter 的 gzip 压缩内容意味着它永远不会发送 304,这会增加您的请求数,并且在许多情况下会破坏使用 gzip 的效率收益。

    因此,如果您接受 gzip(您的网络库默认情况下可能会这样做,请使用 Fiddler 之类的工具查看您可以看到的内容,我是一个只有一点 Java 知识的 .NET 人员,在级别上回答关于 twitter 如何处理 HTTP,所以我不知道 Java Web 库的详细信息),请尝试将其关闭,看看它是否会有所改善。

    【讨论】:

    • 感谢您的建议 - 我将调查 HTTP 缓存并确保我正在适当地缓存调用。我已经设法确定问题的很大一部分是,当我制作 JSON 对象列表(例如,最近的时间线)时,我正在获取所有可能需要进一步的数据(例如,对于时间线上的每次更新,我正在获取所有用户信息,例如名称/描述/关注者人数等)。我已对其进行了更改,因此它仅获取列表的基本数据,然后在需要时“懒惰地”获取更多数据。再次感谢!
    • FWIW,我向 twitter 报告了 304 和 gzip 之间交互的错误。由于这是一个 apache 错误,因此可能不会在他们的级别上修复。当我在 twitter 上发现这个 apache 错误时,apache 就已经知道了。
    【解决方案2】:

    几乎所有来自 Twitter 服务器的读取类型(即任何调用 HTTP GET 的内容)都算作一次请求。获取用户时间线、转发、直接消息、获取用户数据都算作 1 个请求。几乎唯一从服务器读取而不计入 API 限制的 Twitter API 调用是检查速率限制状态。

    【讨论】:

      猜你喜欢
      • 2013-05-12
      • 2012-08-10
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 2014-09-21
      • 2017-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多