[PHP / WordPress] Récupérez et affichez le nombre d’abonnés à vos flux RSS


Dans mon précédent thème, j’utilisais la fonction développée par Xhark de Blogmotion pour récupérer et afficher le nombre d’abonnées à mon flux RSS.

Très pratique, elle permet de faire son affaire parfaitement. Mais avec l’arrivée de mon nouveau thème, j’ai essayé de gommer les quelques défauts que j’y trouvais.

Premièrement, le compteur que donne Feedburner varie énormément d’un jour à l’autre. Ensuite, la fonction de Xhark tire parti d’un fichier local pour réaliser son cache. Rien à redire là dessus, sauf que le test d’expiration réalise beaucoup de lecture sur le disque (autant que d’affichage de page). Philosophiquement, ça me gène.

Voici donc ma modeste contribution pour tenter d’améliorer cette fonction. J’espère qu’elle plaira à Xhark (c’est pour le © ;) ) :

function websourcing_feedburner_followers_count($feedUri = 'id_feedburner_de_votre_flux', $interval=7, $timeout=3600) {
echo websourcing_get_feedburner_followers_count($feedUri, $interval, $timeout);
}

function websourcing_get_feedburner_followers_count($feedUri = 'id_feedburner_de_votre_flux', $interval=7, $timeout=3600) {
	$fbopt = get_option("feedburnerfollowerscount");
	$last = mktime() - $timeout;	
	
	if ($last > $fbopt['lastcheck']){
		$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=".$feedUri."&dates=".$ago.",".$today;

		$ch = curl_init();
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_URL, $feed_url);
		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 ) {
			$fbopt['count'] = $nbAbo;
			$fbopt['lastcheck'] = mktime();
			update_option("feedburnerfollowerscount",$fbopt);
		}
 }
 
 return $fbopt['count'];
}

Le premier changement consiste à utiliser des paramètres supplémentaires dans l’url de Feedburner pour faire une moyenne sur N jours.

$feed_url="https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=".$feedUri."&dates=".$ago.",".$today;

Notez que le paramètre &dates=X,Y réalise la moyenne en les dates X et Y. Il faut donc calculer la date X par rapport à aujourd’hui. C’est ce que permet le code suivant :

$today = date('Y-m-d', strtotime("now"));
$ago = date('Y-m-d', strtotime("-".$interval." days"));

L’intervalle permet de choisir le nombre de jour pour faire la moyenne. Chez moi c’est 7.

Il suffit d’utiliser ensuite ces variables dans l’url (voir ci dessus).

 
La seconde amélioration consistait à tirer parti du cache natif de WordPress, plutôt que de passer par un fichier. C’est ce que je réalise en déclarant l’option suivante :

$fbopt = get_option("feedburnerfollowerscount");

Le test d’expiration devient donc :

if ($last > $fbopt['lastcheck']){ ...}

Si la requête renvoie une valeur, il faut mettre à jour le cache :

if ( $nbAbo > 0 ) {
	$fbopt['count'] = $nbAbo;
	$fbopt['lastcheck'] = mktime();
	update_option("feedburnerfollowerscount",$fbopt);
}

Et voila le travail. Le top avec cette méthode c’est que l’on tire vraiment parti du cache objet de WordPress, et les plugins de cache tels W3 Total Cache sont parfaitement compatibles.

Comme je suis un ninja, vous remarquerez que j’utilise deux fonctions, dont l’une me retourne la valeur et l’autre me l’affiche. Je fais toujours comme ça, ca me permet d’avoir un usage versatile.
Un peu comme Automattic le fait avec les fonctions de WordPress : the_title() et get_the_title(), …

Si vous avez d’autres « trucs », n’hésitez pas à partager.