27 March 2014 RSS, SyndicationFeed Robert Muehsig

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) :

image

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.

image

Gebraucht hatte ich diese Funktionalität für den “Hub”:

image

Damit sollte es klappen. Der Code ist natürlich auch auf GitHub zu finden.


Written by Robert Muehsig

Software Developer - from Dresden, Germany, now living & working in Switzerland. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de

If you like the content and want to support me you could buy me a beer or a coffee via Litecoin or Bitcoin - thanks for reading!