【问题标题】:Facebook Graph API Batch Request Filtering?Facebook Graph API 批量请求过滤?
【发布时间】:2020-12-21 05:41:12
【问题描述】:

问题: 我的批处理请求返回传递的组事件,并且当前的批处理请求将随着用户创建未来事件而严重扩展。

我有以下批处理请求:

{
   "batch": [
   {
       "method": "GET",
       "relative_url": "me"
   },
   {
       "method": "GET",
       "relative_url": "me/groups?fields=events{id,name,start_time}"
   },
   {
        "method": "GET",
        "relative_url": "me/accounts"
   }
   ],
  "include_headers": "false"
}

此请求将获取(除其他外)所有用户组事件。我只需要即将发生的事件。

问题: 如何在批处理请求中应用过滤器?

以下查询 URL 在用作 relative_url 时不起作用:

me/groups?fields=events{id,name,start_time}&since=1599036240

过滤参数为:

since=MY_CURRENT_TIME

我阅读的文档没有多大帮助。我什至不知道是否可以将过滤器(字段)添加到批处理请求中。 (https://developers.facebook.com/docs/graph-api/making-multiple-requests/)

https://developers.facebook.com/community/threads/325616225418947/?notif_id=1599002283105969&notif_t=developer_community_forum_thread_update&ref=notif

我还在 FBs 开发者论坛上问了同样的问题,但没有答案(到目前为止): https://developers.facebook.com/community/threads/325616225418947/?notif_id=1599002283105969&notif_t=developer_community_forum_thread_update&ref=notif

更新 1 (02.09.2020.):

@CBroe 指出批处理请求 URL 应该与独立请求相同。这让我相信我的relative_url 没有正确过滤。测试:

me/groups?fields=events{id,name,start_time}&since=1599036240

带输出:

events": {
        "data": [
          {
            "id": "324058568947509",
            "name": "Testing FB Graph API",
            "start_time": "2020-08-25T15:00:00+0200"
          }
        ],

符合过滤不适用于&since=1599036240 和包含{} 的URL。

【问题讨论】:

  • “使用 relative_url 时,以下查询 URL 不起作用” - 现在是用户的事件,您是说这里的那些,还是我们在谈论组事件?
  • 批处理请求不应改变单个请求的工作方式。如果可以过滤端点,那么它应该以相同的方式批量工作。但是me/groups?fields=events{id,name,start_time}&since=1598509165 本身已经为我返回了 2017 年和 2018 年的事件。 (我不知道这是否可能是由于缺少更多当前事件;如果没有数据,我不知道 API 是否决定通过 since?)
  • @CBroe 感谢您的快速响应和反馈。我复制了错误的网址。用小组活动 URL 更新了答案。
  • 但是me/groups?fields=events{id,name,start_time}&since=1599036240 直接执行,而不是在批处理中,会给您预期的正确结果?
  • @CBroe 具有正确时间(现在)的请求返回一个空数组。我已经用用户事件对此进行了测试。用户事件 URL 如下所示:me/events?fields=end_time,start_time,id,name&since=1599036240

标签: swift facebook-graph-api facebook-batch-request


【解决方案1】:

提供参数的格式是这里的问题。

如果您直接通过events 端点,那么以这种方式提供since 参数将起作用:/group-id/events?since=…

但是您没有使用该格式,您将通过 me/groups?fields=events - 在这种情况下,将 since 指定为与​​ fields 相同“级别”的附加 GET 参数将不起作用。
原因是您可能会以这种方式从多个端点请求数据 -
?fields=events,somethingelse&since=… - 我们是否希望通过此处的 since 值过滤 eventssomethingelse 的结果,那就是模棱两可。

所以,这里需要用到字段扩展语法:

?fields=events.since(1599036240){id,name,start_time}

这样,since 参数在此处显式绑定到 events 端点(您可以在此处为第二个端点以不同方式指定 somethingelse.since(…)。)

(并且参数需要按此顺序排列,events{id,name,start_time}.since(…) 会出现语法错误,字段列表首先使用{…},然后查询解析器无法理解点语法。)

【讨论】:

  • 谢谢“超过 9000”。是否有关于 Facebook Graph API 的深入教程?您会期望我的错误请求会出错还是只是响应不正确(根据我的错误请求得到的)?
  • “不正确”的请求没有给出任何语法错误,也不是意料之中的,它只是在这种情况下没有达到预期结果的参数组合,但事实并非如此一个实际的语法错误。另外,API 通常对添加额外的 GET 参数是“宽容的”,您可以使用me?fields=id,name&foo=bar,这也不会导致错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多