Giovanni Pirrotta

Just a curious person

OpenGazzettaUfficiale: la legge e' Open per tutti

August 28, 2013

Circa un anno fa avevo intenzione di sviluppare un servizio che automaticamente mi inviasse via mail il bando dei concorsi pubblici non scaduti, relativamente a dei settori di interesse da me specificati. In rete esistono già svariati siti Web sui concorsi ma io volevo ottenere una maggiore flessibilità di interrogazione. Così, di primo acchito, sono andato sulla fonte ufficiale e più importante dei concorsi pubblici in Italia, vale a dire la gazzetta ufficiale, dove, con mia grande sorpresa, ho letto il seguente disclaimer:

#}

Si evidenzia che ogni iniziativa volta alla diffusione della Gazzetta Ufficiale della Repubblica Italiana in formato digitale, potrà essere effettuata unicamente previa espressa autorizzazione dell’Istituto Poligrafico e Zecca dello Stato.

Se non ricordo male, dal sito si poteva accedere alle gazzette ufficiali degli ultimi 60 giorni, mentre i numeri precedenti erano visionabili solo in sommario. Per ottenere la visualizzazione completa bisognava pagare.

Sì, avete capito bene, la visione della legge italiana, pagata con i nostri soldi, che per natura non ha nessun copyright, era a pagamento. Sono rimasto basito e le mie speranze di poter fare un pò di sano scraping senza scontrarmi con autorizzazioni e permessi vari sono andate in fumo.

Tutto questo fino alla fine dell’anno scorso perchè, con mia stragrande meraviglia le cose sono cambiate.
Dal 1° gennaio 2013 infatti sul sito ufficiale della Gazzetta Ufficiale è apparso il seguente disclaimer:

L’Istituto Poligrafico e Zecca dello Stato S.p.A. promuove la più ampia fruibilità della Gazzetta Ufficiale della Repubblica Italiana in formato digitale. […] La riproduzione dei testi forniti nel formato elettronico è consentita purché venga menzionata la fonte, il carattere non autentico e gratuito.

Sebbene non sia specificata con quale tipo di licenza siano disponibili i dati, adesso è possibile quindi riutilizzare i dati delle gazzette ufficiali in altri contesti senza scontrarsi con autorizzazioni e limiti di prima. Proprio quello che volevo.

Partendo da questo, complici le ferie estive e il mio pallino per gli Open Data, ho immaginato quindi un meccanismo di accesso alle gazzette ufficiali in modo strutturato, in grado di automatizzare il processo di elaborazione e di riuso dei dati in contesti differenti da quello di partenza, per accrescere il valore originale dei dati: è nato così il progetto OpenGazzettaUfficiale.

Il servizio, ancora in beta, mette a disposizione API di accesso alle gazzette ufficiali e rilascia i dati, restituiti attualmente in formato JSON, con licenza IODL v2.

Il dataset di riferimento comprende le gazzette ufficiali suddivise nelle seguenti serie:

  • Serie Generale: Atti normativi ad amministrativi emanati dalle Amministrazioni centrali e periferiche dello Stato (dal 1945);
  • 1a Serie Speciale - Corte Costituzionale: decisioni della Corte Costituzionale ed Atti di promovimento rimessi al giudizio della Corte (dal 1956);
  • 2a Serie Speciale - Unione Europea: atti comunitari (dal 1984);
  • 3a Serie Speciale - Regioni: atti normativi ad amministrativi di interesse nazionale emanati dalle singole Regioni (dal 1988);
  • 4a Serie Speciale - Concorsi ed Esami: concorsi banditi dalle Amministrazioni centrali e periferiche dello Stato (dal 1999);
  • 5a Serie Speciale - Contratti Pubblici: bandi di gara banditi dalla Pubblica Amministrazione (dal 2007);
  • Parte II - Foglio delle inserzioni: inserzioni commerciali e giudiziarie di soggetti pubblici e privati (dal 2007).

Vediamo un pò di numeri.

Sul sito ufficiale la serie generale (la più grande e completa), comprende tutti i numeri delle gazzette ufficiali dal 1945, quindi ad oggi sono quasi 68 anni. Ciascun anno (ad eccezione del primo) include circa 300 numeri di gazzette. Ogni numero raccoglie anche fino a 60 atti. Ciascun atto è formato poi da un certo numero di articoli (anche fino a 30) e da allegati sia testuali che esterni in pdf. Il contenuto di ciascuna serie, anno, gazzetta, atto, articolo o allegato è raggiungibile con un URL univoco. E questo solo la serie generale.

Facendo una stima molto provvisoria, solo per la serie generale, si arrivano a contare più di 7 milioni di link da scrapare. Poi ci sono tutte le altre serie. Dal punto di vista tecnico utilizzo componenti Symfony per lo scraping e un sistema di caching eterno per limitare le chiamate esterne. Il tutto in un hosting condiviso da poche decine di euro l’anno.

Per informazioni sulle API guardare la documentazione presente nella homepage del progetto.

Vediamo adesso come realizzare facilmente quel servizio Web accennato sopra, per il controllo automatico dei concorsi pubblici in riferimento a particolari topic. Immaginiamo di voler ottenere informazioni sui concorsi pubblici in aeronautica. E’ necessario quindi attivare un servizio cron, limitatamente nei giorni di martedì e venerdì, che sono i giorni in cui viene pubblicata la Gazzetta Ufficiale serie Concorsi, per il seguente script:


<?php

	$topic = 'aeronautica';
	$json = file_get_contents('http://www.opengazzettaufficiale.it/serie/concorsi');
	$serie = json_decode($json, true);
	$ultimoAnnoSerie = array_reverse($serie['anni'])[0];
	$json = file_get_contents($ultimoAnnoSerie['url']);
	$numeriGazzetta = json_decode($json, true);
	$ultimaGazzetta = array_reverse($numeriGazzetta['gazzette'])[0];
	$json = file_get_contents($ultimaGazzetta['url']);
	$sommario = json_decode($json, true);
	$atti = $sommario['atti-gazzetta-ufficiale'];

	foreach($atti as $atto) {
	    if (preg_match("/.*$topic.*/", $atto['breve'])) {
	        $to      = 'giovanni.pirrotta@gmail.com';
		    $subject = $atto['oggetto'];
			$message = $atto['breve'] ;
			  
			mail($to, $subject, $message); // mail, tweet, facebook, etc...
	    }
	}

Il codice è autoesplicativo.

Il servizio è ancora un prototipo e molto deve essere ancora fatto, ad esempio la ricerca centralizzata delle gazzette. Il codice è attualmente soggetto a modifiche e ottimizzazioni.

Feedback, commenti e critiche sono i benvenuti.

Comments