sábado, 19 de octubre de 2019

Yahoo! Groups desaparecerá en unos días. ¡Descárgate tus grupos!

Tal y como suena: un desastre.

Yahoo! Groups ha sido durante más de dos décadas (no olvidemos que comenzó como un servicio llamado Onelist que Yahoo adquirió tras su fusión con eGroups) un punto de encuentro de miles de personas que, mucho antes de que las famosas redes sociales lo inundasen todo, compartían interminables e interesantes charlas que podían indistintamente leerse vía web o usando nuestro email estándar.

Ahora, tras 23 años, un pedazo de historia de Internet (y por tanto del conocimiento universal) va a desaparecer para siempre: Yahoo! (actualmente propiedad de Verizon) ha anunciado que antes de final de año será eliminado todo el contenido acumulado en Yahoo! Groups desde la era de Onelist. Esto incluye todos los mensajes, links, adjuntos y las útiles secciones de archivos que cada grupo albergaba.

El calendario parece que es el siguiente: desde el próximo 28 de octubre (¡eso es dentro de diez días!) ya no se podrá subir nuevo contenido. El 14 de diciembre, todo el contenido será eliminado. Para colmo, Yahoo! parece que no provee ningún mecanismo tan fantástico como el que tienen las cuentas de Google para descargar selectivamente todo lo que nos interese, algo que vino muy bien cuando eliminaron la versión de consumo de Google+.

Pero, tranquilidad. Hay solución.

Bueno, o algo parecido. Por desgracia, Yahoo! no ha publicado nunca una API para el producto Yahoo! Groups, lo que significa que no hay demasiadas herramientas que puedan automatizadamente explotar los datos almacenados en los distintos grupos. Las (escasas) utilidades disponibles se conectan consumiendo la propia UI web lo que, además de mucho más difícil de implementar, es menos eficiente y menos tolerante a cambios en el producto.

A pesar de todo, hemos seleccionado algunas opciones que pueden dar una solución (parcial) al inminente problema (e incomprensible tragedia).

Opción 1: descargar tus datos desde la cuenta Verizon/Yahoo!

Cuando antes dijimos que no se puede hacer una descarga masiva al estilo de las cuentas de Google, no dijimos toda la verdad. Si bien en esencia es cierto que no podemos rescatar toda la valiosa información de los grupos, podemos al menos rescatar el material propio, es decir, aquellos mensajes redactados por nosotros o aquellos archivos que hubiésemos subido.

Para ello basta con ir al panel de control de la cuenta Yahoo! en https://yahoo.mydashboard.oath.com (nos pedirá iniciar sesión) y buscar, abajo del todo, la opción "Solicitar una descarga":

para a continuación marcar el producto que necesitamos:


Tras confirmar la dirección de email en el siguiente paso, se nos enviará un link (puede tardar horas o días según el tamaño) desde el que podremos descargar un archivo comprimido con el material.

Sin embargo, esta funcionalidad se nos antoja insuficiente, especialmente si somos administradores de algún grupo y no queremos que se pierda nada (algunos grupos son realmente valiosas fuentes de información que hoy en día no se encuentra en ningún otro rincón de Internet), ya que el contenido que descargamos directamente de Yahoo! es exclusivamente el que hayamos generado nosotros mismos (que es en muchos casos el menos interesante).

Por este motivo, proponemos una 

Opción 2: usar el script "yahoo-groups-backup "

Esta opción permite descargar localmente mucho más material: todos los mensajes (tanto propios como ajenos) así como todos los archivos subidos al grupo. Sigue sin ser una solución perfecta, ya que no parece descargar el apartado de links ni el de fotos, pero al menos permite rescatar el grueso de la información relevante.

Sin embargo, no va a ser un camino de rosas: esta aplicación es de esos programas que encanta desarrollar a los informáticos nerd fanáticos del Python y de Linux con una absoluta carencia de empatía con el usuario final.

El script, que podía haberse desarrollado de una manera mucho más sencilla tecnológicamente plantea de entrada unos requisitos previos de software bastante pomposos, así como una usabilidad anti-usuario (valga la contradicción) que obliga a realizar todas las operaciones en modo consola y no permite fácilmente administrar el material descargado.

Paso 1: instalamos Python

Si tu ordenador es un Mac, casi que puedes saltarte este paso porque lo más probable es que Python venga ya instalado en tu versión de macOS. En caso de ser cualquier otro sistema "tipo-Unix" dependerá de qué distribución se trate pero, es muy probable que también venga preinstalado o que baste con invocar a tu gestor de paquetes favorito (por ejemplo apt-get install python3.7 para distribuciones basadas en Debian, o lo propio con Yum para distribuciones basadas en RedHat).

En caso de Windows, basta con descargarse la versión instalable del siguiente enlace:


y seguir los pasos de la instalación por defecto. Debemos asegurarnos que la variable de entorno PATH queda correctamente actualizada con la ruta de los binarios.

Paso 2: instalamos MongoDB

Cuando antes dije que esta aplicación era absolutamente user-unfriendly me refería a cosas como esta. Para hacer un cliente web que descargue unos datos, tener que requerir Python y hasta una instancia local de MongoDB me parece desproporcionado y que rompe por completo con la norma de usar siempre la mínima complejidad necesaria al diseñar una solución software. Pero el problema es que la forma de hacer las cosas actual (y de esto la consultoría tiene mucho de culpa, de eso hablaremos otro día) es así de horrible.

Al grano: sí, lo habéis leído bien. Hay que instalar localmente MongoDB (¿para cuándo un icono facepalm en Blogger, señores de Google?). Podéis descargarla de aquí y seguir los pasos de instalación (recomiendo no complicarse la vida y hacer una "full install"):


Paso 3: descargamos el driver usado por el script


Este driver (usado mediante Selenium tal y como en los tests automatizados típicos de un desarrollo con filosofía devops hace las veces de cliente web "headless" del cual extraer, a través de manipulación del DOM, la información que queremos (recordemos que no hay una API al uso de Yahoo! Groups). En este caso la instalación consiste en copiar el ejecutable a cualquier ruta que esté en la variable de entorno PATH. En el caso de Windows, una manera sencilla es copiarlo a la propia carpeta de instalación de Python ya que probablemente no le vais a dar ningún otro uso.

Lo podéis descargar de aquí:


Paso 4: instalamos el script "yahoo-groups-backup"

El script original se ha quedado desfasado y tenía varios bugs que lo hacen inservible para nuestros propósitos. Por eso vamos a utilizar un fork creado a partir del original que soluciona algunos problemas. Lo podemos encontrar en https://github.com/hrenfroe/yahoo-groups-backup y podemos descargarlo con cliente Git o bien descargar el archivo zip y descomprimirlo a algún lugar del disco duro. Importante: el subdirectorio donde descomprimamos el script, para evitar potenciales problemas, debería tener permisos de escritura para todos los usuarios.

Una vez descomprimido, y asumiendo que ya está instalado Python, hay que entrar desde el intérprete de comandos de vuestra elección al subdirectorio del script y ejecutar lo siguiente para su instalación:

pip install -r requirements.txt

Esto provocará que se instalen las dependencias necesarias en Python para que el programa funcione.

También necesitamos editar el archivo settings.yaml.template para configurar las credenciales de acceso de nuestra cuenta de Yahoo! con la que accederemos a los grupos:

        login: micuenta@yahoo.es
        password: mipassword

Paso 5: descargamos un grupo

Ya con todo configurado, solo queda empezar a descargar material (recordemos, solo mensajes y archivos, pues el script no soporta otros elementos como la lista de links del grupo).

Para ello tenemos que ejecutar desde dentro del mismo subdirectorio donde esté el script, el siguiente comando:

./yahoo-groups-backup.py scrape_messages --driver chrome nombre_grupo

si estamos en sistemas tipo Unix, o bien lo siguiente en caso de Windows:

yahoo-groups-backup.py scrape_messages --driver chrome nombre_grupo 

Breve explicación: el primer comando es obviamente el script. El parámetro scrape_messages es para indicar que queremos descargar todos los mensajes. Se puede sustituir por scrape_files si lo que queremos es descargar los archivos alojados en el grupo. Obviamente el parámetro nombre_grupo es el nombre o identificador que el grupo tiene dentro del producto de Yahoo! Groups.

Consideraciones finales


Parece ser que el script tiene algunos problemas (algunos derivados del driver Chromium para Selenium). Iremos actualizando la entrada con aquellos issues y las soluciones que vayan apareciendo. También podéis compartirlas en los comentarios.