La mejor manera de leer el feed rss en .net usando C #

106

¿Cuál es la mejor forma de leer las fuentes RSS ?

Estoy usando XmlTextReaderpara lograr esto. ¿Existe alguna otra mejor manera de hacerlo?

XmlTextReader reader = new XmlTextReader(strURL);

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

Después de leer el feed RSS usando XmlTextReader, ¿hay alguna manera de que pueda llenar los datos de ListItemlugar de DataSet?

ingrese la descripción de la imagen aquí

Tronics
fuente

Respuestas:

176

Agregar System.ServiceModelreferencias

Usando 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
fuente
13
Esta es la esquizla. Impresionante y concisa. También debe utilizar System.Xml; pero eso es bastante evidente. Para Blogger, la URL es actualmente " blogname.blogspot.com/feeds/posts/default " (Atom 1.0) y " blogname.blogspot.com/feeds/posts/default?alt=rss " para RSS 2.0. El elemento SyndicationItem tiene todas las propiedades del elemento que necesitará. Simplemente examine el objeto en el depurador de Visual Studio y esté iluminado.
secretwep
¿Podemos usar XmlTextReader en lugar de xmlreader alguna diferencia de rendimiento?
Dragón
1
Corto y dulce. ¡Gracias!
Bogdan Doicin
8
Para .Net Core, el paquete NuGet que desea instalar para usar esto esSystem.ServiceModel.Syndication
adam0101
para 2019, esto explota cada vez que intento acceder a la única versión que es preliminar.
Clarence
11

Esta es una publicación antigua, pero para ahorrar algo de tiempo a la gente si llega aquí ahora como lo hice yo, le sugiero que eche un vistazo al paquete CodeHollow.FeedReader que admite una gama más amplia de versiones RSS, es más fácil de usar y parece más sólido . https://github.com/codehollow/FeedReader

emilast
fuente
3

Utilizar este :

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
fuente
0

Actualización: esto solo es compatible con UWP - Windows Community Toolkit

Ahora hay una forma mucho más sencilla. Puede utilizar la clase RssParser . El código de muestra se proporciona a continuación.

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

Para no UWP, use la distribución del espacio de nombres System.ServiceModel.Syndicationcomo otros sugirieron.

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
fuente