Blog Tool Box

WordPress : afficher son nombre brut de fans Facebook

A la suite du précédent article qui expliquait comment afficher son nombre de followers Twitter sur son blog, voici la même méthode mais appliquée cette fois-ci au nombre de fans d’une Page Facebook.

Nous allons ici exploiter l’API Graph de Facebook qui permet d’accéder puis d’extraire très facilement les informations publiques de n’importe quel « objet » dans le « graphique social » de Facebook : page, groupe, profil, évènement, application, etc. Dans notre cas, ce sera tout simplement avec l’identifiant d’une Page que nous allons être en mesure d’en récupérer son nombre de Fans.

Voici le code à intégrer au fichier functions.php de votre thème :

function get_fan_count($page){
  $count = get_transient('fan_count');
  if ($count !== false){ return $count; }
  else{
    $count = 0;
    $data = wp_remote_get('https://graph.facebook.com/'.$page);
    if (!is_wp_error($data)) {
      $value = json_decode($data['body'],true);
      $count = $value['likes'];
    }
    set_transient('fan_count', $count, 60*60);
    return $count;
  }
}

Pour connaitre l’identifiant unique d’une Page, il suffit simplement de regarder son adresse internet :

  • Si l’adresse est de ce type : http://www.facebook.com/pages/Mashable-France/7545999282 alors l’identifiant de la Page sera 7545999282
  • Si l’adresse est de ce type : http://www.facebook.com/cocacola c’est que la Page a un nom d’utilisateur personnalisé, son identifiant sera donc cocacola

Une requête vers l’API Graph de Facebook associée à cet identifiant nous retournera toutes les informations de cette Page, dont son nombre de fans. Pour ceux qui souhaiteraient plus d’explications sur le code, je vous renvoie vers le précédent article « afficher son nombre de followers Twitter » où tout y est expliqué !

Pour afficher notre nombre de fans Facebook, il suffit maintenant d’appeler notre fonction où nous le voulons dans notre thème en lui donnant l’identifiant de la Page en paramètre :

<?php echo get_fan_count("cocacola"); ?>
ou encore
<?php echo get_fan_count("7545999282"); ?>

  • Anthony

    Bon, celui de Twitter marche super, mais pour celui là il me retourne 0 avec get_fan_count(« molusk »)… testé sans plugins et avec le thème par défaut. Bizarre…

    Par ailleurs tu devrais ajouter un lien dans le précédent article vers celui-là.

  • Maxime Guernion

    C’est justement avec ta Page que j’ai fait mes tests. Je viens de retester le code et chez moi il me sort bien 452 fans pour ta Page. Essayes de modifier temporairement (juste pour le test) cette ligne :

    delete_transient('fan_count');
    $count = get_transient('fan_count');
    if ($count !== false){ return $count; }

    Le « delete_transient » va forcer la requête vers Facebook à chaque chargement. Peut-être que la requête ou Facebook a mal fonctionné et a renvoyé un nombre de 0 fans à ce moment et c’est ce 0 qui a été enregistré pour 1h, donc sans le « delete_transient », ca t’affichera toujours 0.

  • Anthony

    Toujours pas, même en enlevant la partie du code avant le else et la ligne du transient :(

    Sinon j’arrive bien a récupéré le nombre de fans, mais en passant par l’API et Facebook.php, ce qui est plus tordu. Tu crois que le bug peut venir d’une config serveur ? (je suis chez Gandi)

  • Maxime Guernion

    C’est étrange, car si on accède tout bêtement à l’adresse Facebook à la main dans un navigateur (Firefox ou Chrome peuvent afficher le résultat) https://graph.facebook.com/molusk on voit bien que c’est une bête liste d’infos en clair :

    {
    "id": "89612204442",
    "name": "Molusk",
    "picture": "http://profile.ak.fbcdn.net/hprofile-ak-snc4/hs228.ash2/50354_89612204442_1376984_s.jpg",
    "link": "http://www.facebook.com/molusk",
    ....
    "fan_count": 452
    }

    Donc je vois pas trop pourquoi Gandi ne pourrait pas appeler cette page et y récupérer le contenu. C’est la même requête que Twitter et la réponse est dans le même format. Si tu te débrouilles un peu en PHP, faudrait voir ce qu’on a comme réponse brute en retour avec simplement la requête vers Facebook (via wp_remote_get).

  • Anthony

    Merci pour ton aide, je vais voir demain avec mes voisins Geek de chez Gamersband.com (qui n’aiment pas WordPress ;) Je te tient au courant.

  • Scrit!k

    Perso, impossible de le faire fonctionner, json_decode retourne NULL…

  • Maxime Guernion

    C’est peut-être le même problème que Anthony. Il est chez Gandi et le serveur est mal configuré donc lorsqu’on fait la requête vers Facebook, qui est une page en HTTPS, on se fait jeter de Facebook pour mauvais certificat. Ça doit probablement venir d’une mauvaise configuration du serveur pour toi aussi.

    Anthony a réussi a contourner le problème en utilisant le SDK de Facebook mais c’est plus compliqué.

  • titi

    Pas mal ! Attention j’aurais mis une condition lors de l’appel de la fonction. Pour être propre :)

  • Matthieu

    Très utile cette fonction ! Merci Maxime.
    En fait quand je l’ai installée tout a fonctionné et puis genre 2 heures plus tard compteur à 0 :((
    En rajoutant le delete_transient() tout est revenu à la normal :))

  • Maxime Guernion

    Oui voila ca arrive que au moment de l’appel vers Facebook, il nous renvoie 0 fan. Ce qu’on peut faire c’est modifier la fonction et lancer un second appel si le précédent renvoie 0, à ce moment là on n’enregistrera que un nombre de fan > 0. Mais si Facebook déconne, on va lancer un appel à chaque chargement de page et ce ne sera plus très performant

    Ou alors, ce que j’ai fait pour Twitter, si le transient est à zero, je n’affiche rien du tout (et on verra bien à la prochaine mise à jour dans les X heures) :

    <?php $count = get_follower_count("maximeguernion"); if($count){ echo " - $count followers"; } ?>

  • Anthony

    Hey salut Matthieu, ça avance votre nouveau site ? Nous on a des bons retours…

  • Fabien

    Attention !
    Petit changement : la fonction de graph Facebook renvoie désormais « likes » à la place de « fan_count », en tous cas chez moi
    J’ai donc du faire la correction !

    Pareil chez vous ?

  • Maxime Guernion

    Ah oui en effet ! Ils ont changé ça très récemment alors ! Merci pour l’info, j’ai mis à jour l’article :)

  • Fabien

    Précisément hier vers 20h ;)

  • Aurélien Denis

    Salut,

    j’avais appliqué cette technique pour afficher les fans de Facebook et tout marchait bien… jusqu’à il y a quelques jours.

    Pour moi les lignes de code sont identiques… où est la mise à jour dans l’article en fait ?

    Merci ! ;)

  • Fred

    Bonjour,
    existe-t-il un bout de code permettant d’afficher, en brut, le nombre d’amis facebook (pas les fans).

    J’ai testé avec le nom de profil, mais il me renvoie le même nombre que pour les fans.

  • SIGÜENZA

    Coucou tout le monde,

    J’ai un message d’erreur : Call to undefined function get_transient ()

    Est ce que vous savez pourquoi ?

    Merci d’avance :-)

  • How2

    Salut, j’ai trouvé un bout de code qui fonctionne correctement chez moi… Je n’ai pas grande connaissance en php mais cette fonction affiche bien le nombre de fan :

    $cURLSession = curl_init();
    curl_setopt($cURLSession, CURLOPT_URL, sprintf('http://graph.facebook.com/%s', 'XXXXXXXXXXX')); // remplacer XXXXXXXXXXX par l'id de votre page Facebook
    curl_setopt($cURLSession, CURLOPT_RETURNTRANSFER, 2);
    curl_setopt($cURLSession, CURLOPT_CONNECTTIMEOUT, 2);
    $apiResult = curl_exec($cURLSession);
    curl_close($cURLSession);

    $apiResult = json_decode($apiResult);

    echo $apiResult->fan_count;

    !!! attention !!!
    comme pour les autres fonctions il faut bien mettre « likes » à la place de « fan_count ».
    Donc si sa peut aider :),

    l’original : http://blog.slynett.com/developpement-web/php/php-recuperer-le-nombre-de-fans-de-votre-page-facebook.html

    (par contre comme je n’y comprend pas grand chose, je vous laisse juger par vous même)

    sinon merci pour votre boulot

  • Cedric

    Merci pour cette fonction :) je l’ai ajoutée sur mon blog : super pratique!