web-dev-qa-db-ja.com

FacebookグラフAPI。アルバムから写真を取得する

FacebookAPIに正しいリクエストをするのを手伝ってください。今私は持っています:

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 、同じ大きな応答を返したか、エラーをキャッチしました。必要な情報だけでよりコンパクトな応答を行う方法はありますか?

10
Ivan Kozlov

fieldsは、オブジェクトに存在するプロパティでのみ使用できます。

次のURLにGETリクエストを発行すると、アルバムIDのリストのみが取得されます。

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

次の FQL クエリを album テーブルで実行しても同じことができます。

SELECT aid FROM album WHERE owner=me()

実際、albumsuser接続には、実際には photo オブジェクトのリストは含まれていませんが、 albumphotos接続があります)。したがって、ユーザーが所有する写真を取得するには、ユーザーのすべてのオブジェクトを繰り返し処理し、すべてのアルバムの写真を取得する必要があります。ここでも、fields引数を使用して、結果のデータを制限できます。 バッチリクエスト を使用すると、これをより高速に実行できます。

または FQL の場合、次のように実行できます(2つのテーブル photo および album =関与):

SELECT pid FROM photo WHERE aid IN (SELECT aid FROM album WHERE owner=me())
10
Juicy Scripter

実際には、これを達成するためのより良い方法があり、リクエストをネストします

アルバムをパラメーターとして渡し、必要な接続写真からフィールドをフィルター処理します。たとえば、ここでは、アルバムと写真から必要なものをすべて取得しました。この結果も制限される可能性があります。

me?fields=albums.fields(id,name,cover_photo,photos.fields(name,picture,source))
29
Sergio López

別の可能な解決策は、最初にアルバムIDを取得してから、次のAPI呼び出しを行ってそれらを反復処理することです。

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

グラフエクスプローラーでこれをテストしたところ、妥当な(そして読み取り可能な)jsonオブジェクトが取得されました

3
user743489

写真のURLの場合:

  1. Facebookページの管理者であることを確認してください。

  2. 移動: http://developers.facebook.com/tools/Explorer

  3. APIナビゲーターで、「/ me」があなた自身の基本情報を表示するのを見ることができます。

  4. 「/ me/accounts」と入力して、何かが表示されるかどうかを確認してください。エラーが発生するはずです。

  5. 「アクセストークンを取得」をクリックします

  6. ウィンドウがポップアップします。 「拡張アクセス許可」に移動します

  7. 「manage_pages」を選択します

  8. 「アクセストークンを取得」をクリックします

  9. ここで、「/ me/accounts」を再試行してください。表示ウィンドウ内にグループのリストが表示されます。

  10. 目的のページを選択し、「id」フィールドをクリックします

  11. 次に、左側のウィンドウに「ノード:」と+記号が表示されます。 +記号をクリックして、使用できるオプションを確認してください。

  12. +記号をクリックし、[接続]まで下にスクロールして、[アルバム]を選択します

  13. お子様レベルの場合は、[写真]を選択します

  14. 「写真」の子レベル、「ソース」を選択

  15. 次に、右側の[送信]をクリックします。 Facebookページのすべての写真のURLとともに返されるJSONが表示されます。

  16. URLをコピーします- https://graph.facebook.com/ ?fields = albums.fields(photos.fields(source))そしてそれをブラウザに接続します。すべての写真のJSONが表示されます。

2
Max

各アルバムはFacebookのユーザーオブジェクトのようなオブジェクトです。その特定のアルバムの写真を取得するには、以下のようなものをリクエストする必要があります

http://graph.facebook.com/{ALBUM_ID}?fields=photos&access_token="xxxxx"
2
pashaplus
request('GET', '/me/albums?fields=id,name,cover_photo,photos{images{source}},description')

説明付きのアルバムと、そのアルバムの解像度が異なる写真が表示されます。
これにはアクセストークンが必要です

1
Savan Kaneriya

アルバムリストタイプを取得するには:

me?fields=albums

そのタイプの後:

album_id/photos?fields=source

その特定のアルバムの写真を取得するには

1
Arafin Russell

なぜデータが不要なのですか?次のようなものが返されましたか?

{
   "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
user1031721

for 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]


            }
        })

    }

album_Idは、getAlbumsData()から取得した数値です

0
balkaran singh

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で次のような画像を取得できます: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!)
           }
        }
     })
0
Rohan Dave

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

この許可が必要です

0