Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }
posts - 1908, comments - 2047, trackbacks - 352

My Links

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

Cookie e Privacy

Disabilita cookie ShinyStat

Microsoft MVP

My MVP Profile

Microsoft Certified Professional

Microsoft Specialist

Xamarin Certified Mobile Developer

Il mio libro su VB 2015!

Pre-ordina il mio libro su VB 2015 Pre-ordina il mio libro "Visual Basic 2015 Unleashed". Clicca sulla copertina per informazioni!

Il mio libro su WPF 4.5.1!

Clicca sulla copertina per informazioni! E' uscito il mio libro "Programmare con WPF 4.5.1". Clicca sulla copertina per informazioni!

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Follow me on Twitter!

Altri spazi

GitHub
I miei progetti open-source su GitHub

Article Categories

Archives

Post Categories

Image Galleries

Privacy Policy

Creare un aggregatore di feed RSS con VB 2008, WPF & LINQ - prima parte

Come promesso, oggi iniziamo una serie di post-tutorial che ci porteranno alla creazione di un client basato su Windows Presentation Foundation per aggregare i feed RSS provenienti da siti Web e blog attraverso Visual Basic 2008 e LINQ. I post faranno riferimento al mio progetto open-source Custom WPF RSS Feed Aggregator pubblicato su CodePlex (del quale potete scaricare il codice) e, secondo una logica step-by-step, ci permetteranno di ricostruire l’applicazione partendo dalla base, fino ad arrivare ad implementare stili grafici complessi con Microsoft Expression Blend 2. Potete anche utilizzare Visual Basic 2008 Express Edition e, se non volete utilizzare Blend, potrete poi lasciare l’interfaccia dell’applicazione secondo lo stile di default di WPF: sarà ugualmente funzionante.

 

Prendiamo la scusa di questi post anche per vedere come creare da zero un’applicazione WPF e soffermarci su alcuni importanti concetti di questa tecnologia, dal punto di vista dello sviluppatore Visual Basic. Bene, si inizia J

 

Dopo aver aperto Visual Studio 2008, dal menu File selezionate il comando New|Project. Al comparire della finestra New Project, selezionate la cartella relativa ai progetti Visual Basic, quindi il template WPF Application assegnando al progetto il nome CustomFeedAggregator come in figura:

 

 

 

Dopo alcuni secondi, verranno mostrati il designer WPF e l’editor di codice XAML relativi al nostro nuovo progetto. Come probabilmente sapete, in WPF l’interfaccia grafica delle applicazioni viene definita essenzialmente tramite XAML, un linguaggio di markup a derivazione XML nel quale, in parole molto povere, ciascun controllo è rappresentato da un elemento Xml e le sue proprietà da attributi Xml.

 

Il primo ragionamento: cosa sono i feed RSS. Si tratta di informazioni messe a disposizione da siti Web e blog circa gli aggiornamenti sui contenuti (news) in formato XML. Per esempio, i feed del mio blog conterranno l’elenco degli ultimi post e, per ciascun post, la data di pubblicazione, la categoria e molte altre informazioni utili il tutto, come detto, in formato XML. Ma noi non vogliamo leggere i feed di un singolo blog, piuttosto vogliamo avere un elenco di siti/blog, magari suddivisi in categorie, come nello screenshot dell’applicazione “finita”. Possiamo avvalerci, per l’elencazione dei siti e la loro suddivisione in categorie, di un file XML, che ben si presta a una suddivisione gerarchica. Ciò premesso, dal menu Project selezionate il comando Add new item e, quando compare l’omonima finestra, selezionate la scheda Data, quindi XML File assegnando al file il nome WebSites.xml:

 

 

 

Se avete Visual Basic 2008 Express, probabilmente non avete il template XML File. Selezionate tranquillamente il template Text File e assegnate il nome citato, in base all’estensione .xml verrà poi aperto l’editor corretto.

 

Dovreste ora vedere l’editor XML di Visual Studio 2008 pronto per ricevere il contenuto del documento. Per semplicità, riporto solo i primi due siti per ciascuna categoria (per le community italiane si tratta dei blog dei Microsoft MVP); potete poi visionare l’elenco completo nel progetto sorgente:

 

<?xml version="1.0" encoding="utf-8" ?>

<WebSites>

  <MainSite Name="Microsoft" >

    <Site Author="Beth Massi" URL="http://blogs.msdn.com/bethmassi/rss.xml"/>

    <Site Author="Visual Basic Team" URL="http://blogs.msdn.com/vbteam/rss.xml"/>

  </MainSite>

 

  <MainSite Name="MSDN Forums">

    <Site Author="Visual Basic IDE" URL="http://services.social.microsoft.com/feeds//feed/query/type/forum/eq/datatype/thread/eq/and/forumid/e8f98939-325d-485c-b3d0-8ac9acaf6917/eq/and"/>

    <Site Author="Visual Basic General" URL="http://services.social.microsoft.com/feeds//feed/query/type/forum/eq/datatype/thread/eq/and/forumid/0f60fa48-1ceb-41ee-a10a-0dfcee7e19bd/eq/and"/>

  </MainSite>

 

 <MainSite Name="Visual Basic Tips &amp; Tricks" >

    <Site Author="Alessandro Del Sole" URL="http://community.visual-basic.it/alessandro/Rss.aspx"/>

    <Site Author="Mario De Ghetto" URL="http://community.visual-basic.it/Mario/Rss.aspx"/>

  </MainSite>

 

  <MainSite Name="UgiDotNet" >

    <Site Author="Andrea Saltarello" URL="http://feeds.feedburner.com/strangelog"/>

    <Site Author="Raffaele Rialdi" URL="http://blogs.ugidotnet.org/raffaele/Rss.aspx"/>

  </MainSite>

 

  <MainSite Name="ASPItalia" >

    <Site Author="Daniele Bochicchio" URL="http://blogs.aspitalia.com/daniele/rss_extra.aspx"/>

    <Site Author="Cristian Civera" URL="http://blogs.aspitalia.com/ricciolo/rss_extra.aspx"/>

  </MainSite>

 

  <MainSite Name="SilverlightItalia">

    <Site Author="Alessio Leoncini" URL="http://blogs.aspitalia.com/novecento/rss_extra.aspx"/>

  </MainSite>

 

  <MainSite Name="XeDotNet">

    <Site Author="Andrea Boschin" URL="http://feeds.feedburner.com/boschin"/>

    <Site Author="Davide Vernole" URL="http://feeds.feedburner.com/knodev"/>

  </MainSite>

 

  <MainSite Name="DotNetHell">

    <Site Author="David de Giacomi" URL="http://blogs.dotnethell.it/david/rss.aspx"/>

    <Site Author="Matteo Raumer" URL="http://blogs.dotnethell.it/freeteo/rss.aspx"/>

  </MainSite>

 

  <MainSite Name="DotNetSide">

    <Site Author="Vito Arconzo" URL="http://dotnetside.org/blogs/vito/rss.aspx"/>

  </MainSite>

</WebSites>

 

Il nodo principale WebSites contiene tutta una serie di nodi MainSite, ognuno dei quali rappresenta una categoria (Microsoft, MSDN Forums, VB T&T, UgiDotNet, ASPItalia, ecc.). Per ciascun MainSite l’attributo Name identifica il nome della categoria, cosa che ci servirà nell’interfaccia allorquando aggiungeremo una TreeView. Sempre ciascun MainSite contiene tanti elementi Site quanti sono i siti/blog di nostro interesse, le cui proprietà Author e URL rappresentano, rispettivamente, il titolare del sito/blog e il relativo indirizzo Internet.

 

La scelta di un documento XML è dettata da diversi fattori quali: la struttura gerarchica dei dati, le dimensioni contenute dei dati, la facilità di interrogazione e aggiunta grazie a LINQ. Notate come l’attributo URL non contenga l’indirizzo del sito, ma l’indirizzo del servizio dei feed che potete trovare su ciascun sito/blog di vostro interesse.

 

Fatto questo, riprendiamo il discorso sui feed ricordando che essi espongono una nutrita serie di informazioni, di cui abbiamo necessità solo in parte. A noi sarà sufficiente conoscere il titolo e l’Url di ciascun post, la sua data di pubblicazione e la categoria (tipica dei blog). Potete, ovviamente, modificare a vostro gusto questo tipo di impostazione. Leggeremo il contenuto dei feed attraverso LINQ, che ci restituirà una vera e propria collezione di post. Ciò premesso, abbiamo necessità di una classe che rappresenti un singolo post. Quindi, sempre dal menu Project, selezionate Add Class e assegnate alla nuova classe il nome BlogPost.vb:

 

 

 

Il codice della classe, molto semplice, è il seguente:

 

'Represents a single blog post

Class BlogPost

 

    Private _title As String

    Private _datePublished As DateTime

    Private _url As Uri

    Private _category As String

 

    Property Title() As String

        Get

            Return _title

        End Get

        Set(ByVal value As String)

            _title = value

        End Set

    End Property

 

    Property DatePublished() As DateTime

        Get

            Return _datePublished

        End Get

        Set(ByVal value As DateTime)

            _datePublished = value

        End Set

    End Property

 

    Property Url() As Uri

        Get

            Return _url

        End Get

        Set(ByVal value As Uri)

            _url = value

        End Set

    End Property

 

    Property Category() As String

        Get

            Return _category

        End Get

        Set(ByVal value As String)

            _category = value

        End Set

    End Property

End Class

 

Non abbiamo bisogno di prevedere esplicitamente overload del costruttore, poichè utilizzeremo gli object initializer di .NET Framework 3.5 allorquando eseguiremo le query con LINQ.

 

La prima parte del tutorial finisce qui. Abbiamo creato file e oggetti che costituiscono la vera e propria base per il lavoro che la nostra applicazione dovrà svolgere. Nel prossimo post, vedremo come aggiungere uno schema XML per i feed al fine di abilitare l’IntelliSense in LINQ-to-Xml e come utilizzare proprio questo provider LINQ per implementare metodi per la lettura dei feed e l’aggiunta al documento Xml iniziale.

 

Se qualcosa non vi è chiaro, lasciate un feedback.

 

Alessandro

Print | posted on lunedì 10 novembre 2008 22:00 | Filed Under [ .NET Framework Visual Basic Visual Studio 2008 Windows Presentation Foundation LINQ ]

Powered by:
Powered By Subtext Powered By ASP.NET