5

我在测试我的应用程序时收到 Graph API 错误 #613(消息:“ Calls to mailbox_fql have exceeded the rate of 300 calls per 600 seconds”,类型:)。OAuthException这是一个桌面应用程序,唯一的副本是在我的机器上运行的那个(所以只有access_token一个用户 - 我)。

inbox每 15 秒左右查询一次端点。结合起来,该应用程序每分钟进行大约 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. 如果是这种情况,有没有办法减少mailbox_fql每个 API 调用的调用次数(例如,仅获取收件箱中的 <n> 个最近的线程,而不是整个第一页)?

关于这个主题的文档似乎非常稀少,所以我不得不主要通过反复试验来度过难关。如果其他人知道如何解决这个问题,我会很高兴。

4

1 回答 1

4

编辑:事实证明,您可以传递一个limitGET 参数,不出所料,它会限制结果的数量。但是,开发人员博客指出了这种方法的一些限制(即,如果您的用户看不到某些结果,则返回的结果可能少于请求的结果)。

该博客建议在调用标准 Graph API 时使用until和/或作为 GET 参数。since这些参数采用任何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对应的表的字面名称;inboxthread端点对应于unified_thread表,但尚未公开。folder_id=1表示我们要使用收件箱(而不是发件箱或更新文件夹)。

在实践中,我设置为 5,当使用 15 秒的调用间隔时,这会在 10 分钟的跨度内<n>产生合理的 200次调用。mailbox_fql在我的测试中,我没有收到错误 #613,所以我想它可以工作。

我想这里的大多数人已经熟悉 FQL 的来龙去脉,但它对我来说是新的。我希望这可以帮助其他一些处理类似问题的新手!

于 2011-12-23T23:29:24.277 回答