Cara terbaik untuk membaca rss feed di .net Menggunakan C #


106

Apa cara terbaik untuk membaca RSS feed ?

Saya menggunakan XmlTextReaderuntuk mencapai ini. Apakah ada cara terbaik lain untuk melakukannya?

XmlTextReader reader = new XmlTextReader(strURL);

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

Setelah membaca umpan RSS menggunakan XmlTextReader, adakah cara agar saya dapat mengisi data ListItemdaripada DataSet?

masukkan deskripsi gambar di sini

Jawaban:


176

Tambahkan System.ServiceModelreferensi

Menggunakan 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
Ini adalah schizzle. Luar biasa dan ringkas. Anda juga harus menggunakan System.Xml; tapi itu cukup jelas. Untuk Blogger, url saat ini adalah "nama blog.blogspot.com/feeds/posts/default " (Atom 1.0) dan "nama blog.blogspot.com/feeds/posts/default?alt=rss " untuk RSS 2.0. Item SyndicationItem memiliki semua properti item yang Anda perlukan. Cukup periksa objek di debugger Visual Studio dan diterangi.
secretwep

dapatkah kita menggunakan XmlTextReader daripada xmlreader, ada perbedaan performa?
Naga

1
Pendek dan manis. Terima kasih!
Bogdan Doicin

8
Untuk .Net Core, Paket NuGet yang ingin Anda instal untuk menggunakan ini adalahSystem.ServiceModel.Syndication
adam0101

untuk tahun 2019 ini meledak setiap kali saya mencoba mengakses satu-satunya versi yang prarilis.
Clarence

11

Ini adalah posting lama, tetapi untuk menghemat waktu jika Anda sampai di sini sekarang seperti yang saya lakukan, saya sarankan Anda melihat paket CodeHollow.FeedReader yang mendukung versi RSS yang lebih luas, lebih mudah digunakan dan tampaknya lebih kuat . https://github.com/codehollow/FeedReader



3

Gunakan ini :

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

Pembaruan: Ini hanya mendukung dengan UWP - Windows Community Toolkit

Ada cara yang lebih mudah sekarang. Anda dapat menggunakan kelas RssParser . Kode sampel diberikan di bawah ini.

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

Untuk non-UWP gunakan Syndication dari namespace System.ServiceModel.Syndicationseperti yang disarankan orang lain.

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;
    }
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.