.Net'te rss beslemesini C # kullanarak okumanın en iyi yolu


106

RSS beslemelerini okumanın en iyi yolu nedir ?

Bunu XmlTextReaderbaşarmak için kullanıyorum . Bunu yapmanın başka bir en iyi yolu var mı?

XmlTextReader reader = new XmlTextReader(strURL);

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

RSS beslemesini kullanarak okuduktan sonra XmlTextReader, ListItembunun yerine verileri doldurmanın bir yolu var DataSetmı?

görüntü açıklamasını buraya girin

Yanıtlar:


178

System.ServiceModelReferans ekleyin

Kullanarak 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;
    ...                
}

13
Bu şakadır. Harika ve özlü. Ayrıca System.Xml kullanıyor olmanız gerekir; ama bu oldukça belirgindir. Blogger için url şu anda RSS 2.0 için " blogname.blogspot.com/feeds/posts/default " (Atom 1.0) ve " blogname.blogspot.com/feeds/posts/default?alt=rss " şeklindedir. SyndicationItem öğesi, ihtiyacınız olan tüm öğe özelliklerine sahiptir. Yalnızca Visual Studio hata ayıklayıcısındaki nesneyi inceleyin ve aydınlanın.
secretwep

xmlreader yerine XmlTextReader'ı herhangi bir performans farkı kullanabilir miyiz?
Dragon

1
Kısa ve güzel. Teşekkür ederim!
Bogdan Doicin

8
.Net Core için, bunu kullanmak için yüklemek istediğiniz System.ServiceModel.Syndication
NuGet

2019 için bu, ön sürüm olan tek sürüme her erişmeye çalıştığımda patlıyor.
Clarence

11

Bu eski bir gönderi, ancak insanlara biraz zaman kazandırmak için benim yaptığım gibi şimdi buraya gelirseniz , CodeHollow.FeedReader paketine bir göz atmanızı öneririm. Daha geniş bir RSS sürümü yelpazesini destekleyen, kullanımı daha kolay ve daha sağlam görünüyor . https://github.com/codehollow/FeedReader



3

Bunu kullan :

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

        }



    }

0

Güncelleme: Bu yalnızca UWP - Windows Community Toolkit ile desteklenir

Artık çok daha kolay bir yol var. RssParser sınıfını kullanabilirsiniz . Örnek kod aşağıda verilmiştir.

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}");
        }
    }
}

UWP olmayanlar için System.ServiceModel.Syndication, başkalarının önerdiği gibi ad alanındaki Sendikasyonu kullanın .

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;
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.