Creacion API

53 views
Skip to first unread message

Diego pascual lopez

unread,
May 21, 2014, 7:38:31 AM5/21/14
to civi...@googlegroups.com
Buenas,

Soy Diego Desarrollador Python, estaba interesado en colaborar con el proyecto de QM, vi que se tenia pensado montar una APi y creo que ahi podria ayudar.

La cosa es en que estado se encuentra y como la teneis planteada, en python/Django yo suelo usar django-tasypie que te mapea el modelo relacional a recursos para ofrecerlos en la API, no se si en ROR existe algo parecido o la idea es montar los recursos directamente.

Otra pregunta es que recursos se tenian pensado servir en la API, por mi experiencia con proyectocolibri.es, nosotros ofrecemos, diputados, comisiones, votaciones y sesiones, iniciativas, e informacion sobre los grupos parlamentarios, y la ofrecemos relacionada unos recurso con otros, y esta relacion nos ha conllevada bastante quebraderos de cabeza.

Otro punto es sobre los formatos, se tiene pensado algun formato base por el que empezar y luego añadir mas, JSON, CSVS?¿

Y creo que eso es lo que se me ocurre de preguntas sobre la APi asi de primeras :)

Bueno un abrazo!!!!!!!!

David Cabo

unread,
May 21, 2014, 2:02:02 PM5/21/14
to Diego pascual lopez, civi...@googlegroups.com
 Hola Diego,

 Pues sí, es una de las cosas fundamentales que tengo pendiente [1], y además lo prometimos cuando hicimos el crowdfunding. La verdad es que hasta ahora no hay nada hecho ni pensado, pero yo he empezado a recopilar referencias interesantes en el issue de github [1].

 Justo ayer ví una guía de Heroku sobre cómo diseñan ellos sus APIs [2]; de momento lo he mirado sólo en diagonal, pero lo bueno es que empiezan a definir la API en JSON, de forma genérica, y sólo al final se preocupan de generar los clientes en Python o Ruby -algo que además hacen de forma automática, creo.

 ¿Qué problemas tuvisteis con el API de los diputados? Por empezar a pensar nosotros qué recursos y métodos ofrecemos.

 un abrazo,
 
/david

Diego pascual lopez

unread,
May 21, 2014, 2:54:08 PM5/21/14
to David Cabo, civi...@googlegroups.com
2014-05-21 20:02 GMT+02:00 David Cabo <david...@gmail.com>:
 Hola Diego,

 Pues sí, es una de las cosas fundamentales que tengo pendiente [1], y además lo prometimos cuando hicimos el crowdfunding. La verdad es que hasta ahora no hay nada hecho ni pensado, pero yo he empezado a recopilar referencias interesantes en el issue de github [1].

 Justo ayer ví una guía de Heroku sobre cómo diseñan ellos sus APIs [2]; de momento lo he mirado sólo en diagonal, pero lo bueno es que empiezan a definir la API en JSON, de forma genérica, y sólo al final se preocupan de generar los clientes en Python o Ruby -algo que además hacen de forma automática, creo.

 Pues si tiene buena pinta, me lo apunto.


 ¿Qué problemas tuvisteis con el API de los diputados? Por empezar a pensar nosotros qué recursos y métodos ofrecemos.

Sobre todo a la hora de cuando un recurso de la API esta formado por varias tablas que tiene otros recursos embebidos, el mayor problema es por como django ejecuta las consultas, al tener varias relaciones acaba haciendo muchas peticiones.

Por ejemplo esta consulta tarda bastante http://proyectocolibri.es/api/v1/voting_full/

Tal vez lo primero es como dicen en lo de heroku pensarlo de manera generica y luego ya tirar con el cliente.

¿Sobre los datos que ofrecer en la API cuales creeis que deberian ofrecerse?

David Cabo

unread,
May 22, 2014, 2:57:25 PM5/22/14
to Diego pascual lopez, civi...@googlegroups.com
 Buenas,
 ¿Qué problemas tuvisteis con el API de los diputados? Por empezar a pensar nosotros qué recursos y métodos ofrecemos.
Sobre todo a la hora de cuando un recurso de la API esta formado por varias tablas que tiene otros recursos embebidos, el mayor problema es por como django ejecuta las consultas, al tener varias relaciones acaba haciendo muchas peticiones.

Por ejemplo esta consulta tarda bastante http://proyectocolibri.es/api/v1/voting_full/

 Ok, te refieres entonces a que habéis tenido problemas de rendimiento, es así? En parte por todos los objetos dependientes, pero igual también porque hay muchos resultados, no? Igual hay que pensar en paginar los resultados en ciertos casos.
 
¿Sobre los datos que ofrecer en la API cuales creeis que deberian ofrecerse?
 Tenemos unos cuantos modelos en Quién Manda: Post, Mention (menciones en un post a entidades y otros posts), Entity (persona y organismos, son el mismo modelo), Relation, Relation Type (“hijo de”, “accionista de”), User, Photo y Annotation (anotaciones en las fotos). En principio estamos abiertos a ofrecer todo, pero en la práctica no le veo mucho valor a mostrar la lista de posts, por ejemplo. 

 La miga está en Entity, y yo en principio veo útil:
  - obtener la lista completa de entidades
  - el pasar un id y que te devuelva sus datos y relaciones con otras entidades
  - una función de búsqueda, imagino que por nombre (exacto o aproximado); aunque también puede ser útil por ejemplo preguntar cuales son las entidades que tienen la relación “marqués de”, por ejemplo.

 No sé si a alguien se le ocurre algún caso de uso adicional, algo que quiera hacer con los datos de QM. Yo encantado de añadir más cosas a la API.

/david

Guido

unread,
May 22, 2014, 3:47:51 PM5/22/14
to civi...@googlegroups.com, Diego pascual lopez, david...@gmail.com
El jueves, 22 de mayo de 2014 20:57:25 UTC+2, David Cabo escribió:

>  No sé si a alguien se le ocurre algún caso de uso adicional, algo que quiera hacer con los datos de QM. Yo encantado de añadir más cosas a la API.


El jueves, 22 de mayo de 2014 20:57:25 UTC+2, David Cabo escribió:

>  No sé si a alguien se le ocurre algún caso de uso adicional, algo que quiera hacer con los datos de QM. Yo encantado de añadir más cosas a la API.

Hola David y compañía. Además de lo que habéis dicho, a mi me gustaría proponer una API de búsqueda de relaciones, que te devuelva las relaciones que hay entre dos entidades (el caso de uso más común "dime qué relación hay entre X e Y"), donde X e Y pueden ser personas, empresas o mezcla.

Creo que da mucho valor porque permite buscar relaciones de poder encubiertas y desarrollar nuevas aplicaciones y servicios (p.e. aplicación móvil que me diga si un producto que voy a comprar lo ha fabricado una empresa relacionada con la trama Gürtel).

Por otro lado, no sé qué BD utilizáis ahora para almacenar los grafos, pero sería muy interesante que fuese compatible con Gremlin (https://github.com/tinkerpop/gremlin/wiki) y en general con TinkerPop que es un conjunto de herramientas abiertas para trabajar con grafos. Hay bases de datos de grafos (neo4j, titan, ...) que pueden exportar un acceso Gremlin/Rexster, por ejemplo.

Sobre el formato, yo empezaría con JSON.

Enhorabuena por el trabajo que estáis haciendo.

David Cabo

unread,
May 22, 2014, 4:37:15 PM5/22/14
to Guido, civi...@googlegroups.com, Diego pascual lopez
 Hola Guido,

On Thursday, 22 May 2014 at 21:47, Guido wrote:

Hola David y compañía. Además de lo que habéis dicho, a mi me gustaría proponer una API de búsqueda de relaciones, que te devuelva las relaciones que hay entre dos entidades (el caso de uso más común "dime qué relación hay entre X e Y"), donde X e Y pueden ser personas, empresas o mezcla.

Creo que da mucho valor porque permite buscar relaciones de poder encubiertas y desarrollar nuevas aplicaciones y servicios (p.e. aplicación móvil que me diga si un producto que voy a comprar lo ha fabricado una empresa relacionada con la trama Gürtel).
 Sí, buena idea. Quiero añadir algo en esta línea a la web, así que ofrecerlo vía API tiene sentido también. Gracias, lo apunto. 
Por otro lado, no sé qué BD utilizáis ahora para almacenar los grafos, pero sería muy interesante que fuese compatible con Gremlin (https://github.com/tinkerpop/gremlin/wiki) y en general con TinkerPop que es un conjunto de herramientas abiertas para trabajar con grafos. Hay bases de datos de grafos (neo4j, titan, ...) que pueden exportar un acceso Gremlin/Rexster, por ejemplo.
 Me temo que usamos Postgres: miré por encima la opción de usar algo tipo neo4j cuando empecé el proyecto, pero íbamos con el tiempo justo y teníamos muchas cosas poco claras, así que aposté por lo conocido. 

 Imagino que lo decías por lo de encontrar relaciones entre entidades, me temo que tendré que montarme el algoritmo yo mismo. De todas formas, si alguien quiere jugar con los datos en algo tipo neo4j no debería costar mucho exportar toda la informacion de qm en algún formato sencillo e importarlo en otro sitio. Si alguien está interesado lo miramos. 

Sobre el formato, yo empezaría con JSON.
 Sip 

Enhorabuena por el trabajo que estáis haciendo.
 Gracias,

/david

Guido

unread,
May 24, 2014, 1:39:54 PM5/24/14
to civi...@googlegroups.com, Guido, Diego pascual lopez, david...@gmail.com

El jueves, 22 de mayo de 2014 22:37:15 UTC+2, David Cabo escribió: 

 Imagino que lo decías por lo de encontrar relaciones entre entidades, me temo que tendré que montarme el algoritmo yo mismo. De todas formas, si alguien quiere jugar con los datos en algo tipo neo4j no debería costar mucho exportar toda la informacion de qm en algún formato sencillo e importarlo en otro sitio. Si alguien está interesado lo miramos.

Con neo4j si que habría facilidades para hacer cálculos sobre el grafo (p.e. encontrar relaciones entre 2 entidades). Si me podéis dejar exportada la BD de QM en algún sitio puedo importar esos datos en un neo4j y hacer unas pruebas de búsqueda de relaciones a ver qué tal va.

También quería jugar con distintas formas de representar los grafos (p.e. detectar y representar clusters como el de "El Colegio del Pilar" o nodos y relaciones con distinto tamaño/color según su peso o su tipo), aunque esto es otro tema.

Guido.

David Cabo

unread,
May 26, 2014, 11:15:41 AM5/26/14
to Guido, civi...@googlegroups.com, Diego pascual lopez
 Hola Guido,
Con neo4j si que habría facilidades para hacer cálculos sobre el grafo (p.e. encontrar relaciones entre 2 entidades). Si me podéis dejar exportada la BD de QM en algún sitio puedo importar esos datos en un neo4j y hacer unas pruebas de búsqueda de relaciones a ver qué tal va.

También quería jugar con distintas formas de representar los grafos (p.e. detectar y representar clusters como el de "El Colegio del Pilar" o nodos y relaciones con distinto tamaño/color según su peso o su tipo), aunque esto es otro tema.
 Suena todo muy bien. Yo me voy mañana de viaje una semana, voy a estar conectado sólo a ratos. Si me vas diciendo qué aspecto quieres que tengan los datos exportados lo hacemos a la vuelta. Para que te hagas una idea sencilla del modelo de datos ahora hay una tabla Relación, otra Entidad (persona/empresa) y otra Tipo de Relación (hijo de, consejero de…). Ya me dirás qué necesitas.

/david

Guido

unread,
May 28, 2014, 2:16:13 PM5/28/14
to civi...@googlegroups.com, Guido, Diego pascual lopez, david...@gmail.com
Hola David.

Me da un poco igual el formato de los datos, me valen "sql inserts" o un "csv", lo que os sea más cómodo, ya me las apaño para importarlos.
He echado un ojo a vuestro código de github y son esas tres tablas las que necesitaría: relación, entidad y tipo de relación. Si hay muchos datos me vale con una parte, aunque creo que por ahora no son demasiados (miles).

Gracias.

David Cabo

unread,
May 28, 2014, 5:07:08 PM5/28/14
to Guido, civi...@googlegroups.com, Diego pascual lopez
 Hola Guido,

 Pues me lo apunto y concretamos en una semana los detalles, que voy a estar medio desconectado en una conferencia hasta el miércoles que viene.

/david

Pablo Martín Muñoz

unread,
Jun 4, 2014, 5:42:33 AM6/4/14
to David Cabo, Guido, civi...@googlegroups.com, Diego pascual lopez
Pinta esto muy interesante. Me quedo pendiente a ver qué sale de esas exportaciones/importaciones _> neo4j ;)
--
Social to Crowd, ¡El crowdfunding de las cosas! http://goteo.org/project/social-to-crowd
¡¡¡ESTAMOS EN CAMPAÑA EN GOTEO!!!
¡COMPARTE Y AYUDA!

Pablo Martín Muñoz
Hacker Cívico
edipotrebol.es

david

unread,
Jul 11, 2014, 11:17:03 AM7/11/14
to civi...@googlegroups.com, guido.garc...@gmail.com, azot...@gmail.com, david...@gmail.com
 Hola Guido (y otros interesados en las relaciones de Quién Manda),

 Al final lo que pensé que se iba a alargar una semana ha sido un mes y pico, suele pasar. :) Pero al fin he hecho la exportación de las relaciones de QM, con los datos básicos: entidad fuente, tipo de relacion, entidad destino y fechas de inicio/fin. Aquí está:


 Si alguien importa esto en una base de datos tipo Node4J y hace cosas interesantes que lo cuente, por favor. ;)

 un saludo, y vamos hablando,

/david

Guido

unread,
Jul 13, 2014, 10:19:00 AM7/13/14
to civi...@googlegroups.com, guido.garc...@gmail.com, azot...@gmail.com, david...@gmail.com
Gracias David, no te preocupes, estamos todos liados.

Me he importado los datos y por ahora sin problemas (si en algún momento los vuelves a exportar, exporta un id numérico de cada entidad, es más fácil usar luego los datos).

He hecho un ejemplo sencillo para abrir boca: http://guidogarcia.net/demos/qm/colegio_pilar_1.html
Representa las relaciones hasta segundo nivel del Colegio Nuestra Señora del Pilar. Los nodos tienen más o menos tamaño según su peso en la red. En este caso el peso está calculado con el mismo algoritmo "pagerank" que popularizó Google.

A ver si saco un rato y veo cómo funciona la búsqueda en general y la búsqueda de relaciones con neo4j.

Saludos,
guido
PD. ¿Estos datos están sujetos a algún tipo de licencia o puedo usarlos y escribir cosas en mi blog (citando que vienen de civio)?

David Cabo

unread,
Jul 15, 2014, 7:32:18 PM7/15/14
to Guido, civi...@googlegroups.com, azot...@gmail.com
 Hola Guido,
Me he importado los datos y por ahora sin problemas (si en algún momento los vuelves a exportar, exporta un id numérico de cada entidad, es más fácil usar luego los datos).
 Ok, lo tendré en cuenta. 
A ver si saco un rato y veo cómo funciona la búsqueda en general y la búsqueda de relaciones con neo4j.
 Ya nos contarás. 
PD. ¿Estos datos están sujetos a algún tipo de licencia o puedo usarlos y escribir cosas en mi blog (citando que vienen de civio)?
 Buena pregunta. Me he apuntado aclarar en la web que los datos están bajo licencia ODbL [1], que viene a ser un Creative Commons Share Alike para bases de datos: puedes usar los datos, y escribir sobre ellos o sobre lo que produzcas con ellos, siempre que atribuyas a QM el origen.

 un saludo,

/david

Reply all
Reply to author
Forward
0 new messages