Bash script para respaldar mi primer blog

Saturday, March 12th, 2011

Por un momento tuve miedo…

Leí que el 16 de marzo de 2011 cerrarían Windows Live Spaces, lugar donde hice mi primer blog. Tengo cierta obsesión por dejar evidencia de mi existencia, por lo que no podía tolerar la idea de que todos esos escritos desparecieran.

El equipo de Windows Live daba la opción de exportar a WordPress.com, para lo cual era necesario iniciar sesión con la cuenta que desde hace varios años no uso y por tanto dejó de existir…

Pensé en descargar la RSS Feed y/o a partir de ella cargar en Google Reader todos los posts, pero vi que estaba incompleta.

Las opciones restantes: buscar una forma de automatizar el respaldo del blog, o manualmente copiar cada uno de los posts. Es conocido mi amor por la automatización y mi simultáneo repudio por hacer manualmente actividades repetitivas, por lo que me decidí por la primera opción.

Busqué y encontré un patrón en las [horribles] URLs de los posts. Procedí a ver scripts de BASH pasados para recordar cómo programar ciclos, vi el manual de wget y de BASH, y programé al siguiente pequeño, que en lo que escribo esto ya terminó de respaldar mi blog :):


#!/bin/bash
echo "Entrando a directorio de archivos..."
cd archivos

for i in $(seq 109 974)
do
  echo "Intentando descargar archivo #$i..."
  wget -O $i.html http://sejomagno.spaces.live.com/blog/cns\!36CDD55860B8D63E\!$i.entry
  if [ ! -s $i.html ]; then
    echo "Archivo no existente, eliminando..."
    rm -v $i.html
  fi
done

echo "Regresando a directorio..."
cd ..
echo "Listo! :)"

Explicación:

Vi que las URLs los posts tenían la siguiente estructura: http://sejomagno.spaces.live.com/blog/cns!36CDD55860B8D63E!NUMERO.entry, donde NUMERO va del 109 al 974. Además, no hay posts en todos los valores intermedios de NUMERO.

La solución obviamente tenía que depender de wget, bendito programa para descargar archivos en URLs. (Random fact: este programa tiene un papel en la película The Social Network; Mark Zuckerberg lo utiliza para descargar fotos de sus compañeros para su página Facemash)

Lo que hace el programa en primer lugar es entrar a un directorio creado para guardar los posts descargados. Luego, hace que la variable $i tome todos los valores entre 109 y 974, y por cada uno de esos valores hacer cierta acción. La acción consiste en descargar el post en la URL correspondiente a ese valor de $i en un archivo llamado $i.html. En el caso en que el post no exista, se elimina ese archivo. Cuando acaba, se regresa al directorio donde fue llamado

Y listo, después de esta Sejoaventura, puedo sentirme tranquilo de que aunque Microsoft elimine sus Windows Live Spaces, lo que escribí se queda conmigo. Moraleja: procurar no depender de servicios externos para guardar ahí nuestro material multimedia (¿el texto escrito cuenta como multimedia?). Moraleja 2: la programación es bella y poderosa

Se aceptan sugerencias, comentarios y preguntas respecto al código 😀