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) < 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->feed->entry['circulation']; # nbAbo correctement récupéré, écriture dans cache if ( $nbAbo > 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.
Auteur : Mr Xhark
Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter
19 commentaires
Excellent, je bookmarke.
A mon avis si tu mets le cache à 1 jour c'est largement suffisant. De toute façon, FB le met à jour une seule fois par jour... donc...
Merci encore.
@Lionel : avant que le service ne se fasse racheter par Google, la màj du compteur était plutôt aléatoire (et foireuse), mais tu as raison aujourd'hui une fois par jour devrait suffir
"[BLOG] : Ovi App Wizard Lets You Make Your App In Minutes http://bit.ly/aD3cXq"
Créer vos applis web de votre site sur les NOKIA grâce au Flux RSS!!
Blogmotion tu peut faire le tien?
J'aime bien la solution pour régler le problème du 0 subscribers qui est assez fréquent tout de même...
Je vais l'utiliser sur mon blog...
Merci !
Johan
@Itchi68 : je viens de soumettre l'application sur l'OviStore
Article publié comme promis, merci 😉
@Mr Xhark super merciiii.
Par principe de précaution, je ferais un htmlspecialchars($var, ENT_QUOTES)
En tout cas bel article qui devrait en aider plus d'un !
Je pense l'appliquer prochainement à mon blog, merci pour l'astuce 🙂
Bonjour,
J'ai essayé de mettre en œuvre ce code et je n'arrive pas à récupérer le nombre d'abonné.
Voici le résultat avec mon ID quand j'utilise le chemin http directement dans mon navigateur (j'ai fait pareil avec ton flux rss Xhark et même punition 0):
"
−
−
Y-a-t-il d'autres modifications à faire pour récupérer mon nombre d'abonnés.
Merci Guillaume
@guillaume : as-tu fait un copier/coller du billet ? car si oui les fautes de syntaxes dues WordPress sont nombreuses, il faut cliquer sur l'icône en haut à gauche du code source pour l'avoir en brut.
Sinon il faut que cURL soit activé sur ton serveur apache, est-ce le cas ?
J'utilise ce script sur Blogmotion, il marche sans souci
Merci pour ta réponse rapide.
J'ai envoyé un mail à mon hébergeur pour lui demandé si curl est activé.
Mais il y a une chose que je comprends pas, comment se fait-il lorsque j'utilise l'adresse HTTP de ton script, cela me retourne toujours circulation=0 pour ton flux et le mien.
Merci pour ta réponse.
Je pense que ça vient du fait que cURL n'est pas actif
J'ai été un peu plus loin dans la doc et j'ai découvert que j'ai un décalage de 2 jours dans mes abonnées. Voici donc le code à mettre :
http://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=quick-tutoriel&dates=2010-08-03
Si je mets ce code, je récupère bien mes abonnées, sinon pour les dates 04-08-2010 et 05-08-2010 je n'ai rien.
Et pour ton flux c'est pareil.
Bizarre.
Guillaume.
J'aurai besoin d'un complément d'information sur ton script, en fait 2 questions :
- faut-il créé le fichier nbfeed.txt manuellement ou est-il créé automatiquement à la première exécution du script ?
- ou doit on positionner le fichier nbfeed.txt dans notre arborescence ?
Merci pour ton aide précieuse.
Guillaume.
Tout dépend là aussi de la configuration de ton hébergeur et des droits Apache/Linux. En théorie tu n'as pas besoin de le créer à la main (voir la doc http://fr.php.net/file_put_contents)
Pour info la doc de l'API est ici http://code.google.com/intl/fr/apis/feedburner/awareness_api.html
Enfin, pour cette histoire de date c'est assez étrange, mais un autre script l'utilise http://www.opencrypt.com/blog.php?a=24
Merciiiiiiiii beausoup pour cet article!!!Cela va beaucoup m'aider 🙂
Je ne vois pas l’intérêt d'afficher le nombre d'abonnés au flux rss, qu’es-que cela apporte aux visiteurs ?