(modifié le 4 novembre 2014 à 21:01)

Pré-requis : avoir externalisé son flux RSS chez FeedBurner

Afficher le compteur d'abonnés à votre flux RSS (feedcount) sur votre blog peut être favorable à une croissance du nombre d'abonnés. Je vous déconseille toutefois d'afficher votre compteur en dessous d'un minimum (100) car cela risque d'avoir l'effet l'inverse.

FeedBurner propose un compteur paramétrable au niveau des couleurs du fond, du texte et du choix du texte (rarement utilisé). Mais il faut bien dire que ce compteur est absolument moche et ne s'intègre que très mal dans un design... il fait très vite tâche, à tel point qu'il ne vaut finalement mieux pas l'afficher. Suite à plusieurs demandes de lecteurs de Blogmotion, voici comment récupérer une valeur brute du nombre d'abonnés.

Le fait de récupérer le compteur en variable va nous permettre de l'intégrer à un design, un bouton ou tout autre élément graphique (vous pourrez ensuite utiliser la librairie PHP GD2 par exemple). Avant tout vous devez avoir migré l'URL de votre flux RSS, suite au rachat du service par Google, si ce n'est pas le cas faites-le.

Nous allons implémenter une fonction de récupération de vos abonnés en PHP. Editez le fichier :

/wp-content/votre_theme/functions.php

Pour éviter de solliciter FeedBurner à chaque visite (ce qui ralentirait trop le blog) j'ai implémenté un système de cache. A l'époque où je n'utilisais pas WP-Super-Cache ce système de cache était indispensable... maintenant il ajoute une couche supplémentaire de cache (pas forcément utile).

A l'endroit ou vous souhaitez insérer le compte d'abonnés il suffira d'utiliser notre nouvelle fonction (header.php chez moi) :

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

Passons maintenant au coeur du code PHP avec la fonction nbAboFeed :

function nbAboFeed($feedUri = 'login_feedburner', $feedFile = 'nbfeed.txt') {
 # Licence : Creative Commons
 # Author : Xhark, https://blogmotion.fr
 # en secondes
 $duree_cache = 3600;

 //si le fichier n'existe pas dans le cache (ou trop vieux)
 if (@filemtime($feedFile) &lt; time()-($duree_cache) ) {

 $ch = curl_init();
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_URL, 'https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=' . $feedUri);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  // necessaire pour windows
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);      // necessaire pour windows
 $data = curl_exec($ch);
 curl_close($ch);

 $xml = new SimpleXMLElement($data);
 $nbAbo = (int) $xml-&gt;feed-&gt;entry['circulation'];

 # nbAbo correctement récupéré, écriture dans cache
 if ( $nbAbo &gt; 0 )
 writeFeedFile($feedFile, $nbAbo);
 # si feedburner indisponible
 else
 # si fichier cache existe, renvoit de la valeur
 if(file_exists($feedFile)) return file_get_contents($feedFile);
 # si fichier cache jamais crée et feedburner indispo, msg erreur
 else return 'Erreur, feedburner indispo';
 }

 # déjà dans le cache
 else
 $nbAbo = file_get_contents($feedFile);

 return $nbAbo;
}

function writeFeedFile($feedFile, $nbAbo) {
 $ret = file_put_contents($feedFile, $nbAbo);
 if (!$ret)
 echo 'Erreur ecriture feed';
 return;
}

J'ai jugé bon de séparer la fonction d'écriture du cache, c'est pour cette raison qu'elle n'est pas intégrée à la fonction nbAboFeed. Ce code est fonctionnel mais pas forcément optimisé. Vos propositions d'améliorations sont les bienvenues puisque, comme tout le contenu du blog, ce code source est sous licence Creative Commons.

Le cache est positionné par défaut à 3600 secondes (1 heure), ce qui est amplement suffisant pour suivre l'évolution des abonnés. Évitez toutefois de définir un temps de cache trop élevé, sinon vos visiteurs auront l'impression que votre nombre d'abonnés stagne.

Documentation Awareness API

Auteur : Mr Xhark

Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter