2011-05-16 151 views
12

我正在寫一個應用程序,上傳照片到Facebook。我沒有提供相冊ID,因此我的應用程序會創建相冊。Facebook圖形API - 獲取照片相冊ID

我的問題是:如何獲取照片上傳到的相冊ID?

當我GET的照片信息專輯不存在於JSON這是我的希望。

回答

4

這個問題一直在困擾我一段時間,但我想我已經破解了這個螺母。

專輯ID是隱藏在鏈接的價值,所以如果你有從圖形API光後的對象,就可以取回相冊ID是這樣的:

NSString *link = [item valueForKey:@"link"]; 
NSString *album_id = nil; 
NSRange fRange = [link rangeOfString:@"set=a."]; 
if(fRange.location != NSNotFound) {   
    NSInteger firstPos = fRange.location + 6; 
    NSInteger endPos = [link rangeOfString:@"." options:NSLiteralSearch range:NSMakeRange(firstPos, 25)].location; 
    album_id = [[link substringWithRange:NSMakeRange(firstPos, endPos - firstPos)] copy]; 
} 

它很可能都被剝奪一行代碼,但我認爲這更具可讀性。 爲了得到這張專輯信息的使用:

[facebook requestWithGraphPath:album_id andDelegate:delegate]; 

爲了讓所有的相冊內的照片使用:

[facebook requestWithGraphPath:[NSString stringWithFormat:@"%@/photos", album_id] andDelegate:delegate]; 

希望這可以幫助別人。

+0

這種解決方案看起來很脆弱,但我不知道替代方案。這張照片本身沒有與其專輯的關聯真是太可惜了。 – 2011-10-12 22:32:01

+3

現在這張專輯是一個您可以從照片對象訪問的字段 - 即?fields = album - 使用https://developers.facebook.com/tools/explorer上的Graph API Explorer獲取更多可添加的字段。 – 2013-07-28 11:23:32

+0

這是什麼Facebook? – 2016-04-26 06:38:50

3

如果我正確理解你,你有照片ID但需要相冊ID。你可以嘗試使用the photo FQL table用下面的查詢:

SELECT aid, pid FROM photo WHERE pid = '<your photo id>' 
+1

我想上面的代碼,不幸的是,響應是一個空數組... – joseym 2011-05-16 21:03:38

+0

你上傳你的照片用戶的「Wall Photos」相冊?如果是這樣,我不確定它是否屬於您可以查詢的任何專輯;這有點奇怪。另外,你有'user_photos'權限嗎? – 2011-05-16 21:07:48

+0

不,照片上傳到由應用程序創建的相冊中。是的,設置了user_photos權限。 – joseym 2011-05-16 21:11:14

2

長,笨重,但理論上有效的方法: http://graph.facebook.com/userid/albums將讓你的所有用戶,您可以看到,那麼你就可以搜索專輯對象專輯列表(api herefor created_times與您創建相冊的時間相匹配,您可以在創建相冊時存儲該相冊。

這幾乎肯定是一個可怕的方式來做到這一點,但它應該工作。

+0

是的,不完全是優雅的,但我沒有多少像找到一個更好的解決方案...我會繼續看,如果我繼續空虛我會給這個鏡頭。 – joseym 2011-05-16 19:53:59

1

由於專輯ID與服務器響應中映像的鏈接傳遞,我最終只使用了舊版REST api。然後我用一個正則表達式將id拉出來。

不是最好的解決方案,我不會推薦它,但我覺得比向代碼添加另外幾個服務器請求更好。

+0

你能詳細說明你是如何做到這一點的,以及用什麼方法?我正在查看graph.facebook.com對照片ID的請求的回覆,並且我沒有看到任何網址中的任何相冊ID。 – slacy 2011-08-17 18:58:56

+0

是的,這就是我不得不放棄使用Graph並使用REST – joseym 2011-08-23 01:00:45

9

吉米Sawczuk的答案是接近,但不工作,因爲FQL照片表列aidpid是REST/FQL API IDS,沒有圖形API的ID。

好在此表中的object_idalbum_object_id列是可轉位(contrary to the documentation),所以這應該給你的專輯都休息/ FQL &圖形標識:

select aid, album_object_id from photo where object_id = ${GRAPH_PHOTO_ID} 

在REST/FQL API一般object_id領域響應是Graph API id(照片通知除外,它是Rest/FQL ID)。

重新HonkyHonk的回答是:不是所有的照片link網址有set參數;在這種情況下,我認爲你可以找到它的其他參數的REST/FQL API帶照片的身份證,然後使用REST/FQL API來獲取相冊ID:

這將有很大的幫助如果Facebook可以記錄一些關於兩種類型的ID。此外,圖形API照片模式應該包含相冊的圖形API ID。

+0

link的'set'參數(如果存在)包含Graph API相冊ID。 – 2011-10-26 05:10:12

+0

我也見過一些link鏈接,其中'set'的形式爲'。$ {ALBUMID}。$ {REST}'。哇,這很複雜。 – 2011-10-26 05:50:14

2

理查德·巴尼特的解決方案很適合我,我以此爲FQL查詢通過圖形API來獲取一個JSON響應就像我會爲任何其他圖形API查詢:

https://graph.facebook.com/fql?q=select+album_object_id+FROM+photo+WHERE+object_id='[PHOTOID]' 

這將返回:

{ 
    "data": [ 
     { 
     "album_object_id": "10150531092908837" 
     } 
    ] 
} 

然後,您可以使用訪問相冊ID:

<?php 

$strPhotoAlbumID = $objFacebookAPI->data[0]->album_object_id; 

?> 

這是最乾淨的溶膠我發現在Facebook上不斷更改照片和相冊網址的格式,因此使用RegEx解析這些內容不會起到長期修復的作用。

+0

這對我有用。謝謝@Seth – 2013-02-25 04:28:00

0
function get_album_id_by_album_name($album_name){//return array of data 
    $fql = 'SELECT aid, owner, name, object_id FROM album WHERE owner=me() and name="'.$album_name.'"'; 
    $param = array(
     'method' => 'fql.query', 
     'query'  => $fql, 
     'callback' => '' 
    ); 
    $fqlResult = $this->facebook->api($param); 
    return $fqlResult; 
} 
0
String albumID = "https://www.facebook.com/photo.php?fbid=192570127478130&set=a.135556629846147.24342.100001754323389&type=1"; 
albumID = albumID.split("&set=a.")[1]; 
albumID = albumID.split("\\.")[0]; 
System.out.println(albumID); 
6

這是最簡單的方式獲得它:

+1

這對我不起作用。 FB給我「無效的相冊ID」 – 2012-12-11 17:28:19

相關問題