Le script que nous avons utilisé pour le projet :
#!/bin/bash
# version 13.0p_time
# Script : main.sh
# Date : 20/12/2017
# Description: ce programme télécharge les pages contenues dans un ficher d'URLS, et les traite en isolant les contextes rattachés au syntagme contenu dans parametres.txt
# Lancement : commande bash : bash main_13.0p_time.sh < parametres.txt
# Répertoire : ce script se lance depuis le dossier PROJET
####################################################################
#Concatene: prend un ensemble de fichier et les concatene
function concatene (){
var=$1;
nom=$2;
for fichier in $(find -type f -name "$(echo "$var*")-*.txt");
#la fonction concatene () concaténait aussi les fichiers html !
#on a donc trouvé la combine pour ne prendre que les fichiers textes
do
echo "<file=\"$fichier\">" >> TOUS_LES_$nom-$var.txt;
cat $fichier | sed -r 's/<[^>]*>//g' | tr -d '<' | tr -d '>' >> TOUS_LES_$nom-$var.txt;
echo "</file>">> TOUS_LES_$nom-$var.txt;
done
}
####################################################################
# lecture des paramètres
read rep; read tablo; read motif;
# lancement du chronomètre
START=$(date +%s.%N);
nb_liens=0;
compteurtableau=0;
####################################################################
# Début de l'écriture du fichier html
echo -e "<html>\n<head>\n<meta charset=\"utf-8\">\n<title> Mes liens</title>\n</head>\n<body>\n" > $tablo;
for fic in $(ls $rep)
do
let "compteurtableau = compteurtableau+1";
compteur=0;
echo -e "Le fichier traité en ce moment est : $fic---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n";
#cette boucle écrit chaque ligne d'un tableau html
echo -e "<p align=\"center\"><hr color=\"blue\" width=\"80%\"/> </p>" >> $tablo;
echo -e "<table style =\"width:80%\" align=\"center\" border=\"1\">" >> $tablo;
echo -e "<td colspan=\"11\" align=\"center\"><big><big><b>$fic</b></big></big></td>" >> $tablo;
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>Statut CURL</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>Fréquence motif</b></td></tr>" >> $tablo;
for line in $(cat $rep/$fic)
do
let "compteur=compteur+1";
let "nb_liens=nb_liens+1";
echo -e "\n\n\n------------------\n\n\n"
echo "TELECHARGEMENT de $line vers ./PAGES-ASPIREES/$compteurtableau-$compteur.html";
# RECUPERATION DU HEADER HTTP
status1=$(curl -sI $line | head -n 1);
# RECUPERATION DU CODE RETOUR HTTP ET DE LA PAGE
status2=$(curl -L --silent --output ./PAGES-ASPIREES/"$compteurtableau-$compteur".html --write-out "%{http_code}" $line);
echo "STATUT CURL : $status2";
if [[ $status2 != "200" ]]
then
echo "le code http est mauvais. Code http: $status1"
echo "<tr><td align=\"center\">$compteur</td><td align=\"center\"><a href=\"$line\">lien n°$compteur</a></td><td align=\"center\">$status2</td><td align=\"center\"><small>$status1</small></td><td align=\"center\">-</td><td align=\"center\">-</td><td align=\"center\">-</td><td align=\"center\">-</td><td align=\"center\">-</td><td align=\"center\">-</td><td align=\"center\">-</td></tr>" >> $tablo;
else
echo "DETECTION encodage de $line";
encodage=$(curl -sI $line | egrep -i "charset=" | cut -f2 -d= | tr -d "\n" | tr -d "\r" | tr "[:upper:]" "[:lower:]");
echo "ENCODAGE $line : <$encodage>";
###############
#TRAITEMENT DE L'ENCODAGE
if [[ $encodage != "" ]]
then
VERIFENCODAGEDANSICONV=$(iconv -l | egrep -o "[-A-Z0-9\_\:]+" |egrep -i $encodage);
if [[ $VERIFENCODAGEDANSICONV == "" ]]
then
#------------- On ne fait rien... -------------------------------------------------
echo "<tr><td align=\"center\">$compteur</td><td align=\"center\"><a href=\"$line\">lien n°$compteur</a></td><td align=\"center\">$status2</td><td align=\"center\"><small>$status1</small></td><td align=\"center\"><a href=\"../PAGES-ASPIREES/$compteurtableau-$compteur.html\">PA n° $compteurtableau-$compteur</a></td><td align=\"center\">$encodage via curl inconnu de iconv</td><td align=\"center\">-</td><td align=\"center\">-</td><td align=\"center\">-</td><td align=\"center\">-</td><td align=\"center\">-</td></tr>" >> $tablo;
else
echo "DUMP (via $encodage) de $line via lynx";
lynx -dump -nolist -assume_charset=$encodage -display_charset=$encodage $line > ./DUMP-TEXT/$compteurtableau-$compteur.txt;
iconv -f $encodage -t utf-8 ./DUMP-TEXT/$compteurtableau-$compteur.txt > ./DUMP-TEXT/$compteurtableau-$compteur-utf8.txt;
mv ./DUMP-TEXT/$compteurtableau-$compteur.txt ./DUMP-TEXT/DUMPS-NON-UTF-8/c-$compteurtableau-$compteur.txt;
egrep -i "$motif" ./DUMP-TEXT/$compteurtableau-$compteur-utf8.txt > ./CONTEXTES/$compteurtableau-$compteur.txt;
nbmotif=$(egrep -coi "$motif" ./DUMP-TEXT/$compteurtableau-$compteur-utf8.txt);
perl ./PROGRAMMES/Minigrep/minigrepmultilingue.pl "utf-8" ./DUMP-TEXT/$compteurtableau-$compteur-utf8.txt parametre-motif.txt;
mv resultat-extraction.html ./CONTEXTES/$compteurtableau-$compteur.html;
echo "ECRITURE RESULTAT dans le tableau";
echo "<tr><td align=\"center\">$compteur</td><td align=\"center\"><a href=\"$line\">lien n°$compteur</a></td><td align=\"center\">$status2</td><td align=\"center\"><small>$status1</small></td><td align=\"center\"><a href=\"../PAGES-ASPIREES/$compteurtableau-$compteur.html\">PA n° $compteurtableau-$compteur</a></td><td align=\"center\">$encodage via curl <td align=\"center\"><a href=\"../DUMP-TEXT/DUMPS-NON-UTF-8/c-$compteurtableau-$compteur.txt\">DUMP n° $compteurtableau-$compteur</a></td><td align=\"center\"><a href=\"../DUMP-TEXT/$compteurtableau-$compteur-utf8.txt\">DUMP n° $compteurtableau-$compteur</a></td><td align=\"center\"><a href=\"../CONTEXTES/$compteurtableau-$compteur.txt\">CONTEXTE n° $compteurtableau-$compteur</a></td><td align=\"center\"><a href=\"../CONTEXTES/$compteurtableau-$compteur.html\">CONTEXTE n° $compteurtableau-$compteur</a></td><td align=\"center\">$nbmotif</td></tr>" >> $tablo;
fi
else
isthereacharset=$(egrep -i -o "meta(.*)?charset" ./PAGES-ASPIREES/"$compteurtableau-$compteur".html);
if [[ $isthereacharset != "" ]]
then
encodage=$(egrep -i -o "meta(.*)charset[^=]*?=[^\"]*?\"?[^\"]+?\"" ./PAGES-ASPIREES/$compteurtableau-$compteur.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 $line via lynx";
lynx -dump -nolist -assume_charset=$encodage -display_charset=$encodage $line > ./DUMP-TEXT/$compteurtableau-$compteur.txt;
egrep -i "$motif" ./DUMP-TEXT/$compteurtableau-$compteur.txt > ./CONTEXTES/$compteurtableau-$compteur.txt;
nbmotif=$(egrep -coi "$motif" ./DUMP-TEXT/$compteurtableau-$compteur.txt);
perl ./PROGRAMMES/Minigrep/minigrepmultilingue.pl "utf-8" ./DUMP-TEXT/$compteurtableau-$compteur.txt parametre-motif.txt;
mv resultat-extraction.html ./CONTEXTES/$compteurtableau-$compteur.html;
echo "ECRITURE RESULTAT dans le tableau";
echo "<tr><td align=\"center\">$compteur</td><td align=\"center\"><a href=\"$line\">lien n°$compteur</a></td><td align=\"center\">$status2</td><td align=\"center\"><small>$status1</small></td><td align=\"center\"><a href=\"../PAGES-ASPIREES/$compteurtableau-$compteur.html\">P.A n° $compteurtableau-$compteur</a></td><td align=\"center\">$encodage via charset <td align=\"center\">-</td><td align=\"center\"><a href=\"../DUMP-TEXT/$compteurtableau-$compteur.txt\">DUMP n° $compteurtableau-$compteur</a></td><td align=\"center\"><a href=\"../CONTEXTES/$compteurtableau-$compteur.txt\">CONTEXTE n° $compteurtableau-$compteur</a></td><td align=\"center\"><a href=\"../CONTEXTES/$compteurtableau-$compteur.html\">CONTEXTE n° $compteurtableau-$compteur</a></td><td align=\"center\">$nbmotif</td></tr>" >> $tablo;
else
VERIFENCODAGEDANSICONV=$(iconv -l | egrep -o "[-A-Z0-9\_\:]+" |egrep -i $encodage) ;
if [[ $VERIFENCODAGEDANSICONV == "" ]]
then
echo "<tr><td align=\"center\">$compteur</td><td align=\"center\"><a href=\"$line\">lien n°$compteur</a></td><td align=\"center\">$status2</td><td align=\"center\"><small>$status1</small></td><td align=\"center\"><a href=\"../PAGES-ASPIREES/$compteurtableau-$compteur.html\">PA n° $compteurtableau-$compteur</a></td><td align=\"center\">$encodage via charset inconnu de iconv</td><td align=\"center\"><a href=\"../DUMP-TEXT/$compteurtableau-$compteur.txt\">DUMP n° $compteurtableau-$compteur</a></td><td align=\"center\">-</td><td align=\"center\">-</td><td align=\"center\">-</td><td align=\"center\">-</td></tr>" >> $tablo;
else
lynx -dump -nolist -assume_charset=$encodage -display_charset=$encodage $line > ./DUMP-TEXT/$compteurtableau-$compteur.txt;
iconv -f $encodage -t utf-8 ./DUMP-TEXT/$compteurtableau-$compteur.txt > ./DUMP-TEXT/$compteurtableau-$compteur-utf8.txt;
mv ./DUMP-TEXT/$compteurtableau-$compteur.txt ./DUMP-TEXT/DUMPS-NON-UTF-8/c-$compteurtableau-$compteur.txt;
egrep -i "$motif" ./DUMP-TEXT/$compteurtableau-$compteur-utf8.txt > ./CONTEXTES/$compteurtableau-$compteur.txt;
nbmotif=$(egrep -coi "$motif" ./DUMP-TEXT/$compteurtableau-$compteur-utf8.txt);
perl ./PROGRAMMES/Minigrep/minigrepmultilingue.pl "utf-8" ./DUMP-TEXT/$compteurtableau-$compteur-utf8.txt parametre-motif.txt;
mv resultat-extraction.html ./CONTEXTES/$compteurtableau-$compteur.html ;
echo "ECRITURE RESULTAT dans le tableau";
echo "<tr><td align=\"center\">$compteur</td><td align=\"center\"><a href=\"$line\">lien n°$compteur</a></td><td align=\"center\">$status2</td><td align=\"center\"><small>$status1</small></td><td align=\"center\"><a href=\"../PAGES-ASPIREES/$compteurtableau-$compteur.html\">PA n° $compteurtableau-$compteur</a></td><td align=\"center\">$encodage via charset <td align=\"center\"><a href=\"../DUMP-TEXT/DUMPS-NON-UTF-8/c-$compteurtableau-$compteur.txt\">DUMP n° $compteurtableau-$compteur</a></td><td align=\"center\"><a href=\"../DUMP-TEXT/$compteurtableau-$compteur-utf8.txt\">DUMP n° $compteurtableau-$compteur</a></td><td align=\"center\"><a href=\"../CONTEXTES/$compteurtableau-$compteur.txt\">CONTEXTE n° $compteurtableau-$compteur</a></td><td align=\"center\"><a href=\"../CONTEXTES/$compteurtableau-$compteur.html\">CONTEXTE n° $compteurtableau-$compteur</a></td><td align=\"center\">$nbmotif</td></tr>" >> $tablo;
fi
fi
else
echo "<tr><td align=\"center\">$compteur</td><td align=\"center\"><a href=\"$line\">lien n°$compteur</a></td><td align=\"center\">$status2</td><td align=\"center\"><small>$status1</small></td><td align=\"center\"><a href=\"../PAGES-ASPIREES/$compteurtableau-$compteur.html\">PA n° $compteurtableau-$compteur</a></td><td align=\"center\">Aucun encodage extrait...</td><td align=\"center\">-</td><td align=\"center\">-</td><td align=\"center\">-</td><td align=\"center\">-</td><td align=\"center\">-</td></tr>" >> $tablo;
fi
fi
fi
done
echo -e "</table>" >> $tablo;
echo -e "<hr bgcolor=\"blue\"/>" >>$tablo;
done
####################################################################
# fin de page html finale
echo -e "</table>\n</body>\n</html>" >> $tablo;
####################################################################
# écriture du fichier DUMP concaténé :
# initialisation du fichier DUMP concaténé (on supprime ce qui existait déjà avant grâce à la commande >)
cd ./DUMP-TEXT;
echo "" > TOUS_LES_DUMPS-1.txt;
echo "" > TOUS_LES_DUMPS-2.txt;
echo "" > TOUS_LES_DUMPS-3.txt;
concatene 1 DUMPS;
concatene 2 DUMPS;
concatene 3 DUMPS;
cd ../CONTEXTES;
echo "" > TOUS_LES_CONTEXTES-1.txt;
echo "" > TOUS_LES_CONTEXTES-2.txt;
echo "" > TOUS_LES_CONTEXTES-3.txt;
concatene 1 CONTEXTES;
concatene 2 CONTEXTES;
concatene 3 CONTEXTES;
####################################################################
# fin du chronomètre
END=$(date +%s.%N);
DIFF=$(echo "$END - $START" | bc);
echo -e "\n\n\n\n__________________________\nréalisé en $DIFF secondes";
echo -e "\nnombre de liens : $nb_liens";
En général, le temps d’exécution est de 10 minutes.
Pour plus d'information sur son fonctionnement, consultez notre article de blog.