Najlepszy sposób na odczytanie kanału rss w .net przy użyciu C #

106

Jaki jest najlepszy sposób czytania kanałów RSS ?

Używam, XmlTextReaderaby to osiągnąć. Czy jest inny najlepszy sposób, aby to zrobić?

XmlTextReader reader = new XmlTextReader(strURL);

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

Po przeczytaniu źródła RSS za pomocą XmlTextReader, czy jest jakiś sposób, aby ListItemzamiast tego wypełnić dane DataSet?

wprowadź opis obrazu tutaj

Tronics
źródło

Odpowiedzi:

178

Dodaj System.ServiceModelodniesienia

Używając 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
źródło
13
To jest schizzle. Niesamowite i zwięzłe. Musisz także używać System.Xml; ale to dość oczywiste. W przypadku Bloggera adres URL to obecnie „ nazwa_bloga.blogspot.com/feeds/posts/default ” (Atom 1.0) i „ nazwa_bloga.blogspot.com/feeds/posts/default?alt=rss ” w przypadku formatu RSS 2.0. Element SyndicationItem ma wszystkie potrzebne właściwości elementu. Wystarczy zbadać obiekt w debugerze programu Visual Studio i zostać oświetlonym.
Secretwep
czy możemy użyć XmlTextReader zamiast xmlreader, czy różnica w wydajności?
Dragon
1
Krótkie i słodkie. Dziękuję Ci!
Bogdan Doicin
8
W przypadku platformy .Net Core pakiet NuGet, który chcesz zainstalować, aby go używać, toSystem.ServiceModel.Syndication
adam0101
w 2019 roku to wybucha za każdym razem, gdy próbuję uzyskać dostęp do jedynej wersji, która jest przedpremierowa.
Clarence
11

To jest stary post, ale aby zaoszczędzić ludziom trochę czasu, jeśli dotrzesz tutaj teraz, tak jak ja, sugeruję zapoznać się z pakietem CodeHollow.FeedReader , który obsługuje szerszą gamę wersji RSS, jest łatwiejszy w użyciu i wydaje się bardziej solidny . https://github.com/codehollow/FeedReader

emilast
źródło
3

Użyj tego :

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
źródło
0

Aktualizacja: działa tylko z UWP - Windows Community Toolkit

Teraz jest o wiele łatwiejszy sposób. Możesz użyć klasy RssParser . Przykładowy kod podano poniżej.

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

W przypadku urządzeń innych niż UWP użyj syndykacji z przestrzeni nazw, System.ServiceModel.Syndicationjak sugerowali inni.

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
źródło