C #을 사용하여 .net에서 RSS 피드를 읽는 가장 좋은 방법


106

RSS 피드 를 읽는 가장 좋은 방법은 무엇입니까 ?

나는 XmlTextReader이것을 달성하기 위해 사용 하고 있습니다. 다른 최선의 방법이 있습니까?

XmlTextReader reader = new XmlTextReader(strURL);

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

를 사용하여 RSS 피드 를 읽은 후 대신 XmlTextReader데이터를 채울 수있는 방법 ListItemDataSet있습니까?

여기에 이미지 설명 입력

답변:


176

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
이것이 시즐입니다. 훌륭하고 간결합니다. 또한 System.Xml을 사용해야합니다. 그러나 그것은 상당히 분명합니다. Blogger의 경우 URL은 현재 " blogname.blogspot.com/feeds/posts/default"(Atom 1.0)이고 RSS 2.0의 경우 " blogname.blogspot.com/feeds/posts/default?alt=rss "입니다. SyndicationItem 항목에는 필요한 모든 항목 속성이 있습니다. Visual Studio 디버거에서 개체를 검사하고 조명을 받으면됩니다.
secretwep 2013 년

성능 차이가 xmlreader 대신 XmlTextReader를 사용할 수 있습니까?
Dragon

1
짧고 달다. 감사합니다!
Bogdan Doicin

8
.Net Core의 경우이를 사용하기 위해 설치하려는 NuGet 패키지는System.ServiceModel.Syndication
adam0101

2019 년에는 프리 릴리즈 인 유일한 버전에 액세스하려고 할 때마다이 문제가 발생합니다.
Clarence

11

이 글은 오래된 글이지만 제가 한 것처럼 지금 여기에 오시면 사람들의 시간을 절약하기 위해 더 넓은 범위의 RSS 버전을 지원하고 사용하기 쉽고 더 강력 해 보이는 CodeHollow.FeedReader 패키지를 살펴 보시기 바랍니다. . 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의 경우 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.