Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Facebook graph API: ID of user profile picture

Is there a way to get the ID of the picture that is the current profile picture for a user?

Edit: OK, seems there is no trivial way to get the ID!

However, it appears from random testing that every user has a single album with attribute type="profile", and the first image in this album is always the profile picture, so it is possible to get the ID of the profile picture that way. Can some more experienced with Facebook confirm that this is indeed always the case?

like image 218
JacquesB Avatar asked Feb 10 '11 16:02

JacquesB


2 Answers

You can get the users public profile photo from the following url:

https://graph.facebook.com/[id]/picture

Reference: http://developers.facebook.com/docs/reference/api/

like image 153
Chris Coulson Avatar answered Sep 22 '22 17:09

Chris Coulson


The answer seems to be yes

e.g., the photos in an album have an ID (the profile photo is a different object though, which a different FB ID). An ID for every object is a core concept of FB's new graph API: Every object in the social graph has a unique ID.

Indeed, data request i have ever made through the FB Graph API returns (when successful) a response in the form of a JSON array, comprised of nested ID-Value pairs, e.g. the education field from a User object:

"education": [
    {
       "school": {
           "id": "126533127390327",
           "name": "Massachusetts Institute of Technology"
    },
       "year": {
            "id": "140829239279495",
            "name": "1992"
    },
       "concentration": [
           {
                "id": "192578844099494",
                "name": "Computer Science"
           }
       ],
       "type": "College"
}

The profile photo is a connection of the User object (i.e., every FB object has Fields and Connections).

According to the table in the relevant FB Developer Page, a call to the Graph API requesting picture (user's profile photo(s)) returns a string which is the URL for the user's profile picture.

But why doesn't this same call return the user's profile photo ID?

The reason i suppose is that the URL returns:

Graph API : User Properties

The user's profile photo is not there, but in an adjacent node:

Graph API : User : Connections : picture

(See FB Documentation for Graph API structure here).

When you make that API call, examine the Request Headers, and in particular, the Request URL; when you do, you'll see something like this:

http://profile.ak.fbcdn.net/hprofile-ak-snc4/32093_100005743929541_5467982_q.jpg

The string between the underscores (100005743929541) is the user ID. this is easy to verify by making another call to the Graph API. From your browser location bar (assuming you are logged into Facebook) just enter:

https://graph.facebook.com/me

So again, the first item in that JSON string is the user's FB ID. Given that, it seems to me that if user profile ID does indeed have its own ID, then that string (user's FB ID) plus the two smaller adjacent strings of integers on either end of the ID, should be it--in other words, 32093_100005743929541_5467982 in the Request URL above.

Finally, perhaps the best way to answer this is by using the new Graph API Explorer. (I just tried to verify this, but my requests are hanging.)

like image 28
doug Avatar answered Sep 20 '22 17:09

doug