«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 …
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í.
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
El día 19 de Julio nos reunimos y generamos este script que nos ha permitido conocer por el momento las cifras.
El script un poco más apañado aquí:
La primera cifra que nos ha salido ha sido esta (desde 2011 hasta la fecha (19/07/2017)):
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:
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'
cat result | tr " " "\n" | grep . > resultado2.csv
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.