当前位置: 首页 > 知识库问答 >
问题:

Facebook API - 每个用户令牌的少量请求已达到用户速率限制

章稳
2023-03-14

我有一个适用于Android的应用程序,它每N分钟检查一次来自Facebook的新通知,其中N超过5分钟(默认为30分钟)。该应用程序还向Facebook的图形API发出一些用户生成的请求。最近(自从我们为新通知添加计划轮询的那一刻起),Facebook开始限制我们的应用程序(错误#17“已达到用户请求限制”,但有时它会出现错误#4“已达到应用程序请求限制”)。见解仪表板为我们提供了以下统计信息:每天 255,000 个请求,432 个用户。这为每个用户每天大约提供了590个请求,这与我能够找到的API的任何限制相去甚远。Facebook关于速率限制的信息非常模糊,以下是一些您通常可以在不同来源找到的数字:

  1. 每个 IP 的每个令牌每 600 秒 600 次调用。
  2. 每个应用每天 1 亿次调用。
  3. 每个用户令牌每天 10,000 次调用。

我们的应用程序定期执行的计划请求是一个简单的FQL:

选择sender_id,created_time,title_text从通知recipient_id=me()和is_hidden=0和is_unread=1

即使最短更新间隔为5分钟,每天也会触发288次。我们试图用Graph API调用替换此请求,但它没有改变任何事情。

我知道有其他应用程序有类似的功能,他们似乎没有这些限制。

有人知道有没有什么方法可以避免受到Facebook的限制,通话量如此之低?

谢谢!

共有1个答案

伊铭
2023-03-14

事实证明,代码中存在一个令人讨厌的错误,该错误确实很难重现,有时会迫使应用程序连续10-30分钟在循环中发出API请求。只有一小部分客户端有这个问题,但这足以达到API限制。

FB API似乎根据应用程序的用户数计算限制,所以即使调用量相当有限,我们也存在速率限制问题。另一个观察结果是,尽管只有少数用户进行了大量API调用,但FB对所有用户都有限制。

希望这些信息对解决类似问题有所帮助。

 类似资料:
  • 我正在使用ProjectReactor使用rest从web服务加载数据。这是与多个线程并行完成的。我开始达到web服务的速率限制,因此我希望每秒最多发送10个请求,以避免出现这些错误。用Reactor我该怎么做? 使用zipWith(Mono.delayMillis(100))?还是有更好的办法? 非常感谢。

  • 同步-向API发出一批请求,并定期将响应保存到我的数据库。 客户端-从我的客户端的用户向API请求的传递。 服务的文档指定了在给定时间段内可以发出的最大请求数的以下规则: 在一天中: null null 超过这些限制不会导致立即锁定-不会抛出任何异常。但供应商可能会感到恼火,联系我们,然后禁止我们使用他的服务。因此,我需要有一些请求延迟机制,在适当的地方,以防止这一点。我是这样看的: 最安全和最简

  • 我正在写一个网络爬虫,运行并行抓取许多不同的域。我想限制每秒向每个域发出的请求数量,但我不关心打开的连接总数,也不关心跨所有域发出的每秒请求总数。我想最大限度地增加打开连接和每秒请求的总数,同时限制对单个域的每秒请求数。 我可以找到的所有现有示例(1)限制打开连接的数量,或(2)限制在fetch循环中每秒发出的请求总数。例子包括: aiohttp:速率限制并行请求 它们都不做我要求的事情,即限制每

  • 我的特定用例是,我想使用redis速率限制器在spring cloud gateway实现速率限制,例如,对于特定路由,每分钟4个请求。 但它并没有像预期的那样工作,一旦一个请求完成,它就会自动填充存储桶。使用了spring cloud论坛提供的相同实现,但无法限制我对特定时间窗口的请求: 通过将RequiredRate设置为所需的请求数、requestedTokens设置为以秒为单位的时间跨度、

  • 我试图实现一个单页应用程序,同时使用AWS Cognito作为IdP。我计划将一个节点服务器连接到MongoDB。基本上是平均堆栈。 我的申请结构: 我在用户池的应用客户端设置中选择了OAuth Flows选项。 和用于允许的OAuth范围。 主页(登录/注册)-- 理解: 使用文档中提到的解码技术,我想我应该能够验证

  • 我正在使用SpringWebFlux和netty构建一个微服务。在内部,我使用web客户端进行RESTAPI调用。如何控制通过webclient调用RESTAPI的速率?我猜backnpressure只适用于单个请求/回复,不适用于对我的微服务的多个请求。Amy pointers将不胜感激。谢谢