75 votes

Obtenir la "vraie" URL de photo de profil Facebook à partir de l'API graphique

Facebook graph API me dit que je peux obtenir une photo de profil d'un utilisateur à l'aide de

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

qui fonctionne très bien. Toutefois, lorsque vous tapez une URL dans un navigateur, l'adresse réelle de l'image est

http://profile.ak.fbcdn.net/profile-ak-snc1/v227/560/83/n517267866_1928.jpg

Comment puis-je obtenir la deuxième URL à l'aide de la première par programmation?

73voto

josh3736 Points 41911

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

Cela dit, ne comptez pas sur la deuxième URL étant pemanent. En lisant un peu dans le code de réponse HTTP (302, par opposition à une permanente 301), il est possible que Facebook change les Url en question sur une base régulière afin de prévenir que des personnes—par exemple—à l'aide de leurs serveurs pour héberger des images.


Edit: Notez que le CDN URL de l'OP affiché est maintenant une erreur 404, donc nous savons que nous ne pouvons pas compter sur l'URL de l'être de longue durée. Aussi, si vous créez un lien vers l'API Graphique à partir d'un <img> sur une connexion sécurisée par SSL page, il y a un paramètre que vous avez à ajouter assurez-vous d'utiliser http.


Mise à jour: L'API a ajouté un paramètres – ce qui provoque JSON être retourné plutôt qu'une redirection. Le retruned JSON comprend le CDN URL:

://graph.facebook.com

Encore une fois, je ne voudrais pas compter sur cet CDN URL être de longue durée. La réponse JSON est envoyé avec permissive de la SCRO en-têtes, de sorte que vous êtes libre de le faire côté client avec XHR demandes.

36voto

Adfsd Points 295

16voto

joanna Points 141

Je me rends compte c'est tard, mais il est une autre façon d'obtenir l'URL de l'image de profil.

Pour l'url d'origine, vous pouvez ajouter le paramètre redirect=false pour obtenir l'URL de l'image que vous auriez normalement être redirigé vers.

Ainsi, la nouvelle demande pourrait ressembler http://graph.facebook.com/517267866/picture?type=large&redirect=false. Cela renvoie un objet JSON contenant l'URL de l'image et un booléen is_silhouette (vrai si l'image par défaut est le Facebook de l'image).

L'image sera de la taille spécifiée. Vous pouvez le tester en outre par l'ajout de dimensions: http://graph.facebook.com/517267866/picture?type=large&redirect=false&width=400&height=400

7voto

Fateh Khalsa Points 481

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

J'ai juste fait ce que l'utilisateur de Facebook pic:

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

où "fbUserID' est le Facebook de l'utilisateur ID de profil.

De cette façon, je peux toujours appeler l'url dans profilePicURL pour obtenir l'image, et j'ai toujours, pas de problème. Si vous avez déjà eu l'ID d'utilisateur, vous n'avez pas besoin de toutes les requêtes à l'API, il suffit de coller l'ID dans l'url après facebook.com/.

Pour info à ceux qui cherchent, qui a besoin de la fbUserID dans 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;
         }
     }];
}

Vous aurez besoin d'un actif FBSession pour que cela fonctionne (voir le Facebook de docs, et le "Délicieux", par exemple).

3voto

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

Cela renverra l'URL que vous avez demandé, et le problème de la modification de l'URL par Facebook n'a pas d'importance, car vous appelez de manière dynamique l'URL à partir de l'URL d'origine.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X