miércoles, 13 de junio de 2012

Plowshare: descargas directas desde la consola

Hace poco contaba como había llegado hasta la "versión daemon" de Transmission, lo que me permitió centralizar la descarga de archivos mediante el protocolo Bittorrent en un mini-servidor Linux casero, sin monitor (o como dicen los guiris, headless, "sin cabeza") y controlado remotamente por SSH. Como no me gusta depender de una única tecnología y además en la web hispana se siguen usando en abundancia las "descargas directas" facilitadas por proveedores alternativos a la cerrada Megaupload, me propuse encontrar un gestor de descargas que las manejara, al estilo de JDownloader, pero desde la consola.

En una primera sesión de búsqueda no encontré nada que me sirviera y estuve tentado de ponerme a programar algún shell script al estilo de los que hice en su momento para Rapidshare o Megaupload para automatizar las descargas desde alguno de los proveedores más usados actualmente. El problema era que estos servicios ponen cada vez más difícil la descarga de archivos sin navegar por su web (y ver su publicidad) mediante el uso de JavaScript y CAPTCHAs. Recordaba de indagaciones anteriores que algunos hackers (en el sentido de "programadores ingeniosos") se las habían arreglado para interpretar JavaScript con un motor no vinculado a un navegador (al estilo de SpiderMonkey) y para solucionar los dichosos CAPTCHAs mediante el uso de técnicas OCR (reconocimiento óptico de caracteres) mediante herramientas de consola del estilo de ImageMagick. Esto elevaba notablemente la dificultad del asunto, pero al menos quería intentarlo, así que me dispuse a investigar más a fondo dichas técnicas para usarlas en mi nuevo shell script.

Por suerte para mi pereza (y desgracia para mi aprendizaje como programador ;) la nueva sesión de búsqueda me llevó hasta un potente programa de consola que ya aplicaba estas complejas técnicas exitosamente. Se llama Plowshare y utiliza Bash junto a un variado arsenal de bibliotecas y utilidades típicas de sistemas tipo Unix para automatizar la descarga de archivos desde ese tipo de servicios de alojamiento, soportando, gracias a su diseño modular, un buen puñado de ellos. Además cuenta con un paquete para Debian (y distros derivadas) que me facilitó la instalación y me permitió ampliar las opciones de mi servidor de descargas. Lo ejecuto desde una shell remota (con SSH) pasándole como argumento un archivo de texto con los links de descarga. Tras las primeras pruebas me encontré con dos obstáculos finales que no tardé mucho en superar:
  1. Para poder cerrar la conexión remota al servidor una vez iniciadas las descargas sin que se interrumpa el programa, uso la vieja utilidad Screen (ejecutándola con screen -R antes de correr el programa plowdown y pulsando Ctrl+A+D para desvincular dicha ejecución de la shell y poder hacer un exit). 
  2. Cada vez más servidores usan CAPTCHAs irresolubles (por el momento), con lo que tienes dos opciones: o estás pendiente de las descargas para resolverlos tu mismo (con lo que de paso pierdes cualquier ventaja conseguida hasta ahora) o haces que un "humano anónimo" los resuelva por tí en el momento adecuado. Esta curiosa forma de abordar el problema de los CAPTCHAs la contaré en el próximo post...