HowTo: RSS Feeds mit C# / XLINQ lesen
Vor 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
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) :
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:
Fazit:
Wer mal schnell auf einen RSS Feed zugreifen möchte, kommt im Regelfall auch sehr gut ohne andere Library aus.







don
23. December 2010
Vielen Dank für diesen leicht verständlichen Blogeintrag!
Besonders gefällt mir, wie du Datenmodell und Logik trennst.
foat
13. February 2011
super danke…
nur wie mache ich es wenn die xml auch dynamisch ist…
AAK
Server
test
shutdown
AAL
Server2
test
shutdown