Se pueden acceder a los datos de la Ciudad? La respuesta es SI!
La ciudad de Buenos Aires tiene una API rest para acceder a los datos llamada Buenos Aires Data, pero no tiene una librería en java para acceder comodamente a sus datos y yo siempre tuve ganas de colaborar de alguna manera desde mi profesión de desarrollador.
Un fin de semana me puse a hacer la librería y hoy es una realidad, se llama:
RestBA y es Open Source.
Que es RestBA?
RestBA es una librería que le permite a los programadores JAVA acceder a los datos de la Ciudad de Buenos Aires cómodamente y con las abstracciones necesarias para obtener resultados en poco tiempo.
Principales Ventajas
- ThreadSafe: La librería es threadsafe, con lo cual esta especialmente pensada para pedir los datos en paralelo. Por ejemplo Crawlers.
- Sencilla: Solamente hay que hablar contra una sola interfase : RestBAClient. RestBA se encarga de ir a buscar los datos al sever, parsearlos y armar un objeto lindo para que lo uses cómodamente y feliz.
- Procesamiento de metadatos: La API de la ciudad de Buenos Aires deja acceder solamente a los metadatos, no a los datos en sí. La información viene en zips, excels, csv y nuestra librería se encarga de abrir los archivos, tomar los datos y dar representaciones cómodas en java de ellos para poder manipularlos mejor.
- Documentación: Sabemos que necesitas aprender a usar esta librería para hacer cosas copadas. Por lo tanto es necesario tener una buena documentación y en eso hacemos foco. Dicha documentación esta en github
- Open Source: El código esta abierto para cualquier programador que lo quiera cambiar, saber como funciona, aprender y colaborar.
- Licencia: Licencia Apache, versión 2.0 – Básicamente cualquier persona o empresa, la puede usar para actividades comerciales y no comerciales.
El Nombre
Muchos me preguntan porque la librería se llama RestBA, la razón es porque yo siempre accedo a los datos de Facebook con una librería que se llama RestFB que me gusta mucho y es súper sencilla de usar, con leer una sola pagina ya aprendés todo.
Entonces decidí adoptar todas las prácticas y basarme en RestFB para hacer RestBA y no tener que reinventar la rueda de nuevo.
Seguro ya se dieron cuenta, que RestFB es por FaceBook y RestBA es por Buenos Aires
Utiliza RestOpenGov
RestOpenGov es un proyecto open source que propone proveer una API pública de tipo REST, que permita acceder de una manera simple y estándar a la información que los gobiernos de diversos países y ciudades expongan. En este caso la Ciudad de Buenos Aires.
Quick Start
Llego el momento de meter mano. A los programadores no les gusta el chamuyo, asi que vamos al grano rápido.
Para empezar hay que bajarse la librería y sus dependencias(pocas) y luego agregarlas al proyecto.
Maven:
Usando maven se debe agregar adentro del tag <dependecies> del pom.xml :
[sourcecode language="xml"]
<dependency>
<groupId>ar.com.restba</groupId>
<artifactId>restba</artifactId>
<version>1.0.4</version>
</dependency>
[/sourcecode]
y luego debemos agregar el repositorio público de RestOpenGov, adentro del tag <repositories> poner:
[sourcecode language="xml"]
<repository>
<id>RestOpenGov</id>
<url>http://maven.melendez.com.ar:8081/nexus/content/repositories/RestOpenGov</url>
</repository>
[/sourcecode]
Si no queres usar maven, se puede bajar la libreria y sus dependencias a mano:
Libreria:
RestBA 1.0.4 download
Dependencias:
Rest FB 1.6.9 download
Una vez agregada RestBA y sus dependencias podemos empezar a jugar.
Ejemplo 1
Veamos un listado de las direcciones de todas las obras en construcción y demolición en la ciudad de Buenos Aires.
[sourcecode language="java"]
import java.util.List;
import ar.com.restba.DefaultRestBAClient;
import ar.com.restba.RestBAClient;
import ar.com.restba.connectors.con.RestBAConnection;
import ar.com.restba.types.ObraRegistrada;
/**
* Ejemplo que lista la dirección de todas las obras registradas. Busca todas la
* obras registradas en la ciudad de Buenos Aires. Obras en construcción, Obras
* en demolición, etc con sus respectivos datos como dirección de la obra,
* nombre del responsable, etc.
* */
public class ListObrasRegistradas {
public static void main(String[] args) {
RestBAClient dataBairesClient = new DefaultRestBAClient();
String query = “gcba/obras-registradas/_search?”;
RestBAConnection fetchConnectionRestBA = dataBairesClient
.fetchConnectionRestBA(query, ObraRegistrada.class);
for (List page : fetchConnectionRestBA) {
for (ObraRegistrada obraRegistrada : page) {
System.out.println(obraRegistrada.getDireccion());
}
}
}
}
[/sourcecode]
Ejemplo 2
Lista los metadatos pidiendo solamente json, sin mappear. Imprime los author y título de todos los datasets de la ciudad de buenos aires
[sourcecode language="java"]
package ar.com.restba.examples;
import java.util.List;
import ar.com.restba.DefaultRestBAClient;
import ar.com.restba.RestBAClient;
import ar.com.restba.connectors.con.RestBAConnection;
import ar.com.restba.json.JsonObject;
/**
* Imprime los autores de todos los recursos publicos de la ciudad de buenos
* aires
*
*/
public class ListMetadatosJson {
public static void main(String[] args) {
RestBAClient dataBairesClient = new DefaultRestBAClient();
String query = “gcba/metadata/_search?”;
RestBAConnection fetchConnectionRestBA = dataBairesClient
.fetchConnectionRestBA(query, JsonObject.class);
for (List page : fetchConnectionRestBA) {
for (JsonObject metadato : page) {
System.out.println(“Author: ” + metadato.getString(“author”)
+ ” Title: ” + metadato.getString(“title”) + ” _id: ”
+ metadato.getString(“_id”));
}
}
}
}
[/sourcecode]
Ejemplo 3
Pedido simple a elastic search y devuelve un json normal.
[sourcecode language="java"]
package ar.com.restba.examples;
import ar.com.restba.DefaultRestBAClient;
import ar.com.restba.RestBAClient;
import ar.com.restba.json.JsonObject;
/**
* Muestra como hacer una query de elastic search
*
*/
public class SimpleQuery {
public static void main(String[] args) {
RestBAClient dataBairesClient = new DefaultRestBAClient();
String query = “gcba/metadata/_search?&from=0″;
JsonObject q = dataBairesClient.executeQuery(query, JsonObject.class);
System.out.println(“JSON object: ” + q.toString());
}
}
[/sourcecode]
Colaboración
La librería es open source bajo licencia apache 2.0 y se puede encontrar en github. Te re contra invitamos a vos y tu nerd interior a coparte y colaborar con lo que puedas. Esta bueno, te lo prometo y vas a conocer gente muy grosa :)
Url github: https://github.com/Nardoz/RestOpenGov/tree/master/RestBA
No te gusta esperar y querés empezar a colaborar ya? Entonces entra a nuestro issue tracker, tomá un issue y a hackear se ha dicho! Podes preguntarnos lo que quieras, cuantas veces quieras.
twitter: @nfmelendez
Conclusión
La idea de gobierno abierto es fantástica y nos está dando la oportunidad como desarrolladores de demostrar que podemos ayudar a la sociedad. No la dejemos ir!
Y RestBA esta para ayudarnos….Happy Hacking!
[jamiesocial]
Pingback: RestBA, librería en Java para acceder a los datos de Buenos Aires Data | Digital BA
Pingback: Les Presento en Sociedad: RestOpenGov | Blog Nicolás Meléndez
Hola Nicolas, antes que nada excelente trabajo!! Yo estoy queriendo traer datos de la pagina del gobierno de buenos aires para usar en Objective C. Particularmente me interesa usar la API que permite autocompletar los nombre de las calles. Es posible hacer esto usado RestOpenGov? gracias!
Hola pablo, disculpa la demora.
Para usar el autocompletar te conviene usar la Usig, que es la API de mapa buenos aires. Entra aca:
http://ws.usig.buenosaires.gob.ar/
Saludos!