11
votes

Obtenez Facebook Real Profil Image URL

Selon Facebook Graph API, nous pouvons demander une image de profil utilisateur avec ceci (exemple):

http://profile.ak.fbcdn.net/hprofile-ak-snc4/hs356.snc4/41721_1489686594_527_Q.JPG

Si vous tapez le premier lien de votre navigateur, il vous redirigera sur le deuxième lien.

Y a-t-il un moyen d'obtenir l'URL complète (deuxième lien) avec PHP, en sachant uniquement le premier lien?

J'ai une fonction qui obtient l'image d'une URL pour la stocker dans la base de données, mais elle ne fonctionne que s'il obtient l'URL de l'image complète.

merci


6 commentaires

Oui, vous pouvez le faire w-shadow.com/blog/2008/07/05/how-to-get-redirect-url-in-php


Oh magnifique merci beaucoup Ben, ça marche parfaitement. J'utilise que, de sorte que lorsqu'un utilisateur se connecte avec Facebook sur mon site Web, je peux saisir leur image de profil Facebook pour en faire leur par défaut. Merci :)


@Kire, les développeurs Facebook ne vous apporte pas une solution officielle pour faire cela? Je n'ai jamais travaillé avec ça avant, mais je pense qu'ils font. Prenant souvent sur d'autres services de sites Web sans accord pourrait conduire à une interdiction de la propriété intellectuelle.


@Ben que voulez-vous dire par "prise en charge d'autres ressources de sites Web sans accord"? Vous voulez dire que c'est mauvais d'utiliser ou d'adapter une fonction partagée par quelqu'un pour aider les autres? Ne pensez pas que quelqu'un qui partageait une fonction latérale du serveur s'attend à ce que les gens demandent à son accord de comprendre et d'utiliser sa fonction ...


@kire, je ne veux pas dire la fonction que je vous ai donnée, je veux dire les ressources de Facebook. Les images à chaud de la liaison à chaud sont étrangères considérées comme une mauvaise pratique et / ou impolie si la source de l'image n'est pas au courant de ce qui se passe. Lisez Facebook TOS et les développeurs Facebook TOS afin de vous assurer que vous pouvez le faire sans utiliser l'API.


@Ben oh désolé mal compris. Je ne regarde pas les images :) J'essaie juste de fournir un moyen d'utiliser les utilisateurs qui se connectent avec leur compte Facebook avec une expérience plus conviviale. Comme par exemple ne pas avoir à repousser leurs images. Donc, leur image Facebook est copiée sur le nouveau site Web. Et les utilisateurs peuvent choisir de le garder ou du non bien sûr. Remarqué Plusieurs applications font cela comme un friendfeed par exemple (même si maintenant, il appartient à Facebook :))


5 Réponses :


7
votes

Vous pouvez l'obtenir avec FQL:

[
  {
    "pic_square": "http://profile.ak.fbcdn.net/hprofile-ak-snc4/hs356.snc4/41721_1489686594_527_q.jpg"
  }
]


5 commentaires

J'ai essayé une solution similaire, mais la propriété Facebook "pic_square" retourne un 50px * 50px, dans mon cas, j'ai besoin d'un coup de lecture plus important pour ne pas perdre de la qualité. Je ne peux le faire qu'avec l'API graphique en demandant ce formulaire: Graph.facebook.com/ xxxxxxxxxx / image? Type = grand mais merci beaucoup avoir une bonne solution maintenant.


@kire Il y a 4 images différentes disponibles, choisissez celle dont vous avez besoin: développeurs.facebook.com/ Docs / Référence / FQL / UTILISATEUR


Oh ouais vrai n'a pas trouvé cette page! Maintenant, la question pour moi est de savoir s'il vaut mieux demander à l'URL de l'API graphique et obtenez l'URL de la photo réelle ou utilisez la FQL. Peut-être que la première solution serait plus simple pour moi car je peux l'ajouter à ma classe Facebook et l'appeler à tout moment sans avoir besoin de JavaScript ou de plus. Vous êtes vraiment bon dans ce que vous faites :)


Oh désolé je pourrais obtenir les mêmes résultats en interrogeant cette page: api.facebook.com /Method/fql.Query?Query=Select pic_big de l'utilisateur où UID = 1489686594 HUMM a l'air plus simple ...


@Kire j'aime comment quelqu'un a réellement "xxxxxxxxxx" comme nom d'utilisateur sur Facebook et votre exemple de lien résout son image de profil.



20
votes

Kire a raison, mais une meilleure solution pour votre cas d'utilisation serait la suivante:

    // get the headers from the source without downloading anything
    // there will be a location header wich redirects to the actual url
    // you may want to put some error handling here in case the connection cant be established etc...
    // the second parameter gives us an assoziative array and not jut a sequential list so we can right away extract the location header
    $headers = get_headers('https://graph.facebook.com/1489686594/picture',1);
    // just a precaution, check whether the header isset...
    if(isset($headers['Location'])) {
        $url = $headers['Location']; // string
    } else {
        $url = false; // nothing there? .. weird, but okay!
    }
    // $url contains now the url of the profile picture, but be careful it might very well be only temporary! there's a reason why facebok does it this way ;)
    // the code is untested!


1 commentaires

Veuillez envisager d'ajouter des informations sur l'emplacement de l'emplacement dans Json via le Facebook graphique API



2
votes

Veuillez noter que la réponse de la Sarricaine (et éventuellement d'autres) peut considérablement augmenter le temps de réponse de votre script (environ + 500 ms pour moi sur mon serveur). En effet, le serveur émet une demande sur Facebook (en raison de get_headers () ) et le temps d'exécution (calcul exclu) s'étend à partir de ceci:

  • Navigateur -> Serveur
  • Server -> Navigateur

    à ceci:

    • Navigateur -> Serveur
    • Server -> Facebook (Demande: Get_headers)
    • Facebook -> Serveur (réponse: get_headers)
    • Server -> Navigateur

      Cela ajoute le délai de 500 ms mentionné. Vous devriez probablement envisager de mettre en cache la vraie URL sur votre serveur ou de charger la photo de profil via JavaScript. Au moins jeter un coup d'œil à votre temps de réponse avant et après;)


1 commentaires

Observation géniale sur le temps de réponse. En conjonction avec Résultats JSON du graphique de l'API , JavaScript serait définitivement Soyez la meilleure réponse.



2
votes

@Le Sarrican,
Nice code! Voici une fonction de code de coupe propre pour un tel processus!

function get_raw_facebook_avatar_url($uid)
{
    $array = get_headers('https://graph.facebook.com/'.$uid.'/picture?type=large', 1);
    return (isset($array['Location']) ? $array['Location'] : FALSE);
}


0 commentaires

0
votes

Vous pouvez également ajouter ? redirect = false à la fin de votre URL puis analyser la réponse JSON directement.

Dans votre exemple: https://graph.facebook.com/1489686594/picture?redirect=false

Plus d'informations ici https://developers.facebook.com/ DOCS / GRAPH-API / Référence / Utilisateur / Image /


0 commentaires