Bonjour à tous,
J'ai eu l'idée de ce script en tombant sur ce post
Bashfr dans votre terminal ?.
Le projet
J'ai trouvé le script de tOkeshu totalement inutile donc indispensable 😃. J'en ai aussitôt fait profiter plusieurs de mes amis. Cependant, certaines blagues de Bashfr étant plutôt orientées "geek" elles n'ont pas toujours été comprises par ceux qui les ont vues.
Plusieurs personnes m'ont alors demandé si je ne pouvais pas prendre les quotes sur Vie de Merde à la place de bashfr. J'ai donc décidé d'adapter le script.
Pour cela, je me suis inspiré du script créé par tOkeshu, puis je l'ai modifié et adapté pour qu'il aille récupérer les quotes sur le site Vie de Merde plut que sur bashfr.
Présentation du programme
Nom : vdm
Date de création : 15 mars 2009
Version : 1.0
Langage : Perl
Installation
Tout d'abord il faut rendre le script exécutable en tapant la commande suivante : chmod u+x vdm.
Ensuite il suffit de modifier la variable $PATH (ajouter cette ligne dans votre .bashrc : PATH=$PATH:/chemin/du/dossier/contenant/le/script)
Enfin, pour exécuter le script il suffit de taper dans un terminal la commande suivante : vdm --choix=categorie --number=x. Il faut remplacer catégorie par l'une des catégories disponibles et x par le numero d'apparition de la quote dans la page.
Pour lancer le script à chaque lancement d'un terminal il faut ajouter la ligne suivante au .bashrc :
~/chemin/de/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 variante nécessite d'avoir le programme cowsay installé sur votre ordinateur.
Code du script
#!/usr/bin/perl
#*********************************************#
# quote-from-vdm #
# écrit par grim7reaper #
# 15 mars 2009 #
# #
# version 1.0 #
# #
# Récupère les citations du site #
# viedemerde.fr #
#*********************************************#
# ------------------------------------------------------------------#
# Ce script prépare et traite les citations du site viededemerde.fr #
# Il accepte 10 arguments possible : #
# -latest | -aleatoire | -top | -amour | -argent | -enfant | #
# -travail | -sante | -sexe | -inclassable #
# #
# Ils correspondent au 10 pages de citation de vdm : #
# #
# http://www.viedemerde.fr/ #
# http://www.viedemerde.fr/aleatoire #
# http://www.viedemerde.fr/top #
# http://www.viedemerde.fr/amour #
# http://www.viedemerde.fr/argent #
# http://www.viedemerde.fr/enfant #
# http://www.viedemerde.fr/travail #
# http://www.viedemerde.fr/sante #
# http://www.viedemerde.fr/sexe #
# http://www.viedemerde.fr/inclassable #
# #
# -n est un argument qui est utilisé avec les 10 premiers: #
# Il permet de sélectionner une quote parmis les différentes #
# pages énoncées. #
# #
# Le choix par défaut est aleatoire. #
# ------------------------------------------------------------------#
#use strict;
#use warnings;
#declaration des options disponibles
use vars qw ($help $h $latest $aleatoire $top $amour $argent $enfant $travail $sante $sexe $inclassable $n);
#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;
GetOptions("help"=>\$help,
"h"=>\$help,
"choix=s"=>\$choix,
"c=s"=>\$choix,
"number=i"=>\$number,
"n=i"=>\$number,
);
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 "NOM\n";
print "\tvdm - récupère une quote du side viedemerde.fr et l'affiche dans le terminal\n\n";
print "SYNOPSIS\n";
print "\tvdm> --choix=categorie --number=numéro\n\n";
print "DESCRIPTION\n";
print "\tCe script prépare et traite les citations du site viededemerde.fr\n";
print "\tIl accepte 2 options : --choix et --number\n\n";
print "\tL'option --choix accepte 10 arguments possible :\n";
print "\tlatest | aleatoire | top | amour | argent | enfant | travail | sante | sexe | inclassable\n\n";
print "\tL'option --number prend un entier en argument\n\n";
print "\tEn l'abscence d'option et d'argument, le choix par défaut est --choix=latest --number=1\n\n";
print "\tOn peut combiner ce script, après l'avoir rendu executable et modifier le PATH, avec cowsay grâce à la ligne de commande suivante :\n";
print "\tvdm --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\n\n";
print "OPTIONS\n";
print "\t-c=<categorie>, --choix=<categorie> \n\n";
print "\t\tpermet de choisir la catégorie de la quote \n\n";
print "\t-n=<numero>, --number=<numéro> \n\n";
print "\t\tpermet de convertir tout les fichiers du repertoire courant\n\n";
print "\t-h, --help \n\n";
print "\t\tafficher l'aide \n\n";
print "AUTEUR\n";
print "\tEcrit par grim7reaper\n\n";
exit;
}
# On teste les options
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;
}
}
# 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.
break;
}
$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;
}
# 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 "$quote\n";
# 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
=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 -h, --help
afficher l'aide
=back
=head1 AUTEUR
Ecrit par grim7reaper
=cut
En espérant que ça puisse en amuser certains tongue
Edit : Un petit aperçu du résultat