di  -  martedì 1 giugno 2010

Con questo articolo inizierò un piccolo esperimento editoriale che durerà alcune settimane. L’idea è quella di costruire insieme a voi lettori un’applicazione. Ci tengo a precisare che questo esperimento non ha la pretesa di essere un tutorial o una guida ma semplicemente un percorso da fare insieme in un ambiente stimolante come può essere quello di un blog frequentato da persone tecnicamente preparate. Per non limitare le direzioni che potrebbe prendere questo piccolo esperimento fisserò solo pochi punti fissi e insindacabili (ma nemmeno troppo se le motivazioni per smuoverli sono buone):

  • Il tema centrale sarà la costruzione di un feed reader con cui poter leggere con comodità gli articoli di Appunti Digitali
  • Il progetto verrà sviluppato in python (sperando che qualcuno se ne innamori durante il percorso)
  • Si farà un uso esteso di librerie esterne (sono pigro e non mi piace reinventare la ruota :P)
  • Tutto verrà costruito con strumenti free e open-source (Il titolo della rubrica parla chiaro :D )
  • La vostra opinione conta (Non esitate neanche un secondo a stroncare una scelta compiuta o a consigliare strade alternative)

Le tecnologie che incontreremo dovrebbero funzionare senza troppi sforzi su tutte le piattaforme ma per preferenza personale svilupperò su GNU/Linux. Se dovessero servire aggiustamenti qua e là o integrazioni dipendenti dalla piattaforma vi chiedo cortesemente di condividerle con i lettori.

COS’È UN FEED

Cito direttamente da Wikipedia:

Il feed web è un’unità di informazioni formattata secondo specifiche (di genesi XML) stabilite precedentemente. Ciò per rendere interoperabile ed interscambiabile il contenuto fra le diverse applicazioni o piattaforme. Un feed è usato per fornire agli utilizzatori una serie di contenuti aggiornati di frequente. I distributori del contenuto rendono disponibile il feed e consentono agli utenti di iscriversi. L’uso principale dei feed RSS (detti anche flussi RSS) attualmente è legato alla possibilità di creare informazioni di qualunque tipo che un utente potrà vedere molto comodamente, con l’aiuto di un lettore apposito, nella stessa pagina, nella stessa finestra, senza dover andare ogni volta nel sito principale.

Per una spiegazione ancora più semplice di cosa sia e a che cosa serva consiglio la visione di questo video:

Dal nostro punto di vista un feed sarà semplicemente un file XML con determinati tag che delimitano informazioni da estrarre in qualche modo.

COME SI ESTRAGGONO LE INFORMAZIONI DA UN FILE XML

L’operazione di estrazione dei dati da un file XML viene comunemente chiamata parsing. Concettualmente ci sono due approcci al parsing di un file XML: utilizzo di un parser SAX o DOM. Queste informazioni sono soltanto un’indicazione per chi è curioso ed ha voglia di approfondire ma come vedremo in seguito non ci serviranno affatto.

LA SCELTA DELLA LIBRERIA

La libreria che utilizzeremo per il parsing è Universal Feed Parser. Perché questa? Perché è testata, ha un API semplice e gestisce molto bene feed RSS e ATOM anche non pienamente compilant. Insomma fa il suo sporco lavoro e lo fa con il mio minimo sforzo. Per installarla su Ubuntu vi basterà installare il pacchetto:

python-feedparser

Per le altre piattaforme scaricate il pacchetto dal Python Package Index (pypi) a questo indirizzo, estraetelo e installatelo con il comando:

python setup.py install

Su segnalazione di Carlosh aggiungo che chi volesse installare Universal Feed Parser su windows deve precedentemente installare i setup tools.

POSSIAMO INIZIARE

Iniziamo subito ad esplorare la libreria, apriamo una shell python interattiva (consiglio DreamPie già recensita sulle pagine di questo Blog)

importiamo il modulo feedparser

import feedparser

e facciamo il parsing del feed di appunti digitali utilizzando la funzione parse della libreria:

ad = feedparser.parse("http://www.appuntidigitali.it/feed")

Con una semplice riga di codice abbiamo ottenuto il nostro oggetto ad che contiene tutto ciò che ci può servire in una struttura facilmente esplorabile. Possiamo stampare il titolo, sottotitolo e url del blog semplicemente accedendo all’oggetto ad.feed:

print "Titolo del feed:\t\t %s" % (ad.feed.title)
print "Sottotitolo del feed:\t %s" % (ad.feed.subtitle)
print "Url del blog:\t\t %s" % (ad.feed.link)

Quei %s che vedete all’interno delle stringhe non sono altro che segnaposto a cui saranno sostituiti i valori degli oggetti tra tonde alla destra del simbolo %.

Se per esempio volessimo stampare le tre informazioni estratte sopra  semplicemente separate da virgola potremmo fare qualcosa del genere:

print "%s, %s, %s" % (ad.feed.title, ad.feed.subtitle, ad.feed.link)

Vediamo adesso come stampare a scherma il titolo degli ultimi 10 articoli apparsi su appunti digitali iterando sull’oggetto ad.entries (possiamo farlo tranquillamente visto che è un oggetto iterabile):

for entry in ad.entries:
    print entry.title

Il primo appuntamento termina qui con l’invito ad esplorare la libreria che come avete visto è semplicissima da utilizzare. Per chi non avesse dimestichezza con la programmazione e volesse imparare python consiglio inoltre la lettura di “pensare da informatico” che è senza dubbio un ottimo punto di partenza.

15 Commenti »

I commenti inseriti dai lettori di AppuntiDigitali non sono oggetto di moderazione preventiva, ma solo di eventuale filtro antispam. Qualora si ravvisi un contenuto non consono (offensivo o diffamatorio) si prega di contattare l'amministrazione di Appunti Digitali all'indirizzo info@appuntidigitali.it, specificando quale sia il commento in oggetto.

  • # 1
    Alberto
     scrive: 

    Bell’articolo complimenti, molto interessante. E’ la prima volta che mi avvicino al linguaggio Python e devo dire che è davvero notevole!

  • # 2
    Cassista
     scrive: 

    Bellissima idea.
    E’ da un po’ che giro attorno al python (per puro interesse personale, non lavorativo) ma trovo troppo spesso “altre cose da fare” che immergermi in questo ambiente. Sara’ una bella avventura, lo sento :)

  • # 3
    Emanuele Rampichini (Autore del post)
     scrive: 

    Grazie a entrambi per i complimenti.

    Sara’ una bella avventura, lo sento :)

    Speriamo :D

    E’ la prima volta che mi avvicino al linguaggio Python e devo dire che è davvero notevole!

    Prima vittima del pitone! :P

  • # 4
    Carlosh
     scrive: 

    Complimenti, bellissima idea, questo articolo !
    E’ un’ottimo stimolo per far pratica…

    Ho cominciato a avvicinarmi a questo linguaggio circa un mese fà, grazie proprio ad un’altro dei tuoi articoli e lo trovo veramente interessante…

    Volevo segnalare, che nel mio caso, volendo installare Universal Feed Parser su windows, è necessario prima installare (se non lo si è già fatto) i setuptools che si trovano a questo indirizzo:

    http://pypi.python.org/pypi/setuptools#downloads

    in quanto mi dava questo errore:

    File “setup.py”, line 1, in
    from setuptools import setup, find_packages
    ImportError: No module named setuptools

    Resto sintinizzato per i prossimi articoli :)

  • # 5
    Emanuele Rampichini (Autore del post)
     scrive: 

    Complimenti, bellissima idea, questo articolo !

    Grazie

    Volevo segnalare, che nel mio caso, volendo installare Universal Feed Parser su windows, è necessario prima installare (se non lo si è già fatto) i setuptools che si trovano a questo indirizzo:

    http://pypi.python.org/pypi/setuptools#downloads

    Grazie della collaborazione. Aggiunto all’articolo.

  • # 6
    ilbat
     scrive: 

    Bell’articolo, era un pò che volevo fare qualcosa di simile per integrarlo in una pagina web “casalinga” adesso non ho pià scuse!

  • # 7
    Z80Fan
     scrive: 

    Veramente una bella idea, sarà la volta buona che comincio ad imparare Python ;)

  • # 8
    Fede
     scrive: 

    Complimenti a Emanuele Rampichini per l’articolo e soprattutto per l’idea di cominciare a fare qualche cosa di tosto invece di stare a discutere … vediamo un po dai prossimi articoli cosa ne esce fuori, in questo hai semplicemente illustrato alcuni metodi e proprietà di un oggetto applicandoli poi al semplice ciclo For per estrarre le informazioni dalle proprietà dell’oggetto istanziato (per quanto riguarda il linguaggio è solo una questione di sintassi tanto è vero che in modo analogo si sarebbe potuto fare per esempio con C#, con Java e perché no anche con visaul basic o si potrebbe scomodare sua maestà C++).
    A me interessa soprattutto che dai prossimi articoli esca fuori la logica della programmazione per poter discuterne insieme e magari fare uscire anche cose mai viste, perché è un conto saper scrivere un programma usando la sintassi di un cereto linguaggio e d è un conto idere la logica di certi algoritmi.

    Un salutone a Z80Fan …. non so chi tu sia ma gia mi sei simpatico prer via del tuo nick perché mi riporta indietro nel tempo in splenditissimi periodi fatti di assembler e Peek Poke …

  • # 9
    Simone
     scrive: 

    Mi unisco ai complimenti per l’iniziativa!
    Utilizzo Python in ambito lavorativo, anche se in tutt’altro genere di applicazioni, quindi questi articoli serviranno sicuramente ad ampliare il bagaglio di conoscenze. Una domanda all’autore, anche se magari è un po’ presto per farla: hai intenzione di implementare anche una GUI?
    Grazie e buon lavoro.

  • # 10
    Emanuele Rampichini (Autore del post)
     scrive: 

    @Simone
    Si l’idea era quella di costruirci sopra una gui con le pyQt4 che conosco. Ma mi stava balenando l’idea di dedicare un po di tempo anche ad una versione “luccicosa” con le librerie clutter che sto esplorando ultimamente (se vuoi capire di cosa si tratta fatti u giro sul mio blog) ma ancora devo decidere.

    Sono comunque aperto a consigli.

  • # 11
    Ryuzaki_Eru
     scrive: 

    Articolo molto interessante, non conoscevo questa libreria. Davvero notevole, molto potente. Speriamo che questo articolo riesca ad attirare nuovi adepti (se non si era capito adoro Python, è il mio linguaggio preferito :D). E’ uno dei pochi articoli che trattano la creazione di un programma passo dopo passo in modo da farne vedere la potenza e le caratteristiche a chi ancora non lo conosce. Questo è il miglior modo per publiccizzare un linguaggio :D
    Se avevi in mente di fare una GUI, IMHO, PyQt4 sono la scelta migliore. Le reputo e migliori librerie grafiche in circolazione.

    @Z80Fan: te l’avevo detto mesi fa di imparare Python che non te ne saresti pentito.

  • # 12
    Toyo
     scrive: 

    E’ da molto tempo che avevo intenzione di avvicinarmi a Python (ho discrete conoscenze di c/c++, java, c#), ma l’avevo sempre allontanato con qualche scusa…. ora è la volta buona ;)

  • # 13
    Cesare Di Mauro
     scrive: 

    Verrete assimilati e/o passerete al lato oscuro della forza: may the Python be with you. :D

    A parte gli scherzi, Python è un linguaggio estremamente semplice ed enormemente produttivo. Lo consiglio a tutti, specialmente per chi deve iniziare a programmare da zero.

    Ecco qui: http://pythonconquerstheuniverse.wordpress.com/category/java-and-python/ un interessante articolo per comprendere le differenze rispetto a un linguaggio più “tradizionale”, come può essere Java (che già è più produttivo di C e C++).

    Detto ciò, non avevo idea di quanto facile fosse manipolare feed con quella libreria. In azienda abbiamo avuto quest’esigenza qualche anno fa, e ricordo un listato di discreta lunghezza. Qui siamo ridotti a una manciata di righe per far tutto. Ottimo.

  • # 14
    Emanuele Rampichini (Autore del post)
     scrive: 

    Detto ciò, non avevo idea di quanto facile fosse manipolare feed con quella libreria. In azienda abbiamo avuto quest’esigenza qualche anno fa, e ricordo un listato di discreta lunghezza. Qui siamo ridotti a una manciata di righe per far tutto. Ottimo.

    Non sottovalutare la mia pigrizia… può compiere miracoli. :P

  • # 15
    Antonio CHESSA
     scrive: 

    Ciao Sono arrivato qui questa sera e sebbene conosca discretamente python non lo conoscevo con l-uso di questa libreria che mi ha veramente stupito. Non ho avuto ancora modo di leggere i restanti articoli sull argomento ma sono certo che non mancheranno di stupirmi e di seguirti sempre pi\ da vicino.
    Grazie e a presto.
    vonkes

Scrivi un commento!

Aggiungi il commento, oppure trackback dal tuo sito.

I commenti inseriti dai lettori di AppuntiDigitali non sono oggetto di moderazione preventiva, ma solo di eventuale filtro antispam. Qualora si ravvisi un contenuto non consono (offensivo o diffamatorio) si prega di contattare l'amministrazione di Appunti Digitali all'indirizzo info@appuntidigitali.it, specificando quale sia il commento in oggetto.