Je ne sais pas si certain dans d’entre vous connaissent l’excellent site L’actu en patate : c’est un site où l’auteur publie chaque jour une petite BD sur l’actualité. Seul bémol, le flux rss de ce site est assez nul. Par nul je veux dire que ce flux permet seulement de voir si il y a des nouveautés, mais ne permet pas de les visualiser avec liferea (l’agrégateur de gnome).
Cependant, j’ai découvert il y a peu une fonctionnalité sympa de ce logiciel : il est possible de personnaliser les flux avec des scripts.
Plus concrètement, un flux rss est fichier xml qui contient les dernières nouveautés. Il suffit alors de créer un script qui modifie le fichier original (lu sur l’entrée standard) en un nouveau fichier (la sortie standard) qui contient le contenu que l’on désire.
Pour ceux que ça intéressent, je vous donne le script ci-dessous qui vous permettra de lire l’actu en patate depuis liferea.
Pour faire simple, il récupère dans le flux rss original, la page du blog en question, puis la télécharge et récupère alors le contenu désiré (image + commentaire) et créée à partir de ce contenu un nouveau flux rss.
Le fichier sauv permet de sauvegarder la liste des articles déjà traités, ainsi on ne télécharge le contenu uniquement si l’article en question n’a pas déjà été rencontré.
#!/bin/sh
# http://feeds.feedburner.com/lemonde/vidberg?format=xml
DIR="/home/cantor/.bin/liferea/vidberg"
URL="http://vidberg.blog.lemonde.fr/files/"
RSS="$DIR/tmp/rss"
HTML="$DIR/tmp/html"
LAST1="$DIR/tmp/last1"
LAST2="$DIR/tmp/last2"
SAUV="$DIR/vidberg.data"
touch $SAUV
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<?xml-stylesheet type=\"text/xsl\" media=\"screen\" href=\"/~d/styles/rss2full.xsl\"?>
<?xml-stylesheet type=\"text/css\" media=\"screen\" href=\"http://feeds.feedburner.com/~d/styles/itemcontent.css\"?>
<rss>
<channel>
<title>L'actu en patates</title>
<link>http://vidberg.blog.lemonde.fr</link>
<description>Les dessins d'actualité et d'humeur de Martin Vidberg</description>"
> $LAST1
> $LAST2
> $RSS
cp $SAUV $LAST1
while read line ;do
echo $line >> $RSS
done
echo -n " ";
grep -m 1 pubDate $RSS
grep guid $RSS | sed 's/.*\(http.*\)<.*/\1/' | while read line ;do
if [ "$line" != "" ]; then
if [ ! $(grep $line $LAST1) ]; then
> $HTML
echo $line >> $LAST2
wget -q -O $HTML "$line"
echo " <item>"
echo -n " "
grep -B 7 guid.*$line $RSS | grep title
echo " <link>$line</link>"
echo " <guid>$line</guid>"
echo -n " "
grep -B 6 guid.*$line $RSS | grep pubDate
echo -n " <description><![CDATA["
sed ':s;N;s/\n/ /;bs' $HTML | awk -F "entry\">" {'print $2'} | awk -F "<table" {'print $1'} | sed 's/[ \t]*<p/<p/'
echo "]]></description>"
echo " </item>"
fi
fi
done
echo "</channel>"
echo "</rss>"
cat $LAST2 $LAST1 | head -n 100 > $SAUV