Facebook的Graph API调用限制是什么?

80

使用Facebook的图谱API进行调用次数是否受限制? 如果有限制,每个应用程序每天可以进行多少次调用?


可能是Facebook Graph API limit doubt的重复问题。 - Vincent Labatut
5个回答

60

来自另一个论坛的最佳答案,来自2010年的Ash Rust:

"在与Facebook平台团队进行一些测试和讨论后,我没有发现官方限制。但是,我发现每个令牌和每个IP每600秒最多可以调用600次,这大约是他们会停止你的位置。我还看到了一些基于应用程序的速率限制,但没有任何数字。

通常情况下,每秒钟一个调用不应该被速率限制。表面上看起来非常严格,但请记住您可以批处理某些调用并使用订阅API获取更改."


截至2015年10月,上述信息已过时。根据https://developers.facebook.com/docs/graph-api/advanced/rate-limiting,现在每个用户在任何给定的60分钟窗口内最多可以进行200次API调用


12
“Per Token”和“Per IP”是什么意思?这是否意味着如果我在两个不同的IP中使用相同的令牌,我可以将调用次数加倍?如果我使用来自同一IP的2个访问令牌,我是否可以将调用次数加倍? - Henley
2
@mangobug:我认为Henley Chiu的最后一条评论/问题在这里非常关键 :) - Erik Kaplun
5
请记住,您可以对某些调用进行批处理。Facebook澄清,这不会减少您限制的有效API调用次数:“批处理调用不会减少API调用次数。” - heyitsbmo
3
不再有效,请参考用户一的答案。
在任何给定的60分钟窗口期内,每个用户最多可进行200个API调用。
- Brandon Romano
1
如何为我的应用程序获取更多用户?什么是应用程序用户?在哪里可以看到我有多少个用户? - Farzher
显示剩余5条评论

49
现在它是官方
每个应用程序在任何给定的60分钟窗口内为每个用户分配200个API调用。
从Facebook文档(截至2015年10月7日)中,以下是有关Graph API速率限制的工作方式:
- 速率限制是在您的Facebook AppId上完成的。如果您的应用程序达到速率限制,则对该应用程序进行的所有调用都将受到限制,而不仅仅是按每个用户计算的。 - 速率限制是通过获取您的应用程序前一天拥有的用户数量并添加今天的新登录来计算的。这给出了您的应用程序的基本用户数。 例如,如果您的应用程序昨天有10个用户和今天有5个新登录,则会给您一个基数为15个用户。这意味着您的应用程序可以在任何60分钟窗口内进行((10 + 5) * 200) = 3000个API调用。
更多信息请参见:https://developers.facebook.com/docs/graph-api/advanced/rate-limiting --截至2016年4月12日更新--
Facebook现在有一个速率限制仪表板,更容易看到您的应用程序的速率限制是否超过。它看起来像这样:

enter image description here


据我所知,此限制仅适用于使用Graph API版本2.5及以上的应用程序。旧版应用程序尚未受到此限制。 - Marius
如果我们达到限制,Facebook 是否可能返回错误 Error: read ECONNRESET - Konstantinos Natsios
实际限制不是每个用户的限制,而是每日活跃用户的平均限制:“您的应用程序可以在总体上每小时每个用户进行200次调用。例如,如果您的应用程序有100个用户,则意味着您的应用程序可以进行20,000次调用。这不是每个用户的限制,因此一个用户可以进行19,000次调用,另一个用户可以进行1,000次调用。此限制是根据前一小时内所做调用的数量计算的。” - Jason Goemaat
2
如果每次调用后返回 estimatedCallsLeftForThisHour: 1234,那就会容易得多。 - A.W.
很好的且精确的回答! - Alex Pliutau

20
根据Facebook dev policies "I. Features and Functionality",唯一的限制是:

(>5M月活跃用户) 或 (>100M API调用/天) 或 (>50M展示次数/天)。

(MAU表示月活跃用户)

它没有说超过限制后会发生什么...

今天我遇到了这个限制:

对mailbox_fql的调用已经超过了每600秒300次的速率。

总的来说,每个表都有不同的限制,在大多数情况下,fql不会返回超过30个对象。而且我觉得你可以超出一个表的限制,同时可以访问不同的表,问题是API是否被封锁(超出限制后)。是针对所有用户还是只针对超出限制的用户?无论如何,超过限制后你需要等待约10分钟,然后就可以了。

所以从技术上讲,在表mailbox_fql中,你最多可以在10分钟内获取300*30个对象。


这些是需要签订合同的门槛,而不是硬技术限制,硬技术限制在Mangobug的答案中。 - Igy
“Calls to mailbox_fql have exceeded the rate of 300 calls per 600 seconds.” 这句话并不是说在现实生活中强制执行了一个硬性限制。这也意味着不同的表格有不同的限制。(这是真的)。 - Visgean Skeloru

6

用户级别速率限制

除广告API外,此速率限制适用于用户级别的所有API调用。

速率限制实时在滑动窗口上进行。每个调用分配一个分数,最大分数为n。用户随时间累积基于所做的调用的分数。当达到最大分数时,将抛出限流错误。错误,代码:17,消息:达到用户请求限制

应用程序级别速率限制

此速率限制在应用程序级别全局应用。广告API调用被排除在外。

速率限制实时在滑动窗口上进行,过去一个小时内所有调用和查询的统计数据,每个应用程序使用的CPU时间和内存量。每个资源都有一个限制,乘以给定应用程序的月活跃用户数。当应用程序使用超过其允许的资源时,将抛出错误。错误,代码:4,消息:应用程序请求限制已达到

请查看此文档 https://developers.facebook.com/docs/reference/ads-api/api-rate-limiting/


有没有示例展示如何进行用户级别调用和应用程序级别调用?无论如何,所有调用都要通过应用程序 ID 进行,这将是应用程序级别的限制?关于这个问题,他们的文档并不是很详细。 - Josh Bedo
文档链接错误。正确的链接是https://developers.facebook.com/docs/graph-api/advanced/rate-limiting。 - Paiboon Panusbordee
这个答案是关于营销 API 的,而不是 OP 所问的图形 API。 - John Washam

3
根据Facebook文档,批处理中的每个元素都计为单独的调用。
我们目前将批处理中请求数量限制为50个,但是批处理中的每个调用都会被单独计算以计算API调用限制和资源限制。例如,10个API调用的批处理将计为10个调用,并且批处理中的每个调用以相同的方式对CPU资源限制做出贡献。
请参阅:https://developers.facebook.com/docs/graph-api/making-multiple-requests https://developers.facebook.com/docs/marketing-api/api-rate-limiting

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接