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;
 
 
 