PHP : Récupérer le nombre d’abonnés à votre blog

Le 10 janvier 2013 — par

Billet écrit par Joffrey Lacour
Blogueur sur Geek&Hype.

Tous les blogs possèdent aujourd’hui une page Facebook, un compte Twitter et bien sûr un flux RSS. Petit ou gros, le nombre d’abonnés à ces différents moyens d’être tenu au courant des derniers articles a de l’importance pour vous comme pour vos lecteurs, afin de se faire une idée de l’audience de votre blog. Grâce à feu Feedburner et maintenant URI.LV ainsi qu’aux différentes API de ces services, il est possible d’intégrer aisément à WordPress le total de ces visiteurs potentiellement réguliers ; et sans plug-in.

Nous allons donc voir à travers ce petit tutoriel comment faire des requêtes sur les API Facebook, Twitter, Feedburner et URI.LV, les mettre en cache avec WordPress et les afficher dans votre thème.

1. Nombre d’abonnés Twitter

Tout d’abord, avec un client FTP ou bien l’éditeur de WordPress, naviguez jusqu’au fichier functions.php de votre thème. À la suite des fonctions éventuellement présentes, ajoutez ce code :

function subs_twitter() {

    $json = wp_remote_get('http://api.twitter.com/1/users/show.json?screen_name=votrecompte');

    if(is_wp_error($json))
        return false;

    $twitterdata = json_decode($json['body'], true);

    return intval($twitterdata['followers_count']);
}

Ici, on fait simplement une requête à l’API de Twitter en indiquant de quel compte on souhaite récupérer les informations. Pensez bien à remplacer votrecompte par le nom de votre compte Twitter.

WordPress dispose d’une fonction comparable à cURL, qui a l’avantage de pouvoir être couplée à is_wp_error() dans le cas où la page serait inacessible. Twitter retourne un tableau en JSON avec la propriété followers_count, que l’on décode puis retourne pour la suite.

Si vous le souhaitez, vous pouvez déjà afficher quelque part votre nombre d’abonnés Twitter, en ajoutant par exemple à sidebar.php ce code à l’endroit désiré :

<?php echo subs_twitter(); ?> abonnés Twitter

L’inconvénient est qu’à chaque chargement d’une page où la sidebar est affichée, une requête sera effectuée. Si Twitter est indisponible, que vous n’avez aucun système de cache (comme WP Super Cache ou W3 Total Cache) ou que le quota de requêtes a été atteint, c’est tout votre blog qui est ralenti voire indisponible…

2. Abonnés Facebook et URI.LV

Continuons donc avec Facebook, URI.LV et/ou Feedburner. Toujours dans le fichier functions.php, ajoutez ces 3 nouvelles fonctions :

function subs_facebook() {

    $json = wp_remote_get('http://graph.facebook.com/votrecompte');

    if(is_wp_error($json))
        return false;

    $facebookdata = json_decode($json['body'], true);

    return intval($facebookdata['likes']);
}

function subs_urilv() {

    $json = wp_remote_get('http://feeds.uri.lv/votrecompte.js');

    if(is_wp_error($json))
        return false;

    $urilvdata = json_decode($json['body'], true);

    return intval($urilvdata['subscribers']);
}

function subs_feedburner() {

    $xml = wp_remote_get('http://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=votrecompte');

    if(is_wp_error($xml))
        return false;

    $feedburnerdata = new SimpleXMLElement($xml['body']);

    return intval($feedburnerdata->feed->entry['circulation']);
}

Encore une fois, pensez à remplacer votrecompte par le nom de votre compte selon le service. Pour Facebook, il s’agit de l’URL de la page Facebook ou bien de l’ID de la page si vous n’avez pas encore défini de username. Vous pouvez supprimer la fonction que vous n’utiliserez pas, selon si vous passez par Feedburner ou URI.LV pour vos abonnés RSS.

Comme précédemment, chaque fonction peut déjà être affichée directement à l’endroit désiré, avec les risques que cela comporte. Mais puisque l’idée est d’afficher le total et de mettre en cache le tout, passons à la suite.

3. Mise en cache

Nous allons maintenant créer une (avant) dernière fonction qui va utiliser la Transients API de WordPress. Contrairement à une mise en base de données traditionnelle, cette méthode consiste à stocker des valeurs temporaires un certain temps. C’est rapide et très bien intégré, mais surtout parfait pour notre besoin.

Encore et toujours dans le fichier functions.php de votre thème, ajoutez cette fonction :

function subs_transient($name = 'twitter') {

    $transname = 'subs-transient-'.$name;
    $cache = 1;

    if (false === ($trans = get_transient($transname))) :

        $func = 'subs_'.$name;

        if (function_exists($func)) {
            $trans = $func();
        } else {
            $trans = 'Function not found.';
        }

        if (!absint($trans) > 0)
            $trans = get_transient($transname . '-old');

        set_transient($transname, $trans, 60 * 60 * $cache);
        set_transient($transname.'-old', $trans, 3 * 60 * 60 * $cache);
    endif;

    return $trans;
}

La seule valeur que vous pouvez modifier ici est $cache. Exprimée en heures, cette variable définit le temps de mise en cache via l’API Transients. Si vous voulez que le nombre d’abonnés soit mis à jour tous les jours, il faudra donc indiquer la valeur de $cache à 24.

4. Calcul et affichage du total

C’est maintenant au tour des choses sérieuses. On a donc nos différentes fonctions par service, récupérant le nombre d’abonnés à chacun d’entre eux, ainsi que la fonction de mise en cache. Ajoutez cette dernière fonction :

function subs_total() {
    $subssum = subs_transient('twitter') + subs_transient('facebook') + subs_transient('urilv');
    $subssum = number_format($subssum, 0, ',', ' ');

    echo $subssum;
}

Vous pouvez supprimer la seconde ligne si vous ne souhaitez pas séparer les milliers. Enfin, à l’endroit où vous souhaitez afficher le total :

<?php if (function_exists('subs_total')) subs_total(); ?> abonnés

Et voilà. Désormais, selon la durée de mise en cache définie dans subs_transient(), votre nombre d’abonnés sera mis à jour automatiquement, sauvegardé temporairement dans le cache de WordPress, puis affiché dans votre thème. Vous pouvez retrouver le script en entier sur ce Gist.

Bonus : afficher le détail

Comme on l’a vu dans la première étape, il est possible d’afficher le détail de chaque type d’abonné. Désormais, puisque tout est mis en cache, vous pouvez utiliser cette méthode, bien plus sûre :

<?php echo get_transient('subs-transient-twitter'); ?> abonnés Twitter
<?php echo get_transient('subs-transient-facebook'); ?> fans Facebook
<?php echo get_transient('subs-transient-urilv'); ?> lecteurs RSS
S'abonner au flux RSS du blog
Recevoir les nouveaux articles par e-mail :