Lecture de flux RSS – Episode 2
Dans l’épisode précédent, nous avons extrait un flux RSS brut à partir d’un site Web, pour l’afficher dans la fenêtre Exécution. Dans cette suite, nous ajoutons une pièce de plus au puzzle : on va tâcher d’extraire le titre du flux (et seulement lui pour l’instant).
Principe
Un flux RSS2 est un fichier XML dont le début ressemble à ceci (j’ai enlevé les attributs secondaires pour illustrer l’essentiel) :
1 2 3 4 5 6 7 |
<rss version="2.0"> <channel> <title>Le grenier Access</title> <link>http://grenier.self-access.com/?</link> <description>Trucs et astuces pour Microsoft Access</description> <!-- la suite ici !--> </channel> </rss> |
Le titre du flux est donné par les balises <title></title>
, elles-mêmes incluses dans les balises <channel></channel>
. A l’aide d’une expression XPath, on peut dire que le chemin pour accéder au titre est //channel/title
. Cette expression peut être utilisée avec la méthode selectSingleNode()
pour extraire précisément le nœud qui nous intéresse. Apuka !
Le code
J’ai repris tout le code de l’article précédent, en l’aménageant un peu, et surtout en ajoutant la fonction TitreFlux()
. Cette fonction reçoit un document XML en entrée, et va en extraire le nœud de titre (de type IXMLDOMNode
), à l’aide de la méthode selectSingleNode()
. Si on trouve un noeud //channel/title
, on renvoie le texte du nœud, sinon on renvoie une chaîne vide.
Il reste à appeler cette fonction dans le bloc principal, de façon à afficher simplement le titre.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
' --- ' LECTURE RSS - VERSION 2 ' --- Sub LectureFluxRSS2() Dim strURL As String Dim http As MSXML2.ServerXMLHTTP Dim doc As MSXML2.DOMDocument ' URL du flux à lire strURL = "http://grenier.self-access.com/?feed/rss2" ' Lecture du flux Set http = New MSXML2.ServerXMLHTTP http.Open "GET", strURL, False http.Send "" ' En cas de réussite, le code renvoyé est 200 If (http.Status = 200) Then ' Extraire le flux au format XML Set doc = http.responseXML ' Afficher le titre du flux ' dans la fenêtre Exécution Debug.Print "TITRE : " & TitreFlux(doc) Else MsgBox "Erreur : " & http.Status & " - " & http.statusText, vbExclamation End If ' On libère les objets Set doc = Nothing Set http = Nothing End Sub ' --- ' EXTRACTION DU TITRE DU FLUX ' --- Function TitreFlux(doc As MSXML2.DOMDocument) Dim nd As MSXML2.IXMLDOMNode Set nd = doc.selectSingleNode("//channel/title") If (nd Is Nothing) Then TitreFlux = "" Else TitreFlux = nd.Text End If Set nd = Nothing End Function |
Tester !
Vous testez comme dans l’article précédent, en positionnant votre curseur dans la procédure LectureFluxRSS2
, puis en cliquant sur l’icône Exécuter Sub/UserForm. Cette fois, vous ne devriez voir que le titre du flux s’afficher dans la fenêtre Exécution.
Vous voyez sans doute qu’il est assez facile de dupliquer le principe pour extraire les autres nœuds d’en-tête, comme le lien vers le site (balise <link>
), la description du site (balise <description>
), et d’autres encore. On ira un peu plus loin la prochaine fois… mais vous pouvez déjà prendre de l’avance !