用户注册后,我会获取用户数据(姓名,生日,位置等)以及用户个人资料图片。
目前,我可以执行此操作:/me?fields=picture,name
,但返回的图片分辨率太低,因此我想使用height参数获取图片(如上所述{{3} })。
我认为唯一的选择是将它分成两个请求,这似乎效率低下:
me/?fields=name
me/picture?height=500&redirect=false
是否有办法将此合并为一个请求?
答案 0 :(得分:5)
使用字段展开,只需一次API调用:
/me?fields=name,picture.width(500).height(500),birthday
有关字段扩展的更多信息: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}"
}
]
编辑:正如您使用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'];