Reputation: 561
Please help me to make a correct request to Facebook api. Now i've got:
https://graph.facebook.com/me/albums?fields=photos
As the result I get very big Json with a lot of unnecessary info. I tried to do something like this:
https://graph.facebook.com/me/albums?fields=photos?fields=source,name,id
or like this:
https://graph.facebook.com/me/albums?fields=photos&fields=source,name,id
But graph api explorer, returned the same big response, or i caught an error. Any ideas how to do more compact response with only necessary info?
Upvotes: 11
Views: 40315
Reputation: 93
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();
Upvotes: -1
Reputation: 2786
for Swift 5
first get albums id like this
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()
}
})
}
then get albums image with this method
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 is a number you get from getAlbumsData()
Upvotes: 1
Reputation: 79
request('GET', '/me/albums?fields=id,name,cover_photo,photos{images{source}},description')
it will show the albums with description and photos with different resolution of that album.
This will need access token
Upvotes: 1
Reputation: 1
loginButton.setReadPermissions("public_profile", "email","user_friends","user_photos");
this permistion required
Upvotes: 0
Reputation: 261
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 ]
}
})
}
with above code you will get album_Id and then with that id we can get image like this : 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!)
}
}
})
Upvotes: 1
Reputation: 1557
to get the album list type :
me?fields=albums
after that type :
album_id/photos?fields=source
to get the photos of that particular album
Upvotes: 1
Reputation: 3706
Each album is a object like user object in facebook, to get photos in that particular album you have to request some thing like below
http://graph.facebook.com/{ALBUM_ID}?fields=photos&access_token="xxxxx"
Upvotes: 2
Reputation: 1001
For photo urls:
Ensure that you are an Admin of the Facebook Page.
In the API Navigator, you can see "/me" will bring up the basic information of yourself.
Try typing in "/me/accounts" to see if you can see anything. It should give you an error.
Click on "Get Access Token"
a window will pop-up. Navigate to "Extended Permissions"
Select "manage_pages"
Click "Get Access Token"
Now try "/me/accounts" again. You should see a list of Groups inside the viewing window.
Select the Page you want, and click on the "id" field
Next, on the left window, you can see "Node: " and a + sign. Click on the + sign to see what are the options you have.
Click on the + sign and scroll down to "connections" and select "Albums"
The child-level, select "Photos"
The "Photos" child-level, select "source"
Now click "Submit" on the right hand side. You will see a JSON returned with the url of all the photos in your Facebook Page.
Copy the URL - https://graph.facebook.com/?fields=albums.fields(photos.fields(source)) and plug it into your browser. You should see a JSON of all your photos.
Upvotes: 2
Reputation: 973
Actually there is a better way to achieve this, nesting the request
Passing albums as a parameter, and then filter the fields from the connection photos that you want to, for example here I got just everything I need from albums and photos, also this results can be limited
me?fields=albums.fields(id,name,cover_photo,photos.fields(name,picture,source))
Upvotes: 29
Reputation:
Another possible solution is getting album ids first and then iterate over them making this API call:
<ALBUM-ID>/photos?fields=name,source,id
I tested this in graph explorer and it retrieved a reasonable (and readable) json object
Upvotes: 3
Reputation:
Why is the data unnecessary? Did it return something like this:
{
"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
},
?
Upvotes: 0
Reputation: 25918
You may only use fields
with properties that exists for objects.
By issuing GET request to next URL you'll get list of albums ids only:
https://graph.facebook.com/me/albums?fields=id&access_token=...
Same can be achieved by running next FQL
query on album
table:
SELECT aid FROM album WHERE owner=me()
Actually albums
connection of user
doesn't really contain list of photo
objects but album
(which have photos
connection). So to get photos owned by user you'll need iterate over all of his object and getting photos for every album. Again you may use fields
argument to limit resulting data. This can be done faster if using batch requests.
Or With FQL
it may be done like this (two tables photo
and album
involved):
SELECT pid FROM photo WHERE aid IN (SELECT aid FROM album WHERE owner=me())
Upvotes: 10