2012-11-05 23 views
0

我正在開發一個顯示用戶/朋友照片的應用程序。在大多數情況下,我可以從相冊中拉的照片,但是對於用戶/專輯封面照片,全部被賦予爲對象ID其下述網址提供的圖像:解決FB GraphAPI圖片調用到最終的URL

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

我的問題是,是否有一個Python化或GraphAPI方法來解決最終圖像路徑中避免發送訪問令牌給最終用戶?

+0

我想知道,是否真的需要限制最終用戶看到他們自己的access_token?我覺得如果只有服務器端可能,我應該這樣做。 – DanH

回答

2

facebook圖表api網址會將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' 

容易找到它或調用圖形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的情況下運行。
1

做這樣的圖形API調用,你會得到真正的網址:

https://graph.facebook.com/[fbid]?fields=picture

順便說一句,你這不需要訪問令牌。

+0

這不僅僅是用戶cover_photo,還有專輯cover_photo。例如,這裏是我創建的專輯,只能用access_token解決:https://graph.facebook.com/10152205730015184/picture – DanH

+1

啊,好吧。是的,在這種情況下,你需要一個訪問令牌,當然... – luschn

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 

希望它有助於