Dades obertes


En aquest apartat aprendrem què són les dades obertes, com podem accedir-hi i com podem utilitzar-les des d'App Inventor.



Més concretament es pretén donar resposta a les preguntes següents:


  • Què són les dades obertes? On podem trobar-ne?
  • Podem accedir a dades obertes des d'App Inventor?
  • Què és un fitxer JSON?


El concepte Dades Obertes (Open Data en anglès) inclou aquells conjunts de dades que les administracions públiques posen a disposició del públic i poden ser reutilitzats i tornats a publicar sense cap restricció.

Les diferents administracions tenen un catàleg de dades obertes al servei de la ciutadania:

Un exemple concret

La Diputació de Barcelona ofereix gratuïtament un llistat de totes les biblioteques de la província amb informació sobre ubicació, horaris, telèfons, etc…

Aprofitarem aquestes dades per implementar una app que, a partir d'una població de la província o barri de Barcelona, mostri el llistat de les biblioteques que hi ha, i en triar-ne una, mostri tota la informació disponible per poder-hi contactar.

Aquestes dades en concret les podem trobar aquí:
Dades obertes de la Diputació de Barcelona.
Altres diputacions també ofereixen dades similars del seu territori:
Dades obertes de la Diputació de Girona
Dades obertes de la Diputació de Lleida

Dels diferents formats de fitxer disponibles, el format més convenient per accedir a dades (sobretot quan hi ha dades anidades) és el format JSON. L'accés als valors de cada propietat es fa mitjançant el nom de la propietat. D'aquesta forma, es pot accedir als valors sense tenir en compte quina és l'ordenació de les propietats dins del fitxer.

Per accedir a la informació sobre biblioteques que ens facilita la Diputació de Barcelona, l'enllaç que haurem de fer servir és aquest:

Un cop ja tenim clar d'on obtindrem les dades, dissenyem l'aparença de l'aplicació. Proposem una interfície com la que segueix:


En la interfície podem veure un parell de components ListPicker dins un Horizontal Arrangement que ens permetran escollir de quina població o barri de Barcelona volem consultar les biblioteques que existeixen, i posteriorment un altre que ens permetrà escollir sobre quina biblioteca de la població o barri volem fer la consulta en cas que n'hi hagi més d'una.

A sota dels elements anteriors hi hem ubicat un Table Arrangement on ubicarem un seguit de botons i etiquetes de text que ens permetran visualitzar la informació de cada biblioteca.

Els botons no els programarem però com a possible ampliació de l'app es podrien programar per utilitzar la informació mostrada. Per exemple aprofitar un número de telèfon de la biblioteca per trucar-hi directament.

Per mostrar les imatges hem inserit a la part inferior un component Imatge. Dels altres components no visibles en parlarem més endavant.

En aquesta aplicació utilitzarem dues llistes:

En iniciar l'aplicació inicialitzarem les dades amb les quals treballarem:

  • Emmagatzemarem en un ListPicker els pobles de la província de Barcelona i els barris de la seva capital.
  • Farem una crida al procediment Get de l'objecte Web per obtenir el fitxer amb les dades de les bilioteques de tota la província de Barcelona. A la propietat Url del component Web hi haurem emmagatzemat l'adreça d'on podem obtenir el fitxer JSON amb les dades.

Per tal d'accedir a les propietats que ens interessen hem de conèixer quina és l'estructura del fitxer JSON. És recomanable utilitzar el navegador Firefox o bé una eina online com https://jsonformatter.org/

Observem que el fitxer JSON inclou una llista anomenada elements, on cada element correspon a una biblioteca. Cada biblioteca té diverses propietats:

  • Propietats accessibles directament (adreca_nom, url_general …)
  • Propietats agrupades en altres propietats (per exemple, grup_adreca conté adreca, municipi_nom …)
  • Propietats que contenen una llista de valors (email, telefon_contacte, imatge …). Agafarem el primer valor de cada llista.


Mostrem el resultat

Un cop obtenim la resposta a la petició Get, caldrà dir-li què volem que faci when Web GotText.

Hem utilitzat la funció que proporciona App Inventor per convertir aquest JSON en una llista, on cada element conté una llista de parelles propietat-valor:

Un cop tinguem les dades carregades, esperarem a que l’usuari esculli una població del listPicker LPPoblacio per mostrar-li tan sols les biblioteques d’aquell municipi dins el listPicker LPBiblios:

En la imatge anterior veiem com en funció del municipi seleccionat, recorrem la llista de biblioteques emmagatzemada a la variable global biblioteques i creem una llista amb les dades de les biblioteques de la població escollida. En el mateix moment, afegim els noms de les biblioteques del municipi a un ListPicker que ens permetrà escollir una biblioteca en concret i que obrim en el moment que ja tingui les biblioteques carregades.

Un cop que l'usuari ja ha escollit quina biblioteca vol visualitzar, aprofitant la propietat LPBiblios.SelectionIndex, podem cercar en la llista de biblioteques de la població la informació de la biblioteca en qüestió i mostrar-la mitjançant diferents etiquetes de text i el component imatge que tenim a la pantalla principal:


Mantinguem informat l'usuari

Quan es fa una consulta mitjançant el component Web, normalment es triga uns quants segons en obtenir la resposta. Per tal que l'usuari en sigui conscient, és molt recomanable incloure un component Notifier. Es mostraria abans de la consulta, i s'ocultaria quan s'obtingués la resposta: