Beste Möglichkeit, RSS-Feeds in .net mit C # zu lesen

106

Was ist der beste Weg, um RSS-Feeds zu lesen ?

Ich benutze XmlTextReader, um dies zu erreichen. Gibt es einen anderen besten Weg, dies zu tun?

XmlTextReader reader = new XmlTextReader(strURL);

DataSet ds = new DataSet();
ds.ReadXml(reader);

Gibt es nach dem Lesen des RSS-Feeds mit XmlTextReadereine Möglichkeit, Daten ListItemanstelle von zu füllen DataSet?

Geben Sie hier die Bildbeschreibung ein

Tronics
quelle

Antworten:

176

System.ServiceModelReferenzen hinzufügen

Verwenden von SyndicationFeed:

string url = "http://fooblog.com/feed";
XmlReader reader = XmlReader.Create(url);
SyndicationFeed feed = SyndicationFeed.Load(reader);
reader.Close();
foreach (SyndicationItem item in feed.Items)
{
    String subject = item.Title.Text;    
    String summary = item.Summary.Text;
    ...                
}
dlopezgonzalez
quelle
13
Das ist der Schizzle. Genial und prägnant. Sie müssen auch System.Xml verwenden. aber das ist ziemlich offensichtlich. Für Blogger lautet die URL derzeit " blogname.blogspot.com/feeds/posts/default " (Atom 1.0) und " blogname.blogspot.com/feeds/posts/default?alt=rss " für RSS 2.0. Das SyndicationItem-Element verfügt über alle Elementeigenschaften, die Sie benötigen. Untersuchen Sie einfach das Objekt im Visual Studio-Debugger und lassen Sie sich beleuchten.
secretwep
Können wir XmlTextReader anstelle von xmlreader verwenden, um Leistungsunterschiede zu vermeiden?
Drache
1
Kurz und bündig. Danke dir!
Bogdan Doicin
8
Für .Net Core ist das NuGet-Paket, das Sie installieren möchten, um dies zu verwenden,System.ServiceModel.Syndication
adam0101
Für 2019 explodiert dies jedes Mal, wenn ich versuche, auf die einzige Version zuzugreifen, bei der es sich um eine Vorabversion handelt.
Clarence
11

Dies ist ein alter Beitrag, aber um den Leuten Zeit zu sparen, wenn Sie jetzt wie ich hierher kommen, schlage ich vor, dass Sie sich das CodeHollow.FeedReader- Paket ansehen , das eine größere Auswahl an RSS-Versionen unterstützt, einfacher zu verwenden ist und robuster erscheint . https://github.com/codehollow/FeedReader

Emilast
quelle
3

Benutze das :

private string GetAlbumRSS(SyndicationItem album)
    {

        string url = "";
        foreach (SyndicationElementExtension ext in album.ElementExtensions)
            if (ext.OuterName == "itemRSS") url = ext.GetObject<string>();
        return (url);

    }
    protected void Page_Load(object sender, EventArgs e)
    {
        string albumRSS;
        string url = "http://www.SomeSite.com/rss‎";
        XmlReader r = XmlReader.Create(url);
        SyndicationFeed albums = SyndicationFeed.Load(r);
        r.Close();
        foreach (SyndicationItem album in albums.Items)
        {

            cell.InnerHtml = cell.InnerHtml +string.Format("<br \'><a href='{0}'>{1}</a>", album.Links[0].Uri, album.Title.Text);
            albumRSS = GetAlbumRSS(album);

        }



    }
Mahdi Jokar
quelle
0

Update: Dies wird nur mit UWP - Windows Community Toolkit unterstützt

Es gibt jetzt einen viel einfacheren Weg. Sie können die RssParser- Klasse verwenden. Der Beispielcode ist unten angegeben.

public async void ParseRSS()
{
    string feed = null;

    using (var client = new HttpClient())
    {
        try
        {
            feed = await client.GetStringAsync("https://visualstudiomagazine.com/rss-feeds/news.aspx");
        }
        catch { }
    }

    if (feed != null)
    {
        var parser = new RssParser();
        var rss = parser.Parse(feed);

        foreach (var element in rss)
        {
            Console.WriteLine($"Title: {element.Title}");
            Console.WriteLine($"Summary: {element.Summary}");
        }
    }
}

Verwenden Sie für Nicht-UWP die Syndication aus dem Namespace, System.ServiceModel.Syndicationwie von anderen vorgeschlagen.

public static IEnumerable <FeedItem> GetLatestFivePosts() {
    var reader = XmlReader.Create("https://sibeeshpassion.com/feed/");
    var feed = SyndicationFeed.Load(reader);
    reader.Close();
    return (from itm in feed.Items select new FeedItem {
        Title = itm.Title.Text, Link = itm.Id
    }).ToList().Take(5);
}

public class FeedItem {
    public string Title {
        get;
        set;
    }
    public string Link {
        get;
        set;
    }
}
Sibeesh Venu
quelle