После регистрации пользователя я получаю данные пользователей (имя, день рождения, местоположение и т.д.), А также изображение профиля пользователя.
В настоящее время я мог бы это сделать: /me?fields=picture,name
, но изображение получилось слишком низким, поэтому я хотел бы получить изображение с параметром height (как описано здесь).
Мой единственный вариант, как я вижу, состоит в том, чтобы разделить его на два запроса, что кажется неэффективным:
me/?fields=name
me/picture?height=500&redirect=false
Будет ли способ объединить это в ОДИН запрос?
Используйте расширение поля, только один вызов 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
Пакетные запросы были бы еще одним решением, хотя и не очень хорошим в этом случае, потому что они намного сложнее (больше кода, больше вещей для рассмотрения), и они не считаются одним вызовом:
каждый вызов в пакете подсчитывается отдельно для целей расчета пределов вызова API и ограничений ресурсов
... что означает, что они работают быстрее, чем два отдельных вызова (так же быстро, как и самый медленный вызов в пакетной версии), но расширение поля - это всего лишь 1 вызов. Пакетные запросы предназначены для "потенциально несвязанных вызовов API Графа".
Вы можете использовать batch
в соответствии с документами здесь
Вот пример запроса для ваших нужд:
URL: 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}"
}
]
EDIT: как вы отметили это с помощью 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'];
field expansion
, как описано Лушном, но +1 для примера кода PHP и хорошего обходного пути.