Affichez un compteur Feedburner plus pertinent!
Au lancement de SeoMix, j'avais donné une première solution pour récupérer le nombre de lecteurs de votre flux RSS Feedburner.
Mais la méthode avait deux défauts : pas de mise en cache des données, et des variations énormes entre chaque journée.
Désormais, vous pouvez affichez la moyenne de votre lecteurs RSS sur une période donnée, le tout mis en cache dans votre base de donnée.
Feedburner manque de fiabilité sur le nombre de vos lecteurs
La solution à laquelle je suis arrivé est un mix de deux solutions, l'une venant de Jean-Baptiste Jung (Catswhoblog) et l'autre de Antti Kokkonen (Zemalf), auxquels j'ai aussi ajouté une fonction par shortcode pour affichez le nombre des lecteurs directement dans le contenu de vos articles
Afficher le nombre de lecteurs Feedburner
Cette fonction récupère la moyenne de vos lecteurs Feedburner sur une période de 7 jours, puis la place en cache dans la base de données de WordPress. La fonction vérifie que le cache est toujours valide avant de faire une requête pour récupérer une valeur plus récente.
Ajoutez le code suivant dans le fichier functions.php de votre thème WordPress :
add_option('myfeeds_count','0','','yes');
add_option('myfeeds_api_timer',mktime() - 10000,'','yes');
function feedburner_readers($feed_id,$interval = 7){
if (get_option('myfeeds_api_timer') < (mktime() - 86400)) {
$today = date('Y-m-d', strtotime("now"));
$ago = date('Y-m-d', strtotime("-".$interval." days"));
$feed_url="https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=".$feed_id."&dates=".$ago.",".$today;
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $feed_url);
$data = curl_exec($ch);
curl_close($ch);
$xml = new SimpleXMLElement($data);
$fb = $xml->feed->entry['circulation'];
$nb = 0;
foreach ($xml->feed->children() as $circ){$nb += $circ['circulation'];}
$mycount = round($nb/$interval);
update_option('myfeeds_count', $mycount);}
update_option('myfeeds_api_timer', mktime());
if (!get_option('myfeeds_count')) return '0';
else return get_option('myfeeds_count');}
Ajoutez ensuite le code suivant là où vous désirez faire apparaître le nombre de lecteurs Feedburner. Pensez à remplacer mon identifiant par le vôtre (fin de l'url de votre flux RSS chez Feedburner).
Personnaliser l'affichage des lecteurs RSS
Modifier le texte
Pour ajouter du texte avant et après, vous devez simplement le coder en dur directement dans votre thème WordPress (sans doute la meilleure solution en termes de performances). Exemple :
Qui donnera par exemple "99 999 abonnés RSS".
Période utilisée pour le nombre de lecteurs
Pour modifier la période à utiliser lors du calcul de la moyenne de vos lecteurs Feedburner, utilisez le code suivant (en remplaçant le chiffre 30 par le nombre de jours désirés).
Mise en cache du nombre de lecteurs Feedburner
On peut aussi modifier la durée de la mise en cache. Dans ce cas, remplacer le chiffre 86400 (5ème ligne) par le nombre de secondes où la donnée doit rester dans la base de données WordPress. Cependant, je vous déconseille de la changer. La valeur est actualisée une fois par jour sur Feedburner, donc je ne vois pas trop l'utilité de lui demander de la vérifier plus fréquemment sur votre blog...
Dans le contenu des articles
Si vous souhaitez en plus afficher le nombre de vos lecteurs Feedburner directement dans le contenu d'un article, utilisez le code suivant à la place du précédent pour votre fichier functions.php.
add_option('myfeeds_count','0','','yes');
add_option('myfeeds_api_timer',mktime() - 10000,'','yes');
add_shortcode("feed-readers", "feedburner_readers");
function feedburner_readers(){
if (get_option('myfeeds_api_timer') < (mktime() - 86400)) {
//Remplacer avec votre identifiant Feedburner et la durée en jours
$feed_id ="seomixfr";
$interval = 7;
$today = date('Y-m-d', strtotime("now"));
$ago = date('Y-m-d', strtotime("-".$interval." days"));
$feed_url="https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=".$feed_id."&dates=".$ago.",".$today;
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $feed_url);
$data = curl_exec($ch);
curl_close($ch);
$xml = new SimpleXMLElement($data);
$fb = $xml->feed->entry['circulation'];
$nb = 0;
foreach ($xml->feed->children() as $circ){$nb += $circ['circulation'];}
$mycount = round($nb/$interval);
update_option('myfeeds_count', $mycount);}
update_option('myfeeds_api_timer', mktime());
if (!get_option('myfeeds_count')) return '0';
else return get_option('myfeeds_count');}
Cette fois-ci, pensez à remplacer votre identifiant Feedburner et la période à utiliser dans ce code (lignes 7 et 8).
Ajoutez ensuite le code suivant quand vous éditez votre article, et le tour est joué :
L'avantage du dernier code est de pouvoir afficher à la fois vos lecteurs Feedburner dans votre thème et dans le contenu de vos articles. Pour continuer à afficher ce nombre dans votre thème WordPress, utilisez ce code (pas de nom ou de période à insérer) :
Remarques, insultes, bugs ou remerciements, pensez à commenter cet article.
Sources :
- How to get a more relevant feedburner count (Catswhoblog)
- Show feedburner subscriber and twitter follower counts (Zemalf)
On a plein d'articles à mixer !
Voici les thématiques abordées par Affichez un compteur Feedburner plus pertinent!:
- Cache de Wordpress -
- Feedburner -
- Flux RSS -
- Functions.php -
- Gérer une communauté -
- Système de cache

Joe - Le 09 juillet 2010, 11:03
Merci pour le code. Clair et bien expliqué comme d’habitude ;)
Fajr Breeze - Yuxx - Le 10 juillet 2010, 19:14
Merci pour le partage, je me lance dès maintenant. Sinon, n’y a t-il pas des plugins pour faire ce travail ?
Kemenn - Le 12 juillet 2010, 13:31
Je rencontre de grandes différences entre le nb d’abonnés chaque jour. Je vais tester ce code pour espérer plus de stabilité. Merci
Daniel Roch - Le 15 juillet 2010, 09:22
@Antiti Kokkonen : your code is very useful, and i used it to improve my own feedburner count for WordPress.
Nicolas Pène - Le 28 juillet 2010, 10:03
Il est vrai que Feedburner n’est plus aussi pertinent qu’avant, en affichant depuis quelques mois qu’un compteur journalier.
Merci pour ce code, je ne manquerais pas de le tester dès que possible.
Lashon - Le 29 août 2010, 15:50
Très bonne idée cette modif de code, effectivement les chiffres affichés sont un peu nébuleux. Vais appliquer ça. Une question si tu veux bien : pour ma part j’ai paramétré mon compte feedburner directement en sous-domaine.
Alors ton code peut-il être: si la function existe… gnagnagna wordpresslangage
Même question pour le code du functions : ajustements ?
Merci
Daniel Roch - Le 30 août 2010, 09:06
@Lashon : je ne suis pas sûr de comprendre ce que tu veux faire. Tu veux pouvoir traduire le rendu du code ?
Guillaume - Le 03 octobre 2010, 11:30
Bonjour,
J’ai essayer votre fonction pour récupérer une moyenne de mes abonnés RSS mais le compteur est toujours à 0.
Y-a-t-il quelques chose d’autre à modifier.
Merci pour votre réponse.
Guillaume.
Daniel Roch - Le 03 octobre 2010, 21:39
@Guillaume : essaie de changer le timing du cache pour voir si cela se met à jour. Vérifie aussi l’identifiant $feed_id et le nombre de jours à utiliser (juste en dessous)
Guillaume - Le 04 octobre 2010, 20:41
Je vais essayer avec les valeurs par défaut et attendre 24 heures. Je vous tiens au courant. Merci
EDIT : Bonjour. Après une journée de test mon compteur est toujours à 0. Je ne sais pas quoi faire?
Daniel Roch - Le 06 octobre 2010, 09:33
Remplace $feed_id par l’identifiant de ton site sur feedburner. Remplace $interval par 1. Remplace au dessus le timer (au lieu de 86400, utilise la valeur 1)
Dis-moi si tu vois ou si tu ne vois pas le nombre d’abonnés Feedburner.
Guillaume - Le 06 octobre 2010, 18:23
Bonsoir et merci pour ton aide.
Dans le fichier functions voici ce que j’ai modifié :
add_option(‘myfeeds_count’,’0′, »,’yes’);
add_option(‘myfeeds_api_timer’,mktime() – 10000, »,’yes’);
function feedburner_readers($feed_id,$interval=7){
if (get_option(‘myfeeds_api_timer’) < (mktime() – 1))
J’ai remplacé le 86400 par 1.
EDIT : Suite du test, j’ai comme valeur 458, ce qui représente mes abonnés RSS aujourd’hui.
EDIT 2 : Suite et fin du test. J’ai l’impression que c’est la valeur 86400 qui coince avec tout fonctionne bien, cela a t-il une incidence sur le fonctionnement de ton script ?
Merci pour ton aide.
Daniel Roch - Le 07 octobre 2010, 09:33
La ligne function ne doit pas être modifiée.
Les valeurs $ se modifie un peu plus bas, juste après le « //Remplacer avec votre identifiant Feedburner et la durée en jours ».
86400 est le nombre de secondes de mise en cache. Utilisez la valeur 1 revient donc à désactiver le cache.
$interval est le nombre de jours sur lequel le calcul doit se faire. C’est donc là que le problème est.
Djib's - Le 22 novembre 2010, 16:14
Bonjour,
J’ai le même soucis que Guillaume. c’est le 86400 qui pose problème, dès que je met cette valeur à 1, le nombre s’affiche mais si je remet à 86400 après, le lendemain le chiffre ne s’actualise pas