jueves 10 de julio de 2008

Script de shell generador de sitemaps para google

Hola a todos, después de tanto y tanto tiempo... Aquí dejo un script que le puede servir de ayuda a algun@. Genera el archivo sitemap.xml necesario para un buen posicionamiento en motores de búsqueda como google o yahoo.

Habrá muchos más scripts mejores pululando por la red, pero ahí va mi aportación.
El uso es simple, se coloca el script en el directorio raíz de nuestra dominio y se ejecuta poniendo como parámetros las extensiones de las páginas web que tenemos alojadas.

Por ejemplo: ./dositemap html php

NOTA: si tienes páginas con extensión .htm y .html NO hay que incluir ambos, sólo la de .htm, ya que si se ejecutara ./dositemap htm html habría urls repetidas.


#!/bin/bash

####################################
# Diego Navarro Mellén #
# d.navarrom@alumnos.urjc.es #
####################################



## Función auxiliar para añadir la información necesaria de
## cada página web

function addinfo {

if [ $# -ne 1 ]; then
echo "ERROR: argumentos insuficientes!"
exit 1
fi

for pagina in `find . -name "*\.$1" | sed -e 's/^.//g'`
do
echo '<url>' >> sitemap.xml
echo "<loc>$ruta$pagina</loc>" >> sitemap.xml

#Sacamos la fecha de última modificacion
lastmod=`ls -Gltc ./$pagina | sed -e 's/^[^ ]* [^ ]* [^ ]* [^ ]* //g' |
sed -e 's/[^ ]* [^ ]*$//g'`
echo "<lastmod>$lastmod</lastmod>" >> sitemap.xml

echo '</url>' >> sitemap.xml
done
}

#### Script Principal #####

# En los argumentos se recibira el tipo de extension que pueden tener las páginas
if [ $# -lt 1 ]; then
echo "Faltan argumentos!"
echo "Ejemplo de uso:"
echo "USO: $0 html php asp"
echo "------------------------>"
echo "El comando anterior generaría un sitemap de todo el sitio conteniendo
todas las páginas con extensión .html, .php y .asp que se encuentren"

exit 1
fi

## Suponemos que estamos en el directorio raíz del dominio
#

echo "Introducir raíz del dominio:"
echo "ej: http://www.google.es"
echo -n "> "
read ruta
echo "El archivo sitemap.xml se generará en el directorio:"
echo "$(pwd)"
echo "¿Seguir con el proceso? [S/N]"
echo -n "> "
read resp
if [ $resp = "N" -o $resp = "n" ]; then
echo "Proceso abortado"
exit 1
fi

echo -n "Generando sitemap.xml ... "

## Creamos el archivo sitemap.xml
echo '<?xml version="1.0" encoding="UTF-8"?>' > sitemap.xml
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' >> sitemap.xml

## Para cada url en el sitio

for extension in $@
do
addinfo $extension
done

## Cerramos urlset
echo '</urlset>' >> sitemap.xml

echo "OK!"
exit 0