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.