Itek Developer

Programmare è arte

Visualizzare RSS Feeds con asp.net utilizzando XmlDocument

Visualizzare i Feeds utilizzando gli oggetti WebRequest e XmlDoucment

In un precedente articolo avevo descritto come visualizzare i Feeds RSS utilizzando l’oggetto DataSet del framework.NET .  Ora vorrei mostrarvi come fare utilizzando gli oggetti WebRequest e XmlDocument.  Il concetto di base è quello di accedere al file RSS tramite l’oggetto WebRequest per poi leggerne il contenuto tramite l’oggetto XmlDocument . Quest’ultimo mette a disposizione tutte le funzioni per leggere e manipolare nodi , attributi e dati contenuti all’interno di un file xml.  Il codice è molto semplice. Utilizziamo una singola pagina aspx ( Default.aspx ) . Vediamo il code.behind :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.IO;
using System.Xml;

namespace rss_xml_reader
{
    public partial class rssWebRequest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string rssURL = "http://gdata.youtube.com/feeds/base/standardfeeds/IT/top_rated?client=ytapi-youtube-browse&alt=rss&time=today";
            Response.Write("<font size=5><b>Site: " + rssURL + "</b></font><Br />");
            ProcessRSSItem(rssURL);

        }

        public void ProcessRSSItem(string rssURL)
        {
            WebRequest myRequest = WebRequest.Create(rssURL);
            WebResponse myResponse = myRequest.GetResponse();

            Stream rssStream = myResponse.GetResponseStream();
            XmlDocument rssDoc = new XmlDocument();
            rssDoc.Load(rssStream);

            XmlNodeList rssItems = rssDoc.SelectNodes("rss/channel/item");

            string title = "";
            string link = "";
            string description = "";

            for (int i = 0; i < rssItems.Count; i++)
            {
                XmlNode rssDetail;

                rssDetail = rssItems.Item(i).SelectSingleNode("title");
                if (rssDetail != null)
                {
                    title = rssDetail.InnerText;
                }
                else
                {
                    title = "";
                }
                rssDetail = rssItems.Item(i).SelectSingleNode("link");
                if (rssDetail != null)
                {
                    link = rssDetail.InnerText;
                }
                else
                {
                    link = "";
                }
                rssDetail = rssItems.Item(i).SelectSingleNode("description");
                if (rssDetail != null)
                {
                    description = rssDetail.InnerText;
                }
                else
                {
                    description = "";
                }

                Response.Write("<div style='Border-bottom:2px solid #777'><b><a href='" + link + "' target='new'>" + title + "</a></b><br/>");
                Response.Write(description + "</div>");

            }
        }
    }
}

Appena lanciamo l’applicazione viene eseguita la funzione  protected void Page_Load(object sender, EventArgs e) dove viene impostato nella variabile  rssUrl l’ Url del  nostro file RSS. Di seguito viene richiamata la funzione ProcessRSSItem(rssURL) che  ha come unico parametro l’url che abbiamo appena definito nella variabile rssUrl. Vediamo in dettaglio il corpo della funzione :

La pirma cosa da fare è leggere il contenuto del file RSS. Creiamo quindi L’oggetto WebRequest myRequest   e  WebResponse myResponse in modo tale da recuperare dal server il  file.

WebRequest myRequest = WebRequest.Create(rssURL);
WebResponse myResponse = myRequest.GetResponse();

Adesso che abbiamo effettuato la richiesta dobbiamo creare un oggetto Stream nel quale memorizzare il flusso di dati che ci viene restituito dal server :

Stream rssStream = myResponse.GetResponseStream();

Ora che abbiamo il nostro file RSS nello stream , quindi sotto forma di array di byte , creiamo l’oggetto XmlDocument e carichiamo all’interno di esso il contenuto dello stream :

XmlDocument rssDoc = new XmlDocument();
rssDoc.Load(rssStream);

A questo punto possiamo leggere i dati e visualizzarli. Selezioniamo quindi tutti gli items presenti nel canale RSS. A tale scopo utilizziamo l’oggetto XmlNodeList che permette di selezionare dall ‘ intero file xml ( che è adesso contenuto nell’ XmlDocument ) tutti gli items presenti all’interno del canale :

XmlNodeList rssItems = rssDoc.SelectNodes("rss/channel/item");

Non ci resta che iterare con un ciclo for tutti gli tiems contenuti alli’nterno dell’oggetto XmlNodeList per leggere e visualizzare il contenuto dei sottonodi “title” , “link” e “description”  :

for (int i = 0; i < rssItems.Count; i++)
            {
                XmlNode rssDetail;

                rssDetail = rssItems.Item(i).SelectSingleNode("title");
                if (rssDetail != null)
                {
                    title = rssDetail.InnerText;
                }
                else
                {
                    title = "";
                }
                rssDetail = rssItems.Item(i).SelectSingleNode("link");
                if (rssDetail != null)
                {
                    link = rssDetail.InnerText;
                }
                else
                {
                    link = "";
                }
                rssDetail = rssItems.Item(i).SelectSingleNode("description");
                if (rssDetail != null)
                {
                    description = rssDetail.InnerText;
                }
                else
                {
                    description = "";
                }

                Response.Write("<div style='Border-bottom:2px solid #777'><b><a href='" + link + "' target='new'>" + title + "</a></b><br/>");
                Response.Write(description + "</div>");

            }

Download del codice completo


Lascia un commento