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 en feu
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 :

// Nombre de followers Feedburner
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).

<?php if (function_exists('feedburner_readers')) {echo feedburner_readers('seomixfr');}?>

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 :

<?php if (function_exists('feedburner_readers')) {echo feedburner_readers('seomixfr');}?> abonnés RSS

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).

<?php if (function_exists('feedburner_readers')) {echo feedburner_readers('seomixfr',30);}?> abonnés RSS

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…

	if (get_option('myfeeds_api_timer') < (mktime() - 86400)) {

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.

// Nombre de followers Feedburner
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é :

[feed-readers]

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) :

<?php if (function_exists('feedburner_readers')) {echo feedburner_readers();}?>

Remarques, insultes, bugs ou remerciements, pensez à commenter cet article.

Sources :