Jetzt mal ein Blogpost ohne ein fancy NuGet Package: Seit .NET 3.5 gibt es die SyndicationFeed Klasse. Eine schon etwas ältere API, reicht aber aus um Atom bzw. RSS Feeds zu lesen. In diversen RSS Feeds gibt es aber Erweiterungen, welche man natürlich auch auslesen möchte.
So gibt Wordpress z.B. auch die Anzahl der geposteten Kommentare weiter (mehr dazu z.B. auf mozilla.org) :
Diese sind allerdings nicht direkt im SyndicationItem abgebildet, können jedoch relativ einfach mit abgefragt werden. Alle nicht “erkannten” Elemente verbleiben im Property ElementExtensions, welches über Bordmitteln auch wieder auszulesen ist:
class Program { static void Main(string[] args) { var reader = XmlReader.Create("http://blog.codeinside.eu/feed"); var feed = SyndicationFeed.Load(reader); foreach (var feedItem in feed.Items) { int commentCount = 0; Console.WriteLine(feedItem.Title.Text); foreach (SyndicationElementExtension extension in feedItem.ElementExtensions) { XElement extensionElement = extension.GetObject<XElement>(); if (extensionElement.Name.LocalName == "comments" && extensionElement.Name.NamespaceName == "http://purl.org/rss/1.0/modules/slash/") { Console.WriteLine("Comments: " + extensionElement.Value); } } } Console.ReadLine(); } }
Für die Syndication-Klassen wird die Assembly “System.ServiceModel” benötigt.
Gebraucht hatte ich diese Funktionalität für den “Hub”:
Damit sollte es klappen. Der Code ist natürlich auch auf GitHub zu finden.