La gestione dei feed in .Net (C# e VB.net)

Articolo introduttivo alla gestione dei feed in .Net.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

Introduzione

In questo articolo, vediamo come utilizzare la classe SyndicationFeed per gestire i feed dei siti.
I feed non sono altro che file xml con determinate informazioni.
Il file contiene alcuni tag comuni, come title, description, data ed  altro ancora.
In questo articolo vedremo come gestire le informazioni dei siti.

Il designer della form

Si crea un nuovo progetto web o windows, a seconda delle proprie esigenze, nel nostro caso utilizzeremo il web, anche se la parte Windows si differenzia di poche parti.
Inseriamo nella pagina web, una label, che avrà il compito di visualizzare i dati ed una listbox, la quale al click sulla singola voce aprirà una pagina web relativa alla voce selezionata.


Stesura del codice

Aggiungiamo un riferimento al nostro progetto appena creato, tramite la finestra di esplora soluzioni, facciamo click con il tasto destro sul nome del progetto e selezioniamo dal menu di scelta rapida la voce “Aggiungi riferimenti”.
Nella finestra che viene aperta, selezioniamo la voce “System.ServiceModel”.
Terminata tale operazione, passiamo in visualizzazione codice.

Aggiungiamo lo spazio dei nomi, che ci permettono di utilizzare le classi opportune, come la gestione dei dati, dei feed e XML.
Qui di seguito si riporta la dichiarazione dei spazio dei nomi per entrambi i linguaggi (VB.Net e C#).

VB.Net
'spazio dei nomi
Imports System.Xml
Imports System.ServiceModel.Syndication 'System.servicesmodel
Imports System.Data
C#
//spazio dei nomi
using System.Xml;
using System.ServiceModel.Syndication;
using System.Data;

 

Nell’evento load scriviamo il codice che ci permette di caricare la listbox con le informazioni del post.
Ricordiamo che il feed xml viene preso da un file xml in questo esempio utilizzare quello di un blog http://emanuelemattei.blogspot.com/feeds/posts/default

Qui di seguito si riporta il codice completo dell’evento load della pagina web in VB.Net e C#

VB.Net
   Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Page.IsPostBack = False Then
            Dim dttDati As New DataTable
            Dim ColonnaTitolo As New DataColumn("Titolo")
            Dim ColonnaLink As New DataColumn("Link")
            dttDati.Columns.Add(ColonnaTitolo)
            dttDati.Columns.Add(ColonnaLink)
            'carico lettore XML
            Dim readerXML As XmlReader = XmlReader.Create("http://emanuelemattei.blogspot.com/feeds/posts/default")
            'leggo il feed
            Dim rssFeed As SyndicationFeed = SyndicationFeed.Load(readerXML)
            'imposto il titolo
            lbltitolo.Text = rssFeed.Title.Text & " " & " " & rssFeed.Links(0).Uri.AbsoluteUri
            'seleziono i primi 5
            For Each rssItem In rssFeed.Items.Take(5)
                Dim riga As DataRow = dttDati.NewRow()
                riga("Titolo") = rssItem.PublishDate.ToString("s") + " " + rssItem.Title.Text
                riga("Link") = rssItem.Links(4).Uri.AbsoluteUri
                dttDati.Rows.Add(riga)
            Next
            ListBox1.DataTextField = "Titolo"
            ListBox1.DataValueField = "Link"
            ListBox1.DataSource = dttDati
            ListBox1.DataBind()
        End If
    End Sub
C#
protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                DataTable dttDati = new DataTable();
                DataColumn ColonnaTitolo = new DataColumn("Titolo");
                DataColumn ColonnaLink = new DataColumn("Link");
                dttDati.Columns.Add(ColonnaTitolo);
                dttDati.Columns.Add(ColonnaLink);
                //carico lettore XML
                XmlReader readerXML = XmlReader.Create("http://emanuelemattei.blogspot.com/feeds/posts/default");
                //leggo il feed
                SyndicationFeed rssFeed = SyndicationFeed.Load(readerXML);
                //imposto il titolo
                lbltitolo.Text = rssFeed.Title.Text + " " + " " + rssFeed.Links[0].Uri.AbsoluteUri;
                //seleziono i primi 5
                foreach (SyndicationItem rssItem in rssFeed.Items.Take(5))
                {
                    DataRow Riga = dttDati.NewRow();
                    Riga["Titolo"] = rssItem.PublishDate.ToString("s") + " " + rssItem.Title.Text;
                    Riga["Link"] = rssItem.Links[4].Uri.AbsoluteUri;
                    dttDati.Rows.Add(Riga);
                }
                ListBox1.DataTextField = "Titolo";
                ListBox1.DataValueField = "Link";
                ListBox1.DataSource = dttDati;
                ListBox1.DataBind();
            }
        }


Come si vede dal codice, si sono creati degli oggetti per gestire le informazioni, come un datatable, datacolum e datarow.
La classe Syndacationfeed gestisce le informazioni del feed, provienente da un oggetto xmlreader il quale avrà il compito di gestire i dati dal feed sul web.
Ora non ci resta che scrivere il codice per l’evento “SelectedIndexChanged” che si verifica quando si seleziona un elemento nella lista. Il codice dovrà aprire la pagina web relativa alla notizia selezionata nella lista.

Qui di seguito si riporta il codice per tali operazioni.

VB.Net
Protected Sub ListBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ListBox1.SelectedIndexChanged
        System.Diagnostics.Process.Start(ListBox1.SelectedValue)
    End Sub
C#
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start(ListBox1.SelectedValue);
        }

Conclusioni

L’articolo ha voluto fornire al lettore le informazioni per leggere i feed dei siti e blog. Tale tecnica si può utilizzare anche in ambiente Windows.