API Facebook-Comment obtenir une image de profil D'utilisateur Facebook via L'API Facebook (sans exiger que l'Utilisateur "autorise" l'application)

je travaille sur un CMS qui récupère une image de profil d'un utilisateur de leur Facebook URL (qui est, http://facebook.com/users_unique_url ). Comment puis-je accomplir? Y a-t-il un appel API Faceboook qui récupère L'URL de l'image du profil d'un utilisateur sans que l'utilisateur ait besoin de Autoriser L'application?

252
demandé sur Peter Mortensen 2010-05-12 21:06:02

14 réponses

il suffit de récupérer les données à travers cette URL :

http://graph.facebook.com/userid_here/picture

remplacer userid_here par l'identité de l'utilisateur dont vous voulez obtenir la photo. Vous pouvez également utiliser le protocole HTTPS.

vous pouvez utiliser la fonction file_get_contents de PHP pour lire cette URL et traiter les données récupérées.

ressource:

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

Note: dans php.ini , vous devez vous assurer que l'extension OpenSSL est activée pour utiliser la fonction file_get_contents de PHP pour lire cette URL.

406
répondu Sarfraz 2016-06-09 18:37:53

Pour montrer:

50x50 pixels

<img src="//graph.facebook.com/{{fid}}/picture">

largeur de 200 pixels

<img src="//graph.facebook.com/{{fid}}/picture?type=large">

pour enregistrer (en utilisant PHP)

NOTE: N'utilisez pas ce . Voir le commentaire de @Foreever ci-dessous.

$img = file_get_contents('https://graph.facebook.com/'.$fid.'/picture?type=large');
$file = dirname(__file__).'/avatar/'.$fid.'.jpg';
file_put_contents($file, $img);

où $fid est votre identifiant sur Facebook.

NOTE: dans le cas d'images marquées "18+" vous aurez besoin d'un access_token valide d'un utilisateur 18+ :

<img src="//graph.facebook.com/{{fid}}/picture?access_token={{access_token}}">

mise à jour 2015:

Graph API v2.0 ne peut pas être interrogé en utilisant des noms d'utilisateurs, vous devrait utiliser userId toujours.

264
répondu neiker 2018-04-03 10:39:06

mise à JOUR :

à partir de fin août 2012, L'API a été mise à jour pour vous permettre de récupérer des photos de profil de l'utilisateur dans différentes tailles. Ajoutez les champs optionnels largeur et hauteur comme paramètres URL:

https://graph.facebook.com/USER_ID/picture?width=WIDTH&height=HEIGHT

WIDTH et HEIGHT sont vos valeurs de dimension demandées.

cette image de profil retournera avec une taille minimale de WIDTH x HEIGHT tout en essayant de préserver le format. Par exemple,

https://graph.facebook.com/redbull/picture?width=140&height=110

retourne

    {
      "data": {
        "url": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-ash4/c0.19.180.142/s148x148/2624_134501175351_4831452_a.jpg",
        "width": 148,
        "height": 117,
        "is_silhouette": false
      }
   }

MISE À JOUR

pour obtenir une photo du profil d'un utilisateur, appelez

https://graph.facebook.com/USER_ID/picture

USER_ID peut être le numéro d'identification utilisateur ou le nom d'utilisateur.

pour obtenir une image de profil d'utilisateur d'une taille spécifique, appelez

https://graph.facebook.com/USER_ID/picture?type=SIZE

SIZE doit être remplacé par l'un des mots

square
small
normal
large

selon la taille que vous voulez.

cet appel retournera un URL à une seule image avec sa taille basée sur le paramètre de type que vous avez choisi.

par exemple:

https://graph.facebook.com/USER_ID/picture?type=small

renvoie une URL vers une petite version de l'image.

de L'API uniquement spécifie la taille maximale pour les images de profil, pas la taille réelle.

Carré:

largeur et hauteur maximales de 50 pixels.

petit

largeur maximale de 50 pixels et hauteur maximale de 150 pixels.

Normal

largeur maximale de 100 pixels et hauteur maximale de 300 pixels.

Grand

largeur maximale de 200 pixels et hauteur maximale de 600 pixels.

si vous appelez par défaut USER_ID/picture vous obtenez le type carré.

CLARIFICATION

si vous appelez (comme dans l'exemple ci-dessus)

https://graph.facebook.com/redbull/picture?width=140&height=110

il retournera un JSON réponse si vous utilisez l'un de l'Facebook Sdk méthodes de demande de . Sinon, il retournera l'image elle-même. Pour toujours récupérer le JSON, ajouter:

&redirect=false

comme suit:

https://graph.facebook.com/redbull/picture?width=140&height=110&redirect=false
162
répondu Gunnar Karlsson 2014-04-12 18:27:06

pour obtenir L'URL de l'image, pas le contenu binaire:

$url = "http://graph.facebook.com/$fbId/picture?type=$size";

$headers = get_headers($url, 1);

if( isset($headers['Location']) )
    echo $headers['Location']; // string
else
    echo "ERROR";

vous devez utiliser votre identifiant FACEBOOK, pas votre nom d'utilisateur. Vous pouvez y obtenir votre identifiant facebook:

http://findmyfbid.com /

19
répondu NaturalBornCamper 2015-08-03 16:39:56

simple code d'une ligne pour enregistrer l'image de profil pleine taille sur votre serveur.

<?php

copy("https://graph.facebook.com/FACEBOOKID/picture?width=9999&height=9999", "picture.jpg");

?>

cela ne fonctionnera que si openssl est activé en php.ini.

17
répondu Armand 2015-01-15 21:55:35

a ajouté ce commentaire à la réponse acceptée, mais a estimé qu'il méritait une explication plus longue. À partir d'avril 2015, cette question sera probablement soulevée à plusieurs reprises.

depuis V2 de l'api graph, la réponse acceptée ne fonctionne plus avec un nom d'utilisateur. Alors maintenant, vous avez besoin de l'identifiant d'abord, et vous ne pouvez plus utiliser un nom d'utilisateur pour l'obtenir. Pour compliquer encore plus les choses, pour des raisons de confidentialité, Facebook est en train de changer le nom d'utilisateur par application (voir https://developers.facebook.com/docs/graph-api/reference/v2.2/user / et https://developers.facebook.com/docs/apps/upgrading/#upgrading_v2_0_user_ids ), vous devrez donc avoir une forme d'authentification appropriée pour récupérer un identifiant que vous pouvez utiliser. Techniquement, le profil pic est encore public et disponible à /userid / picture (voir docs à https://developers.facebook.com/docs/graph-api/reference/v2.0/user/picture et cet exemple d'utilisateur: http://graph.facebook.com/v2.2/4/picture?redirect=0 ) cependant, trouver un userid standard d'un utilisateur semble impossible sur la base de leur profil - votre application aurait besoin de leur faire approuver l'interaction avec l'application qui, pour mon cas d'utilisation (montrant juste un pic de profil à côté de leur lien de profil FB) est exagérée.

si quelqu'un a trouvé un moyen d'obtenir le profil pic basé sur le nom d'utilisateur, ou alternativement, comment obtenir un userid (même une alternative un) pour utiliser pour récupérer une image de profil, s'il vous plaît partager! Entre-temps, l'ancienne url du graphique fonctionne toujours jusqu'en avril 2015.

9
répondu sckd 2014-11-10 08:53:24

une façon est d'utiliser le code Gamlet posté dans sa réponse:

  • Enregistrer en tant que curl.php

  • puis dans votre dossier:

    require 'curl.php';
    
    $photo="https://graph.facebook.com/me/picture?access_token=" . $session['access_token'];
    $sample = new sfFacebookPhoto;
    $thephotoURL = $sample->getRealUrl($photo);
    echo $thephotoURL;
    

j'ai pensé poster ceci, parce qu'il m'a fallu un peu de temps pour comprendre les détails... Même si les photos de profil sont publiques, vous avez toujours besoin d'avoir un jeton d'accès là-bas pour l'obtenir quand vous curl .

8
répondu benjaminlotan 2017-05-23 12:10:41

Il y a moyen de le faire ;)

merci à " http://it.toolbox.com/wiki/index.php/Use_curl_from_PHP_-_processing_response_headers ":

<?php

    /**
     * Facebook user photo downloader
     */

    class sfFacebookPhoto {

        private $useragent = 'Loximi sfFacebookPhoto PHP5 (cURL)';
        private $curl = null;
        private $response_meta_info = array();
        private $header = array(
                "Accept-Encoding: gzip,deflate",
                "Accept-Charset: utf-8;q=0.7,*;q=0.7",
                "Connection: close"
            );

        public function __construct() {
            $this->curl = curl_init();
            register_shutdown_function(array($this, 'shutdown'));
        }

        /**
         * Get the real URL for the picture to use after
         */
        public function getRealUrl($photoLink) {
            curl_setopt($this->curl, CURLOPT_HTTPHEADER, $this->header);
            curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, false);
            curl_setopt($this->curl, CURLOPT_HEADER, false);
            curl_setopt($this->curl, CURLOPT_USERAGENT, $this->useragent);
            curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT, 10);
            curl_setopt($this->curl, CURLOPT_TIMEOUT, 15);
            curl_setopt($this->curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
            curl_setopt($this->curl, CURLOPT_URL, $photoLink);

            //This assumes your code is into a class method, and
            //uses $this->readHeader as the callback function.
            curl_setopt($this->curl, CURLOPT_HEADERFUNCTION, array(&$this, 'readHeader'));
            $response = curl_exec($this->curl);
            if (!curl_errno($this->curl)) {
                $info = curl_getinfo($this->curl);
                var_dump($info);
                if ($info["http_code"] == 302) {
                    $headers = $this->getHeaders();
                    if (isset($headers['fileUrl'])) {
                        return $headers['fileUrl'];
                    }
                }
            }
            return false;
        }


        /**
         * Download Facebook user photo
         *
         */
        public function download($fileName) {
            curl_setopt($this->curl, CURLOPT_HTTPHEADER, $this->header);
            curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($this->curl, CURLOPT_HEADER, false);
            curl_setopt($this->curl, CURLOPT_USERAGENT, $this->useragent);
            curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT, 10);
            curl_setopt($this->curl, CURLOPT_TIMEOUT, 15);
            curl_setopt($this->curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
            curl_setopt($this->curl, CURLOPT_URL, $fileName);
            $response = curl_exec($this->curl);
            $return = false;
            if (!curl_errno($this->curl)) {
                $parts = explode('.', $fileName);
                $ext = array_pop($parts);
                $return = sfConfig::get('sf_upload_dir') . '/tmp/' . uniqid('fbphoto') . '.' . $ext;
                file_put_contents($return, $response);
            }
            return $return;
        }

        /**
         * cURL callback function for reading and processing headers.
         * Override this for your needs.
         *
         * @param object $ch
         * @param string $header
         * @return integer
         */
        private function readHeader($ch, $header) {

            //Extracting example data: filename from header field Content-Disposition
            $filename = $this->extractCustomHeader('Location: ', '\n', $header);
            if ($filename) {
                $this->response_meta_info['fileUrl'] = trim($filename);
            }
            return strlen($header);
        }

        private function extractCustomHeader($start, $end, $header) {
            $pattern = '/'. $start .'(.*?)'. $end .'/';
            if (preg_match($pattern, $header, $result)) {
                return $result[1];
            }
            else {
                return false;
            }
        }

        public function getHeaders() {
            return $this->response_meta_info;
        }

        /**
         * Cleanup resources
         */
        public function shutdown() {
            if($this->curl) {
                curl_close($this->curl);
            }
        }
    }
7
répondu Gamlet 2014-04-12 18:36:22

solution de travail PHP (HTTP GET) à partir d'avril 2015 (sans PHP 5 SDK):

function get_facebook_user_avatar($fbId){
        $json = file_get_contents('https://graph.facebook.com/v2.5/'.$fbId.'/picture?type=large&redirect=false');
        $picture = json_decode($json, true);
        return $picture['data']['url'];
}

vous pouvez changer 'type' dans parameterr:

Carré:

largeur et hauteur maximales de 50 pixels.

petit

largeur maximale de 50 pixels et hauteur maximale de 150 pixels.

Normal

largeur maximale de 100 pixels et hauteur maximale de 300 pixels.

Grand

largeur maximale de 200 pixels et hauteur maximale de 600 pixels.

7
répondu Xawier 2015-12-11 03:17:41

je pensais peut - être ID sera un outil utile. Chaque fois qu'un utilisateur crée un nouveau compte, il doit obtenir un ID supérieure. J'ai googlé et constaté qu'il existe une méthode pour estimer la date de création de compte par ID et Massoud Seifi de metadatascience.com j'ai de bonnes données.

Enter image description here

Lire l'article:

http://metadatascience.com/2013/03/11/inferring-facebook-account-creation-date-from-facebook-user-id /

Et voici quelques ID à télécharger:

http://metadatascience.com/2013/03/14/lookup-table-for-inferring-facebook-account-creation-date-from-facebook-user-id /

6
répondu Erroid 2014-05-02 21:29:58

Le blog Saisir l'Image d'un Facebook Objet Graphique pourrait offrir une autre forme de solution. Utilisez le code dans le tutoriel avec de L'API de graphique de Facebook et sa bibliothèque PHP SDK.

... Et essayez de ne pas utiliser file_get_contents (sauf si vous êtes prêt à faire face aux conséquences - voir file_get_contents vs curl ).

5
répondu moostring 2017-05-23 11:47:28

êtes-vous préoccupé par la taille de l'image du profil? lors de la mise en œuvre de login avec Facebook en utilisant PHP. Nous allons vous montrer le moyen simple d'obtenir une image de profil grande taille dans Facebook PHP SDK. En outre, vous pouvez obtenir l'image de taille personnalisée de profil Facebook.

définit la dimension de l'image de profil en utilisant la ligne de code suivante.

$utilisateur = $facebook->api('/moi?champs=l'image.largeur(400).hauteur (400)');

voir ce post: http: / / www.codexworld.com/how-to-guides/ get-large-size-profile-picture-in-facebook-php-sdk /

3
répondu sagar jethi 2016-07-29 13:01:20

@NaturalBornCamper,

joli code! Voici une fonction de code 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);
}

ceci retournera le raw L'URL de L'image avatar de Facebook. N'hésitez pas à faire ce que vous voulez avec elle alors!

2
répondu tfont 2014-04-12 18:37:49
URI  = https://graph.facebook.com/{}/picture?width=500'.format(uid)

vous pouvez obtenir le profil URI via outil de recherche d'identité facebook en ligne

vous pouvez également passer le type param avec des valeurs possibles small, normal, large, square.

Consultez documents officiels

1
répondu user2119554 2018-06-05 11:07:02