Получить несколько полей в одном запросе с помощью Facebook PHP SDK

0

После регистрации пользователя я получаю данные пользователей (имя, день рождения, местоположение и т.д.), А также изображение профиля пользователя.

В настоящее время я мог бы это сделать: /me?fields=picture,name, но изображение получилось слишком низким, поэтому я хотел бы получить изображение с параметром height (как описано здесь).

Мой единственный вариант, как я вижу, состоит в том, чтобы разделить его на два запроса, что кажется неэффективным:

  • Получить данные пользователя me/?fields=name
  • Получить изображение пользователя me/picture?height=500&redirect=false

Будет ли способ объединить это в ОДИН запрос?

Теги:
facebook
facebook-graph-api
facebook-php-sdk

2 ответа

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


Пакетные запросы были бы еще одним решением, хотя и не очень хорошим в этом случае, потому что они намного сложнее (больше кода, больше вещей для рассмотрения), и они не считаются одним вызовом:

каждый вызов в пакете подсчитывается отдельно для целей расчета пределов вызова API и ограничений ресурсов

... что означает, что они работают быстрее, чем два отдельных вызова (так же быстро, как и самый медленный вызов в пакетной версии), но расширение поля - это всего лишь 1 вызов. Пакетные запросы предназначены для "потенциально несвязанных вызовов API Графа".

  • 0
    Могу ли я спросить, почему понизить? Я рад улучшить свой ответ, но я не думаю, что есть лучшее решение.
0

Вы можете использовать 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: как вы отметили это с помощью , вот пример использования этого:

$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'];
  • 0
    Я думаю, что более целесообразно использовать field expansion , как описано Лушном, но +1 для примера кода PHP и хорошего обходного пути.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню