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

时间:2014-11-24 12:00:39

标签: php facebook facebook-graph-api facebook-php-sdk

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

目前,我可以执行此操作:/me?fields=picture,name,但返回的图片分辨率太低,因此我想使用height参数获取图片(如上所述{{3} })。

我认为唯一的选择是将它分成两个请求,这似乎效率低下:

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

是否有办法将此合并为一个请求?

2 个答案:

答案 0 :(得分:5)

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

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

API Explorer测试: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


Batch Requests将是另一种解决方案,虽然在这种情况下不是很好,因为它们更复杂(代码更多,需要考虑更多的事情)而且它们不算作一个调用:

  为了计算API调用限制和资源限制,

批处理中的每个调用都会单独计算

...意思是,它们只比2个单独的呼叫快(与批处理中最慢的呼叫一样快),但是字段扩展实际上只是1个呼叫。批量请求用于“可能不相关的Graph API调用”。

答案 1 :(得分:0)

您可以根据文档here

使用batch

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

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

POST数据(重要!不要GET!):

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}"
  }
]

编辑:正如您使用标记了这一点,以下是使用该示例的示例:

$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'];