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 、同じ大きな応答を返したか、エラーをキャッチしました。必要な情報だけでよりコンパクトな応答を行う方法はありますか?
fields
は、オブジェクトに存在するプロパティでのみ使用できます。
次のURLにGETリクエストを発行すると、アルバムIDのリストのみが取得されます。
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
の場合、次のように実行できます(2つのテーブル photo
および album
=関与):
SELECT pid FROM photo WHERE aid IN (SELECT aid FROM album WHERE owner=me())
実際には、これを達成するためのより良い方法があり、リクエストをネストします
アルバムをパラメーターとして渡し、必要な接続写真からフィールドをフィルター処理します。たとえば、ここでは、アルバムと写真から必要なものをすべて取得しました。この結果も制限される可能性があります。
me?fields=albums.fields(id,name,cover_photo,photos.fields(name,picture,source))
別の可能な解決策は、最初にアルバムIDを取得してから、次のAPI呼び出しを行ってそれらを反復処理することです。
<ALBUM-ID>/photos?fields=name,source,id
グラフエクスプローラーでこれをテストしたところ、妥当な(そして読み取り可能な)jsonオブジェクトが取得されました
写真のURLの場合:
Facebookページの管理者であることを確認してください。
APIナビゲーターで、「/ me」があなた自身の基本情報を表示するのを見ることができます。
「/ me/accounts」と入力して、何かが表示されるかどうかを確認してください。エラーが発生するはずです。
「アクセストークンを取得」をクリックします
ウィンドウがポップアップします。 「拡張アクセス許可」に移動します
「manage_pages」を選択します
「アクセストークンを取得」をクリックします
ここで、「/ me/accounts」を再試行してください。表示ウィンドウ内にグループのリストが表示されます。
目的のページを選択し、「id」フィールドをクリックします
次に、左側のウィンドウに「ノード:」と+記号が表示されます。 +記号をクリックして、使用できるオプションを確認してください。
+記号をクリックし、[接続]まで下にスクロールして、[アルバム]を選択します
お子様レベルの場合は、[写真]を選択します
「写真」の子レベル、「ソース」を選択
次に、右側の[送信]をクリックします。 Facebookページのすべての写真のURLとともに返されるJSONが表示されます。
URLをコピーします- https://graph.facebook.com/ ?fields = albums.fields(photos.fields(source))そしてそれをブラウザに接続します。すべての写真のJSONが表示されます。
各アルバムはFacebookのユーザーオブジェクトのようなオブジェクトです。その特定のアルバムの写真を取得するには、以下のようなものをリクエストする必要があります
http://graph.facebook.com/{ALBUM_ID}?fields=photos&access_token="xxxxx"
request('GET', '/me/albums?fields=id,name,cover_photo,photos{images{source}},description')
説明付きのアルバムと、そのアルバムの解像度が異なる写真が表示されます。
これにはアクセストークンが必要です
アルバムリストタイプを取得するには:
me?fields=albums
そのタイプの後:
album_id/photos?fields=source
その特定のアルバムの写真を取得するには
なぜデータが不要なのですか?次のようなものが返されましたか?
{
"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
},
?
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()から取得した数値です
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!)
}
}
})
loginButton.setReadPermissions( "public_profile"、 "email"、 "user_friends"、 "user_photos");
この許可が必要です