Фейсбук график API. Получить фотографии из альбомов - PullRequest
9 голосов
/ 28 февраля 2012

Пожалуйста, помогите мне сделать правильный запрос на 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 , вернул тот же большой ответ, или я поймалошибка.Любые идеи, как сделать более компактный ответ только с необходимой информацией?

Ответы [ 11 ]

28 голосов
/ 01 июня 2013

На самом деле есть лучший способ добиться этого, вложив запрос

Передача альбомов в качестве параметра, а затем отфильтруйте поля из фотографий подключения, которые вы хотите, например, здесь я получил только все, что янужно из альбомов и фотографий, также этот результат может быть ограничен

me?fields=albums.fields(id,name,cover_photo,photos.fields(name,picture,source))
10 голосов
/ 28 февраля 2012

Вы можете использовать fields только со свойствами, существующими для объектов.

Отправив запрос GET на следующий URL, вы получите список только идентификаторов альбомов:

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

То жеможно выполнить, выполнив следующий FQL запрос к album таблице:

SELECT aid FROM album WHERE owner=me()

На самом деле albums соединение user на самом деле несодержит список photo объектов, но album (которые имеют photos соединение).Таким образом, чтобы получить фотографии, принадлежащие пользователю, вам нужно будет перебирать все его объекты и получать фотографии для каждого альбома.Опять же, вы можете использовать fields аргумент для ограничения результирующих данных.Это можно сделать быстрее, если использовать пакетных запросов .

или с FQL, это можно сделать так (две таблицы photo и album участвуют):

SELECT pid FROM photo WHERE aid IN (SELECT aid FROM album WHERE owner=me())
3 голосов
/ 18 января 2013

Другое возможное решение - сначала получить идентификаторы альбомов, а затем выполнить итерацию по ним с помощью этого вызова API:

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

Я протестировал это в графическом обозревателе, и он получил приемлемый (и читаемый) объект json

2 голосов
/ 10 января 2014

Каждый альбом является таким же объектом, как пользовательский объект в Facebook, чтобы получить фотографии в этом конкретном альбоме, вы должны запросить что-то вроде ниже

http://graph.facebook.com/{ALBUM_ID}?fields=photos&access_token="xxxxx"
2 голосов
/ 13 августа 2013

Для URL-адресов фотографий:

  1. Убедитесь, что вы являетесь администратором страницы Facebook.

  2. перейти к: http://developers.facebook.com/tools/explorer

  3. В API Navigator вы можете увидеть, что "/ me" выведет основную информацию о себе.

  4. Попробуйте ввести «/ me / accounts», чтобы увидеть, можете ли вы что-либо увидеть. Это должно дать вам ошибку.

  5. Нажмите «Получить токен»

  6. появится всплывающее окно. Перейдите к «Расширенные разрешения»

  7. Выберите "manage_pages"

  8. Нажмите «Получить токен доступа»

  9. Теперь попробуйте снова "/ me / account". Вы должны увидеть список групп внутри окна просмотра.

  10. Выберите страницу, которую вы хотите, и нажмите на поле «id»

  11. Далее в левом окне вы можете увидеть «Node:» и знак +. Нажмите на знак +, чтобы увидеть, какие варианты у вас есть.

  12. Нажмите на знак + и прокрутите вниз до «Соединения» и выберите «Альбомы»

  13. На уровне ребенка выберите «Фотографии»

  14. На дочернем уровне «Фото» выберите «источник»

  15. Теперь нажмите «Отправить» с правой стороны. Вы увидите возвращенный файл JSON с URL-адресами всех фотографий на странице Facebook.

  16. Скопируйте URL - https://graph.facebook.com/?fields=albums.fields(photos.fields(source)) и вставьте его в браузер. Вы должны увидеть JSON всех ваших фотографий.

1 голос
/ 26 мая 2017
request('GET', '/me/albums?fields=id,name,cover_photo,photos{images{source}},description')

покажет альбомы с описанием и фотографиями с другим разрешением этого альбома.
Для этого потребуется маркер доступа

1 голос
/ 13 февраля 2017

, чтобы получить список альбомов, наберите:

me?fields=albums

после этого:

album_id/photos?fields=source

, чтобы получить фотографии этогоконкретный альбом

0 голосов
/ 04 июля 2019

для Swift 5

сначала получить альбом с таким идентификатором

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]


            }
        })

    }

album_Id - это число, которое вы получаете от getAlbumsData ()

0 голосов
/ 11 апреля 2017

loginButton.setReadPermissions ("public_profile", "email", "user_friends", "user_photos");

это разрешение требуется

0 голосов
/ 13 февраля 2017

GETTING 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, а затем с этим идентификатором мы можем получить изображение, подобное этому: GETTING IMAGES FROM 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!)
           }
        }
     })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...