Sono iscritto ormai da più di due anni alla mailing list Spaghetti Open Data (SOA), punto di incontro di un gruppo di persone, di professione tra loro eterogenea (programmatori, ricercatori, avvocati, esperti del settore, semplici curiosi, etc.), interessati al rilascio dei dati pubblici in formato aperto, leggi Open Data. Anche se non partecipo attivamente alle attività della community, ogni volta che torno a leggere i post della lista trovo sempre qualcosa che mi arricchisce e ispira.
Così è stato anche quando nel novembre del 2012 ho letto che l’utente eccoilmoro
aveva realizzato, come esperimento di civic-hacking, lo scraping dell’albo pretorio online dei comuni della Bassa Romagna, reindirizzando il tutto su una pagina
FB prima e su un profilo Twitter dopo.
Il tutto è stato poi riportato in questo blog.
Stimolato anch’io dallo stesso desiderio di aprire l’albo pretorio online del mio piccolo paese ho sviluppato degli script di scraping in PHP per la generazione di feed RSS dati poi in pasto ad uno dei più famosi servizi di pubblicazione automatica nei Facebook, cioè RSSGraffiti. Successivamente ho reindirizzato il tutto sulla pagina FB dell’Albo Pretorio del mio comune (creata ad-hoc), vale a dire Terme Vigliatore (ME). Lo stesso script l’ho poi adattato per l’Albo Pretorio del più grande comune limitrofo, cioè Barcellona Pozzo di Gotto (ME).
Come già scritto in un precedente post, credo fermamente che ogni pubblica amministrazione debba innescare meccanismi e processi interni ispirati a principi di trasparenza ed apertura in modo da poter fornire una misura al cittadino per la valutazione oggettiva dell’attività amministrativa, con strumenti che siano semplici e alla portata di tutti, leggi open-gov.
Volendo contribuire anch’io nel mio piccolo, a distanza di mesi, sono ritornato su quegli script di scraping con l’intenzione di rilasciarli e metterli a disposizione di tutti: è nato così il progetto OpenAlboPretorio, disponibile su github.
Per l’installazione
- cloniamo la libreria sulla nostra macchina:
$ git clone https://github.com/gpirrotta/OpenAlboPretorio.git
$ cd OpenAlboPretorio
e digitiamo i seguenti comandi:
$ wget http://getcomposer.org/composer.phar
$ php composer.phar install
A questo punto aggiungiamo l’autoloader al nostro script e avremo accesso alla libreria
<?php
require 'vendor/autoload.php';
La class OpenAlboPretorio
rappresenta l’entry point della libreria.
Attualmente sono implementati i seguenti scraper:
TermeVigliatoreScraper
effettua lo scraping dall’Albo Pretorio online di Terme Vigliatore (ME)BarcellonaPGScraper
effettua lo scraping dall’Albo Pretorio online di Barcellona Pozzo di Gotto (ME)
e i seguenti formati di output:
- JSON
- RSS
- ATOM
Vediamo adesso come utilizzare la libreria.
E’ possibile utilizzare il metodo city
per selezionare lo scraper con le impostazioni di default (max 10 risultati)
<?php
$albo = new OpenAlboPretorio();
$results = $albo->city(AlboPretorioScraperFactory::TERME_VIGLIATORE);
->open();
print $results
Oppure è possibile personalizzare lo scraper manualmente:
<?php
$scraper = new BarcellonaPGScraper(new BarcellonaPGMasterPageScraper(), new BarcellonaPGDetailPageScraper());
$scraper->setItemType(BarcellonaPGScraper::TIPOLOGIA_DETERMINAZIONE_DEL_SINDACO);
$formatter = new FeedFormatter(FeedFormatter::ATOM_FEED_TYPE); // RSS2 default
$albo = new OpenAlboPretorio();
$results = $albo->scrapeUsing($scraper)
->formatUsing($formatter)
->maxNumberItems(10)
->open();
print $results;
Per creare lo scraper della tua città è necessario implementare l’interfaccia AlboPretorioScraperInterface
.
Estrarre i dati dal sito Web dell’albo pretorio di una qualsiasi città significa, generalmente, estrarre i dati da due pagine:
1) una pagina Master - la pagina Web che contiene l’elenco di tutti gli atti amministrativi (items) dove su ciascun atto troviamo una breve descrizione e il link relativo (in figura il link è sulla descrizione in grassetto);
2) una pagina Detail - la singola pagina Web dell’atto amministrativo contenente il dettaglio (numero, mittente, oggetto, stato, validità di pubblicazione, allegati, etc.)
Per gestire questo tipo di logica di estrazione dei dati la libreria fornisce una classe astratta
chiamata AbstractMasterDetailTemplateScraper
che implementa l’interfaccia AlboPretorioScraperInterface
.
La classe dipende dalle seguenti interfacce:
MasterPageScraperInterface
usata per estrarre l’elenco degli URL degli atti amministrativi dalla pagina master;DetailPageScraperInterface
usata per estrarre i dati di ciascun atto amministrativo ritornando un oggettoAlboPretorioItem
Ovviamente, se il template della pagina Web dell’albo pretorio segue una logica di estrazione diversa da quella Master-Detail, è possibile implementarne di nuove in base alle proprie esigenze.
La libreria si trova su github, rilasciata con licenza opensource MIT.
N.B. In merito alla liceità sull’attività di scraping di dati della pubblica amministrazione voglio condividere con voi alcune osservazioni:
-
da un lato è risaputo che i comuni possono rimuovere gli atti amministrativi dall’albo pretorio online dopo un certo numero di giorni. Quello che accade spesso, invece, è che gli atti rimangono nell’archivio online consultabile, mentre solo l’allegato, copia dell’atto cartaceo, viene effettivamente rimosso;
-
dall’altro, dal 19 marzo 2013, tutti i dati e documenti che le pubbliche amministrazioni pubblicano con qualsiasi modalità, senza l’espressa adozione di una licenza d’uso, si intendono rilasciati come dati aperti secondo il principio open data by default (art. 52 e art.68 del Codice Amministrazione Digitale), anche se non è stato ancora deciso il tipo di licenza.
L’albo pretorio online dei comuni finora presenti su OpenAlboPretorio non riportano nessun tipo di licenza di rilascio dei dati in fondo alla pagina, motivo per cui rientrerei (spero) nel secondo punto. E’ un aspetto sicuramente da approfondire, motivo per cui consiglio a chiunque voglia utilizzare OpenAlboPretorio di stare vigili sull’argomento.
Se vuoi contribuire al progetto aggiungendo lo scraper dell’Albo Pretorio della tua città, o semplicemente migliorando il codice rilasciato, le PR sono le benvenute.
That’s all folks!
Importante aggiornamento
Dopo la pubblicazione del progetto OpenAlboPretorio è nata un’interessante discussione sulla lista SOA, dove dei giuristi esperti del settore mi hanno fatto notare come la questione sulla tutela della privacy e la pubblicità delle delibere dell’albo pretorio sia un argomento molto controverso del panorama giuridico italiano.
In estrema sintesi gli atti dell’albo pretorio possono essere suddivisi in due categorie (ringrazio Giovanni Battista Gallus per il chiarimento):
- atti dell’albo pretorio online, oggetto anche di pubblicazione obbligatoria ex d.lgs 33: questi dati dovrebbero essere “replicati” anche nella sezione “amministrazione trasparente” dei siti comunali e su di loro trova piena applicazione il decreto trasparenza - pubblicabili per 5 anni, riusabili, open by default;
- atti dell’albo pretorio online, NON oggetto di pubblicazione obbligatoria: occorre applicare le linee guida del Garante e laddove contengano dati personali, occorre fare molta attenzione ai trattamenti illeciti.
Per non incorrere in violazioni della privacy invito quindi, a chiunque volesse utilizzare e/o estendere la libreria, di effettuare solo lo scraping degli atti amministrativi del primo punto.