自11月底以来,我们正在达到Facebook API的应用限制。 我们正在获取用户的照片,并选择了25张朋友照片→这是在用户签名时完成的(我们正在为用户构建相册)。
上述行动有限,但直到11月底才受到限制。 我们正在使用批量调用来从相册中获取照片 - 是否有更好的方法来获取此信息而不受限制?
根据Facebook的说法,我们每天拨打1M电话,但根据我们的统计,我们每天拨打180K电话。在没有他朋友的照片的情况下仅获取用户的照片对我们来说不是一个解决方案。
答案 0 :(得分:35)
Facebook API限制并未真正记录,但显然它类似于:600 calls per 600 seconds, per token & per IP。由于网站受到限制,引用相关部分:
经过与Facebook平台团队的一些测试和讨论后,我没有官方限制或者可以在文档中找到。但是,我发现每600秒600次呼叫,每个令牌和每个IP都是关于他们阻止你的地方。我也看到了一些基于应用程序的速率限制,但没有任何数字。
作为一般规则,每秒一次通话不应受到速率限制。从表面上看,这似乎非常严格,但请记住,您可以批量处理某些调用并使用订阅API进行更改。
您可以通过Javascript SDK访问客户端的Graph API;我想如果你从客户端发出你的照片请求,你将不会点击任何application limit
因为它是用户(每个具有唯一ID的用户)获取数据,而不是你的应用服务器(唯一ID)。
如果您所做的一切都通过服务器,这可能意味着一个巨大的重构。但是,如果您有这么多请求(因为它会让您的服务器喘不过气来),它似乎是最好的解决方案。
否则,您可以尝试batch
request,但我猜您已经采用了这种方式,如果您的流量很大。
如果没有任何效果,根据Facebook Platform Policy,您应该联系他们。
如果您超出或计划超过以下任何阈值,请contact us,因为您可能需要遵守其他条款:(> 5M MAU)或(每天100万次API调用)或( >每天50万次展示。
答案 1 :(得分:15)
Facebook "Graph API Rate Limiting" docs表示代码#4
的错误是app level rate limit,与user level rate limits不同。虽然它没有给出任何确切的数字,但它将应用程序级别的速率限制描述为:
此速率限制在应用级别全局应用。广告API呼叫被排除在外。
- 在过去一小时的滑动窗口上实时进行速率限制。
- 收集统计数据,包括调用和查询的数量,花费的cpu时间,每个应用程序使用的内存。
- 每个资源都有一个限制乘以给定应用的每月活跃用户。
- 当应用程序使用超过其允许的资源时,将引发错误。
- 错误,代码:4,消息:已达到应用程序请求限制
文档还提供了避免速率限制的建议。对于应用级别限制,它们是:
建议:
- 验证错误代码(4)以确认限制类型。
- 不要拨打电话,全天分散电话。
- 智能获取数据(重要数据,非重复数据等)。
- 实时洞察,确保API调用的结构使您能够以尽可能少的页面帖子读取数据,并且请求数量最少。
- 请勿两次获取用户Feed(如果两个App用户有一个共同的特定朋友)
- 如果朋友的数量超过250,请不要连续获取所有用户的朋友。在不同的日期分开提取。作为选项,首先获取应用用户的新闻源(me / home),以便检测哪些朋友对App用户更重要。然后,首先获取这些朋友的提要。
- 考虑使用以下参数限制/过滤请求:“since”,“until”,“limit”
- For page related calls use realtime updates to subscribe to changes in data.
- Field expansion allows ton "join" multiple graph queries into a single call.
- Etags to check if the data querying has changed since the last check.
- 对于没有大量用户群的页面管理开发人员,请让该页面的管理员接受该应用以增加用户数。
最后,文档提供了以下信息提示:
- 批量通话不会减少api通话次数。
- 进行并行呼叫不会减少api呼叫的数量。
答案 2 :(得分:0)