当前位置: 首页 > 面试题库 >

Facebook Batch API见解请求

刘阳荣
2023-03-14
问题内容

对于一个项目,我必须在很长一段时间(例如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文档中没有提到,但是对于这个要求

?batch=[{"method":"GET","relative_url":"/PAGE_ID/insights/page_fan_adds/day?since=1332486000&until=1333695600"}]

为了正常工作,我们必须使用类似

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]


 类似资料:
  • 本文向大家介绍HTTP常见的请求方法?相关面试题,主要包含被问及HTTP常见的请求方法?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: get、post,这两个用的是最多的,还有很多比如patch、delete、put、options等等  

  • 本文向大家介绍详解golang中发送http请求的几种常见情况,包括了详解golang中发送http请求的几种常见情况的使用技巧和注意事项,需要的朋友参考一下 方式一 使用http.Newrequest 先生成http.client -> 再生成 http.request -> 之后提交请求:client.Do(request) -> 处理返回结果,每一步的过程都可以设置一些具体的参数,下面是一个

  • 问题内容: 是否可以编写和创建Firefox中的Firebug插件无法捕获的JavaScript Ajax请求? 我之所以这样询问,是因为我可以在Facebook上看到没有正在进行的Ajax请求,但是当我从另一个帐户发送消息时,顶部的消息框仍会添加“ 1条未读消息”指示符。甚至有可能实现? 谢谢。 问题答案: Firebug将“标准” AJAX请求记录到控制台面板;这些是使用ActiveX / X

  • 主要内容:1 概述,2 JUnit 4常用的注解,3 结论1 概述 在本文中,我们将讨论常用的注释,当您在类路径中包含junit4.jar时可用。 常用的注解是:   让我们用示例讨论每个注解。 2 JUnit 4常用的注解 2.1 @Before和@After 在Junit4中,没有setup() 或tearDown() 方法,相反,我们具有@Before和@After批注。通过使用@Before,可以将任何方法设置为setup(),通过使用@Afte

  • 问题内容: 因此,我正在竭尽全力在Facebook API中导航。我需要创建一个脚本,该脚本每天将以csv文件的形式下载我公司的广告系列信息,因此我可以使用另一个脚本轻松地将该信息上传到我们的数据库中。 我终于有了可以将信息打印到日志的代码,但是由于用户必须分别为每个单个活动调用get_insights(),因此我达到了用户请求的限制。我想知道是否有人知道如何帮助我做到这一点,所以我不必经常调用f

  • 主要内容:1 HTTP Request Header请求头,2 HTTP Response Header 响应头本文列出了日常开发中常见的请求头和响应头,以供大家参考。 1 HTTP Request Header请求头 Header 说明 示例 Accept 指定客户端能够接收的内容类型 Accept: text/plain, text/html  Accept-Charset 浏览器可以接受的字符编码集。 Accept-Charset: iso-8859-5  Accept-Encoding