对于一个项目,我必须在很长一段时间(例如1-2年)的Facebook中获取页面的见解。
我首先尝试做一个请求,但事实证明,只有请求
/PAGE_ID/insights?since=xxx&until=xxx
不会返回我想要的所有数据(它会以某种方式限制数据,好像答案的大小存在限制)。
然后,我尝试拆分日期范围(例如01.04.2011-01.04.2011-> 01.04.2011-01.08.2011-01.12.2011-01.04.2011),但它并没有像我想要的那样有效。
我的下一个方法是仅请求我需要的洞察力值,例如“ page_stories,page_impressions,…”。请求看起来像这样
/PAGE_ID/insights/page_impressions/day?since=xxx&until=xxx
这实际上有效,但不适用于ajax。有时似乎会丢弃一些请求(尤其是如果我更改了google chrome中的浏览器标签),则需要确保所有请求都返回一个答案。考虑到一个请求至少需要2秒钟,而同步解决方案将花费太多时间,而在2年的日期范围内,我可能有大约300个单个请求,这花费了太长时间才能完成。
最后,我偶然发现了Facebook能够执行批处理请求的能力,而这正是我所需要的。一次呼叫最多可以打包50个请求,从而大大降低了带宽。这就是我卡住的地方。facebook api提供了一些有关如何使用它的示例,但是当我在Graph Explorer和通过php facebook api sdk测试它们时,它们都没有起作用。我试图打包此请求
PAGE_ID/insights/page_fan_adds/day?since=1332486000&until=1333695600
进入批处理请求,但失败。
似乎该API已被窃听。当我使用问号“?”时,总是会出现此错误。在“ relative_url”字段中。
{ "error": { "message": "batch parameter must be a JSON array", "type": "GraphBatchException" } }
这是我尝试过的:
这些给出“必须是JSON数组”错误:
?batch=[{"method":"GET","relative_url":"/PAGE_ID/insights/page_fan_adds/day?since=1332486000&until=1333695600"}]
这两个实际上返回数据,但是它们忽略了参数:
?batch=[{"method":"GET","relative_url":"/PAGE_ID/insights/page_fan_adds/day","body":"since=1332486000 until=1333695600"}] ?batch=[{"method":"GET","relative_url":"/PAGE_ID/insights/page_fan_adds/day","body":"since=1332486000,until=1333695600"}] ?batch=[{"method":"GET","relative_url":"/PAGE_ID/insights/page_fan_adds/day","body":{"since":"1332486000","until":"1333695600"}}]
这告诉我这是“不支持的帖子请求”:
?batch=[{"method":"POST","relative_url":"/PAGE_ID/insights/page_fan_adds/day","body":"since=1332486000 until=1333695600"}]
有人可以帮忙吗?
我终于找到了解决我问题的方法。在Facebook文档中没有提到,但是对于这个要求
为了正常工作,我们必须使用类似
urlencode()
编码json部分。这样,查询就可以像超级按钮一样工作。一个PHP示例:
$insights = $facebook->api('?batch=['.urlencode('{"method":"GET","relative_url":"/PAGE_ID/insights/page_fan_adds/day?since=1332572400&until=1333782000"}').']' ,'post',array('access_token' => $this->facebook->getAccessToken()));
结果是:
?batch=[%7B%22method%22%3A%22GET%22%2C%22relative_url%22%3A%22%2FPAGE_ID%2Finsights%2Fpage_fan_adds%2Fday%3Fsince%3D1300086000%26until%3D1307862000%22%7D]