Salut,
Oulà, ça remonte ce script. Qu’est ce que c’est moche par endroits, on voit que c’était mes débuts en programmation ^^.
Il y a sûrement bien des choses à améliorer d’ailleurs. Je suis même étonné qu’il fonctionne encore 2 ans plus tard.
Désolé de répondre si tardivement mais comme le topic était « mort » depuis 2 ans je m’étais désabonné et je n’ai donc pas été avertit de ton message.
Pour le HTML, je ne vois pas de quoi tu parles car chez moi je n’ai que du texte en sortie.
Bon sinon je viens de faire une petite modif’ pour ne pas avoir de problème d’encodage donc voilà la version 1.2 plus de 2 ans plus tard ^^
#!/usr/bin/perl
#*********************************************#
# quote-from-vdm #
# écrit par grim7reaper #
# 15 mars 2009 #
# #
# version 1.2 #
# #
# Récupère les citations du site #
# viedemerde.fr #
#*********************************************#
use strict;
use warnings;
#declaration des options disponibles
my ($help, $choix, $number, $iteratif, $font_color);
#utilisation du module Getopt::Long pour gérer les options multi-caractères
use Getopt::Long;
# On récupère directement la page HTML.
use LWP::Simple;
# Pour l'encodage utf-8
use Encode 'encode';
GetOptions("help"=>\$help,
"h"=>\$help,
"choix=s"=>\$choix,
"c=s"=>\$choix,
"number=i"=>\$number,
"n=i"=>\$number,
"iteratif"=>\$iteratif,
"i"=>\$iteratif,
"font-color=s"=>\$font_color,
"f=s"=>\$font_color,
);
my $encore=""; # variable qui stocke la reponse de l'utilisateur
my $font="\033["; # variable qui stocke la couleur de la police
my $quote=""; # Variable qui contient la quote
my $quote_number=1; # Variable qui permet de décompter le nombre de citations parcourues.
my $option=""; # Variable qui contient le choix de l'utilisateur
my $url="http://www.viedemerde.fr/"; # Variable qui contient l'url de la page html à récuperer
my $source=""; # Variable qui contient la page correspondant à l'url
my @ligne; # Tableau contenant toute les lignes de la page (1 ligne par case)
if($help) # Si l'option est help on affiche l'aide
{
print <<"AIDE";
NOM
vdm - récupère une quote du side viedemerde.fr et l'affiche dans le terminal
SYNOPSIS
vdm --choix=categorie --number=numéro
DESCRIPTION
Ce script prépare et traite les citations du site viededemerde.fr
Il accepte 2 options : --choix et --number
L'option --choix accepte 10 arguments possible :
latest | aleatoire | top | amour | argent | enfant | travail | sante | sexe | inclassable
L'option --number prend un entier en argument
En l'abscence d'option et d'argument, le choix par défaut est --choix=latest --number=1
On peut combiner ce script, après l'avoir rendu executable et modifier le PATH, avec cowsay grâce à la ligne de commande suivante :
vdm --choix=aleatoire | cowsay -f \$(/bin/ls /usr/share/cowsay/cows -1 | head -n \$(expr \$\$\$(date +%s) % \$(ls /usr/share/cowsay/cows | wc -w) + 1) | tail -n 1) -W 70
Cette combinaison ne fonctionne pas avec l'option --iteratif (ou -i)
OPTIONS
-c=<categorie>, --choix=<categorie>
permet de choisir la catégorie de la quote
-n=<numero>, --number=<numéro>
permet de convertir tout les fichiers du repertoire courant
-i, --iteratif
affiche des quotes jusqu'à ce que l'utilisateur réponde "non"
-f=<couleur>, --font-color=<couleur>
détermine la couleur de la police, par défaut c'est le blanc
-h, --help
afficher l'aide
AUTEUR
Ecrit par grim7reaper
AIDE
exit;
}
# On teste les choix
if($choix)
{
if($choix eq "latest") # Si l'argument de l'option choix est latest on ne rajoute rien à l'url
{
$choix="";
}
elsif($choix eq "aleatoire" || $choix eq "top" || $choix eq "amour" || $choix eq "argent" || $choix eq "enfants" || $choix eq "travail" || $choix eq "sante" || $choix eq "sexe" || $choix eq "inclassable")
{
$option=$choix; # Sinon si l'argument existe on le stock dans $ choix pour l'ajouter à l'url
}
else # Sinon c'est que l'argument de l'option choix n'existe pas donc on affiche un message d'erreur
{
print "Argument invalide pour l'option --choix ou -c\n";
print "L'argument doit etre latest, aleatoire, top, amour, argent, enfants, travail, sante, sexe ou inclassable\n";
exit;
}
}
# On teste les couleurs
if(!$font_color) # Si aucune couleur est définit on garde le blanc par defaut
{
$font.="0m";
}
else
{
if($font_color ne "noir" && $font_color ne "rouge" && $font_color ne "vert" && $font_color ne "orange" && $font_color ne "bleu" && $font_color ne "violet" && $font_color ne "cyan" && $font_color ne "gris") # Si l'argument de l'option font-color n'existe pas donc on affiche un message d'erreur
{
print "Argument invalide pour l'option --font-color ou -f\n";
print "L'argument doit etre noir, rouge, vert, orange, bleu, violet, cyan ou gris\n";
exit;
}
if($font_color eq "noir")
{
$font.="30m";
}
if($font_color eq "rouge")
{
$font.="31m";
}
if($font_color eq "vert")
{
$font.="32m";
}
if($font_color eq "orange")
{
$font.="33m";
}
if($font_color eq "bleu")
{
$font.="34m";
}
if($font_color eq "violet")
{
$font.="35m";
}
if($font_color eq "cyan")
{
$font.="36m";
}
if($font_color eq "gris")
{
$font.="37m";
}
}
# Si l'option number est declarée
if($number)
{
$quote_number=$number; # On récupère l'argument de l'option pour le stocker
}
$url.=$option; # on ajoute l'option à l'url
$source = get($url); # On récupère toute la page html
@ligne = split(/\n/,$source); # On récupère chaque ligne dans un tableau.
# On parcours tout le tableau.
foreach $_ (@ligne)
{
if(/Aujourd'hui.+VDM/ && !/concept/ && !/Lire la suite/) # Si la ligne contient Aujourd'hui suivi de 1 ou plusieurs caractères quelconque
# suivi de VDM et que ce n'est pas celle rappelant le concept
# ni celle qui n'est pas entierement sur une page (la VDM people)
{
if($quote_number==1) # Si on est arrivé a la quote désiré
{
$quote=$&; # On prend uniquement la partie de la ligne qui correspond à l'expression régulière.
last;
}
$quote_number--;
}
}
# On élimine toute les balise du type <> et leur contenu.
$quote=~s/<[^>]+>//g;
# On garde seulement la partie de la chaine contenu avant le diese
if($quote=~/(.+)#.+/)
{
$quote=$1;
}
$quote = encode("utf8", $quote);
# On substitue le codage HTML des caractères spéciaux par leur équivalents
$quote=~s/"/"/g;
$quote=~s/&/&/g;
$quote=~s/</</g;
$quote=~s/>/>/g;
$quote=~s/œ/Œ/g;
$quote=~s/ / /g;
$quote=~s/°/°/g;
$quote=~s/À/À/g;
$quote=~s/Ã/à/g;
$quote=~s/Ç/Ç/g;
$quote=~s/È/È/g;
$quote=~s/É/É/g;
$quote=~s/Ê/Ê/g;
$quote=~s/ï/ï/g;
$quote=~s/&\#039;/'/g;
$quote=~s/é/é/g;
$quote=~s/à/à/g;
$quote=~s/â/â/g;
$quote=~s/ç/ç/g;
$quote=~s/è/è/g;
$quote=~s/é/é/g;
$quote=~s/ê/ê/g;
$quote=~s/ë/ë/g;
$quote=~s/î/î/g;
$quote=~s/ô/ô/g;
$quote=~s/ù/ù/g;
$quote=~s/û/û/g;
# On affiche la quote après traitements
print "$font$quote\033[0;0m\n";
if($iteratif)
{
print"\n";
print "Une autre quote (oui/non) ? ";
chomp($encore=<STDIN>);
if($encore eq "oui") # Si l'utilisateur veut une autre quote
{
system("vdm","--c=$choix","-i","-f=$font_color"); # On relance le script, je n'ai pas trouvé mieux car avec une simple boucle
} # il semblerait (à vérifier) que le serveur renvoie la même page aléatoire
} # je créé donc un nouveau processus pour avoir une nouvelle page
# ce n'est pas très "propre" donc j'accepte toutes les améliorations possibles
# Bloc de documentation pod, pour obtenir une documentation style page de man
# au format HTML il suffit le lancer la commande suivante : pod2html --title=VDM vdm > vdm_doc.html
# d'autres formats de sortie sont possible ...
=pod
=head1 NOM
vdm - récupère une quote du side viedemerde.fr et l'affiche dans le terminal
=head1 SYNOPSIS
B<vdm> B<--choix=>categorie B<--number=>numéro
=head1 DESCRIPTION
Ce script prépare et traite les citations du site viededemerde.fr
Il accepte 2 options : --choix et --number
L'option --choix accepte 10 arguments possible :
latest | aleatoire | top | amour | argent | enfant | travail | sante | sexe | inclassable
L'option --number prend un entier en argument
En l'abscence d'option et d'argument, le choix par défaut est --choix=latest --number=1
On peut combiner ce script, après l'avoir rendu executable et modifier le PATH, avec cowsay grâce à la ligne de commande suivante :
vdm --choix=aleatoire | cowsay -f $(/bin/ls /usr/share/cowsay/cows -1 | head -n $(expr $$$(date +%s) % $(ls /usr/share/cowsay/cows | wc -w) + 1) | tail -n 1) -W 70
Cette combinaison ne fonctionne pas avec l'option --iteratif (ou -i)
=head1 OPTIONS
=over 4
=item -c=<categorie>, --choix=<categorie>
permet de choisir la catégorie de la quote
=item -n=<numero>, --number=<numéro>
permet de choisir la position de la quote dans la page
=item -i, --iteratif
affiche des quotes jusqu'à ce que l'utilisateur réponde "non"
=item -f=<couleur>, --font-color=<couleur>
détermine la couleur de la police, par défaut c'est le blanc
=item -h, --help
afficher l'aide
=back
=head1 AUTEUR
Ecrit par grim7reaper
=cut