lunes, 14 de febrero de 2011

Descargando el manual 'La guía definitiva de PNG' con bash

Pues eso, hoy va a ser algo corto, el "problema" es simple, tenemos estos ingredientes:
- Un manual sobre el formato PNG [ http://www.libpng.org/pub/png/book/toc.html ]
- Una conexión a Internet intermitente, así que no es una posibilidad leerlo online
- Pereza suficiente para no ponerse a descargarlo a mano
- Ganas de trastear con bash

Y la receta, comentadita [ vacuum.sh ] o coloreado:

#!/usr/bin/env bash
nxt="$1"
base="$2"

# Se comprueban los argumentos
if [ -z "$nxt" ] || [ -z "$base" ]; then
    echo "$0 <first link> <base>"
    exit 0
fi

# Mientras queden páginas
while [ ! -z "$nxt" ];do
    # Se descarga
    wget "$nxt"

    # Se lee el nombre del archivo
    for i in $(echo $nxt|sed "s/\// /g");do
        fname=$i
    done

    nxt=""
    # Se lee el archivo en busca del link al siguiente
    # ( la línea contiene align="right" y al principio está el <a href )
    echo "Parsing..."

    for o in $(cat $fname|sed "s/\ /%/g");do
        i=`echo "$o"|sed "s/%/\ /g"`
        l1=`echo "$i"|grep 'align="right"'`
        l2=`echo "$i"|cut -d\" -f1|grep 'href'`

        # Si se encuentran las dos cosas
        if [ ! -z "$l1" ] && [ ! -z "$l2" ];then

            # Se extrae lo que está entre las comillas
            nxt="$base"`echo "$i"|cut -d\" -f2`
            echo "Next: $nxt"
            break # Ya está, pasamos a la siguiente
        fi
    done

    # Se comprueba que no se volvió al principio
    if [ "$nxt" == "$1" ];then
        break
    fi
done


Para lanzarlo contra la web de antes, habría que hacer:

./vacuum.sh "http://www.libpng.org/pub/png/book/title.html" "http://www.libpng.org/pub/png/book/"


Sí, es bastante cutre, pero no se me ocurrió nada mejor :P.

Saludos

No hay comentarios:

Publicar un comentario