sudo: Jack of all trades, master of some

Generar entradas RSS con bash

Comentarios desactivados en Generar entradas RSS con bash

En una ocasión quise hacer un script que me generara automáticamente las entradas RSS de un sitio Web que administraba, pero en ese momento la musa no bajaba y meses más tarde un colega me comentó que quería hacer algo parecido y esa vez sí bajó la musa.

Este script genera las entradas RSS de archivos ISO que estén almacenados en un directorio. Con solo cambiar las variables y adaptarlas basta.

Nota: Ya quisiera que se coloreara la sintaxis y que el código fuera más legible. Para aquellos que quisieran comentarios en el código, en ese momento nunca pensé en publicarlo.


#!/bin/bash
ISODIR="/algun/directorio/isos"
RSSFILE="/var/www/site/rss.xml"
GENERATOR="GENERADOR"
TITLE="TÍTULO"
DESCRIPTION="DESCRIPCIÓN"
LANGUAGE="ES"
LINK="http://dominio.tld/"
GUID="http://dominio.tld/isos"
WEBMASTER="usuario@dominio.tld"
NAME="NOMBRE"
COPY="COMPAÑÍA"
ENTRIES="5" ### cantidad de entradas

header ()
{
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>
<rss version=\"2.0\" xmlns:atom=\"http://www.w3.org/2005/Atom\">
<channel>
<generator>${GENERATOR}</generator>
<title>${TITLE}</title>
<description>${DESCRIPTION}</description>
<language>${LANGUAGE}</language>
<link>${LINK}</link>
<atom:link href=\"${LINK}\" rel=\"self\" type=\"application/rss+xml\" />
<webMaster>${WEBMASTER} (${NAME})</webMaster>
<copyright>©${YEAR} ${COPY}</copyright>" > ${1}
}

body ()
{
cd ${ISODIR}

for FILES in `find * -name *.iso | xargs ls -t`; do

ISOFILE="`basename $FILES`"
FILESIZE=`du -h "$FILES" | cut -f1`
EPOCH=$(stat -c%Y ${FILES})
DOW=`date -d @${EPOCH} +%a`
DOM=`date -d @${EPOCH} +%d`
MON=`date -d @${EPOCH} +%b`
YEAR=`date -d @${EPOCH} +%Y`
TIME=`date -d @${EPOCH} +%T`
TIMEZONE=`date +%z`

echo "        <item>
<title>Disponible: ${ISOFILE} (${FILESIZE})</title>
<description>Tamaño: ${FILESIZE}</description>
<guid>${GUID}/${FILES}</guid>
<pubDate>${DOW}, ${DOM} ${MON} ${YEAR} ${TIME} ${TIMEZONE}</pubDate>
</item>"
done | head -n $((${ENTRIES}*6)) >> ${1}
}

footer ()
{
echo "    </channel>
</rss>" >> ${1}
}

header ${RSSFILE}
body ${RSSFILE}
footer ${RSSFILE}

exit 0