#!/bin/bash
#fonctions
#paramètres : Numéro, lien, code_curl, header, encodage initial, Fq motif, cpt tableau, fic_tab, convertible?
#Définition des colonnes du tableau html: Numéro,lien,code curl,header curl,page,encodage initial, dump initial,dump utf-8,contexte utf-8,contexte html utf-8, Fq motif
function ecrit_ligne(){
if [ "$encodage" != "utf-8" ] ; then
str="<a href=\"../DUMP-TEXT/$cpttablo-$numlignes-utf8.txt\">DUMP n° $cpttablo-$numlignes</a>"
if [[ "$1" == "OK" ]]
then
str2="<a href=\"../DUMP-TEXT/$cpttablo-$numlignes.txt\">DUMP n° $cpttablo-$numlignes</a>"
else
str2="-"
fi
else
str="-"
str2="<a href=\"../DUMP-TEXT/$cpttablo-$numlignes.txt\">DUMP n° $cpttablo-$numlignes</a>"
fi
echo "<tr><td align=\"center\">$numlignes</td><td align=\"center\"><a href=\"$ligne\">lien n°$numlignes</a></td><td align=\"center\">$coderetour</td><td align=\"center\"><small>$header</small></td><td align=\"center\"><a href=\"../PAGES-ASPIREES/$cpttablo-$numlignes.html\">P.A n° $cpttablo-$numlignes</a></td><td align=\"center\">$encodage</td><td align=\"center\">$str2</td><td align=\"center\">$str</td><td align=\"center\"><a href=\"../CONTEXTES/$cpttablo-$numlignes.txt\">CONTEXTE n° $cpttablo-$numlignes</a></td><td align=\"center\"><a href=\"../CONTEXTES/$cpttablo-$numlignes.html\">CONTEXTE n° $cpttablo-$numlignes</a></td><td>$nbmotif</td></tr>" >> $tablo ;#on peut utiliser des variables globales comme tablo
}
# 1. Lecture des paramètres dans le fichier PARAMETRES
#On instancie les variables rep et tablo avec commande read
#Ces variables vont prendre comme valeur une ligne du fichier parametres.txt qu'on fournit au prog bash
read rep;#répertoire contenant les fichiers d'url
read tablo;#Le nom du fichier html en sortie
read motif;#Le motif analysé
echo "INPUT : $rep";
echo "OUTPUT : $tablo";
echo "PATTERN : $motif";
# 2. Affichage des tableaux
let "cpttablo=1"; #numlignes tableau html?
#Construction de l'entête de la page html
echo -e "<html>\n<head>\n<meta charset=\"utf8\">\n<title>Tableau de liens</title>\n</head>\n<body>\n" > $tablo;
#====== pour chacun des fichiers d'URL ========
#On veut accéder à chacun des fichiers d'urls du rep
#La première boucle a pour tâche de lister des fichiers du répertoire
for file in $(ls $rep) #ls sert à lister le contenu du rep (les fichiers d'urls)
#-------------------------------------------------
{
# traitement d'un fichier d'URL
let "numlignes=1"; #On intialise à 1 un premier numlignes qui va nous servir à parcourir le rep en input pour compter les urls (les lignes)
echo "<p align=\"center\"><hr color=\"blue\" width=\"80%\"> </p>" >> $tablo;#Nouvelle section (nv thématique)
echo "<table align=\"center\" border=\"1\">" >> $tablo;#Nouveau tableau
echo "<tr><td colspan=\"11\" align=\"center\">Tableau n° $cpttablo</td></tr>" >> $tablo;#titre du tableau html
echo "<tr><td align=\"center\"><b>N°</b></td><td align=\"center\"><b>Lien</b></td><td align=\"center\"><b>CODE CURL</b><td align=\"center\"><b>En-tête</b></td><td align=\"center\"><b>Page Aspirée</b></td><td align=\"center\"><b>Encodage Initial</b></td><td align=\"center\"><b>DUMP initial</b></td><td align=\"center\"><b>DUMP UTF-8</b></td><td align=\"center\"><b>CONTEXTE UTF-8</b></td><td align=\"center\"><b>CONTEXTE HTML UTF-8</b></td><td align=\"center\"><b>Fq MOTIF</b></td></tr>" >> $tablo ;#Définition des colonnes du tableau html: Numéro,lien,code curl,status curl,page,encodage initial, dump initial,dump utf-8,contexte utf-8,contexte html utf-8, Fq motif
#-------------------------------------------------
# traitement de chacun des URLs
for ligne in $(cat $rep/$file); # ici on liste les lignes contenues dans le fichier file grâce à la commande cat
#-------------------------------------------------
#echo "<table width=\"50%\"align=\"center\"cellspacing=\"4\"border=\"1\">" >> $tablo; #On crée un tableau par fichiers (avec alignement, cellules espacées et bordure)
#echo "<tr><td>N°</td><td>Encodage</td><td>http_code</td><td>URL</td><td>PAGES-ASPIREES</td><td>DUMP-TEXT</td></tr>" >> $tablo;
# 1. RECUPERATION DU HEADER HTTP
{
header=$(curl -sI $ligne | head -n 1);
echo "header curl: $header";
# ==> ASPIRATION DE LA PAGE
echo "TELECHARGEMENT de $ligne vers ./PAGES-ASPIREES/$cpttablo-$numlignes.html";
# 2. RECUPERATION DU CODE RETOUR HTTP ET DE LA PAGE
coderetour=$(curl --silent --output ./PAGES-ASPIREES/"$cpttablo"-"$numlignes".html --write-out "%{http_code}" $ligne);#on prend le code de retour de curl et on le met à la fin
echo "CODE RETOUR CURL : $coderetour" ;
#-----------------------------------------------------------------------
# test de la bonne reussite du telechargement
if [[ "$coderetour" == 2?? ]]
then
#il y a correspondance donc réussite du téléchargement
echo "téléchargement réussi"
else
#le télécharement a échoué
echo "échec du téléchargement "
continue
fi
#-----------------------------------------------------------------------
# ==> DETECTION DE L'ENCODAGE DE LA PAGE en ligne
encodage=$(curl -sI $ligne | egrep -i "charset=" | cut -f2 -d= | tr -d "\n" | tr -d "\r" | tr "[:upper:]" "[:lower:]");
echo "ENCODAGE : <$encodage>" ;
if [[ $encodage == "utf-8" ]]
then
echo "DUMP via lynx" ;
lynx -dump -nolist -assume_charset=$encodage -display_charset=$encodage $ligne > ./DUMP-TEXT/$cpttablo-$numlignes.txt ;
# ajouter ici l'extraction de contexte autour des mots choisis
egrep -i $motif ./DUMP-TEXT/$cpttablo-$numlignes.txt > ./CONTEXTES/$cpttablo-$numlignes.txt ;
nbmotif=$(egrep -coi $motif ./DUMP-TEXT/$cpttablo-$numlignes.txt);
./PROGRAMMES/minigrepmultilingue.exe "utf-8" ./DUMP-TEXT/$cpttablo-$numlignes.txt ./PROGRAMMES/motif.txt;
mv resultat-extraction.html ./CONTEXTES/$cpttablo-$numlignes.html ;
echo "ECRITURE RESULTAT dans le tableau" ;
ecrit_ligne "OK";
else
#------------------------------------------
# ATTENTION : avant de faire ce qui suit :
# il faudrait s'assurer que l'encodage recupere est bien un "BON" encodage !!!!
# dans un premier temps on s'assure SEULEMENT que cette variable n'est pas vide
# et ça ne suffit pas, il faudra en faire plus
#------------------------------------------
if [[ $encodage != "" ]]
then
VERIFENCODAGEDANSICONV=$(iconv -l | egrep -o "[-A-Z0-9\_\:]+" |egrep -i $encodage) ;
#------------------------------------------
# ici il faut s'assurer que l'encodage est bien connu de iconv !!!!
#------------------------------------------
if [[ $VERIFENCODAGEDANSICONV == "" ]]
then
#------------- On ne fait rien... -------------------------------------------------
ecrit_ligne "KO";
else
echo "DUMP (via $encodage) de $ligne via lynx" ;
lynx -dump -nolist -assume_charset=$encodage -display_charset=$encodage $ligne > ./DUMP-TEXT/$cpttablo-$numlignes.txt ;
iconv -f $encodage -t utf-8 ./DUMP-TEXT/$cpttablo-$numlignes.txt > ./DUMP-TEXT/$cpttablo-$numlignes-utf8.txt ;
egrep -i $motif ./DUMP-TEXT/$cpttablo-$numlignes-utf8.txt > ./CONTEXTES/$cpttablo-$numlignes.txt ;
nbmotif=$(egrep -coi $motif ./DUMP-TEXT/$cpttablo-$numlignes-utf8.txt);
#perl ./PROGRAMMES/minigrepmultilingue.pl "utf-8" ./DUMP-TEXT/$cpttablo-$numlignes-utf8.txt $motif;
#mv resultat-extraction.html ./CONTEXTES/$cpttablo-$numlignes.html ;
echo "ECRITURE RESULTAT dans le tableau" ;
ecrit_ligne "OK"
fi
else
isthereacharset=$(egrep -i -o "meta(.*)?charset" ./PAGES-ASPIREES/"$cpttablo-$numlignes".html);
if [[ $isthereacharset != "" ]]
then
encodage=$(egrep -i -o "meta(.*)charset[^=]*?=[^\"]*?\"?[^\"]+?\"" ./PAGES-ASPIREES/$cpttablo-$numlignes.html | egrep -i -o "charset[^=]*?= *?\"?[^\"]+?\"" | cut -f2 -d= | sed "s/\"//g" | sed "s/>//g" | sed "s/ //g" | sed "s/\///g" | sort -u | tr [A-Z] [a-z] );
echo "ENCODAGE EXTRAIT DE LA PAGE ASPIREE : $encodage" ;
if [[ $encodage == "utf-8" ]]
then
echo "DUMP de $ligne via lynx" ;
lynx -dump -nolist -assume_charset=$encodage -display_charset=$encodage $ligne > ./DUMP-TEXT/$cpttablo-$numlignes.txt ;
egrep -i $motif ./DUMP-TEXT/$cpttablo-$numlignes.txt > ./CONTEXTES/$cpttablo-$numlignes.txt ;
nbmotif=$(egrep -coi $motif ./DUMP-TEXT/$cpttablo-$numlignes.txt);
#perl ./PROGRAMMES/minigrepmultilingue.pl "utf-8" ./DUMP-TEXT/$cpttablo-$numlignes.txt $motif ;
#mv resultat-extraction.html ./CONTEXTES/$cpttablo-$numlignes.html ;
echo "ECRITURE RESULTAT dans le tableau" ;
ecrit_ligne "KO"
else
#on a retrouvé l'encodage, différent de utf-8
VERIFENCODAGEDANSICONV=$(iconv -l | egrep -o "[-A-Z0-9\_\:]+" |egrep -i $encodage) ;
if [[ $VERIFENCODAGEDANSICONV == "" ]]
#non convertible
then
#------------- On ne fait rien... -------------------------------------------------
ecrit_ligne "KO";
else
lynx -dump -nolist -assume_charset=$encodage -display_charset=$encodage $ligne > ./DUMP-TEXT/$cpttablo-$numlignes.txt ;
iconv -f $encodage -t utf-8 ./DUMP-TEXT/$cpttablo-$numlignes.txt > ./DUMP-TEXT/$cpttablo-$numlignes-utf8.txt
egrep -i $motif ./DUMP-TEXT/$cpttablo-$numlignes-utf8.txt > ./CONTEXTES/$cpttablo-$numlignes.txt ;
nbmotif=$(egrep -coi $motif ./DUMP-TEXT/$cpttablo-$numlignes-utf8.txt);
#perl ./PROGRAMMES/minigrepmultilingue.pl "utf-8" ./DUMP-TEXT/$cpttablo-$numlignes-utf8.txt $motif ;
#mv resultat-extraction.html ./CONTEXTES/$cpttablo-$numlignes.html ;
#------------------------------------------------------------------------------------------------------
echo "ECRITURE RESULTAT dans le tableau" ;
ecrit_ligne "OK"
fi
fi
else
#on n'a pas pu retrouver l'encodage
ecrit_ligne "KO"
fi
fi
fi
# il faut ajouter 1 au numlignes de lignes
let "numlignes=numlignes+1"; # let "numlignes+=1";
}
#----------------------------------------------------
echo "</table>" >> $tablo ;
let "cpttablo=cpttablo+1";
}
echo "</body></html>" >> $tablo ;