Lecture de flux RSS – Episode 6
La nouvelle saison de la saga « Lecture de flux RSS » arrive enfin en France, le temps d’être tournée aux Etats-Unis et d’être doublée… 🙂
Dans cet épisode, nous allons sauvegarder les articles du flux dans les tables Access.
Si vous avez manqué le début…
La saga « Lecture de flux RSS » a commencé par ces articles :
- Lecture de flux RSS – Episode 1.
- Lecture de flux RSS – Episode 2.
- Lecture de flux RSS – Episode 3.
- Lecture de flux RSS – Episode 4.
- Lecture de flux RSS – Episode 5
Quelques aménagements du lecteur RSS
Pour permettre la sauvegarde des articles dans notre table « tbl Flux Articles« , il va falloir ajouter un peu de code VBA. Pour que le lecteur RSS continue d’être une « boîte noire qui gère toute seule sa cuisine interne », c’est la classe LecteurRSS
qui prendra en charge la sauvegarde.
Pour cela, il est indispensable que la classe LecteurRSS
connaisse le numéro de flux géré, c’est-à-dire l’équivalent du champ [tbl Flux].[Numéro Flux]
. Comme ce champ est clef primaire dans la table, qu’il sert de relation avec les articles, et qu’on souhaite justement enregistrer les articles du flux… vous voyez la suite.
Par conséquent, rajoutez déjà ceci dans la classe LecteurRSS
:
1 2 3 4 5 6 7 8 9 10 11 |
Private m_lngNumeroFlux As Long ' --- ' IDENTIFIANT DU FLUX RSS Property Get NumeroFlux() As Long NumeroFlux = m_lngNumeroFlux End Property Property Let NumeroFlux(ByVal lngNumeroFlux As Long) m_lngNumeroFlux = lngNumeroFlux End Property |
On mémorise le numéro de flux dans la variable privée m_lngNumeroFlux
, encapsulée dans la propriété NumeroFlux
.
La méthode d’enregistrement
Ajoutez également cette méthode, toujours dans la classe LecteurRSS
:
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 |
' --- ' SAUVEGARDE DES ARTICLES ' --- ' Public Function EnregistrerArticles( _ ByVal blnViderAnciens As Boolean) As Boolean Dim art() As ArticleRSS Dim intI As Integer Dim rst As DAO.Recordset ' Lire les flux If Me.LireFlux() <> 200 Then EnregistrerArticles = False Exit Function End If ' Vider la table des articles, pour le flux concerné If blnViderAnciens Then CurrentDb.Execute "DELETE * FROM [tbl Flux Articles]" _ & " WHERE [Numéro Flux] = " & Me.NumeroFlux End If ' Extraction des articles art = Me.Articles ' Stockage des articles dans une table Set rst = CurrentDb.OpenRecordset("tbl Flux Articles", dbOpenDynaset) For intI = LBound(Articles) To UBound(Articles) rst.AddNew rst("Numéro Flux") = Me.NumeroFlux rst("Indice") = art(intI).Indice rst("Titre Article") = art(intI).Titre rst("URL Article") = art(intI).Lien rst.Update Next ' Terminé ! rst.Close set rst = Nothing EnregistrerArticles = True End Function |
Pour plus de détails sur les références, consultez cette page.
Quelques explications
- La fonction reçoit un paramètre booléen qui indique si la table des articles doit être vidée avant la sauvegarde. Plus précisément : on vide les anciens articles du flux concerné, pas des autres flux. On pourrait affiner avec un dispositif de vidage au bout de quelques jours.
- Ensuite, on utilise un
Recordset
pour écrire chaque article dans la table tbl Flux Articles.
On s’arrête là pour l’instant ; vous verrez demain comment mettre ce code en action à partir d’un formulaire. 😉