Facebook Graph API: отримуйте більші картинки за один запит


88

В даний час я використовую Провідник API API для проведення деяких тестів. Це хороший інструмент.

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

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

Але зображення лише 50x50, і я хотів би зробити більший у цьому запиті.

Це можливо ?

Відповіді:


68

вам не потрібно витягувати атрибут "картинка". є набагато зручніший спосіб, єдине, що вам потрібно, це userid, див. приклад нижче;

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

тип ps визначає розмір, який ви хочете

plz майте на увазі, що використовуючи маркер з основними дозволами, / me / friends поверне список друзів лише з атрибутами id + name


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

29
а, а як щодо "в одному запиті"?
Юліан Онофрей

4
Ви також можете використовувати full_picture instat зображення.
Бо Пеннінгс

"message": "(# 12) край зображення для цього типу застарілий для версій v2.3 і вище",
Набір інструментів

201

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

Подобається так:

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

27
Справді. fields = picture.width (640) ще кращий.
kaay

6
Здається, API графіків Facebook змінив їх API. Facebook відповів "Підполя не підтримуються зображенням", коли я спробував використати вашу пропозицію.
Phat H. VU

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

13
Дивіться поле? Full = 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 х 200?
AlxVallejo

1
В останній версії (2.10) API Graph не є "великим" розміром:Graph returned an error: (#100) For field 'picture': type must be one of the following values: thumbnail, small, album
Honza

33

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

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

Подібним чином typeможна використовувати параметр

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

З документації

type enum {малий, звичайний, альбом, великий, квадрат}



20

Я широко досліджував Провідник Graph API і нарешті знайшов 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

це лише ширина шоу: 720px. ур тільки велике фото знахідки, як це. для найбільшого graph.facebook.com/photo_id ви можете побачити 6 фотографій різних розмірів.
гохан

я просто перевірив це з кінцевою точкою друзів, і це не спрацювало
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
ВИДИ РОЗМІРУ ЗОБРАЖЕННЯ: developers.facebook.com/docs/graph-api/reference/user/picture
jave.web


2

Від v2.7,/<picture-id>?fields=images надасть вам список із різним розміром зображень, першим елементом є зображення в повному розмірі.

Я не знаю жодного рішення для кількох зображень одночасно.


1

У URL-адресах зображень, що знаходяться у відповідях на графіку (" http://photos-c.ak.fbcdn.net/ "), просто замініть "_s.jpg" за замовчуванням на "_n.jpg" (? Нормальний розмір) або "_b.jpg" (? великий розмір) або "_t.jpg" (ескіз).

Зломливі URL-адреси / REST API покращують Інтернет.


1
Здається, завжди повідомляє "Під час обробки вашого запиту сталася помилка. Довідка № 50.27f74317.14274.604fb0" зараз, на жаль,
Кевін,

1

користувачі rest-fb (квадратне зображення, більша роздільна здатність): Підключення myFriends = fbClient.fetchConnection ("я / друзі", User.class, Parameter.with ("поля", "public_profile, електронна пошта, ім'я, прізвище, стать, зображення .width (100) .height (100) "));


1

Я отримав цю помилку, коли зробив запит за допомогою picture.type(full_picture):

"(# 100) Для поля" картинка ": тип має бути одним із таких значень: маленький, нормальний, альбом, великий, квадрат"

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

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

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

с picture.width(250), відповіді 320x320.

с picture.width(50), відповіді 50х50.

з picture.width(100) , відповіді 100x100.

з picture.width(150) , відповіді 160х160.

Я думаю, що 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-адреса є посиланням на зображення розміром 200x200px.


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 Login
  • використовувати маркер доступу до сторінки для запитів із масштабом сторінки
  • використовувати маркер доступу до програми для запитів на стороні сервера
  • використовувати маркер доступу клієнта для мобільних або веб-запитів на стороні клієнта

Ми рекомендуємо використовувати маркер клієнта, лише якщо ви не можете використовувати один із інших типів маркерів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.