Легкий доступ к фотографии профиля Facebook через Graph API

Я использую Facebook Graph API.

Я хочу загрузить полноразмерное изображение всех фотографий профиля моих пользователей в Facebook.

https://graph.facebook.com/<user alias>/picture дает вам доступ к маленькому эскизу текущего изображения профиля пользователя.

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

# Get albums
albums = fetch_json('https://graph.facebook.com/<user alias>/albums')

# Get profile pictures album
profile_picture_album = albums['data']['Profile Pictures'] # Get profile picture album

# Get the pictures from that album
profile_pictures = fetch_json('https://graph.facebook.com/<profile_picture_album_id>/photos')

# Get the most recent (and therefore current) profile picture
current_profile_picture = profile_pictures['data'][0]
image = fetch_image_data(current_profile_picture['source'])

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

Похоже, должен быть более быстрый / простой способ получить доступ к текущему изображению профиля пользователя. Кто-нибудь знает об одном?

(К вашему сведению: я использую Python для этого, но я полагаю, что ответ будет независимым от языка)


person Chris W.    schedule 28.06.2011    source источник


Ответы (2)


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

1.

Вы можете указать аргумент типа large, когда получите фотографию (хотя вы получаете только до 200 пикселей):

http://graph.facebook.com/UID/picture?type=large

2.

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

https://graph.facebook.com/UID/albums?access_token=TOKEN

Что вернет что-то вроде:

{
         "id": "123456781234",
         "from": {
            "name": "FirstName Surname",
            "id": "123456789"
         },
         "name": "Profile Pictures",
         "link": "http://www.facebook.com/album.php?aid=123456&id=123456789",
         "cover_photo": "12345678912345123",
         "privacy": "friends",
         "count": 12,
         "type": "profile",
         "created_time": "2000-01-23T23:38:14+0000",
         "updated_time": "2011-06-15T21:45:14+0000"
      },

Затем вы можете получить доступ:

https://graph.facebook.com/12345678912345123?access_token=TOKEN

И выберите размер изображения:

{
   "id": "12345678912345123",
   "from": {
      "name": "FirstName Surname",
      "id": "123456789"
   },
   "name": "A Caption",
   "picture": "PICTUREURL",
   "source": "PICTURE_SRC_URL",
   "height": 480,
   "width": 720,
   "images": [
      {
         "height": 608,
         "width": 912,
         "source": "PICTUREURL"
      },
      {
         "height": 480,
         "width": 720,
         "source": "PICTUREURL"
      },
      {
         "height": 120,
         "width": 180,
         "source": "PICTUREURL"
      },
      {
         "height": 86,
         "width": 130,
         "source": "PICTUREURL"
      },
      {
         "height": 50,
         "width": 75,
         "source": "PICTUREURL"
      }
   ],
   "link": "FACEBOOK_LINK_URL",
   "icon": "FACEBOOK_ICON_URL",
   "created_time": "2000-01-15T08:42:42+0000",
   "position": 1,
   "updated_time": "2011-06-15T21:44:47+0000"
}

И выберите свой PICTUREURL по своему усмотрению.

3.

Предоставлено этого блога :

//get the current user id
FB.api('/me', function (response) {

  // the FQL query: Get the link of the image, that is the first in the album "Profile pictures" of this user.
  var query = FB.Data.query('select src_big from photo where pid in (select cover_pid from album where owner={0} and name="Profile Pictures")', response.id);
  query.wait(function (rows) {

    //the image link
    image = rows[0].src_big;
  });
});

Что я не беру в расчет при цитировании, но я придумал в основном тот же запрос FQL, играя с тестовым образцом. Этот парень просто опередил меня, когда я погуглил FB.Data.query. Я полагаю, вам придется отредактировать это на python, если вы хотите его на python, я мог бы покопаться.

person BeRecursive    schedule 28.06.2011
comment
Отлично! Один 200 пикселей может быть достаточно для моих целей, но в противном случае я попробую запрос FQL (я разберусь с питоном, не беспокойтесь.) Спасибо! - person Chris W.; 29.06.2011
comment
К вашему сведению, в итоге я использовал решение 200px type=large, но спасибо за очень подробный ответ! - person Chris W.; 26.07.2011

Это показывает исходную полноразмерную версию изображения профиля:

https://graph.facebook.com/someuser/picture?width=9999&height=9999

person Lri    schedule 25.02.2013