Le script
Le descriptif de la commande peut être obtenu en cliquant dessus.
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;
Lecture des chemins d'accès, création de l'en-tête du fichier html
Si l'on se place dans le répertoire PROGRAMMES et que les fichiers d'urls sont situés dans le répertoire URLS, le chemin à fournir pour la variable REP sera
du type ../URLS. Le chemin sera ../TABLEAUX pour la variable tablo.
echo "Donner le nom du répertoire contenant les fichiers des urls";
read REP;
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;
Première boucle qui parcourt les fichiers contenus dans le répertoire URLS, création des sous répertoires selon la langue dans les répertoire PAGES-ASPIREES,
DUMP-TEXT et CONTEXTES. Pour chaque sous répertoire de DUMP-TEXT, partition selon l'encodage : encodage original et UTF-8.
Création de la première ligne du tableau avec les intitulés des colonnes.
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;
Deuxième boucle qui parcourt les liens dans chaque fichier. Pour chaque lien, application de la commande curl et détermination de l'encodage avec la commande file.
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
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
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.
elif [ "$encodage" != "utf-8" ]
# Cas ou file renvoi un charset différent de utf-8
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
Aspiration de la page non-UTF-8 avec la commande lynx. Conversion du fichier .txt obtenu 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.