使用 Facebook PHP SDK 在单个请求中检索多个字段


Retrieve multiple fields in a single request with Facebook PHP SDK

用户注册后,我获取用户数据(姓名,生日,位置等)以及用户个人资料图像。

目前,我将能够做到这一点:/me?fields=picture,name,但返回的图片分辨率太低,所以我想使用高度参数获取图片(如此处所述)。

在我看来,我唯一的选择是将其分成两个请求,这似乎效率低下:

  • me/?fields=name获取用户数据
  • 获取用户图片me/picture?height=500&redirect=false

有没有办法将其合并到一个请求中?

使用字段扩展,只需一次 API 调用:

/me?fields=name,picture.width(500).height(500),birthday

API 资源管理器测试:https://developers.facebook.com/tools/explorer/?method=GET&path=me%3Ffields%3Dname%2Cpicture.width%28500%29.height%28500%29&version=v2.2

有关油田扩展的更多信息:https://developers.facebook.com/docs/graph-api/using-graph-api/v2.2#fieldexpansion


批处理请求将是另一种解决方案,尽管在这种情况下不是一个很好的解决方案,因为它们要复杂得多(更多的代码,更多的需要考虑的事情),并且它们不算作一次调用:

批处理中的每个调用都单独计数,以计算 API 调用限制和资源限制

。这意味着,它们仅比 2 个单独的调用快(与批处理中最慢的调用一样快),但字段扩展实际上只是 1 个调用。批处理请求适用于"可能不相关的图形 API 调用"。

您可以

按照此处的文档使用batch

下面是满足您需求的示例请求:

网址: https://graph.facebook.com/v2.2/

发布数据(重要!不是获取!):

batch=[{"method":"GET", "relative_url":"me/?fields=name"},{"method":"GET", "relative_url":"me/picture?height=500&redirect=false"}]

可选但建议:include_headers=false

示例响应:

[
  {
    "code": 200,
    "body": "{'n '"name'": '"Richard Down'",'n '"id'": '"704787476294950'"'n}"
  },
  {
    "code": 200,
    "body": "{'n '"data'": {'n '"height'": 604,'n '"is_silhouette'": true,'n '"url'": '"https://fbcdn-profile-a.akamaihd.net/hprofile-ak-xap1/t31.0-1/s960x960/10506738_10150004552801856_220367501106153455_o.jpg'",'n '"width'": 960'n }'n}"
  }
]

编辑:当你用facebook-php-sdk标记它时,这里有一个使用它的例子:

$requests = array(
    array('method' => 'GET', 'relative_url' => 'me/?fields=name'),
    array('method' => 'GET', 'relative_url' => 'me/picture?height=500&redirect=false')
);
$response = json_decode($facebook->api('?batch=' . json_encode($requests), 'POST'), true);
$name = $response[0]['name'];
$image = $response[1]['url'];