Agrégateur de flux RSS, comment ça marche


Un fichier Excel avec deux onglets (l'un contenant les URS les flux et l'autre des listes de mots clés) et une macro VBA.

Première étape, il faut récupérer les données contenues dans le fichier XML.
Si on ouvre le fichier XML dans un éditeur de texte (Notepad par exemple), voilà ce qu'on y trouve (exemple au format RSS2) :
<?xml version="1.0" encoding="iso-8859-1" ?>
<rss version="2.0" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<channel>
        <title>L'Equipe.fr Actu Sport</title>
        <link>http://www.lequipe.fr</link>
        <description>Suivez l'actualité des sports, les analyses, les résultats sportifs, les calendriers des événements sportifs</description>
        <language>fr</language>
        <copyright>Copyright L'Equipe.fr</copyright>
        <pubDate>Thu, 07 Feb 2008 20:22:47 +0100</pubDate>
    <item>
        <title>Foot - CAN - Le Ghana reste à quai</title>
        <link>http://www.lequipe.fr/redir.php?ORIG=RSS&RUB=homeG&URL=http://www.lequipe.fr/Football/20080207_201709Dev.html</link>
        <description>Le Ghana ne remportera finalement pas «sa» CAN. Dominateurs de bout en bout de la rencontre dans un stade plein à...</description>
        <pubDate>Thu, 07 Feb 2008 20:17:00 +0100</pubDate>
    </item>
    <item>
        <title>Rugby - Top 14 - 9e j. - Retour de Taylor</title>
        <link>http://www.lequipe.fr/redir.php?ORIG=RSS&RUB=homeG&URL=http://www.lequipe.fr/Rugby/20080207_201652Dev.html</link>
        <description>Le Stade Français ne peut toujours pas compter sur ses internationaux (Szarzewski, Skrela, Mauro et Mirco Bergamasco,...</description>
        <pubDate>Thu, 07 Feb 2008 20:16:00 +0100</pubDate>
    </item>
</channel>
</rss>

Les données sont organisées sur plusieurs niveaux :
- à la racine, la balise RSS contenant la (ou les) balise(s) CHANNEL.
- à l'intérieur de la balise CHANNEL, les balise décrivant les caractéristiques du fil RSS (titre, date, adresse URL...) et des balises ITEM
- chaque balise ITEM correspond à un article d'actualité et contient tous les éléments en décrivant les caractéristiques, et notamment les balises TITLE (titre), LINK (URL de l'article), DESCRIPTION (résumé de l'article) et PUBDATE (date de publication).
Les données sont donc organisées comme un arbre, chaque balise correspondant à un noeud.

Deux solutions pour récupérer ces données,

- lire le fichier comme un simple fichier texte et décortiquer le texte qu'il contient pour en tirer les informations souhaitées. Principal problème, la plupart des fichiers XML sont encodés en UTF-8, format qui permet de gérer un grand nombre de caractères, notamment les caractères accentués, mais qui est laborieux à décoder en VB.

- ou mieux, utiliser le DOM (pour Document Object Model) qui est mis à notre disposition dans VBA et qui est une interface simple vers le XML. Le DOM présente en outre l'avantage de décoder directement le UTF-8.
En pratique, on crée un objet DOM dans lequel on charge la page XML :
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.Async = "false"
xmlDoc.Load (URL_page_Web_à_lire.xlm)

Le DOM permet alors très simplement de récupérer les noeuds les uns après les autres sous forme d'objets :
Set rsss = xmlDoc.selectsingleNode("/rss") permet d'accèder au noeud RSS
Set chnl=rsss.selectsingleNode("channel") donne le noeud suivant (CHANNEL).
Mais on peut aussi écrire Set chnl=xmlDoc.selectsingleNode("/rss/channel").
Puis, pour obtenir le titre du fil : titrechnl = chnl.selectsingleNode("title").Text (on utilise la propriété "Text" de l'objet noeud pour en lire le contenu).
Reste à balayer tous les articles (tous les ITEM) pour en lire le contenu :
For Each elem In chnl.selectNodes("item")
    titre = elem.selectsingleNode("title").Text
    lien = elem.selectsingleNode("link").Text
    Description = elem.selectsingleNode("description").Text
    datepub = elem.selectsingleNode("pubDate").Text
Next elem

(Noter le For Each pour parcourir la collection de noeuds chnl.selectNodes("item")).

Rien de plus simple à partir de là, que de balayer tous les noeuds de tous les fichiers XML, de placer toutes ces données dans un tableau, de trier ou retraiter les données, avant de les afficher dans une page html.


Cliquez ICI pour télécharger le fichier Excel (zippé)
(compatible avec les formats RSS2, RDF-RSS1 et Atom).