Facebook图形api。从相册中获取照片

时间:2012-02-28 17:03:40

标签: facebook json api facebook-graph-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,返回了相同的大回复,或者我发现了一个错误。 任何想法如何只用必要的信息做更紧凑的响应?

12 个答案:

答案 0 :(得分:28)

实际上有一种更好的方法来实现这一点,嵌套请求

将相册作为参数传递,然后从您想要的连接照片中过滤字段,例如,此处我从相册和照片中获得了所需的一切,此结果也可能有限

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

答案 1 :(得分:10)

您只能将fields与对象存在的属性一起使用。

通过向下一个网址发出GET请求,您只会获得相册ID列表:

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

通过在FQL表上运行下一个album查询,可以实现同样的效果:

SELECT aid FROM album WHERE owner=me()

实际上albums的{​​{1}}连接并不真正包含photo个对象的列表,而是album(具有user个连接的对象)。因此,要获得用户拥有的照片,您需要遍历其所有对象并获取每张专辑的照片。您可以再次使用photos参数来限制结果数据。如果使用batch requests,则可以更快地完成此操作。

或使用FQL可以这样做(涉及两个表photoalbum):

fields

答案 2 :(得分:3)

另一种可能的解决方案是首先获取专辑ID,然后对其进行迭代以进行此API调用:

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

我在图形浏览器中对此进行了测试,并检索了一个合理的(可读的)json对象

答案 3 :(得分:2)

对于照片网址:

  1. 确保您是Facebook页面的管理员。

  2. 转到: http://developers.facebook.com/tools/explorer

  3. 在API Navigator中,您可以看到“/ me”会显示您自己的基本信息。

  4. 尝试输入“/ me / accounts”以查看是否可以看到任何内容。它应该给你一个错误。

  5. 点击“获取访问令牌”

  6. 会弹出一个窗口。导航到“扩展权限”

  7. 选择“manage_pages”

  8. 点击“获取访问令牌”

  9. 现在再次尝试“/ me / accounts”。您应该在查看窗口中看到一个组列表。

  10. 选择您想要的页面,然后单击“id”字段

  11. 接下来,在左侧窗口中,您可以看到“节点:”和+号。单击+号以查看您有哪些选项。

  12. 点击+号并向下滚动到“连接”并选择“相册”

  13. 儿童级别,选择“照片”

  14. “照片”子级别,选择“来源”

  15. 现在点击右侧的“提交”。您将看到与Facebook页面中所有照片的网址一起返回的JSON。

  16. 复制网址 - https://graph.facebook.com/?fields = albums.fields(photos.fields(source))并将其插入浏览器。您应该看到所有照片的JSON。

答案 4 :(得分:2)

每张专辑都是像facebook中的用户对象一样的对象,要获取该特定专辑中的照片,您必须要求下面的内容

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

答案 5 :(得分:1)

获取专辑列表类型:

me?fields=albums

之后的类型:

album_id/photos?fields=source

获取该特定专辑的照片

答案 6 :(得分:1)

function showMsg(id) {
      if(!id){
       return false
      }
      //doing some task
      return id;
    }
    console.log(showMsg('hi')) //with argument
    console.log(showMsg()) //without argument

它会显示包含说明的相册和该相册不同分辨率的照片。
这需要访问令牌

答案 7 :(得分:0)

为什么数据不必要?它是否会返回这样的内容:

{
   "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
      },

答案 8 :(得分: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!)
           }
        }
     })

答案 9 :(得分:0)

loginButton.setReadPermissions(“public_profile”,“email”,“user_friends”,“user_photos”);

此要求必须

答案 10 :(得分:0)

用于 Swift 5

首先获得这样的相册ID

func getAlbumsData()
{

        GraphRequest.init(graphPath: "me", parameters: ["fields":"id,name,albums{name,picture}"]).start(completionHandler: { (connection, userResult, error) in

            if error != nil {

                print("error occured \(String(describing: error?.localizedDescription))")
            }
            else if userResult != nil {
                print("Login with FB is success")
                print()



                let fbResult:[String:AnyObject] = userResult as! [String : AnyObject]

                self.albumsPhotos = (fbResult["albums"] as! [String:AnyObject])["data"] as? [[String:AnyObject]]
                self.tblFbAlbums.reloadData()




            }
        })
    }

然后使用此方法获取相册图片

func fetchalbumsPhotosWithID() {


        let graphRequest : GraphRequest  = GraphRequest(graphPath: "\(album_Id)/photos", parameters: ["fields": "source"] )

        graphRequest.start(completionHandler: { (connection, result, error) -> Void in

            if ((error) != nil)
            {
                // Process error
                print("Error: \(error)")
            }
            else
            {
                print("fetched user: \(result)")

                let data =  result as! [String:Any]


            }
        })

    }

专辑编号是您从getAlbumsData()获得的数字

答案 11 :(得分:-1)

for android
        new GraphRequest(
                facebookToken,
                String.format("/%s/photos", idAlbum),
                parameters,
                HttpMethod.GET,
                response -> {
                    try {
                        JSONArray photoArray = response.getJSONObject().getJSONArray("data");
                        photosAlbumAfterPagination = response.getJSONObject().getJSONObject("paging").getJSONObject("cursors").getString("after");
                        Gson gson = new Gson();
                        Type type = new TypeToken<List<FacebookPhotoResponse>>() {
                        }.getType();
                        List<FacebookPhotoResponse> list = gson.fromJson(photoArray.toString(), type);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
        ).executeAsync();