est-il pratique / possible d'utiliser la sérialisation pour lire des données d'un flux RSS? Je veux fondamentalement tirer des informations de ma file d'attente Netflix (fournie à partir d'un flux RSS), et j'essaie de décider si la sérialisation est réalisable / possible, ou si je devrais simplement utiliser quelque chose comme xmlreader. En outre, quelle serait la meilleure façon de télécharger le flux d'une URL? Je n'ai jamais tiré des fichiers de rien que des lecteurs, alors je ne suis pas sûr de savoir comment faire ça. P>
6 Réponses :
Si vous utilisez .NET 3.0 ou 3.5 ... alors je suggérerais d'utiliser un xmlreader pour lire le document dans un xdocument. Vous pouvez ensuite utiliser LINQ vers XML pour interroger et rendre l'alimentation RSS dans quelque chose d'utilisable. P>
Construire quelque chose pour désémirez le XML est également réalisable et fonctionnera également (sinon mieux) mais sera plus intensif de temps à créer. p>
Toile de chaque manière fonctionnera ... Faites ce que vous êtes plus à l'aise avec (ou si vous essayez d'apprendre la sérialisation XML, allez-y et apprenez quelque chose de nouveau). P>
Le support technique de la syndication. Net 3.5. L'espace de noms strong> System.ServiceModel.Syndication fournit un tas de types pour gérer les flux, le contenu d'alimentation et les catégories, la formatage des aliments (RSS 2.0, ATOM 1.0), etc. P>
http://msdn.microsoft.com/fr- US / Bibliothèque / System.ServiceModel.Syndication.aspx P>
Vous avez quelques options pour la sérialisation, mais le plus simple est probablement mieux décrit ici: P>
J'ai examiné cela, mais il apparaît que l'espace de noms ne fournit que des options de sérialisation, pas des options de désérialisation, à moins que je négligeais quelque chose.
Vous "désérialisez" via la méthode statique de la 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 de lecture en ligne qui prend une xmlreader.
Je vais jeter un oeil à cela lorsque je rentrerai à la maison, c'est un plaisir de savoir si j'ai besoin de faire un autre projet RSS.
Mais la SyndicationFeed.load n'accepte que de manière stricte confirmation de flux. Cela échouera (non recouvertable) sur beaucoup d'aliments pour animaux.
Comment allez-vous analyser une alimentation non conforme? L'espace d'erreur est illimité :-) Mais je suis d'accord, il est presque inutile, car il étouffe des chaînes de rendez-vous presque universellement malade au pubdate.
Vous pouvez toujours tirer des types d'alimentation existants et remplacer la méthode Readfrom pour ajouter une manipulation d'erreur personnalisée. Si vous le souhaitez vraiment, vous pouvez écrire vos propres types d'aliment de remplacement qui étaient plus indulgent, mais utilisez toujours le type de syndication pour les gérer de manière indépendante au format.
Si vous pouvez utiliser LINQ, LINQ to XML est un moyen facile d'obtenir aux bases d'un document d'alimentation RSS.
Ceci est issu de Quelque chose que j'ai écrit pour sélectionner une collection de types anonymes de l'aliment RSS de mon blog, par exemple: P >
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(); }
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; }