Les Scripts
Je vous propose tout d'abord de télécharger le
script permettant de créer notre arborescence de travail :
Script
d'arborescence
#!/bin/bash
# avant de lancer ce script on se place dans le dossier consacré au
Projet Encadré
#
par exemple, situons-nous dans le bureau
#
cd /cygdrive/c/Desktop/
#
mkdir ProjetEncadre
#
cd ProjetEncadre
#
On se situe donc dans le dossier ProjetEncadre
#
on crée désormais l'arborescence de travail
mkdir
./CONTEXTES;
mkdir
./DUMP-TEXT;
mkdir
./PAGES-ASPIREES;
mkdir
./PROGRAMMES;
mkdir
./TABLEAUX;
mkdir
./URLS;
#
on crée les sous-dossiers correspondants à chaque sens dans le dossier
URLS
mkdir
./URLS/cheveux;
mkdir
./URLS/couper;
mkdir
./URLS/perspective;
mkdir
./URLS/trophee;
mkdir
./URLS/verre;
#Chaque
sous-dossier sens contiendra les fichiers d'URLS. On aura 3 fichiers
texte du
type allemand.txt, anglais.txt, et francais.txt
Pour pouvoir travailler
avec notre script, vous pouvez télécharger notre dossier URLS contenant
toutes nos URLS.
Dossier
URLS
Et voici notre script dans sa totalité, à placer également dans le dossier PROGRAMMES
Script final
#!/bin/bash
echo
"Donnez
le nom du répertoire contenant les fichiers
des URLs :";
read
url;
echo
"Donnez
le nom du fichier html où stocker les
tableaux des liens : ";
read
tablo;
echo
"Soyez
patients, je m'occupe de tout";
#Tout d'abord on insère le code html pour créer le début du tableau
avec
le code css pour le personnaliser
echo "<html><head><title>tableau
de liens</title><style
type=\"text/css\">table,th,td {border:
1px solid #333333; border-color: black; text-align: center;}
th,td{color:#333333} a {color:#669999}
</style></head><body>" > $tablo;
#La
variable j permettra l'indication du n° de la page
j=1;
nbdump=0;
#Pour
chacun de nos sous-dossiers : trophee, perspective, cheveux,
couper, verre, on fait une boucle
for sens in `ls -r $url`
{
#Ici,
le html crée le titre du tableau et ses colonnes
echo "<table
align=center
cellspacing=\"0\"><CAPTION><i><font
size=14
color=#E8E8E8>$sens</font><i></CAPTION><tr
BGCOLOR=#B5B5B5><th>LANGUE</th><th>LIENS</th><th>PAGES
ASPIREES</th><th>DUMP
initial</th><th>DUMP
utf-8</th><th>CONTEXTES
utf-8</th><th>CONTEXTES
html</th></tr>" >> $tablo;
#Pour
chaque fichier d'un
sous-dossier (francais, anglais, allemand) on refait une boucle
for
languetxt in
`ls
$url/$sens`
{
#Le
compteur l nous indique le nombre de lignes pour
chaque langue, c'est-à-dire le nombre de liens que contienne chaque
fichier
for
ligne in
`cat
$url/$sens/$languetxt`
{
let
"l=l+1";
}
#Et
voici la variable "languetxt" sans
l'extension ".txt", elle sert à récupérer le nom de la langue sans
l'extension
langue=$(basename
$languetxt .txt);
#Nous
modifions ici les instructions pour chaque motif au
moyen d'une boucle par langue
if [[ $langue == "anglais" ]]
then
if [[ $sens == "cheveux" ]]
then
motif="haircut";
fi
if [[ $sens == "trophee" ]]
then
motif="cup";
fi
if [[ $sens == "perspective" ]]
then
motif="section";
fi
if [[ $sens == "verre" ]]
then
motif="goblet";
fi
if [[ $sens == "couper" ]]
then
motif="cut";
fi
fi
if
[[
$langue
==
"allemand"
]]
then
if [[ $sens == "cheveux" ]]
then
motif="Haarschnitt";
fi
if [[ $sens == "trophee" ]]
then
motif="Pokal";
fi
if [[ $sens == "perspective" ]]
then
motif="Schnitt";
fi
if
[[
$sens
==
"verre"
]]
then
motif="Kelch";
fi
if [[ $sens == "couper" ]]
then
motif="Schnitte";
fi
fi
if [[ $langue == "francais" ]]
then
motif="coupe";
fi
echo
$motif;
#La
hauteur (verticale) d'une ligne langue de la colonne
sens dépend du nombre d'occurences pour le sens x dans la langue y
echo "<tr><td width=85px;
rowspan=$l BGCOLOR=#B5B5B5><b>"$langue"<b></td>">> $tablo;
#On
crée le compteur p pour stocker les pages créées.
p=1;
#Pour
chaque lien, on refait une boucle afin de remplir
les colonnes Pages Aspirées, Dump Initial, Dump UTF-8, Contextes UTF-8
et
Contextes HTML
for
ligne in
`cat
$url/$sens/$languetxt`
{
echo
"==========TRAITEMENT
: $sens$langue ";
#-------
on CURL et on determine l'encodage-------------------
curl -o ../PAGES-ASPIREES/$sens$langue$p.html
$ligne;
retourcurl=$?
;
#
Ici on aspire les sites des urls les uns après les
autres et on les enregistre dans le dossier "PAGES-ASPIREES"
echo "RETOUR CURL
: $retourcurl";
if [[ $retourcurl == 0 ]]
then
encodage=$(file
-i ../PAGES-ASPIREES/$sens$langue$p.html | cut
-d= -f2);
echo
"ENCODAGE
initial : $encodage";
#-------
on continue en tenant compte de l'encodage fourni
par la commande curl---------------------
if
[[
$encodage
==
"utf-8"
]]
then
#
Ici on fait un dump du texte (qui permet de récupérer le
texte brut des urls) et on
l'enregistre
dans le dossier "DUMP-TEXT"
lynx -dump
-nolist
-display_charset=$encodage
../PAGES-ASPIREES/$sens$langue$p.html >
../DUMP-TEXT/$sens$langue$p-utf8.txt
;
egrep
-i
"\b$motif\b"
../DUMP-TEXT/$sens$langue$p-utf8.txt
>
../CONTEXTES/$sens$langue$p-utf8.txt
;
perl
../PROGRAMMES/minigrepmultilingue-v2.1/minigrepmultilingue.pl "UTF-8"
../DUMP-TEXT/$sens$langue$p-utf8.txt
../PROGRAMMES/minigrepmultilingue-v2.1/$sens$langue.txt
;
mv
resultat-extraction.html ../CONTEXTES/$sens$langue$p-utf8.html
;
#Avec
le html,on crée les cellules du tableau permettant
de visualiser chaque page créée
echo
"<td
width=\"85\"><a
href=\"$ligne\">lien
$j</a></td><td
width=\"120\"><a
href=\"../PAGES-ASPIREES/$sens$langue$p.html\">page
$j</a></td><td align=\"center\"
width=\"105\"><FONT
COLOR=\"#669999\"> - </FONT></td><td
align=\"center\" width=\"105\"><a
href=\"../DUMP-TEXT/$sens$langue$p-utf8.txt\">dump $j
(utf-8)</a></td><td align=\"center\"
width=\"120\"><a
href=\"../CONTEXTES/$sens$langue$p-utf8.txt\">contexte
$j.txt</a></td><td align=\"center\"
width=\"120\"><a
href=\"../CONTEXTES/$sens$langue$p-utf8.html\">contexte
$j.html</a></td></tr>"
>>
$tablo;
cat
../CONTEXTES/$sens$langue$p-utf8.txt
>>
../CONTEXTES/contextes_$sens$langue.txt
;
cat
../DUMP-TEXT/$sens$langue$p-utf8.txt
>>
../DUMP-TEXT/dump_$sens$langue.txt;
let
"nbdump+=1";
#-----------------------------------------------------
#
la page n'est pas en utf-8, on cherche un charset...
#-----------------------------------------------------
else
echo
"on
cherche un charset dans la page aspiree...";
if
egrep -qi "(charset
?=.*?(\"|\')|encoding ?=.*?(\"|\'))" ../PAGES-ASPIREES/$sens$langue$p.html
;
then
#----------------------------------------------
#
on a peut-etre trouve un charset.....
#----------------------------------------------
echo
"Presence
d'un charset...";
encodage=$(egrep
-m 1 -o
'(((utf|UTF)-(8|16|32))|(gb|GB)(k|K|2312|18030)|(iso|ISO|Iso)-8859-(\w)
(\w)?|(WINDOWS|windows)-1252|(WINDOWS|windows)-1256|((m|M)(a|A)(c|C)(R|r)
(O|o)(M|m)(a|A)(n|N))|
us-ascii |US-ASCII | us-ASCII)' ../PAGES-ASPIREES/$sens$langue$p.html |
sort
-u)
;
echo
"charset
extrait : $encodage ";
#-------------------------------------------------------------------
#
avant de continuer on va vérifier si le charset est
connu de iconv
#-------------------------------------------------------------------
VERIFENCODAGEDANSICONV=$(iconv
-l | egrep -io $encodage | sort -u);
if
[[
$VERIFENCODAGEDANSICONV
==
""
]]
then
#-------------------------------------------
#
le charset n'est pas connu de iconv : on fait rien....
#-------------------------------------------
echo
"VERIF
: <$VERIFENCODAGEDANSICONV> ==>
inconnu par inconv, on ne fait rien"
echo
"<td
align=\"center\"
width=\"85\"><a href=\"$ligne\">lien
$j</a></td><td align=\"center\"
width=\"120\"><a
href=\"../PAGES-ASPIREES/$sens$langue$p.html\">page
$j</a></td><td align=\"center\"
width=\"105\"
bgcolor=\"#669999\"><small>Encodage<br/>non
détecté</small></td><td
align=\"center\" width=\"105\"
bgcolor=\"#669999\"><small>Encodage<br/>non
détecté</small></td><td
align=\"center\" width=\"120\"
bgcolor=\"#669999\"><small>Encodage<br/>non
détecté</small></td><td
align=\"center\" width=\"120\"
bgcolor=\"#669999\"><small>Encodage<br/>non
détecté</small></td></tr>"
>>
$tablo;
else
#-------------------------------------------
#
le charset extrait est connu de iconv : on lynxe et on
dump !!!
#-------------------------------------------
echo
"VERIF
: <$VERIFENCODAGEDANSICONV> ==> connu
par inconv, c'est parti ==> lynx, iconv..."
lynx -dump
-nolist
-display_charset=$encodage
../PAGES-ASPIREES/$sens$langue$p.html >
../DUMP-TEXT/$sens$langue$p.txt
;
echo
"ENCODAGE
final : $encodage (avant conversion vers
utf-8)";
iconv
-f $encodage
-t
utf-8 ../DUMP-TEXT/$sens$langue$p.txt
>
../DUMP-TEXT/$sens$langue$p-utf8.txt
egrep
-i
"\b$motif\b"
../DUMP-TEXT/$sens$langue$p-utf8.txt
>
../CONTEXTES/$sens$langue$p-utf8.txt
;
perl
../PROGRAMMES/minigrepmultilingue-v2.1/minigrepmultilingue.pl "UTF-8"
../DUMP-TEXT/$sens$langue$p-utf8.txt
../PROGRAMMES/minigrepmultilingue-v2.1/$sens$langue.txt
;
mv
resultat-extraction.html ../CONTEXTES/$sens$langue$p-utf8.html
;
echo
"<td
align=\"center\"
width=\"85\"><a href=\"$ligne\">lien
$j</a></td><td align=\"center\"
width=\"120\"><a
href=\"../PAGES-ASPIREES/$sens$langue$p.html\">page
$j</a></td><td align=\"center\"
width=\"105\"><FONT COLOR=\"#669999\"><a
href=\"../DUMP-TEXT/$sens$langue$p.txt\">dump
initial
$j</a><br/><small>($encodage)</small></FONT></td><td
align=\"center\" width=\"105\"><a
href=\"../DUMP-TEXT/$sens$langue$p-utf8.txt\">dump $j
(utf-8)</a></td><td align=\"center\"
width=\"120\"><a
href=\"../CONTEXTES/$sens$langue$p-utf8.txt\">contexte
$j.txt</a></td><td align=\"center\"
width=\"120\"><a
href=\"../CONTEXTES/$sens$langue$p-utf8.html\">contexte
$j.html</a></td></tr>"
>>
$tablo;
cat
../CONTEXTES/$sens$langue$p-utf8.txt
>>
../CONTEXTES/contextes_$sens$langue.txt
;
cat
../DUMP-TEXT/$sens$langue$p-utf8.txt
>>
../DUMP-TEXT/dump_$sens$langue.txt;
let
"nbdump+=1";
fi
else
echo
"Pas
de charset detecte : on ne fait rien pour le
DUMP... ";
echo
"<td
align=\"center\"
width=\"85\"><a href=\"$ligne\">lien
$j</a></td><td align=\"center\"
width=\"120\"><a
href=\"../PAGES-ASPIREES/$sens$langue$p.html\">page
$j</a></td><td
align=\"center\" width=\"105\"
bgcolor=\"#669999\"><small>Encodage<br/>non
détecté</small></td><td
align=\"center\" width=\"105\"
bgcolor=\"#669999\"><small>Encodage<br/>non
détecté</small></td><td
align=\"center\" width=\"120\"
bgcolor=\"#669999\"><small>Encodage<br/>non
détecté</small></td><td
align=\"center\"
width=\"120\"
bgcolor=\"#669999\"><small>Encodage<br/>non
détecté</small></td></tr>"
>>
$tablo;
fi
fi
#
fin du curl OK
else
echo
"<td
align=\"center\"
width=\"85\"><a href=\"$ligne\">lien
n°j</a></td><td align=\"center\"
width=\"120\" bgcolor=\"red\">Page non
aspiree...</td><td align=\"center\" width=\"105\"
bgcolor=\"#669999\"><small>Encodage<br/>non
détecté</small></td><td
align=\"center\" width=\"105\"
bgcolor=\"#669999\"><small>Encodage<br/>non
détecté</small></td><td
align=\"center\" width=\"120\"
bgcolor=\"#669999\"><small>Encodage<br/>non
détecté</small></td><td
align=\"center\"
width=\"120\"
bgcolor=\"#669999\"><small>Encodage<br/>non
détecté</small></td></tr>"
>>
$tablo;
fi
#
Le p est incrémenté de 1 et p revient à 1 quand la
variable "languetxt" change de valeur
let
"p=p+1";
#Le
j est incrémenté de 1 également
let
"j=j+1";
}
}
echo
"</table>"
>>
$tablo;
#Ces
deux sauts de ligne permettent de rendre plus visible la séparation
entre les tableaux
echo
"<br><br>">>$tablo;
}
#On
referme notre tableau et le script est fin prêt
echo
"</body></html>"
>>
$tablo;