Le script
Présentation du script final étape par étape
Création de l'environnement de travail
#!/usr/bin/bash
mkdir ./CONTEXTES;
mkdir./DUMP-TEXT;
mkdir ./IMAGES;
mkdir ./PAGES-ASPIREES;
mkdir ./PROGRAMMES;
mkdir ./TABLEAUX;
mkdir./URLS;
mkdir ../FICHIERS-GLOBAUX;
mkdir../FICHIERS-GLOBAUX/DUMP;
mkdir ../FICHIERS-GLOBAUX/CONTEXTE;
La commande Mkdir permet de créer des dossiers. Elle est suivi du chemin relatif ou absolu désignant l'endroit où le dossier doit être créer par rapport à l'endroit où on se trouve dans l'arborescence de m'environnement de travail
Les symboles ../ désignent le répertoire parent, et les symboles ./ désigne le répertoire courant.
On avait aussi la possibilité de remplacer ces lignes de code en créant directement un fichier "input.txt" que le programme serait allé lire directement grâce à la commande read
echo "Donner le nom du répertoire contenant les fichiers des urls";
readREP;
echo "Donner le nom du fichier html où stocker les tableaux des
liens:";
read tablo;
echo"<html><head><title>tableau de liens</title></head><body>"
> $tablo;
Cette première boucle parcourt les fichiers contenus dans le répertoire URLS, création des sous répertoires selon la langue dans les répertoires PAGES-ASPIREES, DUMP-TEXT et CONTEXTES. Les fichiers DUMP sont classés d'un part selon leur encodage original qui sera signalé dans les cases du tableau s'il ne s'agit pas de l'UTF-8 et un dossier comprenant ces meêms fichiers après leur conversion en UTF-8.
On crée aussi la première ligne du tableau avec l'intitulé des commandes.
i=1;
for fic in $(ls $REP)
do
echo "Donner le motif recherché en $(basename $fic)";
read motif;
echo "MOTIF=$motif" > $(basename $fic)-motif.txt;
mkdir ../PAGES-ASPIREES/$(basename $fic);
mkdir ../DUMP-TEXT/$(basename $fic);
mkdir ../DUMP-TEXT/$(basename $fic)/original;
mkdir ../DUMP-TEXT/$(basename $fic)/utf8;
mkdir ../CONTEXTES/$(basename $fic);
echo "<table align=\"center\" border=\"1\"><tr>
<td align=\"center\" width=\"50\" colspan=\"7\" bgcolor=\"blue\">
<font color=\"white\">$(basename $fic)</font></td></tr>" >> $tablo;
echo "<tr><td>n°</td><td>URL</td><td>Page aspiree</td>
<td>Dump initial</td><td>Dump en utf8</td><td>Contextes-txt</td>
<td>Contextes-html</td></tr>" >> $tablo;
Aspiration des pages
j=1;
for nom in $(cat $REP/$fic)
do
curl -o ../PAGES-ASPIREES/$(basename $fic)/$j.html $nom;
encodage=$(file -I ../PAGES-ASPIREES/$(basename $fic)/$j.html |
cut -d= -f2);
# Variable contenant l'encodage de la page aspirée
La deuxième boucle parcourt les liens dans chaque fichier, d'où l'utilité de créer un variable qui va compter les liens. Le programme va ainsi aller de lien en lien afin de traiter chaque url. Pour chaque lien, application de la commande curl et détermination de l'encodage avec la commande file
Dump et Egrep
Si l'encodage est déjà en UTF-8, aspiration de la page avec lynx et recherche du contexte autour du motif (une ligne avant, une ligne après). Création d'un fichier contexte au format txt avec la commande egrep et d'un autre au format .html grâce au mini-grep-multilingue.
if [ "$encodage" == "utf-8" ]
# Si l'encodage initial est en utf-8 tout se déroule normalement
span style="color: rgb(170, 34, 255); font-weight: bold;">then
lynx -dump -nolist -display_charset=$encodage ../PAGES-ASPIREES/
$(basename $fic)/$j.html > ../DUMP-TEXT/$(basename $fic)/utf8/$j.txt;
egrep -i -A1 -B1 "\b$motif\b" ../DUMP-TEXT/$(basename $fic)/
utf8/$j.txt > ../CONTEXTES/$(basename $fic)/$j.txt;
perl mini-grep- multilingue.pl "UTF-8" ../DUMP-TEXT/
$(basename $fic)/utf8/$j.txt $(basename $fic)-motif.txt;
mv resultat-extraction.html ../CONTEXTES/$(basename $fic)/$j.html;
echo "<tr><td>$j</td><td><a href=\"$nom\">lien $j</a></td><td>
<a href =\"../PAGES-ASPIREES/$(basename $fic)/$j.html\">page $j</a>
</td><td><a href =\"../DUMP-TEXT/$(basename $fic)/utf8/$j.txt\">
dump orginal en $encodage</a></td><td><a href =\"../DUMP-TEXT/
$(basename $fic)/utf8/$j.txt\">dump en utf-8</a></td><td>
<a href=\"../CONTEXTES/$(basename $fic)/$j.txt\">contextes-txt</a>
</td><td><a href=\"../CONTEXTES/
$(basename $fic)/$j.html\">contextes-html</a></td></tr>" >> $tablo;
Si l'encodage est différent
d'UTF-8, détection de l'encodage directement
dans le code source de la page html grâce à la commande egrep.
qui va aller chercher cette information dans le charset de la balise meta.
elif [ "$encodage" != "utf-8" ]
# Cas ou file renvoi un charset différent de utf-8
span style="color: rgb(170, 34, 255); font-weight: bold;">then
encodage=$(egrep -m1 -o -i "(((utf)-(8|16|32))|(\bgb)(k||2312|18030)
|(euc)-(kr)|(iso)-8859-(\w)(\w)?|(windows)-(1252|1256)|
((m)(a)(c)(r)(o)(m)(a)(n))|us-ascii)" ../PAGES-ASPIREES/
$(basename $fic)/$j.html | uniq);
Si la commande egrep pour trouver l'encodage ne renvoie rien, l'encodage est cherché à la main.
if [ "$encodage" == "" ]
# Cas ou la commande egrep ne trouve rien
then
echo "Encodage à chercher à la main pour le lien $j en $fic
veuillez entrer l'encodage :";
read encodage;
fi
Iconv
Aspiration de la page non-UTF-8 avec la commande iconv.
lynx -dump -nolist -display_charset=$encodage ../PAGES-ASPIREES/
$(basename $fic)/$j.html > ../DUMP-TEXT/$(basename $fic)/
original/$j.txt;
iconv -f $encodage -t utf-8 ../DUMP-TEXT/$(basename $fic)/
original/$j.txt > ../DUMP-TEXT/$(basename $fic)/utf8/$j.txt;
# Conversion du dump dans le codage d'origine en utf-8 grace
à la commande iconv
À partir du fichier converti en UTF-8, création d'un fichier contexte au format txt avec la commande egrep et d'un autre au format .html grâce au mini-grep-multilingue.
egrep -i -A1 -B1 "\b$motif\b" ../DUMP-TEXT/$(basename $fic)/
utf8/$j.txt > ../CONTEXTES/$(basename $fic)/$j.txt;
perl mini-grep-multilingue.pl "UTF-8" ../DUMP-TEXT/
$(basename $fic)/utf8/$j.txt $(basename $fic)-motif.txt;
mv resultat-extraction.html ../CONTEXTES/$(basename $fic)/$j.html;
echo "<tr><td>$j</td><td><a href=\"$nom\">lien $j</a></td>
<td><a href =\"../PAGES-ASPIREES/$(basename $fic)/$j.html\">
page $j</a></td><td><a href =\"../DUMP-TEXT/$(basename $fic)/
original/$j.txt\">dump original en $encodage</a><td>
<a href =\"../DUMP-TEXT/$(basename $fic)/utf8/$j.txt\">dump en utf-8
</a></td></td><td><a href=\"../CONTEXTES/$(basename $fic)/
$j.txt\">contextes-txt</a></td><td><a href=\"../CONTEXTES/
$(basename $fic)/$j.html\">contextes-html</a></td></tr>" >> $tablo;
Création des fichiers globaux par langues. Fermeture de la deuxiéme boucle.
fi
cat ../DUMP-TEXT/$(basename $fic)/utf8/$j.txt >>
../FICHIERS-GLOBAUX/DUMP/$(basename $fic).txt;
cat ../CONTEXTES/$(basename $fic)/$j.txt >>
../FICHIERS-GLOBAUX/CONTEXTE/$(basename $fic).txt;
let "j+=1";
done
Fermeture de la première boucle, finalisation du tableau. Ajout de la dernière balise de la page html.
echo "</table>" >> $tablo;
echo "<tr><td colspan=\"4\"> </td><td><a href =\"
../FICHIERS-GLOBAUX/DUMP/$(basename $fic).txt\">Fichier dump
global en $(basename $fic)</a></td><td><a href =\"
../FICHIERS-GLOBAUX/CONTEXTE/$(basename $fic).txt\">
Fichier contexte global en $(basename $fic)</a></td></tr>" >> $tablo;
echo "</table>" >> $tablo;
let "i+=1";
echo "<p align=\"center\"><hr color=\"red\" width=\"50%\"/>
</p>" >> $tablo;
done
echo "</body></html>" >> $tablo;
Fin du script.