begin process at 2012 02 12 18:45:13
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Réseau & Internet

 > LECTEUR RSS EN VB.NET

LECTEUR RSS EN VB.NET


 Information sur la source

Note :
Aucune note
Catégorie :Réseau & Internet Source .NET ( DotNet ) Classé sous :RSS, décoder, flux Niveau :Débutant Date de création :02/07/2008 Vu / téléchargé :8 567 / 587

Auteur : Kevin.Ory

Ecrire un message privé
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Bonjour à tous,
Je suis en train de développer une application pour laquelle j'ai décidé d'afficher des news sur la page d'accueil, de la même façon que la page de démarrage de Visual Studio.

J'ai donc créer quelques classes permettant de télécharger puis de décoder un flux RSS. N'ayant pas trouvé de classe toute faite en VB.NET permettant de décoder un flux RSS, j'ai donc décidé de vous la faire partager une fois créé.

Espérant que ceci soit utile à certains...

Source

  • RssReader: Permet de télécharger un flux de façon asynchrone
  • RssFeed: Flux RSS décodé, contenant les propriété du flux (Titre, image...) et une liste d'items
  • RssItem: Item d'un flux, contenant les propriété de l'item (titre, description, lien...)
  • RssTags: Nom/Valeur représentant un élément XML. (permet d'accéder à tous les éléments du flux)
RssReader: Permet de télécharger un flux de façon asynchrone
RssFeed: Flux RSS décodé, contenant les propriété du flux (Titre, image...) et une liste d'items
RssItem: Item d'un flux, contenant les propriété de l'item (titre, description, lien...)
RssTags: Nom/Valeur représentant un élément XML. (permet d'accéder à tous les éléments du flux)

 Conclusion

Rien de bien compliqué, j'ai créé ce code en quelques heures seulement (cet après midi). Il semblerait qu'aucun problème ne survienne quel que soit le flux RSS chargé. En théorie, il est compatible avec les flux RSS version 0.92, 0.93 et 2.0, mais encore une fois, je n'ai pas tout testé.

Sachez que la description d'un item d'un flux est souvent un texte contenant des tags html de ce genre là:
"contre la ratification du traité de Lisbonne.<img width='1' height='1' src='http://rss.feedsportal.com/c/205/f/3050/s/15f 09e1/mf.gif'"
Ceci est normal. A vous de décoder (ou supprimer) ces tags pour afficher le texte de façon correct (ce n'est pas fait dans ma source)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) MENU "OUVRIR AVEC"
Source .NET (Dotnet) ENVOI DE FICHIER PAR UNE REQUÊTE POST EN MULTIPART/FORM-DATA...

 Sources de la même categorie

Source avec Zip Source avec une capture GESTIONNAIRE DE TÉLÉCHARGEMENT, AVEC REPRISE ET MULTITHREADI... par Madx23
Source avec Zip Source avec une capture CONVERTIR DU TEXTE RTF EN CODE HTML ET VICE-VERSA par vicosta
Source avec Zip Source avec une capture DICTIONAIRE TEXT/AUDIO/VISUELLE ANGLAIS AVEC WEBBROWSER CONT... par majnounmajda
Source avec Zip Source .NET (Dotnet) NSLOOKUP EN VB.NET OU COMMENT FAIRE UNE REQÛETE DNS EN PRÉCI... par ShareVB
Source avec Zip Source avec une capture MINI SEVEUR HTTP AVEC INTERFACE GRAPHIQUE ET IMPLÉMENTATIONS... par lemout

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) LECTEUR DE NEWS RSS COMPLET par Bilou47190
Source avec Zip Source .NET (Dotnet) INFOTRACE BASE DE DONNÉES HTML par LightningStrike
Source avec Zip LECTEUR RSS EN VB6 par vbnino
Source avec Zip Source avec une capture Source .NET (Dotnet) ANALYSE VARIABLES PHP par glad
Source avec Zip Source avec une capture RSS VERS TEL /PDA par ynizon

Commentaires et avis

Commentaire de gillardg le 02/07/2008 21:01:05

Pour  info il existe un exemple microsoft

RSS Reader
http://download.microsoft.com/download/2/c/1/2c1b5978-80cb-4c22-88b3-ab536344ba49/vb%202005%20-%20windows%20rss%20reader.msi
aussi un Screen Saver Starter Kit (lecteur RSS)
aussi l'exemple MyBlog
http://download.microsoft.com/download/4/D/2/4D2E7BA0-3952-4D1F-9801-E07B2224283A/MyBlogs.msi

Commentaire de dsigmoun le 28/11/2008 16:37:47

lorsque je suis déconnecté un message d'erreur apparaît lors du chargement du flux."L'exception TargetInvocationException n'est pas été gérée"

Y a-t'il un moyen de vérifier si l'on est connecté ?

En cas de non connexion, est-il possible de lire le flux que l'on aurait automatiquement sauvegardé lors d'une précédemment connexion ?

Commentaire de Kevin.Ory le 29/11/2008 00:53:02

Salut DSIGMOUN,

Il y a My.Computer.Network.IsAvailable qui te permet de savoir si l'ordinateur est connecté sur un réseau, mais ça n'assure pas pour autant que le flux RSS est accessible. Le mieux est de faire la connexion dans un Try/Catch pour gérer l'erreur à ta façon...

Pour la sauvegarde sur le disque dur, ce n'est pas implémenté mais c'est très facile à ajouter cette fonctionnalité puisque j'utilise un XmlDocument dans mon code pour charger le flux RSS. Un flux RSS n'est rien d'autre qu'un fichier XML, qu'il suffit d'enregistrer sur le disque dur si tu veux le recharger plus tard...

Commentaire de dsigmoun le 29/11/2008 08:55:37

pourtant il y a bien un try/cath

  Try

            ' Affichage
            lblTitle.Text = ""
            lblDescription.Text = ""
            picImage.Image = Nothing
            lstRssItems.Items.Clear()

            ' Téléchargement du flux
            RssReader = New RSS.RssReader
            RssReader.Load(New Uri(path))

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

Commentaire de dsigmoun le 03/12/2008 13:49:14

Kevin.Ory,

Lorsque l'on clique sur l'un des items de la liste, l'items concerné devient flou/et gras, comme s'il y avait 2 textes identiques superposés.

Peut-on empêcher cet affichage ?

Merci par avance,

Commentaire de Kevin.Ory le 06/12/2008 02:13:19

Bonsoir,
Cette fois j'ai regardé mon code, ma réponse sera donc nettement plus pertinente que la dernière.

Pour ce qui est de l'erreur "L'exception TargetInvocationException n'est pas été gérée", celle-ci ne provient pas de ma classe RssReader mais de son implémentation trop simpliste dans mon application servant d'exemple: je n'y gère pas les erreurs retourné par le RssReader.

Il s'agit de cette méthode:

    Private Sub Reader_Completed(ByVal Sender As Object, ByVal e As RSS.RssReader.CompletedEventArgs) Handles RssReader.Completed
        RssFeed = e.Result
        'RssFeed.LoadImage()

        ' Affichage des résultats
        ShowDetailed()
        ShowJoli()
    End Sub

Il s'agit donc de la méthode appelé lorsque l'événement RssReader.Completed survient. Comme on peut le voir, aucun test n'est effectué pour savoir si le résultat est correct ou non. Pour corriger le problème, il suffit de tester la propriété Result de l'argument e pour voir si elle est à Nothing. Si une erreur survient durant le téléchargement, Result vaut toujours Nothing. (On peut aussi tester la propriété Error de e. Si Error = Nothing, cela veut dire que le résultat est correct):

    Private Sub Reader_Completed(ByVal Sender As Object, ByVal e As RSS.RssReader.CompletedEventArgs) Handles RssReader.Completed
        ' Tester le résultat
        If e.Result IsNot Nothing Then
            RssFeed = e.Result

            ' Affichage des résultats
            ShowDetailed()
            ShowJoli()
        Else
            MsgBox("Une erreur est survenue: " & vbCrLf & e.Error.Message)
        End If

    End Sub


Par contre, suite à des test que je viens de faire, je constate qu'une autre erreur n'est pas géré, et cette fois-ci elle provient bien de ma classe RssReader. Celui-ci ne gère pas l'erreur qui survient lorsque le contenu téléchargé ne correspond pas à un flux RSS (lorsque on essaie d'ouvrir une adresse qui n'est pas un flux RSS). Pour corriger cela, il faut ajouter du code, déjà dans la méthode client_DownloadDataCompleted de la classe RssReader:

    Private Sub client_DownloadDataCompleted(ByVal sender As Object, ByVal e As System.Net.DownloadDataCompletedEventArgs) Handles client.DownloadDataCompleted
        client = Nothing
        Dim res As RssFeed = Nothing
        Dim err As Exception = e.Error

        If e.Error Is Nothing And e.Cancelled = False Then
            Try
                ' Créer le RssFeed
                res = New RssFeed(e.Result)
            Catch ex As Exception
                ' Le contenu téléchargé ne peut être ouvert
                res = Nothing
                err = ex
            End Try
        End If

        Dim args As New CompletedEventArgs(res, e.Error, e.Cancelled, e.UserState)
        RaiseEvent Completed(Me, args)
    End Sub

De cette façon, on gère l'erreur qui survient lorsque le contenu ne peut pas être ouvert par le RssFeed.

Voyons maintenant comme RssFeed gère le chargement des données (RssFeed.New). D'abord il ouvre le contenu avec un XmlDocument, une erreur surviendra lorsque le contenu n'est pas du XML, mais cela ne prouve pas que le contenu n'est pas un flux RSS. Il faudra donc aussi rajouter des tests pour savoir si le contenu correspond à un flux Rss ou à un autre contenu XML:

Avec quelques Try et ThrowException, on peut améliorer la gestion de ces erreurs, mais sans toutefois garantir que le flux RSS contient des données valides (la personne l'ayant publiée peut avoir fait des erreur de syntaxe...).
Remplacer ces 3 méthode dans la classe RssFeed:

        Public Sub New(ByVal Datas() As Byte)
            Me.New(New IO.MemoryStream(Datas))
        End Sub
        Public Sub New(ByVal Stream As IO.Stream)
            Dim doc As New XmlDocument
            Try
                doc.Load(Stream)
            Catch ex As Exception
                Throw New Exception("Les données téléchargé ne correspondent pas à un contenu XML", ex)
            End Try
            LoadXml(doc)
        End Sub

        Private Sub LoadXml(ByVal doc As Xml.XmlDocument)
            tags.Clear()
            If doc.DocumentElement.Name.ToLower = "rss" Then
                Dim version As String = doc.DocumentElement.GetAttribute("version")
                tags.Add(New RssTag("version", version))

                If version = "2.0" Or version = "0.92" Or version = "0.93" Then
                    Try
                        Dim channel As XmlElement = doc.DocumentElement.GetElementsByTagName("channel")(0)
                        For Each elem As XmlElement In channel
                            If elem.Name.ToLower = "item" Then
                                ' Un item
                                _Items.Add(New RssItem(elem))
                            Else
                                ' Un tag du channel
                                LoadElem("", elem)
                            End If
                        Next
                    Catch ex As Exception
                        Throw New Exception("Une erreur est survenue lors de la lecture du flux RSS")
                    End Try
                Else
                    Throw New Exception("Le contenu ne correspond pas à un flux RSS version 2.0")
                End If
            Else
                Throw New Exception("Le contenu ne correspond pas à un flux RSS")
            End If
        End Sub


En conclusion, je constate que je n'avais pas beaucoup travaillé sur la gestion des erreurs avant de publier cette source. J'ai aussi remarque que seul la version 2.0 était accepté dans mon code, ce qui n'est plus le cas dans mon code ci-dessus (ajout de la version 0.92 et 0.93). Mais le code donne une idée, et tout fonctionnait si le contenu téléchargé était soit un flux RSS, soit rien.


Pour ta 2ème question, je ne comprend pas de où vient ton problème. Je ne gère pas la sélection dans mon lstRssItems_DrawItem, et ça se voit si je test chez moi: rien ne change lorsque je clique sur un item.

Bonne nuit, et au plaisir de t'aider...

Commentaire de dsigmoun le 06/12/2008 06:56:44

Merci Kevin.Ory pour la précision de tes explications.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Barre des Tâches + Flux RSS [ par keawee ] Bonjour, Je souhaiterais vous poser une question concernant la barre des tâches. Celle qui est sur mon ordinateur j'ai Démarrer + icones de lecteur RSS [ par tchouny ] Salut à tous,je n'ai pas le temps de le développer moi-même car je suis full busy sur un autre projet, dés lors j'en appelle à vous.je recherche un le generateur RSS [ par maurimaure ] Bonjour à tous, J'aimerais écrire un script php qui permet la generation des flux RSS pour les sites qui en proposent pas. par exemple je do Flux Rss [ par warriorsam9 ] Bonjour alors j'explique mon problème ^^ Je suis en train de travailler un programme et j'aurais besoin qu'il affiche des News récolter par un Flux R flux rss [ par imedgamra ] bonjour tout le monde s'il vous plait s'il ya qui quelqu'un  qui peut m'aider je veux avoir le code et les fichiers necessaires qui generent un flux r Edit de post, RSS [ par faucheuse ] J'y pense depuis que je suis sur ce forum, mais ne pas pouvoir editer ses post c'est embetant. En effet je retourne généralement plusieurs fois sur m comment envoyer flux vidéo avec le plugin vlc [ par ludoboss7 ] voila j'arrive à envoyer un flux vidéo à partir de vlc. maintenant je désire incorporer un serveur vidéo dans une application. pour cela j'utlise le p Probleme avec requete trop longue. comment aller a la ligne [ par ndaseraphin ] bonsoir a tous. ma requete est trop long,je doit donc aller a la ligne. mais quand je vais a la ligne ,elle ne s'execute pas. comment le faire correct Flux TCPClient [ par vinnc ] Bonjour, Je viens de commencer la création d'un jeu de carte et j'ai une petite question : J'ai une fenêtre côté client qui affiche le nombre de jou [Catégorie modifiée VB6 -> C++] Code pour decoder un flux video [ par nostalgieing ] Bonjour, Je suis debutante en developpement [b]c/c++[/b] et je cherche un code qui permet de [b]decoder un flux video sur internet(c àd lien url de v


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,326 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales