API-интерфейс Facebook всегда возвращает небольшие изображения - программирование
Подтвердить что ты не робот

API-интерфейс Facebook всегда возвращает небольшие изображения

Я использую facebook graph api, и я выдаю эту команду

/V2.0/me/home

он возвращает что-то вроде:

  "id": "xxxxxxxxxxxxxxxxxxxxxx", 
  "from": {
    "id": "xxxxxxxxxxxxxxxxx", 
    "name": "Roger"
  }, 
  "story": "Roger shared a link.", 
  "picture": "https://fbexternal-a.akamaihd.net/safe_image.php?d=AQB2VeutsxS6ht3i&w=154&h=154&url=https%3A%2F%2Fwww.facebook.com%2Fads%2Fimage%2F%3Fd%3DAQIuWnred6mG7Ti280buWL8uhE00-W2H0Eom1PzNa3Av0x3y7JieMPqLmxAFYsCRKh0Zr8u_PyWO1lFbTknlj_DaksBoFiaD8d2yIWLOGNYKie1w9Kff6vyyElxnfrlHH7uSRhwycKNakg7szgWtBBwC", 
  "link": "http://xxxxxx.com", 

проблема связана с тегом "картинка" выше, где после этого указывается URL-адрес изображения.

Если вы вставляете этот URL-адрес в свой браузер, вы получаете небольшое изображение уменьшенного размера, но на реальной странице facebook его изображение имеет гораздо более крупную версию с высоким разрешением того же изображения.

Это то же самое для всех URL-адресов, которые он отправляет обратно. Некоторые URL-адреса заканчиваются на _s.jpg, и я могу изменить это на _n.jpg, чтобы сделать его более крупным, но это не работает для URL-адресов, которые не имеют _s.jpg в конце, например, выше.

Кто-нибудь знает команду facebook-graph-api, чтобы facebook отправил URL-адрес, указывающий на изображение большего разрешения, вместо отправки обратных URL-адресов, указывающих на все миниатюры? Или как изменить URL-адрес, чтобы он указывал на большое изображение с высоким разрешением?

Спасибо

4b9b3361

Ответ 1

Используя идентификатор пользователя вместо <id> , вы можете получить изображение с большим разрешением по адресу:

http://graph.facebook.com/<id>/picture?type=large

Ответ 2

После того, как вы получите "id" сообщения в вашем использовании ленты новостей (в JavaScript)

pic_url = 'http://graph.facebook.com/'+ post_id +'?fields=full_picture&access_token="+ response.authResponse.accessToken;

в вашем запросе.

Пример ответа:

{
   "full_picture": "https://fbexternal-a.akamaihd.net/safe_image.php?d=AQBbJqpkt2Jhf0VF&url=http\u00253A\u00252F\u00252Fwww.mixofpix.eu\u00252Fwp-content\u00252Fuploads\u00252F2014\u00252F08\u00252Flampa-oblak.jpg",
   "id": "1407721719477425_1467737580142505",
   "created_time": "2014-08-07T20:00:51+0000"
}

Ответ 3

Получите ObjectId из поля "object_id" для определенной записи из вашего канала новостей.

Используйте это значение object_id, чтобы сделать отдельный вызов API Графа следующим образом -

https://graph.facebook.com/10152199489086727?fields=images&access_token=

Это вернет список изображений разных размеров для этого сообщения.

Пример вывода:

{
    "images": [
    {
        "height": 462, 
        "source": "https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-xpf1/t1.0-9/10302057_10152199489086727_707407897349696496_n.jpg", 
        "width": 616
    }, 
    {
        "height": 320, 
        "source": "https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-xpf1/t1.0-9/p320x320/10302057_10152199489086727_707407897349696496_n.jpg", 
        "width": 426
    },.... ..
    ], 
    "created_time": "2014-07-23T18:15:16+0000", 
    "id": "10152199489086727"
}

Ответ 4

Попробуйте указать поле attachments в запросе.

/v2.0/me/home?fields=attachments

Это даст вам поле "вложения" с некоторыми носителями внутри. Вы найдете там изображения с высоким разрешением.

Ответ 5

Вы можете получить исходный URL-адрес изображения, захватив значение строковой переменной запроса url в свойстве "picture" сообщения и декодировать его:

var origImgSrc = decodeURIComponent(picture.match(/(url=)([^&]+)/)[2]);

Другим (более тщательным/более тяжелым) вариантом было бы отправить пакетный запрос в API-интерфейс Facebook, с первым запросом, получающим фид от меня/дома/, а затем второй с помощью? ids = для поиска любых возвращенных object_id (для фото/видео на Facebook).

Вы сделали бы это, отправив запрос POST на https://graph.facebook.com со следующим в теле запроса:

access_token=VALID_ACCESS_TOKEN&batch=[{%20%22method%22:%22GET%22,%22name%22:%22me_home%22,%20%22relative_url%22:%22me/home?fields=object_id,full_picture%22,%20%22omit_response_on_success%22:false},%20{%20%22method%22:%22GET%22,%20%22depends_on%22:%22me_home%22,%20%22relative_url%22:%22?ids={result=me_home:$.posts.data.*.object_id}%22}]

Затем вы можете сделать какой-нибудь причудливый разбор JS, чтобы получить либо свойство full_picture, либо одно из свойств источника из массива изображений для объекта.