Melhor maneira de ler feed rss em .net usando C #

106

Qual é a melhor maneira de ler feeds RSS ?

Estou usando XmlTextReaderpara conseguir isso. Existe alguma outra maneira melhor de fazer isso?

XmlTextReader reader = new XmlTextReader(strURL);

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

Depois de ler o feed RSS usando XmlTextReader, há alguma maneira de preencher os dados em ListItemvez de DataSet?

insira a descrição da imagem aqui

Tronics
fonte

Respostas:

176

Adicionar System.ServiceModel referências

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
fonte
13
Este é o esquizofrênico. Incrível e sucinto. Você também precisa usar System.Xml; mas isso é bastante evidente. Para o Blogger, o url atualmente é " blogname.blogspot.com/feeds/posts/default " (Atom 1.0) e " blogname.blogspot.com/feeds/posts/default?alt=rss " para RSS 2.0. O item SyndicationItem possui todas as propriedades do item de que você precisa. Basta examinar o objeto no depurador do Visual Studio e ser iluminado.
secretwep
podemos usar XmlTextReader em vez de xmlreader alguma diferença de desempenho?
Dragon
1
Curto e grosso. Obrigado!
Bogdan Doicin
8
Para .Net Core, o pacote NuGet que você deseja instalar éSystem.ServiceModel.Syndication
adam0101
para 2019, isso explode toda vez que tento acessar a única versão que é pré-lançamento.
Clarence
11

Este é um post antigo, mas para economizar tempo das pessoas se você chegar aqui agora como eu, sugiro que você dê uma olhada no pacote CodeHollow.FeedReader que suporta uma gama maior de versões RSS, é mais fácil de usar e parece mais robusto . https://github.com/codehollow/FeedReader

emilast
fonte
3

Usa isto :

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

Atualização: compatível apenas com UWP - Windows Community Toolkit

Existe uma maneira muito mais fácil agora. Você pode usar a classe RssParser . O código de amostra é fornecido abaixo.

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 não UWP, use Syndication do namespace System.ServiceModel.Syndicationcomo outros sugeriram.

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
fonte