IngoberWiki

Omnia sunt communia

Herramientas de usuario

Herramientas del sitio


hackathon_gastos_en_software_estado

Hackathon para conocer el gasto público en materia de software privativo en el Estado Español

«Señores y señoras del gobierno… ¿ Pongan los datos en crudo en un torrent y moveremos el país ?»


Con sencillas técnicas, las adecuadas herramientas y hablando algún que otro lenguaje de programación podemos hacer para el procomún, hermosas cosas como …

  • Conocer lo que se invierte de los bolsillos de la ciudadanía, para determinadas partidas de gasto público… ¿con software costoso y privativo que retroalimenta únicamente a las grandes corporaciones ?

El 19 de Julio realizamos un hackathon en el Ingoberlab 301. Hemos editado este apartado de la wiki para explicar un poco como terminó esa sesión y para tener a mano algo de documentación replicable por terceros. Si se realizan futuras sesiones para sacar más información se podrá añadir aquí.

Objetivo

Ver como extraer los datos a nivel del estado Español en materia de software privativo.

Web fuente de datos: https://contrataciondelestado.es/wps/portal/plataforma

Ya hemos tenido el Hackathon y este es el script

El día 19 de Julio nos reunimos y generamos este script que nos ha permitido conocer por el momento las cifras.

scrap.zip

El script un poco más apañado aquí:

s-crap.tar.gz

La primera cifra que nos ha salido ha sido esta (desde 2011 hasta la fecha (19/07/2017)):

Entendiendo el script. Funcionamiento

Comenzamos a usar phantomjs y casperjs para realizar un scrapeo pero encontramos que era posible sacar lo que nos interesaba con un sencillo script en bash. Ese script es este:

#!/bin/bash
> result

for i in $(seq 2 82)
do
	from=$i
	to=$((i + 1))
	curl 'https://contrataciondelestado.es/wps/portal/!ut/p/b1/jY7LDoIwFES_xQ8w91JaHstaHoUgoALabggLYzA8Nsbvtxq3IrOb5JzMgAa1dZFZPmUewgX01D37W_fo56kb3l07LQ0LISJJ0DvZAZIsqGtHmhozA6glgKzzmS1okzalc0pixERGQVZbzOjOOh9_hOM__wx6GSFfYOniB1j4kMt5vIIymNvyJjzwxLex2B3NUFruqzImFiKFClQuYNRDFPnJnXZ88wK0WWmi/dl4/d5/L2dBISEvZ0FBIS9nQSEh/pw/Z7_AVEQAI930OBRD02JPMTPG21004/act/id=0/p=javax.servlet.include.path_info=QCPjspQCPbusquedaQCPFormularioBusqueda.jsp/361746986280/-/' -H 'Host: contrataciondelestado.es' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:54.0) Gecko/20100101 Firefox/54.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'Content-Type: application/x-www-form-urlencoded' -H 'Referer: https://contrataciondelestado.es/wps/portal/!ut/p/b1/jY7LDoIwFES_xQ8w91JaHstaHoWAoALabggLYzA8Nsbvtxq3IrOb5JzMgAa1dZFZPmUewgX01D37W_fo56kb3l07LQ0LISJJ0DvZAZIsqGtHmhozA6glgKzzmS1okzalc0pixERGQVZbzOjOOh9_hOM__wx6GSFfYOniB1j4sJfzeAVlMLflTXjgiW9jsTuaobTMqzImFiKFClQuYNRDFPnJnXZ88wLNMxSz/dl4/d5/L2dBISEvZ0FBIS9nQSEh/pw/Z7_AVEQAI930OBRD02JPMTPG21004/act/id=0/p=javax.servlet.include.path_info=QCPjspQCPbusquedaQCPFormularioBusqueda.jsp/361746969176/-/' -H 'Cookie: JSESSIONID=0000f1MR5TIoe7KbpJbxRgSwlKr:prodnod3' -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1' --data 'viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1=viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3Atext71ExpMAQ=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3Amenu1MAQ1=00&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3Acombo1MAQ=00&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AtextLugarEjecucion=&CpvorigenmultiplecpvMultiple=FormularioBusqueda&cpvViewmultiplecpvMultiple=%23%7BbeanCpvPpt.cpv%7D&cpvPrincipalmultiplecpvMultiple=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AcpvMultiple%3AcodigoCpv=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AtexOrgContMAQ=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AtextMinFecLimite=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AtextMaxFecLimite=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AtexoorganoMAQ=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3Amenu111MAQ=00&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AtextMinFecAnuncioMAQ2=31-12-2010&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AtextMaxFecAnuncioMAQ=19-07-2017&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AtexAdjudicatarioMAQ=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AtextEstimadoDesde18MAQ=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AtextEstimado19MAQ=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AfooterSiguiente=Siguiente&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AidBreadCrumbSeleccionado=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AidControlPulsadoMultiple=false&javax.faces.ViewState=j_id281%3Aj_id282' -k > a
	kt=$(cat a  | tr "<" "\n"| grep tdImporte | cut -d ">" -f2)
	echo $kt
	echo $kt >> result
	sleep 3
	echo "---------$i"
done

Para entender su funcionamiento hemos de realizar los siguientes pasos:

  • Luego en “Busqueda Guiada”.
  • En la columna “Por estado” hacemos click en “adjudicada”
  • Pinchamos en ver todos los resultados.
  • Nos saldrá un formulario como este (actualmente):

  • En ese formulario añadiremos los códigos cpv que se ven en la siguiente captura. Tambien indicaremos el rango de la fecha de publicación:

  • Abrimos el inspector de código antes de darle a buscar (antes) usando la combinación de teclas: Control+shift+C
  • En el inspector de código pinchamos en la pestaña “Red”
  • Le damos a buscar al formulario.
  • Una vez realizado nos mostrará los resultados. Si nos vamos a la parte de abajo (sin cerrar el inspector) veremos que salen varios links para ir a los resultados siguientes. Veamos eso en esta captura:

  • Al darle a “siguiente” (tardará un poco en generar y cargar los siguientes resultados) veremos que se ha realizado una petición post. Hacemos clic derecho sobre ella y seleccionaremos “Copiar como curl”.
  • Perderemos las cifras que se han mostrado en la primera página pero no importa inicialmente.
  • Tendremos copiado algo como esto:
curl 'https://contrataciondelestado.es/wps/portal/!ut/p/b1/jZHLDoIwEEW_xQ8wM5S2whJ5tQQF5aHthrAwBsNjY_x-i3ErMrubnJN7kwENamshUs4cziy4gh7bV3dvn900tv2cNW9omPl-JAg6hR0gSYOq4sLEmBlALQFknc9sn9ZJnfNCxohSREFaWczofJ2PP87Df_4F9DJCvsDSxA-wsOEopuEGymC7xqvDkyddG7P92RQl-aHMYzK_AEpQMQy6jyJXPmjrbd7d-SH6/dl4/d5/L2dBISEvZ0FBIS9nQSEh/pw/Z7_AVEQAI930OBRD02JPMTPG21004/act/id=0/p=javax.servlet.include.path_info=QCPjspQCPbusquedaQCPFormularioBusqueda.jsp/361812304066/-/' -H 'Host: contrataciondelestado.es' -H 'User-Agent: Mozilla/5.0 (X11; Linux i686; rv:52.0) Gecko/20100101 Firefox/52.0' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'Referer: https://contrataciondelestado.es/wps/portal/!ut/p/b1/jZHLDoIwEEW_xQ8wM5S2whKB0hIUlIfSDWFhDIbHxvj9FuNWZHY3OSf3JgMa6q2FSDlzOLPgCnpsX929fXbT2PZz1ryhYer7QhJ0cjtAkgRlyaWJETNAvQSQdT6zfVrFVcZzFSEqKYKktJjR-Toff5yH__wL6GWEfIGliR9gYcNRTsMNaoPtGq8KT55ybUz3Z1MUZ4cii8j8AiigFjDoXghXPWjrbd6rGC5n/dl4/d5/L2dBISEvZ0FBIS9nQSEh/pw/Z7_AVEQAI930OBRD02JPMTPG21004/act/id=0/p=javax.servlet.include.path_info=QCPjspQCPbusquedaQCPFormularioBusqueda.jsp/361811959718/-/' -H 'Cookie: JSESSIONID=0000aFmwkSk3pfGInMF0D-7rlEb:prodnod5' -H 'DNT: 1' -H 'Connection: keep-alive' -H 'Upgrade-Insecure-Requests: 1' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache' --data 'viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1=viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3Atext71ExpMAQ=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3Amenu1MAQ1=00&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3Acombo1MAQ=00&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AtextLugarEjecucion=&CpvorigenmultiplecpvMultiple=FormularioBusqueda&cpvViewmultiplecpvMultiple=%23%7BbeanCpvPpt.cpv%7D&cpvPrincipalmultiplecpvMultiple=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AcpvMultiple%3AcodigoCpv=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AtexOrgContMAQ=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AtextMinFecLimite=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AtextMaxFecLimite=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AtexoorganoMAQ=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3Amenu111MAQ=00&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AtextMinFecAnuncioMAQ2=31-12-2011&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AtextMaxFecAnuncioMAQ=19-07-2017&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AtexAdjudicatarioMAQ=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AtextEstimadoDesde18MAQ=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AtextEstimado19MAQ=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AfooterSiguiente=Siguiente&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AidBreadCrumbSeleccionado=&viewns_Z7_AVEQAI930OBRD02JPMTPG21004_%3Aform1%3AidControlPulsadoMultiple=false&javax.faces.ViewState=j_id13%3Aj_id14'
  • Importantisimo no navegar en otras pestañas sobre el los resultados y tampoco desde el navegador. El servidor es el que va a paginar cada vez que le mandemos esa petición post. Nosotras lo vamos a hacer mediante un script en bash y sin alterar nada de esa petición. Digamos que el server el el que guardará la página en la que estamos para mostrarnos los siguientes resultados siempre que le mandemos esa orden.
  • Es importante que de un día a otro realizar este procedimiento para que la petición post que capturamos lleve los tokens de sesión. El script por tanto no durará eternamente, se ha de actualizar eso siguiendo los pasos comentados.
  • Ahora es cuando pegamos esa línea en el script siguiente y le añadimos al final “ -k > a” para que vuelque el resultado en un archivo llamado a y con -k ignore el certificado erróneo.
  • Ejecutamos el script por ejemplo así: bash script.sh y veremos que comienza a sacar los números:

  • Las cifras de los contratos se irán guardando en un archivo llamado “result”. Cada vez que ejecutemos el script se cepillará result.
  • IMPORTANTISIMO para entender lo que estamos haciendo y el funcionamiento de la web. Es importante que si ejecutas de nuevo el script en el navegadore te posiciones en la segunda página de resultados. Ya sea la petición post usando curl o usando el navegador estaremos diciendole al server donde estamos. De modo que el script irá realmente paginando. Es por eso que mientras se ejecuta NO hemos de tocar la web ni darle a siguiente ni tampoco a atŕas ni a NADA. NO TOQUES LEÑES.
  • Finalmente cuando el script termine tendremos un archivo con los resultados. Un poco a lo cutre y desordenados de modo que hemos de hacer lo siguiente:
cat result | tr " " "\n" | grep . > resultado2.csv
  • Y para terminar eso lo podemos pegar en una hoja de calculo como Calc de Libreoffice y hacer una auto-suma de la columna para saber el total. Si vemos que result tiene algún dato más de la cuenta afinaremos a la siguiente o se lo quitamos.

Fue muy bonito realizar entre todas este simple script. Nos puso a pensar en la forma más sencilla de rápidamente sacar los datos sin tener que ir página a página copiando y pegando. Fue bonito contar con Gus de Sevilla a los mandos de la consola.

hackathon_gastos_en_software_estado.txt · Última modificación: 2017/07/22 20:04 por editora