Sviluppiamo un feed reader con python (Parte 1)

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("https://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.

Press ESC to close