2009-08-29 5 views
9

Est-il pratique/possible d'utiliser la sérialisation pour lire les données d'un flux RSS? Je veux essentiellement extraire des informations de ma file d'attente Netflix (fournie par un flux RSS), et j'essaie de décider si la sérialisation est réalisable/possible, ou si je devrais juste utiliser quelque chose comme XMLReader. En outre, quelle serait la meilleure façon de télécharger le flux à partir d'une URL? Je n'ai jamais extrait de fichiers que de lecteurs, donc je ne suis pas sûr de savoir comment y arriver.Désérialisation d'un flux RSS dans .NET

Répondre

18

Si vous pouvez utiliser LINQ, LINQ to XML est un moyen facile d'obtenir les bases d'un document de flux RSS.

Ceci est de something I wrote pour sélectionner une collection de types anonymes de flux RSS de mon blog, par exemple:

protected void Page_Load(object sender, EventArgs e) 
{ 
    XDocument feedXML = XDocument.Load("http://feeds.encosia.com/Encosia"); 

    var feeds = from feed in feedXML.Descendants("item") 
       select new 
       { 
       Title = feed.Element("title").Value, 
       Link = feed.Element("link").Value, 
       Description = feed.Element("description").Value 
       }; 

    PostList.DataSource = feeds; 
    PostList.DataBind(); 
} 

Vous devriez être en mesure d'utiliser quelque chose de très similaire contre votre flux Netflix.

3

Si vous utilisez .NET 3.0 ou 3.5 ... alors je suggère d'utiliser un XMLReader pour lire le document dans un XDocument. Vous pouvez ensuite utiliser LINQ to XML pour interroger et rendre le flux RSS dans quelque chose d'utilisable.

Construire quelque chose pour dé-sérialiser le XML est également faisable et fonctionnera aussi bien (sinon mieux) mais prendra plus de temps à créer.

L'une ou l'autre façon fonctionnera ... faites ce que vous êtes plus à l'aise (ou, si vous essayez d'apprendre la sérialisation XML, allez-y et apprenez quelque chose de nouveau).

15

Le framework .NET 3.5 a ajouté le support de syndication. Le System.ServiceModel.Syndication espace de noms fournit un tas de types pour gérer les flux, le contenu des aliments et des catégories, la mise en forme de flux (RSS 2.0, Atom 1.0), etc.

http://msdn.microsoft.com/en-us/library/system.servicemodel.syndication.aspx

Vous avez quelques options pour sérialisation, mais est probablement mieux décrit la plus simple ici:

http://msdn.microsoft.com/en-us/library/bb536530.aspx

+0

J'ai regardé dans cela, mais il semble que l'espace de noms ne fournit que des options de sérialisation, pas d'options de désérialisation, à moins que j'oublié quelque chose. – MGSoto

+0

Vous "désérialisez" via la méthode statique SyndicationFeed.Load. Il détecte automatiquement le format d'entrée. Si vous avez besoin de plus de contrôle, vous pouvez utiliser les formateurs directement ... tous ont une méthode ReadFrom qui prend un XmlReader. – jrista

+0

Je vais y jeter un coup d'œil quand je rentre à la maison, c'est génial de savoir si j'ai besoin de faire un autre projet RSS. – MGSoto

2

Jetez un coup d'œil à this link pour une routine de téléchargement assez complète. RSS est fondamentalement un dérivé de XML.

J'aime this link pour définir le format RSS. This one a un échantillon vraiment basique.

4
using System.ServiceModel.Syndication; 

public static SyndicationFeed GetFeed(string uri) 
    { 
     if (!string.IsNullOrEmpty(uri)) 
     { 
      var ff = new Rss20FeedFormatter(); // for Atom you can use Atom10FeedFormatter() 
      var xr = XmlReader.Create(uri); 
      ff.ReadFrom(xr); 
      return ff.Feed;    
     } 
     return null; 
    }