Obtenir l’URL de la «vraie» photo de profil Facebook à partir de l’API graphique

Facebook graphe API me dit que je peux obtenir une photo de profil d’un utilisateur en utilisant

http://graph.facebook.com/517267866/picture?type=large

qui fonctionne bien Toutefois, lorsque vous tapez ci-dessus URL dans un navigateur, l’adresse réelle de l’image est

http://soffr.miximages.com/profile/n517267866_1928.jpg

Comment puis-je obtenir la deuxième URL en utilisant le premier par programme?

La première URL donne un HTTP 302 (redirection temporaire) au second. Donc, pour trouver la deuxième URL par programmation, vous pouvez émettre une requête HTTP pour la première URL et obtenir l’en-tête Location de la réponse.

Cela dit, ne vous fiez pas à la deuxième adresse URL. En lisant un peu le code de réponse HTTP (de 302 au lieu de 301), il est possible que Facebook modifie ces URL régulièrement pour empêcher les utilisateurs – par exemple – d’utiliser leurs serveurs pour héberger des images.


Edit: Notez que l’URL du CDN que l’OP a postée est maintenant un 404, nous soaps donc que nous ne pouvons pas compter sur l’URL qui dure longtemps. De plus, si vous créez un lien vers l’API Graph à partir d’un sur une page sécurisée par SSL, vous devez append un paramètre pour vous assurer d’utiliser http s ://graph.facebook.com .


Mise à jour: l’API a ajouté un paramètre – redirect=false – qui provoque le retour de JSON plutôt qu’une redirection. Le JSON retruned comprend l’URL du CDN:

 { "data": { "url": "http://profile.ak.fbcdn.net/...", "is_silhouette": false } } 

Encore une fois, je ne me fierais pas à cette URL CDN qui dure longtemps. La réponse JSON est envoyée avec des en-têtes CORS autorisés, vous êtes donc libre de faire ce côté client avec les demandes XHR.

Je me rends compte que c’est en retard, mais il y a une autre façon d’obtenir l’URL de l’image de profil.

Dans votre URL d’origine, vous pouvez append le paramètre redirect=false pour obtenir l’URL réelle de l’image vers laquelle vous êtes normalement redirigé.

Ainsi, la nouvelle demande ressemblerait à http://graph.facebook.com/517267866/picture?type=large&redirect=false . Cela renverra un object JSON contenant l’URL de l’image et un booléen is_silhouette (true si l’image est l’image Facebook par défaut).

La photo sera également de la taille que vous avez spécifiée. Vous pouvez tester ceci en ajoutant des dimensions: http://graph.facebook.com/517267866/picture?type=large&redirect=false&width=400&height=400

Pour quiconque cherche à obtenir la photo de profil dans iOS:

Je viens de le faire pour obtenir la photo Facebook de l’utilisateur:

 NSSsortingng *profilePicURL = [NSSsortingng ssortingngWithFormat:@"http://graph.facebook.com/%@/picture?type=large", fbUserID]; 

où ‘fbUserID’ est l’ID de profil de l’utilisateur Facebook.

De cette façon, je peux toujours appeler l’URL dans profilePicURL pour obtenir l’image, et je l’obtiens toujours, pas de problème. Si vous avez déjà l’ID utilisateur, vous n’avez pas besoin de requêtes API, insérez simplement l’ID dans l’URL après facebook.com/.

FYI à tous ceux qui ont besoin du fbUserID dans iOS:

 if (FBSession.activeSession.isOpen) { [[FBRequest requestForMe] startWithCompletionHandler: ^(FBRequestConnection *connection, NSDictionary *user, NSError *error) { if (!error) { self.userName = user.name; self.fbUserID = user.id; } }]; } 

Vous aurez besoin d’une FBSession active pour que cela fonctionne (voir la documentation de Facebook et l’exemple “Scrumptious”).

Si vous voulez le JSON d’une image de profil de bonne qualité avec l’URL, vous pouvez l’utiliser:

http://graph.facebook.com/517267866/picture?height=1024&redirect=false

si vous avez juste besoin de l’image, utilisez-la sans redirect le paramètre:

http://graph.facebook.com/517267866/picture?height=1024

517267866 est l’ID de profil de l’un des exemples ci-dessus. Mettez l’identifiant facebook dont vous avez besoin

J’espère que ça aide

 $url = 'http://graph.facebook.com/100000771470028/picture?type=large'; $rray=get_headers($url); $hd = $rray[4]; echo(substr($hd,strpos($hd,'http'))); 

Cela retournera l’URL que vous avez demandée, et le problème de la modification de l’URL par facebook n’a pas d’importance car vous appelez dynamicment l’URL à partir de l’URL d’origine.

c’est le seul qui fonctionne vraiment:

 me?fields=picture.type(*YOURTYPE*) 

YOURTYPE peut être l’un des suivants: petit, normal, album, grand, carré

Pour Android:

Selon le dernier SDK de Facebook,

Tout d’abord, vous devez appeler l’ GraphRequest API pour obtenir tous les détails de l’utilisateur dans lequel l’ API donne également l’ URL of current Profile Picture .

 Bundle params = new Bundle(); params.putSsortingng("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")) { Ssortingng profilePicUrl = data.getJSONObject("picture").getJSONObject("data").getSsortingng("url"); } } catch (Exception e) { e.printStackTrace(); } } } }).executeAsync(); 
 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); 

Maintenant, Facebook a besoin de SSL

-> Ajout important de S, https -> https://graph.facebook.com/userId/?fields=picture&type=large

Fonctionne en juin / 2014

Hmm..i a tout essayé pour obtenir l’URL à l’image de l’utilisateur.La solution parfaite était l’utilisation de fql comme ceci->

  $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']; 

remplacez pic par big, pic_square pour obtenir d’autres résultats souhaités. J’espère qu’il a aidé ….

 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); 

Où ID est un ID de votre profil .