Le Blog de Thomas

Logiciels libres, Linux embarqué, et autres ...

Formation Linux embarqué à Toulouse

Les scripts, j'adore


J'adore les petits bricolages qu'on peut faire avec des scripts rapidement écrits. Ça peut paraître assez stupide, mais je trouve ça assez fantastique. Dernier exemple en date : j'avais envie d'une page Web liste les flux RSS auxquels je suis abonné grâce à Feed2Imap. Mieux, il faudrait que cette page Web soit sur mon Wiki, et qu'elle se mette à jour automagiquement, sans que j'ai besoin de faire quoi que ce soit. La recette est la suivante.

Soit un fichier .feed2imaprc qui contient la liste des flux RSS avec leur URL, de la forme :

- name: KernelTrap
    url: http://kerneltrap.org/node/feed
    target: imap://user:pass@host/mail/rss/vrac


Un petit script Perl parse ce fichier, et crache une requête SQL de type update qui peut mettre à jour la page ListeFluxRss de mon blog :

#!/usr/bin/perl -w
use strict;

my $name = "";
my $url = "";

my $body = "===== Liste de flux RSS =====

Ci-dessous sont listés les flux RSS auxquels je suis abonné, grâce à [[http://home.gna.org/feed2imap Feed2Imap]].

";

while(<>)
{
  if (/- name: (.*)/) {
    $name = $1;
  }

  if (/url: (http\:\/\/.*)/) {
    $url = $1;
  }

  if ($url) {
    $body .= " - [[" . $url . " " . $name . "]]\n";
    $url = "";
  }
}

my $sql = "update wikini_pages set body='$body', time=NOW() where (tag='ListeFluxRss' and latest='Y')";
print $sql;


Il suffit alors de lancer quelque chose comme (le mot de passe de la base MySQL étant dans le fichier ~/.my.cnf) :

cat .feed2imaprc | ./rsslist2html | mysql -h localhost -u thomas thomas


Et hop, la page ListeFluxRss est mise à jour. On rentre la commande dans la crontab pour qu'elle soit appelée tous les jours, et voilà, c'est mis à jour automagiquement.

Franchement, j'adore ce genre de petits bricolages. C'est peut-être crado, pas bien conçu ou que sais-je encore, mais en tout cas, ça a pris 5 minutes en réutilisant les outils qui existent déjà. Je trouve vraiment ça merveilleux.
Commentaires [Cacher commentaires/formulaire]
alabama.imag.fr (2005-08-01 09:53:08)
En fait, comme la config de feed2imap utilise YAML, tu aurais pu utiliser le parser YAML pour Perl pour récupérer les champs name et url.

Sinon, je te conseille d'enlever les logins/mot de passe éventuels dans l'URL. On sait jamais, si tu rajoutais une URL avec un mot de passe dedans, ca serait bete de le diffuser.
ThomasPetazzoni (2005-08-01 10:12:57)
J'ai regardé rapidement pour utiliser un parser YAML, mais en fait, je n'avais pas envie de me prendre la tête, donc j'ai fait ça crado. Mais c'est vrai que ça serait nettement mieux.

D'ailleurs, est-ce qu'on pourrait envisager de rajouter un champ "description" par exemple ?

Sinon, pour les logins/mots de passe dans l'URL, ça existe pour les flux RSS ? Et si oui, tu voudrais les filtrer comment ?
alabama.imag.fr (2005-08-01 11:03:27)
champ description> il serait utilisé comment ?
Tu peux rajouter tous les champs que tu veux dans .feed2imaprc, le parser les ignorera juste.

Pour les logins/mdp dans l'URL :
if url =~ /@/
   url.sub!(/\/\/.*@/, '//')
end


tu peux me pinger qd tu réponds ? ;)
alabama.imag.fr (2005-08-01 11:05:00)
il manque des \/\/ (à cause de la syntaxe wiki) dans le ''
c'est de l'authentification par HTTP classique. Feed2Imap? supporte.
meridon.bulix.org (2005-08-01 16:31:08)
A propos de tous ces petits bricolages sympas, le problème vient de se rappeler qu'ils existent, comment ils sont faits, etc.

Personnellement, je pense que je vais bientôt commencer à écrire (je ne sais pas encore sous quelle forme, peut-être du Docbook) une sorte de livre qui détaille comment chacune de mes boxs est faite, de bout en bout :

Materiel : marque, date d'achat, détails, etc
Systeme : partitionnement, versions, configuration, utilisateurs, scripts, trucs tunés, etc

Le problème de ce genre de trucs c'est de le maintenir à jour pour pas que ca tombe en désuétude, mais je pense que c'est à tenter.

On en avait discuté avec Head (voir http://head.blogdns.org/index.php/blog/33 ).

- Max

PS: bouh le bug de parsing Wikini qui laisse le reste de la page en vrac :)
ThomasPetazzoni (2005-08-01 16:36:12)
Oui, tout à fait d'accord. C'est effectivement pas évident de savoir ce qui se passe sur les différentes machines, dans les différents crontab, et ce que fait chaque script. Et encore, on parle de 4, 5, 6 machines. Imagine dans les parcs importants avec plusieurs centaines de serveurs. Tenir un journal de bord est alors indispensable, ou alors faut se passer des bricolages, mais je pense que c'est difficilement possible.

Poru le bug de parsing, effectivement, y'a un soucis. C'est de la daube Wikini, mais tu me proposes quoi de mieux ?
ThomasPetazzoni (2005-08-01 16:38:23)
Voilà, le bug de parsing est corrigé ;-)
10.91.97-84.rev.gaoland.net (2005-08-09 18:46:25)
Et au fait, il est où ton fil à toi ? --talou
10.91.97-84.rev.gaoland.net (2005-08-09 18:51:14)
je me réponds à moi-même : [http://thomas.enix.org/rss.php] --talou
ThomasPetazzoni (2005-08-09 21:13:44)
et même plus simple: http://thomas.enix.org/rss , tout simplement ;-)
Ajouter un commentaire à cette page:

Combien font 4 et 8 ?