Skip to main content
 首页 » 编程设计

python之"Easy"通过Graph API访问Facebook头像

2025年05月04日13jyk

我正在使用 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 来执行此操作,但我想答案将与语言无关)

请您参考如下方法:

我不认为你可以一步完成,但你有几个选择:

1.

您可以在获取照片时指定 large 类型参数(尽管您最多只能获取 200px):

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.

由 this blog 提供:

//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 中使用它,那么我可以四处挖掘。