Télécharger le script
Ce script a été relancé de nombreuses fois, au fur et à mesure de son évolution.
Compte tenu que nous devions également l’exécuter sur différents ordinateurs, avec différents environnements, nous nous sommes vite aperçues, que la commande sh n’était pas opérante sur tous les systèmes et que pour s’assurer que chacune d’entre nous puisse faire fonctionner le script sous bash, il fallait donc utiliser la commande bash pour exécuter notre script.
De plus, nos url ont évolué dans le temps. Certaines ont disparu (pas trop, il faut le dire, nous avons été assez chanceuses…), d’où la nécessité de nous assurer d’avoir des dossiers propres et donc de vider les dossiers de fichiers dumps et html, à chaque réexécution du script.
Nous avons appris à utiliser des indices, en effet, 4 variables de comptage nous ont été nécessaires (i pour compter les tableaux, j pour compter les liens, k pour compter les dump-utf8 et l pour compter les contextes …).
Nous savions, dès l’origine de notre projet, que le birman n’allait pas être « chose simple », mais nous tenions à traiter toutes les langues ensemble dans le même script. Grâce au birman (qui nécessite des recherches en Unicode), nous avons découvert la commande pcregrep (Perl Compatible Regular Expressions grep) qui nous a permis de traiter notre fichier motifsall.txt, contenant les motifs à rechercher en contexte :
inver|invest|\xe1\x80\x85\xe1\x80\xae\xe1\x80\xb8\xe1\x80\x95\xe1\x80\xbc\xe1\x80
inver (base pour l’espagnol / invertir, inversion, inversor)
invest (base pour l’anglais, l’allemand, le français, le norvégien et le tchèque)
\xe1\x80\xae\xe1\x80\xb8\xe1\x80\x95\xe1\x80\xbc\xe1\x80 encodage en Zawgyi du mot birman စီးပြားေရး (économie).
Ces motifs se trouvent dans un fichier à part, motifsall.txt, ce qui permet d’utiliser le script pour traiter d’autre motifs à l’avenir.
En ce qui concerne la détection d'encodage des pages html, nous avons constaté que les déclarations d’encodage ne sont pas toujours fiables, surtout nous avons souvent remarqué des déclarations UTF-8 pour des pages qui ne l’étaient pas. Comme nous avons évoqué ailleurs, la détection de l'UTF-8 pour le birman n'est pas suffisante pour établir le système d'encodage utilisé. La conversion entre les différents systèmes birmans n'étant pas possible automatiquement, nous avons laisse la mention UTF-8 pour ces pages. La commande iconv n’a pas non plus été fiable à 100%. Certains encodages n’ont pas été correctement reconnus et de ce fait mal convertis.
De plus amples commentaires se trouvent à l'intérieur du script :
-
#!/bin/bash
-
# Variables d'environnement
-
Contextes=../CONTEXTES;
-
DumpInitial=../DUMPINITIAL;
-
FichiersGlobaux=../FICHIERSGLOBAUX;
-
PagesAspirees=../PAGES-ASPIREES;
-
DumpUTF8=../DUMP-UTF8;
-
DossierTableau=../TABLEAUX;
-
URLS=../URLS;
-
# NOM de la variable html où seront stockées les liens
-
Tableau1=$DossierTableau/Tabcurl.html;
-
# Fichiers globaux
-
DumpsGlobaux=$FichiersGlobaux/DUMPS-GLOBAUX.txt
-
ContextesGlobaux=$FichiersGlobaux/CONTEXTES-GLOBAUX.txt
-
# Vider les dossiers dans lesquels nous mettons les fichiers dump et
les fichiers html récupérés par curl
-
# afin de s'assurer d'avoir des dossiers propres (compte tenu du nombre
de fois que nous allons relancer le script)
-
if [[ -d $Contextes ]]
-
then
-
rm -f $Contextes/*;
-
else
-
mkdir $Contextes;
-
fi
-
if [[ -d $DumpInitial ]]
-
then
-
rm -f $DumpInitial/*;
-
else
-
mkdir $DumpInitial;
-
fi
-
if [[ -d $FichiersGlobaux ]]
-
then
-
rm -f $FichiersGlobaux/*;
-
else
-
mkdir $FichiersGlobaux;
-
fi
-
if [[ -d $PagesAspirees ]]
-
then
-
rm -f $PagesAspirees/*;
-
else
-
mkdir $PagesAspirees;
-
fi
-
if [[ -d $DumpUTF8 ]]
-
then
-
rm -f $DumpUTF8/*;
-
else
-
mkdir $DumpUTF8;
-
fi
-
if [[ ! -d $DossierTableau ]]
-
then
-
mkdir $DossierTableau;
-
fi
-
# CREATION DU TABLEAU HTML
-
echo "<html>" > $Tableau1;
-
echo "<head>" >> $Tableau1;
-
echo "<title>tableau de liens</title>"
>> $Tableau1;
-
echo "<meta http-equiv=\"Content-Type\" content=\"text/html;
charset=utf-8\" />" >> $Tableau1;
-
echo "</head>" >> $Tableau1;
-
echo "<body>" >> $Tableau1;
-
# Liens vers les fichiers globaux
-
echo "<p><a href=\"$DumpsGlobaux\"
target="_blank">Dump global</a></p>"
>> $Tableau1;
-
echo "<p><a href=\"$ContextesGlobaux\"
target="_blank">Contextes
globaux</a></p>" >> $Tableau1;
-
echo "<p align=\"center\"><hr color=\"blue\"
width=\"50%\"/></p>" >> $Tableau1;
-
# Variable i pour compter les tableaux
-
i=1
-
# Variable j pour compter les liens
-
j=1;
-
# Variable k pour compter les dump-utf8
-
k=0;
-
# Variable l pour compter les contextes
-
l=0;
-
# 1ère boucle - lit les fichiers du dossier URLS
-
for fichierURL in `ls $URLS`
-
do
-
# CREATION DES TABLEAUX et de leur
en-tête en caractères gras
-
echo "
<table align=\"center\" border=\"1\">" >>
$Tableau1;
-
echo
" <tr>"
>> $Tableau1;
-
# Modification de l'instruction colspan
= 9 au lieu de 6 précédemment
-
# (3 nouvelles colonnes = CONTEXTES,
CONTEXTES HTML et Nb occurrences°
-
echo
"
<td colspan=\"9\" align=\"center\"
bgcolor=\"black\"><font
color=\"white\"><b>L'ATTRACTIVITE \
-
ECONOMIQUE DE LA BIRMANIE - $i -
$fichierURL</b></font></td>"
>> $Tableau1;
-
echo
"
</tr>" >> $Tableau1;
-
echo
" <tr>"
>> $Tableau1;
-
echo
"
<td align=\"center\"
width=\"50\">N°URL</td>" >>
$Tableau1;
-
echo
"
<td align=\"center\">URL</td>"
>> $Tableau1;
-
echo
"
<td>PAGE ASPIREE</td>" >>
$Tableau1;
-
echo
"
<td>CODE<br /> RETOUR</td>"
>> $Tableau1;
-
echo
"
<td>DUMP INITIAL</td>" >>
$Tableau1;
-
echo
"
<td>DUMP UTF-8</td>" >>
$Tableau1;
-
# création de la colonne CONTEXTES
-
echo
"
<td>CONTEXTES</td>" >>
$Tableau1;
-
# création de la colonne CONTEXTES HTML
-
echo
"
<td>CONTEXTES HTML</td>" >>
$Tableau1;
-
# création de la colonne Nb OCCURRENCES
-
echo
"
<td>NB OCCUR</td>" >>
$Tableau1;
-
echo
"
</tr>" >> $Tableau1;
-
-
# Récupération des motifs, codés en dur, pris du fichier "motifsall.txt"
-
# motifsall.txt =
inver|invest|\xe1\x80\x85\xe1\x80\xae\xe1\x80\xb8\xe1\x80\x95\xe1\x80\xbc\xe1\x80
-
motiffile=./motifsall.txt;
-
motif=`cat motifsall.txt`;
-
echo $motif | sed 's/\\/\\\\/g' | sed 's/|/\\|/g' >
motifsallsed.txt;
-
motifsed=`cat motifsallsed.txt`;
-
-
for nom in `cat $URLS/$fichierURL`
-
do
-
echo $j;
-
#
RECUPERATION DU CODE RETOUR HTTP par CuRL et
-
#
CREATION des PAGES ASPIREES comptées avec la variable j
-
coderetour=$(curl -L -m 100 -w %{http_code} -o $PagesAspirees/$j.html
$nom);
-
# TEST si
coderetour = 200
-
if [[
"$coderetour" -eq "200" ]]
-
then
-
-
# LYNX création du DUMP initial ET
affichage de l'encodage de la page
-
# récupération dans la variable codage
de l'encodage des PAGES ASPIREES
-
codage=$(file -i $PagesAspirees/$j.html
| cut -f 2 -d=)
-
# Test de reconnaissance par iconv du
codage récupéré
-
if [[ -z `iconv -l | grep -i $codage` ]]
-
# sinon
nouvelle recherche du codage avec egrep
-
then
-
codage=""
-
codage=`head -n 109 $PagesAspirees/$j.html | \
-
egrep -io
"http-equiv.[^<]*+charset[ ]?=
*?[^>]['\"]?[_a-zA-Z0-9\-]*" | \
-
sort -u
|cut -d \" -f 4 | cut -d=
-f 2`
-
fi
-
-
# Exécution de LYNX suite au 1er TEST
-
if [[ -z `iconv -l | grep -i $codage` ]]
-
then
-
lynx -dump $PagesAspirees/$j.html
>
$DumpInitial/$j.txt;
-
# Exécution de LYNX suite au 2ème TEST
-
else
-
lynx -display_charset=$codage -dump
$PagesAspirees/$j.html > $DumpInitial/$j.txt;
-
fi
-
-
# REMPLISSAGE DU TABLEAU avec les
données récupérées
-
# Première colonne
-
echo
" <tr>"
>> $Tableau1;
-
echo
"
<td align=\"center\"
width=\"50\">$j</td>" >> $Tableau1;
-
# Deuxième colonne
-
echo
"
<td
align=\"center\"><a href=\"$nom\"
target="_blank">Lien
$j</a></td>" >> $Tableau1;
-
# Troisième colonne
-
echo
"
<td><a
href=\"$PagesAspirees/$j.html\" target="_blank">PAGE ASPIREE n°
$j</a></td>" >> $Tableau1;
-
# Quatrième colonne (CODE RETOUR)
-
echo
"
<td
align=\"center\">$coderetour</td>"
>> $Tableau1;
-
# Cinquième colonne (DUMP INITIAL)
-
echo
"
<td><a
href=\"$DumpInitial/$j.txt\" target="_blank">DUMP
INITIAL<br
/>$codage</a></td>" >>
$Tableau1;
-
# Sixième colonne (DUMP UTF-8)
-
if [[ $codage == "utf-8" ]];
-
then
-
cp
$DumpInitial/$j.txt $DumpUTF8/$j.txt
-
let
"k+=1";
-
echo
"
<td><a href=\"$DumpUTF8/$j.txt\"
target="_blank">DUMP
UTF-8</a></td>" >> $Tableau1;
-
codage=""
-
elif [[ -z `iconv -l | grep -i $codage`
]]
-
then
-
cp
$DumpInitial/$j.txt $DumpUTF8/$j.txt
-
let
"k+=1";
-
echo
"
<td>codage non reconnu<br><a
href=\"$DumpUTF8/$j.txt\"
target="_blank">copié quand
même...</a></td>" \
-
>> $Tableau1;
-
else
-
iconv --from-code $codage --to-code
utf-8 --output
$DumpUTF8/$j.txt $DumpInitial/$j.txt
-
let
"k+=1";
-
echo
"
<td><a href=\"$DumpUTF8/$j.txt\"
target="_blank">DUMP
UTF-8</a></td>" >> $Tableau1;
-
fi
-
if [[ -f $DumpUTF8/$j.txt ]]
-
then
-
cat
$DumpUTF8/$j.txt >> $DumpsGlobaux;
-
cat $DumpUTF8/$j.txt >>
$FichiersGlobaux/dump-$i.txt
-
fi
-
# Septième colonne (CONTEXTES)
-
sed -e
'/\(https:\/\/\)/d' -e '/\(http:\/\/\)/d' -e '/\(file:\/\/\)/d' \
-
-e '/mailto:/d' -e 's/^[ \t]*//;s/[
\t]*$//'
$DumpUTF8/$j.txt > $Contextes/resultat.txt
-
-
pcregrep -C 1
-i --colour "$motif" $Contextes/resultat.txt > $Contextes/$j.txt
-
if [[ -s $Contextes/$j.txt ]]
-
then
-
containsText=1;
-
else
-
rm -f
$Contextes/$j.txt;
-
containsText=0;
-
fi
-
rm -f $Contextes/resultat.txt
-
if [[ containsText -eq 1 ]]
-
then
-
echo
"
<td><a href=\"$Contextes/$j.txt\"
target="_blank">CONTEXTES</a></td>"
>> $Tableau1;
-
cat
$Contextes/$j.txt >> $ContextesGlobaux
-
cat $Contextes/$j.txt >>
$FichiersGlobaux/contextes-$i.txt
-
else
-
echo
"
<td bgcolor=\"yellow\"> </td>"
>> $Tableau1;
-
fi
-
# Huitième colonne (CONTEXTES HTML)
-
# On commence
le traitement avec minigrep que si l'on a trouve qqch avec le grep
-
# Afin de
pouvoir traiter quelques URL en Birman, il nous a fallu utiliser une
autre commande
-
# pcregrep -
commande à l'origine de Perl, utilisable en Bash pour un "grep" d'E.R.
-
# le motif en Birman étant une chaine de
caractères en UTF-8
-
if [[ containsText -eq 1 ]]
-
then
-
CONTEXTTEXT="";
-
# Utilisation de la commande sed pour
éviter les
liens http, https, file et mailto présents sur nos pages
-
pcregrep -ni "$motif" $DumpUTF8/$j.txt |
sed
"s/\($motifsed\)/<font
color=\"red\">&<\/font>/Ig" |
sed 's/$/<br>/g' | \
-
sed -e
'/\(https:\/\/\)/d' -e
'/\(http:\/\/\)/d' -e '/\(file:\/\/\)/d' \
-
-e
'/mailto:/d' -e 's/^[ \t]*//;s/[ \t]*$//' >
resultat-extraction.txt
-
if [[ -s
resultat-extraction.txt ]];
-
then
-
let "l+=1"
-
echo
"
<td>`cat
resultat-extraction.txt`</td>" >> $Tableau1;
-
else
-
echo
"
<td
bgcolor=\"yellow\"> </td>"
>> $Tableau1;
-
fi
-
-
#
neufième colonne (NB OCCUR)
-
countMotif=`pcregrep -io $motif
resultat-extraction.txt | wc -w`
-
if [[
$countMotif -eq 0 ]]
-
then
-
echo
"
<td
bgcolor=\"yellow\"> </td>"
>> $Tableau1;
-
else
-
echo
"
<td
align=\"center\">$countMotif</td>"
>> $Tableau1;
-
fi
-
-
# on peut supprimer le fichier
resultat-extraction.txt
-
if [[ -f
resultat-extraction.txt ]]
-
then
-
rm -f resultat-extraction.txt;
-
fi
-
else
-
echo
"
<td bgcolor=\"yellow\"> </td>"
>> $Tableau1;
-
echo
"
<td bgcolor=\"yellow\"> </td>"
>> $Tableau1;
-
fi
-
echo
"
</tr>" >> $Tableau1;
-
let "j+=1";
-
fi
-
done
-
echo
" <tr>"
>> $Tableau1;
-
echo
"
<td colspan=5> </td>"
>> $Tableau1;
-
echo
"
<td><a href=\"$FichiersGlobaux/dump-$i.txt\"
target="_blank">Fichiers
DUMP</a> :<br>$k</td>"
>> $Tableau1;
-
echo
"
<td><a href=\"$FichiersGlobaux/contextes-$i.txt\"
target="_blank">Fichiers
Contextes</a> :<br>$l</td>"
>>
$Tableau1;
-
echo
"
</tr>" >> $Tableau1;
-
echo "
</table>" >>$Tableau1;
-
let "i+=1";
-
# Remettre les variables k et l à zero
-
k=0;
-
l=0;
-
echo "
<p
align=\"center\"><hr color=\"blue\"
width=\"50%\"></p>"
>> $Tableau1;
-
done
-
echo " </body>" >>$Tableau1;
-
echo "</html>" >>$Tableau1;
|
|