21 April 2009 HowTo, LINQ, RSS, XLINQ Robert Muehsig

imageVor einige Zeit hatte ich schon etwas zu XLinq (oder Linq to Xml) geschrieben. RSS Feeds einlesen ist eigentlich keine große Sache, weil der Standard recht simpel ist. Allerdings gibt es da auch Abweichungen ;)
Da ich bereits geschrieben habe wie man ein RSS Feed erstellt, zeige ich nun an einem einfachen Beispielen wie man RSS Feeds einlesen kann.

DemoApp

image Meine DemoApp ist in diesem Fall eine Consolen Anwendung. "RssItem" beschreibt mein Model, was ich aus dem Rss Feed rausziehen möchte. Der "RssService" bekommt eine Url übergeben und ich stelle diese RssItems des Feeds einfach dar.

 

Ein Blick auf RSS:

Um die Funktionsweise meines RssService zu erklären ein kurzer Ausschnitt auf das XML eines RSS Feeds (in diesem Fall dem Twitter RSS Feed von mir) :

image

App:

Hier meine Model Klasse - RssItem:

namespace ReadRss
{
    public class RssItem
    {
        public string Title { get; set; }
        public string Message { get; set; }
        public string Url { get; set; }
        public DateTime PublishedOn { get; set; }
    }
}

Und die RssService Klasse:

    public class RssService
    {
        public List<RssItem> GetItems(string feedUrl)
        {
            XDocument doc = XDocument.Load(feedUrl);
            return (from x in doc.Descendants("channel").Descendants("item")
                         select new RssItem()
                         {
                             Title = x.Descendants("title").Single().Value,
                             Message = x.Descendants("description").Single().Value,
                             Url = x.Descendants("link").Single().Value,
                             PublishedOn = DateTime.Parse(x.Descendants("pubDate").Single().Value)
                         }).ToList();

        }
    }

Im XDocument lade ich den Feed und gehe dann über die Descendants über die Daten an die ich will und gebe mir pro "item" ein "RssItem" zurück. Ich hangel mich quasi durch die Knoten durch.
Das ganze klappt auch mit dem RSS vom Blog.

Am Ende gebe ich dies in der Program.cs aus:

            RssService service = new RssService();
            List<RssItem> resultTwitter = service.GetItems("http://twitter.com/statuses/user_timeline/14109602.rss");
            
            Console.WriteLine("[Twitter]");
            foreach (RssItem item in resultTwitter)
            {
                Console.WriteLine("---");
                Console.WriteLine(item.Title);
                Console.WriteLine(item.Message);
                Console.WriteLine(item.PublishedOn.ToShortDateString());
                Console.WriteLine(item.Url);
                Console.WriteLine("---");
            }

Ergebnis:

image

Fazit:
Wer mal schnell auf einen RSS Feed zugreifen möchte, kommt im Regelfall auch sehr gut ohne andere Library aus.

[ Download Democode ]


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!