Todos tenemos nuestros hobbies fuera de la informática. Y uno de los mios es la genealogía. Me encanta rebuscar entre documentos que tienen 400 años en busca de un misero dato que en el fondo no nos dice nada.
Para los que no sepáis cómo es este mundo. Básicamente consiste en pasarse múltiples horas hojeando los libros de bautismos y matrimonios que los curas de las iglesias iban escribiendo. Por suerte muchos de estos libros han sido escaneados y esos valiosos documentos de 400 años pueden mantenerse a salvo de incautos como yo.
Entrando ya en materia, el problema que tenía con la aplicación donde se almancenan esas copias escaneadas de los libros es que:
- a) La web es lenta
- b) Sólo deja descargarse hojas sueltas
- c) Es necesario revisar a veces libros de 600 páginas, folio a folio.
Estas características hacen el trabajo del genealogista, ya de por si muy pesado, aún más tedioso.
Como soy informático y me gusta mucho el tema de la automatización de tareas me planteé la forma de automatizar al descarga de libros completos, pagina a página para, una vez descargados, unirlos en un PDF.
El primer problema que encontré fue la aplicación que utilizaban era embebida y solo tenia un frontend en flash. No me valia pues Python.
Me puse a buscar un lenguaje de programacion que me permitiera hacer clicks en posiciones de la pantalla, y encontre aplicaciones como Automouse o autoclick que permiten hacer clicks en posiciones de pantalla en concreto, sin embargo no me valia, necesitaba que se metiera texto cuando lo necesitaba y que tuviera variables que crecieran donde se alojara por ejemplo la página que estaba en ese momento descargándome.
Así conocí AutoIT, un lenguaje de scripting que me permitía hacer todo lo que quería desde Windows.
Con comandos como MouseClick("left",75,43) que me llevaba a la posición 75,43 de la pantalla y me hacia click con el botón izquierdo. Y comandos como InputBox("Titulo") que me permitía guardar en variable lo que escribiera el usuario. Así saque este script:
Este script en concreto, detecta si el directorio donde se va a guardar las imagenes existe o no, se adapta a los libros automaticamente, se recupera de errores y al final convierte las imagenes en PDF.
Una vez conocí bien AutoIT lo he utilizado en el trabajo para automatizar tareas repetitivas. Eso lo contaré en otras entrada.
Recientemente en casa me di cuenta que mientras descarga libros no puedes hacer nada más en el equipo (la aplicación mueve el raton cada pocos segundos) durante un par de horas, a no ser que tuviera máquinas virtuales donde poder correr el script.
Como tenia a mano un linux en otra máquina pense si existiría AutoIT para Linux. La respuesta fue negativa. Pero si encontré algo parecido y conocido como xdotool
Aunque aún no la he estudiado en profundidad, tiene aspecto de permitirme hacer todo lo que he podido hacer con AutoIT. A diferencia de AutoIT, que es un lenguaje de scripting, xdotool es una aplicación que admite una serie de parametros o comandos y que debe ser lanzado de forma repetitiva desde un script BASH. Para hacer muchas otras tareas que hace autoIT, nos tenemos que basar en los comandos de Linux desde linea de comandos. En cualquier caso no me costó mucho conseguir algo parecido a lo que tenia hecho en AutoIT en WIndows:
#!/bin/bash PAGINAS=421 DIRECTORY=/home/lmartin/Genealogia PUEBLO=MARAZOLEJA C=197 mkdir $DIRECTORY/$PUEBLO 2>/dev/null xdotool sleep 3 while [ $C -lt $PAGINAS ] do #ESPERO 10SG A QUE SE CARGUE LA IMAGEN xdotool sleep 10 #LE DOY A GUARDAR IMAGEN xdotool mousemove 1218 565 click 1 #ESPERAMOS 10SG A QUE SE GUARDE EN DISCO xdotool sleep 10 mv /home/lmartin/Descargas/record-image.jpg $DIRECTORY/$PUEBLO/$C.jpg #HAGO CLICK EN "SIGUIENTE IMAGEN": xdotool mousemove 208 235 click 1 ((C++)) done
xdotool esta disponible para Debian y Ubuntu, FreeBSD, Fedora, Mac OS X y OpenSUSE.
Y una vez hecho me dije y por que no hacerlo en el IPAD, en el fondo es un UNIX... Si, es verdad pero lo que me daba cuenta eran las fuertes restricciones que aplica Apple al desarrollo de Apps. De hecho no encontré ninguna App comercial que hiciera algo similar. En esta web recomendaban hacerlo via VNC desde el PC. No me parecia una solucion factible. Finalmente encontré en Cydia una App de pago llamada AutoTouch que permite grabar una serie de taps y sus posiciones y luego reproducir esa secuencia de movimiento, a la par que genera código LUA que luego podemos modificar.
Autotouch, una App muy recomendable para automatizar miles de tareas con nuestro Ipad, aunque eso sí, es necesario hacer jailbreak a nuestros dispositivo iOS. Cabe mecionar que también esta disponible para Android, aunque es posible que para Android haya otro tipo de Apps de características similares.