2012-02-28 112 views
9

請幫助我向Facebook api發出正確的請求。現在我得到了:Facebook圖形API。從相冊獲取照片

https://graph.facebook.com/me/albums?fields=photos 

因此,我得到了非常大的Json與很多不必要的信息。我試圖做這樣的事情:

https://graph.facebook.com/me/albums?fields=photos?fields=source,name,id 

或像這樣:

https://graph.facebook.com/me/albums?fields=photos&fields=source,name,id 

graph api explorer,返回相同大的反應,或我抓住了一個錯誤。 任何想法如何做到更緊湊的響應只有必要的信息?

+0

什麼是你正試圖獲取?專輯封面照片? – 2014-01-13 16:36:42

回答

10

您只能使用fields以及對象存在的屬性。

通過發出GET請求到下一個URL,你會得到的專輯列表只IDS:

https://graph.facebook.com/me/albums?fields=id&access_token=... 

同樣可以通過album表運行下一FQL查詢來實現:

SELECT aid FROM album WHERE owner=me() 

其實albumsuser的連接並不包含photo對象的列表,但是album(其中有photos連接)。因此,要獲取用戶擁有的照片,您需要遍歷所有對象並獲取每張專輯的照片。您可以再次使用參數fields來限制結果數據。如果使用batch requests,這可以更快地完成。

SELECT pid FROM photo WHERE aid IN (SELECT aid FROM album WHERE owner=me()) 
+0

所以,好的批量請求是個好主意。 – 2012-02-28 21:14:52

+0

不幸的是,FQL現在已經出門了...... – 2016-08-06 21:15:48

0

爲什麼數據不必要的:

FQL它可能是這樣的(兩個表photoalbum參與)來完成?它是否返回這樣的東西:

{ 
    "data": [ 
     { 
     "id": "ID", 
     "from": { 
      "name": "Hadrian de Oliveira", 
      "id": "100000238267321" 
     }, 
     "name": "Cover Photos", 
     "link": "https://www.facebook.com/album.php?fbid=FBID&id=ID&aid=AID", 
     "cover_photo": "ID", 
     "privacy": "everyone", 
     "count": 2, 
     "type": "normal", 
     "created_time": "2011-10-06T01:31:24+0000", 
     "updated_time": "2012-02-22T17:29:50+0000", 
     "can_upload": false 
     }, 

+0

可能是的。我不需要所有這些字段,我只需要照片鏈接。 – 2012-02-28 21:12:06

+0

你是怎麼想出這個結果的@JohnKozlov – 2013-02-21 09:06:35

3

另一種可能的解決方案是第一獲取相冊ID,然後在它們之間迭代使此API調用:

<ALBUM-ID>/photos?fields=name,source,id 

我在圖形資源管理器測試這一點,它檢索一個合理的(和可讀的)JSON對象

27

其實有一個更好的方法來實現這一點,嵌套的請求

傳遞相冊作爲參數,然後過濾從你想要的連接照片字段,例如在這裏我得到了我需要從專輯和pho TOS,也是這個結果可以限定在

me?fields=albums.fields(id,name,cover_photo,photos.fields(name,picture,source)) 
+0

榮譽 - 這個人就像一個魅力! – foxybagga 2013-07-22 08:55:32

+0

太棒了! – 2016-02-29 16:26:29

+0

這真的很棒..我正在尋找這個! – 2016-05-30 14:15:59

2

對於照片的URL:

  1. 確保您的Facebook主頁的管理員。

  2. 去: http://developers.facebook.com/tools/explorer

  3. 在API瀏覽器中,可以看到「/我」帶來了自己的基本信息。

  4. 請嘗試輸入「/ me/accounts」以查看是否可以看到任何內容。它應該給你一個錯誤。

  5. 點擊「獲取訪問令牌」

  6. 一個窗口會彈出。導航到 「擴展權限」

  7. 選擇 「manage_pages」

  8. 點擊 「獲取訪問令牌」

  9. 現在嘗試 「/我/賬戶」 一次。您應該在查看窗口中看到一個組列表。

  10. 選擇您想要的頁面,然後點擊「id」字段

  11. 接下來,左邊的窗口上,可以看到「節點:」和一個+號。點擊+號,看看你有什麼選擇。

  12. 點擊+號,向下滾動到「連接」,選擇「相冊」

  13. 子級,請選擇「照片」

  14. 「照片」子級別,選擇「來源」

  15. 現在點擊右側的「提交」。你會看到一個JSON返回的Facebook頁面中的所有照片的網址。

  16. 複製網址 - https://graph.facebook.com/?fields = albums.fields(photos.fields(source))並將其插入瀏覽器。你應該看到所有照片的JSON。

1

每張專輯就像是Facebook的用戶對象中的對象,讓照片在那個特定的專輯,你有權要求像下面

http://graph.facebook.com/{ALBUM_ID}?fields=photos&access_token="xxxxx" 
0

拿到專輯列表類型的一些事情:

me?fields=albums

該類型後

album_id/photos?fields=source

來獲取特定專輯

0

抵達ALBUM_ID

if((FBSDKAccessToken.current()) != nil) 
    { 
     FBSDKGraphRequest(graphPath: "me/albums", parameters: ["fields" : "id"], httpMethod: "GET").start(completionHandler: { (connection, result, error) -> Void in 
      if (error == nil) 
      { 
       let data:[String:AnyObject] = result as! [String : AnyObject] 
       self.arrdata = data["data"]?.value(forKey: "id") as! [String ] 
      } 
     }) 
    } 

與上面的代碼,你會得到album_Id,然後使用該ID我們可以得到像這樣的照片: 將圖像從ALBUM_ID

FBSDKGraphRequest(graphPath: "\(album_Id)/photos", parameters: ["fields": "source"], httpMethod: "GET").start(completionHandler: { (connection, result1, error) -> Void in 
     if (error == nil) 
     { 
      let data1:[String:AnyObject] = result1 as! [String : AnyObject] 
      let arrdata:[String] = data1["data"]?.value(forKey: "source") as! [String ] 
      for item in arrdata 
      { 
       let url = NSURL(string: item) 
       let imageData = NSData(contentsOf: url! as URL) 
       let image = UIImage(data: imageData! as Data) 
       self.imgArr.append(image!) 
      } 
     } 
    }) 
0

loginButton.setReadPermissions( 「public_profile」, 「電子郵件」, 「user_friends」, 「user_photos」);

這permistion需要

1
request('GET', '/me/albums?fields=id,name,cover_photo,photos{images{source}},description') 

,它會顯示與描述相冊和照片不同分辨率的專輯。
這將需要訪問令牌

+0

謝謝你的作品,但我有一個問題;我只能擁有特定分辨率的圖像嗎?例如,我想僅查詢專輯中每張照片的600x600圖片。 – bigFanJS 2017-10-30 21:30:00

相關問題