我在测试应用时收到了图谱API错误#613(消息:“Calls to mailbox_fql have exceeded the rate of 300 calls per 600 seconds
”,请输入:OAuthException
)。它是一个桌面应用程序,唯一的副本是我的机器上运行的副本(所以只有一个access_token
和一个用户 - 我)。
我每隔15秒左右查询inbox
个端点一次。结合使用,该应用程序每分钟进行大约12次API调用(到各种端点)。无论哪个调用获取第300个线程(在inbox
端点的第一页上有大约25个线程,而我只是获取第一页),它始终失败。我没有批处任何对Graph API的调用。
我正在使用Objective-C在Mac OS X 10.7上进行开发。我使用NSURLConnection
异步调用Graph API。据我所知,NSURLConnection
处理的每个请求只会导致对Facebook API的一次请求。
继续上面的说法,我无法弄清楚为什么会收到这个错误。我怀疑这是因为对inbox
端点的单个调用(即对URI https://graph.facebook.com/me/inbox?access_token=...
的调用)被视为对mailbox_fql
的多次调用。特别是,我认为单个调用返回< n>线程计为< n>致电mailbox_fql
。如果是这种情况,有没有办法减少每次API调用mailbox_fql
的调用次数(例如,只需获取收件箱中的&n;最新线程,而不是比整个第一页)?
关于这个主题的文档看起来很少,所以我不得不通过反复试验来解决问题。如果有人知道如何解决这个问题,我会很激动。
答案 0 :(得分:4)
编辑:事实证明,您可以传递limit
GET参数,毫不奇怪,这会限制结果数量。但是,Developer blog注意到这种方法存在一些限制(即如果用户看不到某些结果,则可能会返回的结果少于请求的结果。)
博客建议在调用标准Graph API时使用until
和/或since
作为GET参数。这些参数采用任何符合strtotime()
的字符串(或Unix纪元时间)并相应地限制您的结果。
原始答案如下:
经过一些进一步的研究后,看起来我的选择是获取频率较低或使用自定义FQL查询来限制对mailbox_fql的调用次数。我无法找到任何方法来限制标准Graph API调用对inbox
端点的响应。在本例中,我正在使用以下形式的FQL查询:
https://graph.facebook.com/fql?q=SELECT <fields> FROM thread WHERE folder_id=1 LIMIT <n>&access_token=...
<fields>
是以逗号分隔的字段列表(在Facebook的主题FQL文档中描述)。 thread
是与inbox
端点对应的表的文字名称;新的thread
端点对应于unified_thread
表,但尚未公开。 folder_id=1
表示我们要使用收件箱(而不是发件箱或更新文件夹)。
在实践中,我将<n>
设置为5,这样在使用15秒的通话时间间隔内,在10分钟的时间内可以合理地拨打200 mailbox_fql
。在我的测试中,我没有收到错误#613,所以我猜它有效。
我想这里的大多数人已经熟悉了FQL的来龙去脉,但这对我来说是新的。我希望这有助于其他一些处理类似问题的新手!