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

Tronics
la source

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;
    ...                
}
dlopezgonzalez
la source
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

Emilast
la source
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);

        }



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