2012-02-28 149 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

相关问题