28

Nov

Fare relay di un feed RSS in ASP.NET

Ciao a tutti

 

in alcuni casi (www.antonioesposito.it) è necessario sviluppare un sito web di piccole dimensioni che funga da aggregatore di contenuti provenienti da altri siti web in forma di feed RSS.

 

Nel mio caso ho scelto di pubblicare sul mio sito personale il mio blog su DotNetLombardia. Il codice è pressoché elementare Sorriso

 

Questa è una classe statica che funge da fonte dati per il mio ObjectDataSource:

[code language="csharp"]

public static class FeedCollector
{
    public static IEnumerable GetFeeds()
    {
        var req1 = HttpWebRequest.Create("http://dotnetlombardia.org/blogs/tonyexpo/rss.aspx"); // esempio :)
        var r = new XmlSerializer(typeof(Item));
        var risp = new ArrayList();

        using (var res1 = req1.GetResponse())
        {
            var x = new XmlDocument();
            x.Load(res1.GetResponseStream());
            foreach(XmlNode node in x.SelectNodes("//item"))
            {
                var i = (Item)r.Deserialize(new StringReader(node.OuterXml));
                // aggiustatine varie in base al feed ke si legge
                if (i.description.Contains("/script>"))
                    i.description = i.description.Substring(i.description.LastIndexOf("/script>") + 8, i.description.Length - (i.description.LastIndexOf("/script>") + 8));
                if (i.description.Contains("                    i.description = i.description.Replace("", "/p>");
                risp.Add(i);
            }
        }
        return risp;
    }
}

[XmlRoot(ElementName = "item")]
public class Item
{ // questa classe mappa le proprietà dello schema feed rss
    public string title { get; set; }
    public string link { get; set; }
    public string pubDate { get; set; }
    public string description { get; set; }
}

[/code]

 

per visualizzare questi feed letti in automatico ho creato questa semplice pagina aspx

    CacheDuration="120" CacheExpirationPolicy="Sliding" TypeName="antonioesposito.it_6.FeedCollector">


   

       
           
               

                   


                        <%# Eval("title") %>


                   

                       

                            <%# string.Format("{0:D}", Eval("pubDate")) %>
                           
                       

                       


                            <%# Eval("description") %>


                   

               

               

               

           

       

   

 

unica peculiarità (oltre il layout della pagina) è la cache che ho impostato così da evitare che il server contatti gli altri per aggiornare i feed ad ogni connessione. nel mio caso ho scelto una cache di 120 secondi in modalità sliding (dall’ultimo chiamante)

 

Anto

by Antonio Esposito on 11/28/2010