9
votes

I'm doing a Facebook Graph API call for "me/home" to get the user's news feed. As everyone knows, the URL you get in the "picture" field is a low resolution photo that doesn't look good at anything above 100x100. I know you can get the URL to the high resolution picture by doing another graph call for the "object_id" and using the "source" field in that result.

But I was looking at the URLs and thought there might be a way to transform one into the other without having to make another graph call. Either that, or construct the high resolution one from existing data in other fields. For example, the first URL is the low resolution one, and the second URL is the source resolution.

http://photos-d.ak.fbcdn.net/hphotos-ak-ash4/297313_10152643117455790_610095553_s.jpg
http://sphotos-b.xx.fbcdn.net/hphotos-ash4/297313_10152643117455790_610095553_n.jpg

It looks like the numbers are (something I don't know)_("object_id")_(something else I don't know)

Has anyone had experience with trying to change out the URLs while still keeping the numerical section in the middle? Are there typically variations that could cause regex problems?

EDIT: Here is the code I'm using.

String objectId = null;
if (jsonObject.has("object_id")) {
    objectId = jsonObject.getString("object_id");
}
String postPhoto = "http://graph.facebook.com/" + objectId + "/picture";

The check for if the post is a photo is a little earlier in the code, so it'll always run these lines for a post type of "photo".

7

7 Answers

9
votes

me/home - graph api has some a field called "object_id" and "type". If the type is "photo" then you will have this object_id value. By Using this object id and make another graph api call then you will get an objecty called "images". This object has several options ( different sizes ).

OR

Use object id like below and get a album sized version of a photo. and the supported types for this call are "thumbnail, normal, album".

https://graph.facebook.com/{object-id-from-feed}/picture?type=normal 

and also checkout this link under Examples of Supported Objects section.

5
votes

All you need to do is (Graph API):

http://graph.facebook.com/me?fields=picture.height(961) 
// all any height which u want

or (for other user)

http://graph.facebook.com/{user_id}?fields=picture.height(961) 
// replace {user_id} with the user id you want

UPDATE :

Since Facebook API will keep updating, This solution may be deprecated. This workaround solution might not work in future.

You may also need Access Token to execute this endpoint.

1
votes

Its a late response but but I have found a better approach

If you have got a address by using graph api like this

https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-xaf1/t1.0-9/s130x130/10501892_701590943222768_782659935906208443_n.png

then just replace 130x130 to a valid resolution

https://fbcdn-sphotos-e-a.akamaihd.net/hphotos-ak-xaf1/t1.0-9/s480x480/10501892_701590943222768_782659935906208443_n.png

and you will be able to get high resolution image

Valid image resolution can be found from this example call

http://graph.facebook.com/701586786556517

701586786556517 = object_id from Facebook graph API call

Hope this helps someone.

1
votes

Use this:

/user_id/?fields=picture.height(961)

It will give the maximum possible resolution picture.

0
votes

For some reason none of the answers to this question worked, however, one person on another forum posted to use "full_picture" in the fields perameter and it worked like a charm. I didn't find this in any of the docs...unless I just overlooked it?

OP https://www.quora.com/How-do-I-get-the-full-size-of-image-in-a-Facebook-post-using-Graph-API

0
votes

None of the above worked for me, asking for field attachments solved it

&fields=picture.type(large),attachments
0
votes

The graph api returns response which includes images and webp_images and it has image links in all available resolutions.

As per the latest version: v2.12

For profile photo:

/me?fields=photos{picture,images,webp_images}

For specific album:

'album-id'?fields=photos{picture,images,webp_images}

Field details:

photos: array of available photos, this will return json like below:

{
    data: [],
    pagin: []
}

In data object we'll get below fields:

picture: link for a low resolution image might be for the use of thumbnails

images: array of objects for picture image with the different different resolutions in raster format

webp_images: array of objects for picture image with the different different resolutions in webp format

images and web_images object will have data like:

{
    height: number, // 400
    source: 'link for the image with the resolution of height and width specified', //https:....
    width: number //496
}