Facebook graph API tells me I can get a profile picture of a user using
http://graph.facebook.com/517267866/picture?type=large
which works fine. However, when you type above URL into a browser, the actual address of the image is
http://profile.ak.fbcdn.net/profile-ak-snc1/v227/560/83/n517267866_1928.jpg
How can I get the second URL using the first one programmatically?
I realize this is late, but there is another way to obtain the URL of the profile image.
To your original url, you can add the parameter redirect=false
to obtain the actual URL of the image you'd normally be redirected to.
So, the new request would look like http://graph.facebook.com/517267866/picture?type=large&redirect=false. This will return a JSON object containing the URL of the picture and a boolean is_silhouette (true if the picture is the default Facebook picture).
The picture will be of the size you specified, as well. You can test this additionally by adding dimensions: http://graph.facebook.com/517267866/picture?type=large&redirect=false&width=400&height=400
ImageView user_picture;
userpicture=(ImageView)findViewById(R.id.userpicture);
URL img_value = null;
img_value = new URL("http://graph.facebook.com/"+id+"/picture?type=large");
Bitmap mIcon1 = BitmapFactory.decodeStream(img_value.openConnection().getInputStream());
userpicture.setImageBitmap(mIcon1);
Where ID is one your profile ID.
For anyone else looking to get the profile pic in iOS:
I just did this to get the user's Facebook pic:
NSString *profilePicURL = [NSString stringWithFormat:@"http://graph.facebook.com/%@/picture?type=large", fbUserID];
where 'fbUserID' is the Facebook user's profile ID.
This way I can always just call the url in profilePicURL to get the image, and I always get it, no problem. If you've already got the user ID, you don't need any API requests, just stick the ID into the url after facebook.com/.
FYI to anyone looking who needs the fbUserID in iOS:
if (FBSession.activeSession.isOpen) {
[[FBRequest requestForMe] startWithCompletionHandler:
^(FBRequestConnection *connection,
NSDictionary<FBGraphUser> *user,
NSError *error) {
if (!error) {
self.userName = user.name;
self.fbUserID = user.id;
}
}];
}
You'll need an active FBSession for that to work (see Facebook's docs, and the "Scrumptious" example).
http://graph.facebook.com/517267866/?fields=picture&type=large
Would return the URL in JSON
For Android:
According to latest Facebook SDK,
First you need to call GraphRequest API
for getting all the details of user in which API
also gives URL of current Profile Picture
.
Bundle params = new Bundle();
params.putString("fields", "id,email,gender,cover,picture.type(large)");
new GraphRequest(token, "me", params, HttpMethod.GET,
new GraphRequest.Callback() {
@Override
public void onCompleted(GraphResponse response) {
if (response != null) {
try {
JSONObject data = response.getJSONObject();
if (data.has("picture")) {
String profilePicUrl = data.getJSONObject("picture").getJSONObject("data").getString("url");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}).executeAsync();
Now , Facebook need SSL
-> Important added S, https -> https://graph.facebook.com/userId/?fields=picture&type=large
Works In June / 2014
function getFacebookImageFromURL($url)
{
$headers = get_headers($url, 1);
if (isset($headers['Location']))
{
return $headers['Location'];
}
}
$url = 'https://graph.facebook.com/zuck/picture?type=large';
$imageURL = getFacebookImageFromURL($url);
this is the only one that really works:
me?fields=picture.type(*YOURTYPE*)
where YOURTYPE can be one of the following: small, normal, album, large, square
$url = 'http://graph.facebook.com/100000771470028/picture?type=large';
$rray=get_headers($url);
$hd = $rray[4];
echo(substr($hd,strpos($hd,'http')));
This will return the url that you asked, and the problem of changing the url by facebook doesn't matter because you are dynamically calling the url from the original url.
Hmm..i tried everything to get url to user image.The perfect solution was fql use like this->
$fql_b = 'SELECT pic from user where uid = ' . $user_id;
$ret_obj_b = $facebook->api(array(
'method' => 'fql.query',
'query' => $fql_b,
));
$dp_url =$ret_obj_b[0]['pic'];
replace pic by big,pic_square to get other desired results. Hope IT HELPED....
If you want the JSON of a good quality profile picture with the URL you can use that:
http://graph.facebook.com/517267866/picture?height=1024&redirect=false
if you just need the picture use it without the parameter redirect:
http://graph.facebook.com/517267866/picture?height=1024
517267866 is the profile ID of one of the above examples. Put the facebook id that you need
I hope that helps
Source: Stackoverflow.com