Le script

Le script

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.