Chr*_*ott 5 macos facebook objective-c inbox facebook-graph-api
测试我的应用时Calls to mailbox_fql have exceeded the rate of 300 calls per 600 seconds,我收到Graph API错误#613(消息:" ",键入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>最近的线程,而不是整个第一页)?
关于这个主题的文档看起来很少,所以我不得不通过反复试验来解决问题.如果有人知道如何解决这个问题,我会很激动.
编辑:事实证明,您可以传递一个limitGET 参数,这毫不奇怪地限制了结果的数量。但是,开发人员博客指出了此方法的一些限制(即,如果某些结果对用户不可见,则返回的结果可能少于请求的结果)。
该博客建议在调用标准 Graph API 时使用until和/或作为 GET 参数。since这些参数采用任何strtotime()兼容的字符串(或 Unix 纪元时间)并相应地限制您的结果。
原答案如下:
经过进一步研究后,我的选择似乎是降低获取频率或使用自定义 FQL 查询来限制对 mail_fql 的调用次数。我无法找到任何方法来限制标准 Graph API 调用对端点的响应inbox。在本例中,我使用以下形式的 FQL 查询:
https://graph.facebook.com/fql?q=SELECT <fields> FROM thread WHERE folder_id=1 LIMIT <n>&access_token=...
Run Code Online (Sandbox Code Playgroud)
<fields>是一个以逗号分隔的字段列表(在 Facebook 的线程 FQL 文档中进行了描述)。thread是端点对应的表的字面名称inbox;新thread端点与该unified_thread表相对应,但尚未公开。folder_id=1表示我们要使用收件箱(而不是发件箱或更新文件夹)。
在实践中,我设置为 5,当使用 15 秒的呼叫间隔时,<n>这会导致 10 分钟内有 200 次合理的呼叫。mailbox_fql在我的测试中,我没有收到错误#613,所以我想它是有效的。
我想这里的大多数人已经熟悉 FQL 的来龙去脉,但它对我来说是陌生的。我希望这可以帮助其他处理类似问题的新手!
| 归档时间: |
|
| 查看次数: |
620 次 |
| 最近记录: |