ChatGPT解决这个技术问题 Extra ChatGPT

Facebook Graph API : get larger pictures in one request

I'm currently using the Graph API Explorer to make some tests. That's a good tool.

I want to get the user's friend list, with friends' names, ids and pictures. So I type :

https://graph.facebook.com/me/friends?fields=id,picture,name

But picture is only 50x50, and I would like a larger one in this request.

Is it possible ?


t
thaddeusmt

As described in this bug on Facebook, you can also request specific image sizes now via the new API "field expansion" syntax.

Like so:

https://graph.facebook.com/____OBJECT_ID____?fields=picture.type(large)

Indeed. fields=picture.width(640) is even better.
It seems the Facebook Graph API changed their api. Facebook responsed "Subfields are not supported by picture" when I tried to use your suggestion.
getting error: { "error": { "message": "Unsupported get request. Please read the Graph API documentation at developers.facebook.com/docs/graph-api", "type": "GraphMethodException", "code": 100 } }
See the ?field=full_picture,attachments for 2.x queries
With New Facebook Changes, unable to get the larger image. Any hint anyone?
a
andyrandy

The best way to get all friends (who are using the App too, of course) with correct picture sizes is to use field expansion, either with one of the size tags (square, small, normal, large):

/me/friends?fields=picture.type(large)

(edit: this does not work anymore)

...or you can specify the width/height:

me/friends?fields=picture.width(100).height(100)

Btw, you can also write it like this:

me?fields=friends{picture.type(large)}

thanx for the info, i will update the answer. full_picture does not seem to work for friends though: /me/friends?fields=full_picture - do you have any idea how this would be possible?
Y
Yilmaz Guleryuz

you do not need to pull 'picture' attribute though. there is much more convenient way, the only thing you need is userid, see example below;

https://graph.facebook.com/user_id/picture?type=large

p.s. type defines the size you want

plz keep in mind that using token with basic permissions, /me/friends will return list of friends only with id+name attributes


But i'm not agree with you last sentence : with basic permission, you can access more than id+name attribute, ex : graph.facebook.com/btaylor
uhm, what about "in one request"?
U can also use full_picture instat of picture.
"message": "(#12) picture edge for this type is deprecated for versions v2.3 and higher",
R
Ratul Sharker

You can set the size of the picture in pixels, like this:

https://graph.facebook.com/v2.8/me?fields=id,name,picture.width(500).height(500)

In the similar manner, type parameter can be used

{user-id}/?fields=name,picture.type(large)

From the documentation

type enum{small, normal, album, large, square}


J
Julian Mann

Change the array of fields id,name,picture to id,name,picture.type(large)

https://graph.facebook.com/v2.8/me?fields=id,name,picture.type(large)&access_token=<the_token>

Result:

{
   "id": "130716224073524",
   "name": "Julian Mann",
   "picture": {
      "data": {
         "is_silhouette": false,
         "url": "https://scontent.xx.fbcdn.net/v/t1.0-1/p200x200/15032818_133926070419206_3681208703790460208_n.jpg?oh=a288898d87420cdc7ed8db5602bbb520&oe=58CB5D16"
      }
   }
}

How is 200 x 200 large?
In latest (2.10) Graph API is not "large" size available: Graph returned an error: (#100) For field 'picture': type must be one of the following values: thumbnail, small, album
S
Swaprks

You can also try getting the image if you want it based on the height or width

https://graph.facebook.com/user_id/picture?height=

OR

https://graph.facebook.com/user_id/picture?width=

The values are by default in pixels you just need to provide the int value


J
Jonghee Park

I researched Graph API Explorer extensively and finally found full_picture

https://graph.facebook.com/v2.2/$id/posts?fields=picture,full_picture

P.S. I noticed that full_picture won't always provide full size image I want. 'attachments' does

https://graph.facebook.com/v2.2/$id/posts?fields=picture,full_picture,attachments

this is only show width:720px. u r only large photo find like this. for biggest graph.facebook.com/photo_id u can see 6 different sizes photo.
i just tested this with the friends endpoint and it did not work
M
Martin

Hum... I think I've found a solution.

In fact, in can just request

https://graph.facebook.com/me/friends?fields=id,name

According to http://developers.facebook.com/docs/reference/api/ (section "Pictures"), url of profile's photos can be built with the user id

For example, assuming user id is in $id :

"http://graph.facebook.com/$id/picture?type=square"
"http://graph.facebook.com/$id/picture?type=small"
"http://graph.facebook.com/$id/picture?type=normal"
"http://graph.facebook.com/$id/picture?type=large"

But it's not the final image URL, so if someone have a better solution, i would be glad to know :)


K
Krisid Misso

You can specify width & height in your request to Facebook graph API: http://graph.facebook.com/user_id/picture?width=500&height=500


m
maxbellec

From v2.7, /<picture-id>?fields=images will give you a list with different size of the images, the first element being the full size image.

I don't know of any solution for multiple images at once.


E
Ebleme

I got this error when I made a request with picture.type(full_picture):

"(#100) For field 'picture': type must be one of the following values: small, normal, album, large, square"

When I make the request with picture.type(album) and picture.type(square), responses me with an image 50x50 pixel size.

When I make the request with picture.type(large), responses me with an image 200x200 pixel size.

When I make the request with picture.width(800), responses me with an image 477x477 pixel size.

with picture.width(250), responses 320x320.

with picture.width(50), responses 50x50.

with picture.width(100), responses 100x100.

with picture.width(150), responses 160x160.

I think that facebook gives the images which resized variously when the user first add that photo.

What I see here the API for requesting user Image does not support resizing the image requested. It gives the nearest size of image, I think.


True... "picture.type(large)" also gave me a 200x200 - not very large I must say
E
Emre Tuncer

You can size it as follows.

Use:

https://graph.facebook.com/USER_ID?fields=picture.type(large)

For details: https://developers.facebook.com/docs/graph-api/reference/user/picture/


R
Ronan

In pictures URL found in the Graph responses (the "http://photos-c.ak.fbcdn.net/" ones), just replace the default "_s.jpg" by "_n.jpg" (? normal size) or "_b.jpg" (? big size) or "_t.jpg" (thumbnail).

Hacakable URLs/REST API make the Web better.


Seems to always give "An error occurred while processing your request. Reference #50.27f74317.14274.604fb0" now unfortunately
s
sigi

rest-fb users (square image, bigger res.): Connection myFriends = fbClient.fetchConnection("me/friends", User.class, Parameter.with("fields", "public_profile,email,first_name,last_name,gender,picture.width(100).height(100)"));


P
Paweł Gościcki

I think that as of now the only way to get large pictures of friends is to use FQL. First, you need to fetch a list of friends:

https://graph.facebook.com/me/friends

Then parse this list and extract all friends ids. When you have that, just execute the following FQL query:

SELECT id, url FROM profile_pic WHERE id IN (id1, id2) AND width=200 AND height=200

200 here is just an exemplary size, you can enter anything. You should get the following response:

{
  "data": [
    {
      "id": ..., 
      "url": "https://fbcdn-profile-a.akamaihd.net/..."
    }, 
    {
      "id": ..., 
      "url": "https://fbcdn-profile-a.akamaihd.net/..."
    }
  ]
}

With each url being the link to a 200x200px image.


A
Ajay

I have the same problem but i tried this one to solve my problem. it returns large image. It is not the perfect fix but you can try this one.

https://graph.facebook.com/v2.0/OBJECT_ID/picture?access_token=XXXXX


Just add one more parameter to the request: type=large. Please check my answer below.
E
E_X

try to change the size of the image by changing the pixel size from the url in each json object as follows :

for example I change s480x480 to be s720x720

Before : https://fbcdn-sphotos-c-a.akamaihd.net/hphotos-ak-xfp1/t1.0-9/q71/s480x480/10454308_773207849398282_283493808478577207_n.jpg

After : https://fbcdn-sphotos-c-a.akamaihd.net/hphotos-ak-xfp1/t1.0-9/q71/s720x720/10454308_773207849398282_283493808478577207_n.jpg


D
Dzmitry Vasilevsky

JS styled variant. Just set enormous large picture width and you will get the largest variant.

FB.api(
  '/' + userId,
  {fields: 'picture.width(2048)'},
  function (response) {
    if (response && !response.error) {
      console.log(response.picture.data.url);
    }
  }
);

K
Khalil ur Rehman

You can use full_picture instead of picture key to get full size image.


G
Gmacv

Note: From Graph API v8.0 you must provide the access token for every UserID request you do.

Hitting the graph API:

https://graph.facebook.com/<user_id>/picture?height=1000&access_token=<any_of_above_token>

With firebase:

FirebaseUser user = mAuth.getCurrentUser();
String photoUrl = user.getPhotoUrl() + "/picture?height=1000&access_token=" +
  loginResult.getAccessToken().getToken();

You get the token from registerCallback just like this

       LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            FirebaseUser user = mAuth.getCurrentUser();
            String photoUrl = user.getPhotoUrl() + "/picture?height=1000&access_token=" + loginResult.getAccessToken().getToken();
        }

        @Override
        public void onCancel() {
            Log.d("Fb on Login", "facebook:onCancel");
        }

        @Override
        public void onError(FacebookException error) {
            Log.e("Fb on Login", "facebook:onError", error);
        }
    });

This is what documentation says:

Beginning October 24, 2020, an access token will be required for all UID-based queries. If you query a UID and thus must include a token: use a User access token for Facebook Login authenticated requests use a Page access token for page-scoped requests use an App access token for server-side requests use a Client access token for mobile or web client-side requests We recommend that you only use a Client token if you are unable to use one of the other token types.


关注公众号,不定期副业成功案例分享
Follow WeChat

Success story sharing

Want to stay one step ahead of the latest teleworks?

Subscribe Now