Facebook Graph API: получайте изображения большего размера одним запросом


88

В настоящее время я использую Graph API Explorer для проведения некоторых тестов. Это хороший инструмент.

Я хочу получить список друзей пользователя с именами, идентификаторами и изображениями друзей. Я набираю:

https://graph.facebook.com/me/friends?fields=id,picture,name

Но картинка только 50х50, и я хотел бы в этом запросе побольше.

Является ли это возможным ?

Ответы:


68

Однако вам не нужно тянуть атрибут «изображение». есть гораздо более удобный способ, единственное, что вам нужно, это идентификатор пользователя, см. пример ниже;

https://graph.facebook.com/user_id/picture?type=large

Тип ps определяет желаемый размер

Пожалуйста, имейте в виду, что при использовании токена с базовыми разрешениями / me / friends вернет список друзей только с атрибутами id + name.


1
Но я не согласен с вашим последним предложением: с базовым разрешением вы можете получить доступ к более чем атрибуту id + name, например: graph.facebook.com/btaylor
Мартин

29
а как насчет "в одном запросе"?
Юлиан Онофрей

4
Вы также можете использовать full_picture вместо изображения.
Бо Пеннингс

"message": "(# 12) край изображения для этого типа не рекомендуется для версий v2.3 и выше",
Toolkit

202

Как описано в этой ошибке на Facebook, теперь вы также можете запрашивать определенные размеры изображений с помощью нового синтаксиса « расширения поля » API .

Вот так:

https://graph.facebook.com/____OBJECT_ID____?fields=picture.type(large)

27
На самом деле. fields = picture.width (640) еще лучше.
kaay

6
Кажется, API-интерфейс Facebook Graph изменил свой api. Facebook ответил: «Подполя не поддерживаются изображением», когда я попытался воспользоваться вашим предложением.
Phat H. VU

2
получение ошибки: {"error": {"message": "Неподдерживаемый запрос на получение. Прочтите документацию Graph API по адресу developers.facebook.com/docs/graph-api ", "type": "GraphMethodException", "code": 100}}
Vineesh TP

13
Смотрите? Field = full_picture, вложения для запросов 2.x
Кевин,

3
С новыми изменениями Facebook невозможно получить увеличенное изображение. Любой намек?
shadab.tughlaq

81

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

/me/friends?fields=picture.type(large)

(изменить: это больше не работает)

... или вы можете указать ширину / высоту:

me/friends?fields=picture.width(100).height(100)

Кстати, вы также можете написать это так:

me?fields=friends{picture.type(large)}

1
спасибо за информацию, я обновлю ответ. full_picture, похоже, не работает для друзей: / me / friends? fields = full_picture - вы хоть представляете, как это возможно?
luschn

34

Измените массив полей id,name,pictureнаid,name,picture.type(large)

https://graph.facebook.com/v2.8/me?fields=id,name,picture.type(large)&access_token=<the_token>

Результат:

{
   "id": "130716224073524",
   "name": "Julian Mann",
   "picture": {
      "data": {
         "is_silhouette": false,
         "url": "https://scontent.xx.fbcdn.net/v/t1.0-1/p200x200/15032818_133926070419206_3681208703790460208_n.jpg?oh=a288898d87420cdc7ed8db5602bbb520&oe=58CB5D16"
      }
   }
}

7
Какой размер 200 x 200?
AlxVallejo

1
В последнем (2,10) Graph API не доступен «большой» размер:Graph returned an error: (#100) For field 'picture': type must be one of the following values: thumbnail, small, album
Хонза

33

Вы можете установить размер изображения в пикселях, например:

https://graph.facebook.com/v2.8/me?fields=id,name,picture.width(500).height(500)

Аналогичным образом typeможно использовать параметр

{user-id}/?fields=name,picture.type(large)

Из документации

введите enum {small, normal, album, large, square}



20

Я тщательно исследовал Graph API Explorer и, наконец, нашел full_picture

https://graph.facebook.com/v2.2/$id/posts?fields=picture,full_picture

PS Я заметил, что full_picture не всегда обеспечивает изображение полного размера, которое я хочу. "вложения" делает

https://graph.facebook.com/v2.2/$id/posts?fields=picture,full_picture,attachments

это только ширина экрана: 720 пикселей. У тебя есть только большая фотография. для самого большого graph.facebook.com/photo_id вы можете увидеть фото 6 разных размеров.
gokhan

Я только что протестировал это с конечной точкой друзей, и это не сработало
luschn

9

Хм ... Думаю, я нашел решение.

Фактически, можно просто запросить

https://graph.facebook.com/me/friends?fields=id,name

Согласно http://developers.facebook.com/docs/reference/api/ (раздел «Картинки»), URL-адрес фотографий профиля может быть построен с использованием идентификатора пользователя.

Например, если идентификатор пользователя находится в $ id:

"http://graph.facebook.com/$id/picture?type=square"
"http://graph.facebook.com/$id/picture?type=small"
"http://graph.facebook.com/$id/picture?type=normal"
"http://graph.facebook.com/$id/picture?type=large"

Но это не конечный URL-адрес изображения, поэтому, если у кого-то есть лучшее решение, я был бы рад узнать :)


1
ТИПЫ
РАЗМЕРОВ


2

С v2.7, /<picture-id>?fields=imagesдаст вам список с различными размерами изображений, первым элементом является полным размером.

Я не знаю решения для нескольких изображений одновременно.


1

В URL-адресах изображений, найденных в ответах Graph (те, что « http://photos-c.ak.fbcdn.net/ »), просто замените значение по умолчанию «_s.jpg» на «_n.jpg» (? Нормальный размер) или "_b.jpg" (? большой размер) или "_t.jpg" (эскиз).

Hacakable URL / REST API делают Интернет лучше.


1
Кажется, всегда выдает: «Произошла ошибка при обработке вашего запроса. Ссылка № 50.27f74317.14274.604fb0» теперь, к сожалению,
Кевин

1

rest-fb users (квадратное изображение, увеличенное разрешение): Connection myFriends = fbClient.fetchConnection ("я / друзья", User.class, Parameter.with ("fields", "public_profile, email, first_name, last_name, пол, изображение) .width (100) .height (100) "));


1

Я получил эту ошибку, когда сделал запрос с помощью picture.type(full_picture):

"(# 100) Для поля 'изображение': тип должен быть одним из следующих значений: small, normal, album, large, square"

Когда я делаю запрос с помощью picture.type(album)и picture.type(square), я отвечаю с изображением размером 50x50 пикселей.

Когда я делаю запрос с picture.type(large), мне отвечает изображение размером 200x200 пикселей.

Когда я делаю запрос с picture.width(800), мне отвечает изображение размером 477x477 пикселей.

с picture.width(250), отзывы 320x320.

с picture.width(50), отзывы 50x50.

с picture.width(100), отзывы 100x100.

с picture.width(150), отзывы 160x160.

Я думаю, что facebook дает изображения, размер которых изменяется по-разному, когда пользователь впервые добавляет эту фотографию.

Я вижу здесь API для запроса изображения пользователя не поддерживает изменение размера запрошенного изображения. Думаю, это дает самый близкий размер изображения.


Верно ... "picture.type (large)" также дал мне 200x200 - не очень большой, я должен сказать
Джеймс


0

Я думаю, что на данный момент единственный способ получить большие фотографии друзей - это использовать FQL. Во-первых, вам нужно получить список друзей:

https://graph.facebook.com/me/friends

Затем проанализируйте этот список и извлеките всех друзей ids. Когда он у вас есть, просто выполните следующий запрос FQL:

SELECT id, url FROM profile_pic WHERE id IN (id1, id2) AND width=200 AND height=200

200вот только примерный размер, можно вводить что угодно. Вы должны получить следующий ответ:

{
  "data": [
    {
      "id": ..., 
      "url": "https://fbcdn-profile-a.akamaihd.net/..."
    }, 
    {
      "id": ..., 
      "url": "https://fbcdn-profile-a.akamaihd.net/..."
    }
  ]
}

Каждый URL-адрес является ссылкой на изображение размером 200x200 пикселей.


0

У меня такая же проблема, но я попробовал решить эту проблему. он возвращает большое изображение. Это не идеальное решение, но вы можете попробовать это.

https://graph.facebook.com/v2.0/OBJECT_ID/picture?access_token=XXXXX


Просто добавьте в запрос еще один параметр: type = large. Пожалуйста, проверьте мой ответ ниже.
родился в Хуле

0

попробуйте изменить размер изображения, изменив размер пикселя из URL-адреса в каждом объекте json следующим образом:

например я меняю s480x480 на s720x720

Раньше: https://fbcdn-sphotos-ca.akamaihd.net/hphotos-ak-xfp1/t1.0-9/q71/s480x480/10454308_773207849398282_283493808478577207_n.jpg

После: https://fbcdn-sphotos-ca.akamaihd.net/hphotos-ak-xfp1/t1.0-9/q71/s720x720/10454308_773207849398282_283493808478577207_n.jpg


0

Вариант в стиле JS. Просто установите очень большую ширину изображения, и вы получите самый большой вариант.

FB.api(
  '/' + userId,
  {fields: 'picture.width(2048)'},
  function (response) {
    if (response && !response.error) {
      console.log(response.picture.data.url);
    }
  }
);

0

Вы можете использовать full_picture вместо ключа изображения, чтобы получить полноразмерное изображение.


0

Примечание . Начиная с Graph API v8.0, вы выполняете must provide the access tokenкаждый запрос UserID.

Попадание в API графа:

https://graph.facebook.com/<user_id>/picture?height=1000&access_token=<any_of_above_token>

С Firebase:

FirebaseUser user = mAuth.getCurrentUser();
String photoUrl = user.getPhotoUrl() + "/picture?height=1000&access_token=" +
  loginResult.getAccessToken().getToken();

Вы получаете токен registerCallbackвот так

       LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            FirebaseUser user = mAuth.getCurrentUser();
            String photoUrl = user.getPhotoUrl() + "/picture?height=1000&access_token=" + loginResult.getAccessToken().getToken();
        }

        @Override
        public void onCancel() {
            Log.d("Fb on Login", "facebook:onCancel");
        }

        @Override
        public void onError(FacebookException error) {
            Log.e("Fb on Login", "facebook:onError", error);
        }
    });

Вот что говорится в документации:

С 24 октября 2020 г. токен доступа будет требоваться для всех запросов на основе UID. Если вы запрашиваете UID и, следовательно, должны включать токен:

  • использовать токен доступа пользователя для аутентифицированных запросов входа в Facebook
  • использовать токен доступа к странице для запросов на уровне страницы
  • использовать токен доступа к приложению для запросов на стороне сервера
  • использовать токен клиентского доступа для мобильных или веб-запросов на стороне клиента

Мы рекомендуем использовать клиентский токен только в том случае, если вы не можете использовать один из других типов токенов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.