用户注册后,我获取用户数据(姓名,生日,位置等)以及用户个人资料图像。
目前,我将能够做到这一点:/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'];