Categorie
Informatica Wikimedia

Un’app per Wiki Loves Monuments Italia

Giocando con Appcelerator Titanium, un framework open source e rilasciato con licenza Apache per lo sviluppo di applicazioni mobile native a partire da una sola codebase, ho realizzato un’applicazione per il concorso Wiki Loves Monuments Italia. Trovate il codice sorgente su https://github.com/ferdi2005/monumenti.

In una settimana, è stato possibile implementare la possibilità di trovare monumenti tramite geolocalizzazione e mostrarli su una mappa, sia qualla di cercare una determinata località italiana (per esempio, Roma) e vedere i monumenti ivi presenti. In più, c’è anche una bellissima scheda per ogni monumento e un simpatico tasto refresh da premere quando ci si sposta, per esempio durante una wikigita.

La documentazione dell’API qui riportata è ferma a qualche versione fa per quanto riguarda il contenuto della risposta, ora c’è qualche parametro in più.

Backend

Ebbene, quando scrivi un’app mobile ti serve anche un backend! Ho deciso quindi di riutilizzare il mio progetto wlm.puglia.wiki ed ho esposto quindi alcune nuove simpatiche API in alcune delle nuove versioni. Quella piccola webapp prima aveva solamente la stessa funzione dell’app e dava la possibilità di trovare i monumenti vicino a sé con Leaflet + OSM, mentre ora svolge anche da backend dell’app. Per ragioni tecniche (non c’era un framework per Appcelerator Titanium), non ho potuto utilizzare OSM anche sull’applicazione mobile, quindi troverete su Android le mappe di Google e su iOS quelle di Apple, ma tutto il lavoro di geocoding è fatto da OSM, precisamente da Mapbox con OSM.

È stato duro anche trovare il modo di far funzionare l’URL di caricamento del monumento, che ora viene restituito insieme alle informazioni del monumento ed è generato miscelando informazioni dalla query SPARQL e dall’esecuzione tramite l’API parse di MediaWiki del Modulo:WLM su Wikipedia!

Trovare i monumenti

Il primo endpoint che ho messo a disposizione, un bel po’ di tempo fa già prefigurandomi l’app, è /monuments.json, che accetta come parametri sia latitude e longitude che city, per cercare invece i monumenti vicino ad una città.

La risposta è di questo tipo, il secondo array rappresenta il centro della mappa, cioé il punto al centro di tutti i risultati o, in caso di città, la localizzazione della città:

[[{"id":34746,"item":"Q61905499","wlmid":"16A6620042","latitude":"41.132779","longitude":"16.838713","itemlabel":"Non creiamo precedenti","image":null,"created_at":"2020-06-07T22:54:03.906Z","updated_at":"2020-06-07T22:54:03.906Z","itemDescription":"Scultura presso lo Stadio della Vittoria","distance":0.69212135568994,"bearing":"109.201534968318"}], [41.13698328712448,16.826640973289223]]

Più informazioni sul singolo monumento

A vostra disposizione c’è anche l’endpoint /show.json che accetta il parametro id corrispondente all’id del monumento che si ottiene attraverso la prima richiesta API. La risposta corrisponderebbe, visitando wlm.puglia.wiki/show.json?id=34746, a:

{"id":34746,"item":"Q61905499","wlmid":"16A6620042","latitude":"41.132779","longitude":"16.838713","itemlabel":"Non creiamo precedenti","image":null,"created_at":"2020-06-07T22:54:03.906Z","updated_at":"2020-06-07T22:54:03.906Z","itemDescription":"Scultura presso lo Stadio della Vittoria","distance":0.69212135568994,"bearing":"109.201534968318"}

Notare che gli ID cambiano ad ogni risincronizzazione del database e questo endpoint è stato creato esplicitamente per fornire le informazioni dall’app.

Indirizzo

Dato che il geocoding a quanto pare non funziona benissimo su iOS, ho predisposto un endpoint API del tipo /address.json che accetta il parametro id, sempre corrispondente all’id del monumento ottenuto sempre nel primo endpoint.

Per esempio wlm.puglia.wiki/address.json?id=34746 risponde:

Piazzale Vittorio Emanuele Orlando, Bari, Bari, 70132, Italy

Ringraziamenti

Siamo ormai giunti alla versione 1.1.3. 😁 Per il raggiungimento di questo risultato mi preme ringraziare i miei fidi beta tester anticipati Yacine Boussoufa e Stupeficium, ma anche il carissimo sviluppatore Titanium Michael Gangolf, che mi ha dato alcuni importanti consigli per l’applicazione

Download

Siete convinti adesso? Mentre risolvo i problemi con la burocrazia per pubblicare su iOS (magari ottenendo lo sconto della quota per il no profit), vi lascio i link per scaricare l’applicazione su Android. Notate che per utilizzare l’app è necessario avere i Google Play Services attivi.

Non dimenticate di lasciare una recensione o un commento, o di scrivermi se avete qualche dubbio!