<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>La Case de l&#039;Oncle Tom &#187; wp-cron</title>
	<atom:link href="http://case.oncle-tom.net/tag/wp-cron/feed/" rel="self" type="application/rss+xml" />
	<link>http://case.oncle-tom.net</link>
	<description>Développement Web, bonnes pratiques et performances</description>
	<lastBuildDate>Sun, 25 Dec 2011 19:33:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="search"
           href="http://case.oncle-tom.net/opensearch"
           type="application/opensearchdescription+xml"
           title="Content Search" />		<item>
		<title>Affichage personnalisé de ses abonnés Feedburner</title>
		<link>http://case.oncle-tom.net/2009/affichage-personnalise-abonnes-feedburner/</link>
		<comments>http://case.oncle-tom.net/2009/affichage-personnalise-abonnes-feedburner/#comments</comments>
		<pubDate>Thu, 14 May 2009 05:00:23 +0000</pubDate>
		<dc:creator>Oncle Tom</dc:creator>
				<category><![CDATA[Développement Web]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[awareness]]></category>
		<category><![CDATA[feedburner]]></category>
		<category><![CDATA[wp-cron]]></category>
		<category><![CDATA[xml]]></category>
		<guid isPermaLink="false">http://case.oncle-tom.net/?p=1359</guid>
		<description><![CDATA[Comment intégrer un compteur d'abonnés Feedburner sous forme textuelle avec WordPress ? En quelques lignes, nous allons planifier une récupération quotidienne de notre compteur d'abonnés et l'intégrer dans le thème graphique. Au menu : WP-Cron, Feedburner Awareness et SimpleXML (PHP 5).]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-thumbnail wp-image-1360" title="Compteur d'abonnés Feedburner au format texte" src="http://case.oncle-tom.net/images/2009/05/compteur-abonnes-feedburner-texte-138x76.png" alt="Compteur d'abonnés Feedburner au format texte" width="138" height="76" /></p>
<p>Qu&#8217;on se le dise : le compteur de lecteurs Feedburner par défaut est sympa mais <strong>s&#8217;intègre mal dans n&#8217;importe quel design de site Web</strong>. <a href="http://case.oncle-tom.net/2009/04/15/menage-printemps/">Lors de la refonte du thème graphique de ce blog</a>, j&#8217;ai eu envie de remettre mon compteur d&#8217;abonnés Feedburner mais sous forme de texte. Même si le chiffre indiqué peut se révéler inexact, j&#8217;estime que c&#8217;est un <strong>indicateur intéressant</strong> sur la consultation d&#8217;un flux. Je suis également convaincu qu&#8217;à partir d&#8217;un certain nombre de lecteurs, ça facilite la conversion : si le nombre est élevé, c&#8217;est que le site est bien  &#8230; donc je m&#8217;abonne.</p>
<p>Bref, j&#8217;ai voulu implémenter ça de <strong>manière propre et peu gourmande</strong> avec <a href="http://codex.wordpress.org/Category:WP-Cron_Functions"><acronym title="WordPress">WP</acronym>-Cron</a>, l&#8217;<acronym title="Application Programming Interface">API</acronym> <a href="http://code.google.com/intl/fr/apis/feedburner/awareness_api.html">Feedburner Awareness</a> et la classe <a href="http://fr.php.net/simplexml"><acronym title="Pre-Hypertext Processing">PHP</acronym> 5 SimpleXML</a>. Une poignée de lignes de code suffisent, pourquoi s&#8217;en priver ? <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p><span id="more-1359"></span></p>
<h3>Le besoin</h3>
<p>La plupart des exemples que l&#8217;on trouve sur le Web attaquent directement l&#8217;<acronym title="Application Programming Interface">API</acronym> Feedburner Awareness. Autrement dit, votre page ne s&#8217;affichera pas tant que l&#8217;<acronym title="Application Programming Interface">API</acronym> n&#8217;aura pas été appelée et son résultat interprété. Étant donné que cette valeur change 1 fois par jour, il vaut mieux aborder la chose différemment. C&#8217;est pourquoi je voulais :</p>
<ul>
<li>récupérer 1 à 2 fois par jour la valeur courante du nombre de lecteurs ;</li>
<li>accéder à cette valeur simplement depuis mes templates (avec un appel à get_option() par exemple).</li>
</ul>
<p><strong>On y gagne sur tous les fronts</strong> : on ne ralentit pas l&#8217;affichage côté utilisateur, l&#8217;information est récupérée en arrière-plan, nos templates graphiques restent simples.</p>
<h3>Activation du service Feedburner Awareness</h3>
<p>La première chose à faire est d&#8217;<strong>activer l&#8217;<acronym title="Application Programming Interface">API</acronym> Awareness pour votre flux</strong>. Cette <acronym title="Application Programming Interface">API</acronym> permet de récupérer des statistiques sur un flux Feedburner au format <acronym title="eXtensible Markup Language">XML</acronym>. On y retrouve entre autre le nombre de lecteurs. On peut obtenir ces informations pour la date courante, la veille ou une plage de jours par exemple.</p>
<p>C&#8217;est vraiment simple à utiliser, la <a href="http://code.google.com/intl/fr/apis/feedburner/awareness_api.html">documentation Feedburner Awareness</a> est complète dans son genre.</p>
<div id="attachment_1361" class="wp-caption aligncenter" style="width: 310px"><a href="http://case.oncle-tom.net/images/2009/05/feedburner-awareness-activation.png"><img class="size-medium wp-image-1361" title="Activation du service Feedburner Awareness" src="http://case.oncle-tom.net/images/2009/05/feedburner-awareness-activation-300x166.png" alt="Activation du service Feedburner Awareness" width="300" height="166" /></a><p class="wp-caption-text">Activation du service Feedburner Awareness</p></div>
<p><strong>Remarque</strong> : cette <acronym title="Application Programming Interface">API</acronym> s&#8217;active par flux Feedburner de manière individuelle et est désactivée par défaut.</p>
<h3>Extraction du nombre de lecteurs</h3>
<p>Dans un premier temps, on va <strong>récupérer le nombre de lecteurs pour son flux</strong>. On verra dans un second temps comment l&#8217;automatiser.</p>
<p>Le principe est simple : on appelle une <acronym title="Uniform Resource Identifier">URI</acronym> avec son identifiant de flux Feedburner (exemple dans mon cas : http://feeds.feedburner.com/LaCaseDeLoncTom). On lui spécifie 2 dates : la veille et l&#8217;avant-veille. Pourquoi ? Car les données de la veille ne sont pas toujours existantes : les compteurs sont actualisés à 11h heure française. L&#8217;idée est de pouvoir se mettre un nombre de lecteurs sous la dent.</p>
<pre><code class="php">define('FEEDBURNER_URI', 'LaCaseDeLoncTom');
function oncletom_update_feed_readers()
{
  $uri = sprintf('https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=%s&amp;dates=%s,%s',
    FEEDBURNER_URI,
    date('Y-m-d', strtotime('-2 day')),
    date('Y-m-d', strtotime('-1 day'))
  );
  $http = new WP_Http();
  $readers = (int)get_option('feed_readers');
  $response = $http-&gt;get($uri);
  $xml = new SimpleXMLElement(WP_Http::chunkTransferDecode($response['body']));
  $feed = (array)$xml-&gt;feed;
  foreach (array_reverse($feed['entry']) as $entry)
  {
    if ((int)$entry['circulation'])
    {
      $readers = (int)$entry['circulation'];
      update_option('feed_readers', $readers);
      break;
    }
  }
  return $readers;
}</code></pre>
<p>Quelques remarques :</p>
<ul>
<li>j&#8217;ai utilisé la classe  <code>WP_http</code> qui fournit une abstraction d&#8217;appel à des ressources distantes. C&#8217;est le plus propre pour fonctionner sur la majorité des installations ;</li>
<li>j&#8217;inverse le tableau des résultats car ils sont triés par ordre chronologique <em>croissant</em> par défaut  ; nous voulons l&#8217;information la plus fraîche d&#8217;abord ;</li>
<li>on aurait pu utiliser un paramètre de fonction pour fournir l&#8217;<acronym title="Uniform Resource Identifier">URI</acronym> du flux <em>mais</em> dans l&#8217;étape d&#8217;après, il se trouve qu&#8217;on ne pourra lui en passer &#8230; dommage ;</li>
<li>on aurait également pu remplacer la constante par un appel à un <code>get_option()</code> et pourquoi pas, récupérer l&#8217;ID depuis un réglage du plugin Feedburner FeedSmith.</li>
</ul>
<h3>Programmation d&#8217;une tâche planifiée avec <acronym title="WordPress">WP</acronym>-Cron</h3>
<p>On en arrive à la partie sympa : programmer cette récupération du nombre d&#8217;abonnés pour qu&#8217;on n&#8217;ait pas de travail manuel à faire. L&#8217;idéal est de placer ceci dans un plugin. Personnellement je l&#8217;ai inséré dans le <em>hook</em> <code>switch_theme()</code> de mon thème pour économiser un fichier/plugin.</p>
<pre><code class="php">//dans un fichier wp-content/plugins/oncletom-awareness-cron.php
/*
Plugin Name: Simple Feedburner Awareness
Description: Asynchroneous feed readers collector scheduled twice a day.
Author: Oncle Tom
Version: 1.0
Author URI: http://case.oncle-tom.net/
Plugin URI:
  This plugin is released under version 3 of the GPL:
http://www.opensource.org/licenses/gpl-3.0.html
*/
register_activation_hook(__FILE__, 'oncletom_awareness_cron_activate');
register_deactivation_hook(__FILE__, 'oncletom_awareness_cron_deactivate');
add_action('oncletom_cron_twicedaily_hook', 'oncletom_update_feed_readers');
function oncletom_awareness_cron_activate()
{
  add_option('feed_readers', 0, '', 'yes');
  wp_schedule_event(time(), 'twicedaily', 'oncletom_cron_twicedaily_hook');
}
function oncletom_awareness_cron_deactivate()
{
  delete_option('feed_readers');
  wp_clear_scheduled_hook('oncletom_cron_twicedaily_hook');
}</code></pre>
<p>Vous vous souvenez encore de notre fonction <code>oncletom_update_feed_readers()</code> ? Et bien on pourrait la rajouter dans ce plugin pour tout avoir au même endroit. L&#8217;organisation de votre code vous appartient <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Quoiqu&#8217;il en soit, une fois le plugin activé, <strong>tout est prê</strong>t : il ne reste qu&#8217;à intégrer le compteur d&#8217;abonnés dans le thème. C&#8217;est notre prochaine étape.<br />
Juste une remarque : la fonction <code>wp_schedule_event()</code> prend comme dernier argument un nom de <em>hook</em> et non un nom de fonction.</p>
<h3>Intégration dans le thème</h3>
<p>C&#8217;est la partie la plus simple et pour cause, un simple appel à <code>get_option('feed_readers')</code> nous retourne le nombre d&#8217;abonnés. On ne pouvait pas faire plus rapide <img src='http://case.oncle-tom.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<pre><code class="php">&lt;p&gt;J'ai &lt;?php echo get_option('feed_readers') ?&gt; abonnés&lt;/p&gt;</code></pre>
<h3>Conclusion</h3>
<p><strong>WordPress fournit tous les mécanismes</strong> pour accéder aisément à des données de manière asynchrone. Il ne nous a pas coûté grand chose de collecter le flux <acronym title="eXtensible Markup Language">XML</acronym> et de l&#8217;enregistrer. En le faisant ainsi en arrière plan, on évite toute gêne pour l&#8217;utilisateur et tout traitement superflu exécuté en affichage.</p>
<p>Assez étonnamment, je n&#8217;ai croisé <a href="http://wordpress.org/extend/plugins/tags/awareness">aucune extension dans le catalogue WordPress</a>. J&#8217;espère que ça vous dépannera et que votre thème graphique appréciera !<br />
<strong>Mise à jour</strong> : aucun plugin n&#8217;était tagué <em>awareness</em> ; <a href="http://wordpress.org/extend/plugins/feedburnercount/">FeedBurnerCount</a>, <a href="http://wordpress.org/extend/plugins/feed-subscriber-stats/">Feed Subscriber Stats</a> et <a href="http://wordpress.org/extend/plugins/feedburner-text-counter-v10/">Feedburner Text Count</a> produisent très probablement le même résultat que le contenu de cet article.</p>]]></content:encoded>
			<wfw:commentRss>http://case.oncle-tom.net/2009/affichage-personnalise-abonnes-feedburner/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

