วิธีที่ดีที่สุดในการอ่าน rss feed ใน. net โดยใช้ C #


106

วิธีที่ดีที่สุดในการอ่านRSS feedsคืออะไร?

ฉันใช้XmlTextReaderเพื่อบรรลุสิ่งนี้ มีวิธีอื่นที่ดีที่สุดที่จะทำได้หรือไม่?

XmlTextReader reader = new XmlTextReader(strURL);

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

หลังจากที่ได้อ่านฟีด RSSใช้XmlTextReaderจะมีวิธีใดที่ฉันสามารถเติมข้อมูลไปListItemแทนDataSet?

ป้อนคำอธิบายภาพที่นี่

คำตอบ:


178

เพิ่มSystem.ServiceModelในการอ้างอิง

ใช้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
นี่คือ schizzle น่ากลัวและรวบรัด คุณต้องใช้ System.Xml; แต่ก็ชัดเจนพอสมควร สำหรับบล็อกเกอร์ปัจจุบัน URL คือ " blogname.blogspot.com/feeds/posts/default " (Atom 1.0) และ " blogname.blogspot.com/feeds/posts/default?alt=rss " สำหรับ RSS 2.0 รายการ SyndicationItem มีคุณสมบัติไอเท็มทั้งหมดที่คุณต้องการ เพียงแค่ตรวจสอบวัตถุในโปรแกรมดีบักเกอร์ Visual Studio และส่องสว่าง
secretwep

เราสามารถใช้ XmlTextReader แทน xmlreader ประสิทธิภาพที่แตกต่างกันได้หรือไม่
Dragon

1
สั้นและหวาน ขอบคุณ!
Bogdan Doicin

8
สำหรับ. Net Core แพ็คเกจ NuGet ที่คุณต้องการติดตั้งเพื่อใช้งานคือSystem.ServiceModel.Syndication
adam0101

สำหรับปี 2019 สิ่งนี้จะระเบิดทุกครั้งที่ฉันพยายามเข้าถึงเวอร์ชันเดียวซึ่งเป็นรุ่นก่อนวางจำหน่าย
Clarence

11

นี่เป็นโพสต์เก่า แต่เพื่อช่วยผู้คนในบางครั้งหากคุณมาที่นี่ตอนนี้ฉันขอแนะนำให้คุณดูแพ็คเกจCodeHollow.FeedReaderซึ่งรองรับ RSS เวอร์ชันที่กว้างขึ้นใช้งานง่ายกว่าและดูแข็งแรงกว่า . https://github.com/codehollow/FeedReader



3

ใช้สิ่งนี้:

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

อัปเดต: รองรับเฉพาะกับ UWP - Windows Community Toolkit

มีวิธีที่ง่ายกว่านี้มาก คุณสามารถใช้คลาสRssParser โค้ดตัวอย่างได้รับด้านล่าง

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 ให้ใช้ Syndication จากเนมสเปซSystem.ServiceModel.Syndicationตามที่ผู้อื่นแนะนำ

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;
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.