将FB Graph API图片调用解析为最终URL

时间:2012-11-05 09:02:13

标签: python django facebook-graph-api

我正在开发一个显示用户/朋友照片的应用程序。在大多数情况下,我可以从相册中提取照片,但是对于用户/专辑封面照片,所有给出的是以下URL提供图像的对象ID:

https://graph.facebook.com/1015146931380136/picture?access_token=ABCDEFG&type=picture

当查看时,将用户重定向到图像文件本身,例如:

https://fbcdn-photos-a.akamaihd.net/hphotos-ak-ash4/420455_1015146931380136_78924167_s.jpg

我的问题是,是否有Pythonic或GraphAPI方法来解析最终图像路径,以避免将访问令牌发送给最终用户?

3 个答案:

答案 0 :(得分:2)

获取封面照片的实际图片网址,首先你可以通过facebook api调用获取封面图片然后提取url字段,PHP我做的事情如下:

$cover = $facebook->api("$album_id?fields=picture&access_token=ABVHDG");
$cover_url = $cover['picture']['data']['url']; //this $cover_url is image file itself from host fbcdn-photos-a.akamaihd.net

希望有所帮助

答案 1 :(得分:2)

facebook图表api urls执行302重定向到实际拥有用户头像的CDN网址。 您可以使用urllib2

轻松找到它
>>> import urllib2
>>> url = "http://graph.facebook.com/4/picture"
>>> req = urllib2.Request(url)
>>> res = urllib2.urlopen(req)
>>> finalUrl = res.geturl()
>>> finalUrl
'http://profile.ak.fbcdn.net/hprofile-ak-prn1/157340_4_3955636_q.jpg'

或者调用Graph api的JSON版本获取图片:

http://graph.facebook.com/4/?fields=picture&type=large

对其进行解码,然后获取url

{
   "id": "4",
   "picture": {
      "data": {
         "url": "http://profile.ak.fbcdn.net/hprofile-ak-prn1/157340_4_3955636_q.jpg",
         "is_silhouette": false
      }
   }
}

提示:

  1. 不要使用http可以工作的https,它适用于avatar api。 http更快。
  2. 您不需要access_token来查询图片的图片api,它也可以在没有access_token的情况下工作。

答案 2 :(得分:1)

像这样进行图谱API调用,你会得到真正的网址:

  

https://graph.facebook.com/ [FBID]字段=图片

是的,你不需要一个访问令牌。