Meilleur moyen de lire le flux rss dans .net en utilisant C #


106

Quelle est la meilleure façon de lire les flux RSS ?

J'utilise XmlTextReaderpour y parvenir. Y a-t-il une autre meilleure façon de le faire?

XmlTextReader reader = new XmlTextReader(strURL);

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

Après avoir lu le flux RSS en utilisant XmlTextReader, y a-t-il un moyen de remplir des données au ListItemlieu de DataSet?

entrez la description de l'image ici

Réponses:


176

Ajouter des System.ServiceModelréférences

Utilisation 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
C'est le schizzle. Génial et succinct. Vous devez également utiliser System.Xml; mais c'est assez évident. Pour Blogger, l'URL est actuellement " blogname.blogspot.com/feeds/posts/default " (Atom 1.0) et " blogname.blogspot.com/feeds/posts/default?alt=rss " pour RSS 2.0. L'élément SyndicationItem possède toutes les propriétés d'élément dont vous aurez besoin. Examinez simplement l'objet dans le débogueur Visual Studio et soyez éclairé.
secretwep

pouvons-nous utiliser XmlTextReader au lieu de xmlreader une différence de performances?
Dragon

1
Court et doux. Je vous remercie!
Bogdan Doicin

8
Pour .Net Core, le package NuGet que vous souhaitez installer pour l'utiliser estSystem.ServiceModel.Syndication
adam0101

pour 2019, cela explose à chaque fois que j'essaie d'accéder à la seule version qui est une avant-première.
Clarence

11

Ceci est un ancien article, mais pour faire gagner du temps aux gens si vous arrivez ici maintenant comme je l'ai fait, je vous suggère de jeter un œil au paquet CodeHollow.FeedReader qui prend en charge une plus large gamme de versions RSS, est plus facile à utiliser et semble plus robuste . https://github.com/codehollow/FeedReader



3

Utilisez ceci :

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

Mise à jour: cela prend en charge uniquement avec UWP - Windows Community Toolkit

Il existe maintenant un moyen beaucoup plus simple. Vous pouvez utiliser la classe RssParser . L'exemple de code est donné ci-dessous.

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

Pour les non-UWP, utilisez la syndication depuis l'espace System.ServiceModel.Syndicationde noms comme d'autres l'ont suggéré.

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;
    }
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.