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

Tronics
sumber

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;
    ...                
}
dlopezgonzalez.dll
sumber
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

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

        }



    }
Mahdi jokar
sumber
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;
    }
}
Sibeesh Venu
sumber