Temps de lecture : 6 minutes

Dans la première partie de ce thème nous avons vu comment récupérer les différentes listes de lectures et les abonnements de l’utilisateur. Si les requêtes étaient assez nombreuses, elles étaient plutôt simples à mettre en œuvre, notamment de par le format des résultats, en XML.

Dans cette deuxième partie il y aura beaucoup moins de requêtes mais le traitement sera rendu plus complexe par l’utilisation par Google du format ATOM pour fournir les articles correspondant à chaque liste de lecture. Il est possible d’exploiter directement de format dans VB.Net par l’utilisation de classes créées spécialement pour çà, mais par soucis de cohérence j’ai utilisé une fonction de conversion de format de l’ATOM vers le XML. Il faudra par la suite gérer l’affichage des articles dans une liste dédiée dans la fenêtre de l’application.

Mais avant d’aller plus loin, il est intéressant de préciser que le format ATOM a été créé pour palier certaines lacunes du XML en terme de flexibilité dans le contenu du document généré. Google a donc très probablement considéré que pour les listes des articles le XML devait s’avérer trop strict pour répondre à ses besoins. Cependant le programme que je conçois s’en accommodera sans problème.

Après cette petite phase introductive, passons maintenant au vif du sujet !

1. Récupération des articles contenus dans la liste de lecture en cours de sélection

En ce qui concerne la partie Google Reader, qui nous concerne pour l’instant, tous les articles sont contenus dans une seule liste de lecture globale appelée « reading list ». Les appartenances des articles aux différentes catégories définies par l’utilisateur (les labels) sont définies dans cette liste générale par l’ajout de balises définissant les catégories d’appartenance. Dès lors, une seule requête est nécessaire pour récupérer la liste globale :

 http://www.google.com/reader/atom/user/-/state/com.google/reading-list?n=1000&r=o&ot=[timestamp]

On remarquera des paramètres après le caractère ‘?’ qui permettent de modifier l’ordre d’affichage des articles (en commençant soit par le plus récent soit par le plus ancien), et dans le cas où l’on veut afficher un certain nombre d’articles lus en plus des non lus (cas géré par le programme), un paramètre (ot) indiquant à partir de quelle date dans le passé les articles doivent être récupérés, et dans tous les cas le nombre maximum d’articles à afficher (paramètre n), pour éviter que le flux ne devienne trop important en cas de large sélection.

Cette requête renvoie la liste des articles sélectionnés au format ATOM qui nécessite quelques traitements spécifiques.

2. Conversion du flux ATOM en flux XML

Pour commencer, voici un exemple de représentation de données au format ATOM :

 <feed idx:index="no" gr:dir="ltr">
   <generator uri="http://www.google.com/reader">Google Reader</generator>
   <id>tag:google.com,2005:reader/user/06835093091654116767/state/com.google/starred</id>
   <title>Liste de suivi de edel dans Google Reader</title>
   <link rel="self" href="http://www.google.com/reader/atom/user/-/state/com.google/starred"/>
   <author>
      <name>edel</name>
   </author>
   <updated>2012-04-24T12:13:07Z</updated>
   <entry gr:crawl-timestamp-msec="1335269587755">
      <id gr:original-id="http://www.freenews.fr/spip.php?article11937">tag:google.com,2005:reader/item/44111060b40208b8</id>
      <category term="user/06835093091654116767/state/com.google/read" scheme="http://www.google.com/reader/" label="read"/>
      <category term="user/06835093091654116767/state/com.google/starred" scheme="http://www.google.com/reader/" label="starred"/>
      <category term="user/06835093091654116767/state/com.google/fresh" scheme="http://www.google.com/reader/" label="fresh"/>
      <title type="html">Les Free Centers sont maintenant sur Facebook</title>
      <published>2012-04-24T11:47:40Z</published>
      <updated>2012-04-24T11:47:40Z</updated>
      <link rel="alternate" href="http://feedproxy.google.com/~r/Freenews-Freebox/~3/tkFY4elM_aE/spip.php" type="text/html"/>
      <content xml:base="http://www.freenews.fr/" type="html">Les Free Centers se dotent d'une page officielle sur Facebook : une bonne occasion de revenir sur l'ouverture des cinq boutiques actuellement situées à Angers, Laval, Le Havre, Rouen et Troyes, tout en communiquant sur les ouvertures à venir... Gageons que cette page permettra aux Freenautes assidus de suivre l'actualité du réseau de boutiques de Free au plus près. Rappelons que les Free Centers sont également dotés d'un compte Twitter officiel : Free Center sur Facebook Free Center sur (...)</content>
      <author>
         <name>Freenews</name>
      </author>
      <source gr:stream-id="feed/http://www.freenews.fr/feeds/rss.php">
      <id>tag:google.com,2005:reader/feed/http://www.freenews.fr/feeds/rss.php</id>
      <title type="html">Freenews.fr</title>
      <link rel="alternate" href="http://www.freenews.fr/" type="text/html"/>
      </source>
   </entry>
</feed>

Et voici le même document converti en XML par la fonction implémentée dans le programme :

 <object>
   <feed>
      <title>Liste de suivi de edel dans Google Reader</title>
      <link>http://www.freenews.fr/</link>
      <description />
      <language>en-US</language>
      <entry>
        <id>tag:google.com,2005:reader/item/44111060b40208b8</id>
        <readstatus>read</readstatus>
        <label />
        <title>Les Free Centers sont maintenant sur Facebook</title>
        <link>http://feedproxy.google.com/~r/Freenews-Freebox/~3/tkFY4elM_aE/spip.php</link>
        <pubDate>mar., 24 avr. 2012 11:47:40 GMT</pubDate>
        <pubDateAdded>mar., 24 avr. 2012 12:13:07 GMT</pubDateAdded>
        <author>Freenews</author>
        <site>Freenews.fr</site>
        <source>feed/http://www.freenews.fr/feeds/rss.php</source>
        <content>Les Free Centers se dotent d'une page officielle sur Facebook : une bonne occasion de revenir sur l'ouverture des cinq boutiques actuellement situées à Angers, Laval, Le Havre, Rouen et Troyes, tout en communiquant sur les ouvertures à venir... Gageons que cette page permettra aux Freenautes assidus de suivre l'actualité du réseau de boutiques de Free au plus près. Rappelons que les Free Centers sont également dotés d'un compte Twitter officiel : Free Center sur Facebook Free Center sur (...)</content>
      </entry>
   </feed>
</object>

La fonction utilisée extrait les balises du document ATOM qui serviront pour la suite du traitement, en les recréant sous forme de nouvelles balises XML. Par exemple la balise <title> d’origine devient <site> dans le XML.

Maintenant que le programme dispose des données dans le format qu’il sait traiter nativement (sans ajout de classes externes à .Net) le traitement en vue l’affichage des articles dans la liste prévue à cet effet peut commencer.

3. Remplissage de la liste des articles de la sélection en cours

La liste est affichée via un composant visuel externe (non inclus dans VB.Net) qui est une forme améliorée du composant ListView de .Net et qui à ce titre hérite d’un grand nombre de ses propriétés.

La liste est remplie au moyen d’une fonction qui est alimentée avec le XML contenant la liste des articles de la liste de la lecture en cours de sélection, dont la récupération a été vue précédemment dans cet article.

Étant donné que la plupart du temps, à l’exception de l’affichage des éléments suivis et des articles de Readability, cette liste va être constituée à partir de la liste de lecture globale, il faut dans un premier temps définir quels articles doivent être affichés. Par exemple, si l’utilisateur a choisi de n’afficher que les articles d’une catégorie X, la liste doit être remplie d’articles appartenant uniquement à cette catégorie, en ignorant tous les autres.

Une fois ce tri effectué, le remplissage est relativement simple, en terme d’algorithme, car comme toujours ensuite il faut connaitre les éléments de syntaxe qui vont effectuer les actions prévues.

La première étape consiste à déterminer la date de publication de l’article, afin d’insérer une ligne de date pour séparer les jours de publication. S’en suivent quelques lignes esthétiques pour définir le style visuel de cette ligne (épaisseur de la police de caractère, couleur de remplissage de la ligne). Ensuite, il faut constituer la ligne contenant les infos principales d’un article : titre, heure de publication, site d’origine, ainsi que des éléments masqués qui permettront d’afficher le contenu partiel ou complet de l’article dans le navigateur intégré à l’application, ainsi que l’URL de celui-ci pour pouvoir l’afficher dans son site d’origine et ainsi accéder aux commentaires. Puis de nouveau quelques lignes de code pour améliorer la lisibilité de la liste. Enfin, il faut récupérer le statut de l’article (lu ou non, suivi ou non) avant de marquer ces distinctions visuellement. Ainsi un article non lu sera affiché dans la liste en caractères gras, un article suivi sera marqué d’une étoile à la manière de l’interface web de Google Reader.

Enfin avant l’affichage de la liste il est nécessaire de trier les éléments suivant l’ordre d’affichage souhaité, chronologique normal ou inversé. Pour cela les éléments sont d’abord stockés dans un tableau en mémoire lors de l’analyse du flux XML des articles. Ensuite ce tableau est trié selon le critère choisi par l’utilisateur, et enfin la liste est constituée – et donc affichée – selon ce tri.

Et voilà, à ce stade le programme dispose de tous les éléments nécessaires pour afficher les articles des listes de lecture de Google Reader. Mais il n’est pas encore autonome : il va falloir pour cela gérer le statut des articles, à savoir les marquer lus ou non lus, et suivis ou non suivis. Ceci passera par de nouvelles requêtes, assez simples, qui seront l’objet du prochain article !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *