#!/bin/bash

# Créer un tableau de liens pour considérer la liste d'url en .txt comme un tableau html avec 1 url/ligne numérotée :
#____________________________________________________________________________
# on entre la commande : sh ./PROGRAMMES/script_*.sh < ./PROGRAMMES/input.txt 
# les noms des fichiers à entrer en variable sont stockés ds ce fichier texte

mkdir ./CONTEXTES ; 
mkdir ./DUMP-TEXT ;
mkdir ./PAGES-ASPIREES ;
read rep ; # lit le rep en lui assignant le nom de variable "rep"
read tablo ; # on attribue à la variable tablo le nom du fichier dans lequel on veut ecrire
echo "<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta><title>Tableau de liens</title></head><body>" > $tablo ; # on ouvre et écrit dans le fichier contenu dans la variable $tablo le code html

j=1; # on attribue une valeur initiale à j

for fic in `ls $rep` # pour chacun des fichiers lus/contenus dans le répertoire $rep

	do # on ouvre la première GRANDE boucle

	echo "!---------------------------------------------------------------------!" ;
	echo "traitement du fichier : $rep/$fic"; # petit rappel dans le terminal pour vérifier le fichier sur laquel on travaille
	echo "!---------------------------------------------------------------------!" ;
	
	nbdump=0 ;
	echo "FIC : $fic" ;
	tmp=${fic%.*} ;
        echo "FIC : $tmp" ;
	mkdir ./PAGES-ASPIREES/$tmp ; # création des dossiers destinés à recevoir les pages aspirées ($j créé un dossier par fichier d'url cad par langue)
	mkdir ./DUMP-TEXT/$tmp ;
	mkdir ./CONTEXTES/$tmp ;
	echo "<table align=\"center\" border=\"1\" width="860"><tr><td colspan=\"9\" align=\"center\"><b>Sens ${fic%.*}</b></td></tr>" >> $tablo ; # prépare un tableau pour chaque fichier lu dans le repertoire
	echo "<tr><td align="center" width="50">N° URL</td><td align="center" width="100">URL</td><td align="center" width="100">Page Aspirée</td><td align="center" width="100">Curl<td align="center" width="110">Encodage Initial</td><td align="center" width="100">Dump Text<br>Encodage</td><td align="center" width="100">Nombre d'occurences</td><td align="center" width="100">Contextes</td><td align="center" width="100">Contextes Html</td>" >> $tablo ; # création de la ligne 0 du tableau qui rappelle le contenu des différentes colonnes

	i=1; # on attribue une valeur initiale à i

	for nom in `cat $rep/$fic` # boucle : pour chaque élément "nom" lu dans la variable $fic situé dans le repertoire $rep (ici, "nom" désigne 1 url car la lecture du fichier désigné par $fic se réalise ligne par ligne via la commande "cat" (le segmenteur ligne est pertinent ici dans la mesure ou nos fichiers d'url contiennent 1 url/ligne))

		do  # équivaut à { sous cygwin

		# wget $nom -O ./PAGES-ASPIREES/$tmp/wg$j-$i.html ; # cmd permettant d'aspirer les pages via internet et de les écrire dans le dossier correspondant en les nommant (avec les 2 variables $j pour la langue utilisée et $i pour la numerotation)

		curl $nom -o ./PAGES-ASPIREES/$tmp/$j-$i.html ; # utilisation de Curl pour récupérer des pages qui ont échappé à la cmd wget
		retourcurl=$? # création d'une variable pour stocker le rapport d'erreur
		testcurl=$(egrep -io "(400 )?Bad request|Moved Permanently|s interdit|Not Acceptable|Object Moved" ./PAGES-ASPIREES/$tmp/$j-$i.html | sort -u) ;
		motif="[Ss]pring|[Pp]rintemps|[Ff]r[üu][.]*hling|[Ff]r[üu][.]*hjahr|[Ll]enz" ;

if [ "$testcurl" != "" ] # début de la boucle, on essaie de repérer des pages présentant des erreurs telles que "Bad Request" etc...

	then
	echo ;	
	echo "!---------------------------------------------------------------------!" ;
	echo "L'erreur relevée est: "$testcurl ; 
	echo ;
	echo "Sur l'URL: "$j-$i.html;
	echo "!---------------------------------------------------------------------!" ;
	echo ;
	echo "<tr><td align="center" width="50">$i</td><td align="center" width="100"><a href=\"$nom\">Page Web</a></td><td align="center" width="100"><a href=\"../PAGES-ASPIREES/$tmp/$j-$i.html\">$j-$i.html</a></td><td align="center" width="100" bgcolor="red">BAD</td><td align="center" width="100" bgcolor="red"></td><td align="center" width="100" bgcolor="red"></td><td align="center" width="100" bgcolor="red"></td><td align="center" width="100" bgcolor="red"></td><td align="center" width="100" bgcolor="red"><br><br></td></tr>" >> $tablo ;

	else

	if [ $retourcurl = "0" ] # si pas de problème à l'aspiration alors:

	then 
		echo "<tr><td align="center" width="50">$i</td><td align="center" width="100"><a href=\"$nom\">Page Web</a></td><td align="center" width="100"><a href=\"../PAGES-ASPIREES/$tmp/$j-$i.html\">$j-$i.html</a></td><td align="center" width="100">$retourcurl</td>" >> $tablo ;
		encodage=$(file -b --mime-encoding ./PAGES-ASPIREES/$tmp/$j-$i.html) ; # détection de l'encodage à l'aide de File

		if [ $encodage = "utf-8" ] # si l'encodage est égal à utf-8, ouverture d'une nouvelle boucle

			then
			echo ;
			echo "!---------------------------------------------------------------------!" ;
			echo "L'encodage de la page est: " $encodage ; # indication visuelle
			echo "!---------------------------------------------------------------------!" ;		
			echo ;
			lynx -dump -nolist -display_charset=utf-8 ./PAGES-ASPIREES/$tmp/$j-$i.html > ./DUMP-TEXT/$tmp/utf8-$j-$i.txt ; # on dumpe le texte directement en utf-8
			occur=$(egrep -o $motif ./DUMP-TEXT/$tmp/utf8-$j-$i.txt | sort -u) ;
			count=$(egrep -c $motif ./DUMP-TEXT/$tmp/utf8-$j-$i.txt) ;
			cat ./DUMP-TEXT/$tmp/utf8-$j-$i.txt >> ./DUMP-TEXT/dumpydump.txt ;
			cat ./DUMP-TEXT/$tmp/utf8-$j-$i.txt >> ./DUMP-TEXT/$tmp-dumpydump.txt ;
			fencodage=$(file -b --mime-encoding ./DUMP-TEXT/$tmp/utf8-$j-$i.txt) ;
			egrep -i "[Ss]pring|[Pp]rintemps|[Ff]r[üu][.]*hling|[Ff]r[üu][.]*hjahr|[Ll]enz" ./DUMP-TEXT/$tmp/utf8-$j-$i.txt > ./CONTEXTES/$tmp/$j-$i.txt ;
			cat ./CONTEXTES/$tmp/$j-$i.txt >> ./CONTEXTES/$tmp/$j-catcont.txt ;
			perl ./PROGRAMMES/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/$tmp/utf8-$j-$i.txt ./PROGRAMMES/motif-regexp.txt ;
			mv resultat-extraction.html ./CONTEXTES/$tmp/$j-$i.html ;
			cat ./CONTEXTES/$tmp/$j-$i.html >> ./CONTEXTES/$tmp/$tmp-cont_glob.txt ;
			echo "<td align="center" width="110">$encodage</td><td align="center" width="100"><a href=\"../DUMP-TEXT/$tmp/utf8-$j-$i.txt\">$j-$i.txt</a><br>$fencodage</td>" >> $tablo ; # et ici on génère la fin de la ligne du tableau associée à chaque URL
			nbdump=`expr $nbdump + 1` ;

				if [ "$occur" != "" ]

					then
					echo "<td align="center" width="100">$count</td><td align="center" width="100"><a href=\"../CONTEXTES/$tmp/$j-$i.txt\">$j-$i.txt</a></td><td align="center" width="100"><a href=\"../CONTEXTES/$tmp/$j-$i.html\">$j-$i.html</a></td></tr>" >> $tablo ;

					else
					echo "<td align="center" width="100">Pas d'occurences</td><td align="center" width="100" bgcolor="red"></td><td align="center" width="100" bgcolor="red"></td></tr>" >> $tablo ;
				fi

			else 
			vencodage=$(iconv -l | egrep -oi $encodage | sort -u) ;  # il faut vérifier que l'encodage est reconnu par iconv

				if [ "$vencodage" != "" ] # si egrep a extrait un encodage qui matche la liste d'iconv

					then
					echo ;					
					echo "!---------------------------------------------------------------------!" ;
					echo "First step" ; # indication visuelle pour voir où se trouve le programme
					echo "L'encodage initial de la page est: "$vencodage ;					
					echo "!---------------------------------------------------------------------!" ;
					echo ;
					lynx -dump -nolist -display_charset=$vencodage ./PAGES-ASPIREES/$tmp/$j-$i.html > ./DUMP-TEXT/$j-$i.txt ; # on lance les traitements
					iconv -f $vencodage -t utf-8 ./DUMP-TEXT/$j-$i.txt -o ./DUMP-TEXT/$tmp/utf8-$j-$i.txt ;
					occur=$(egrep -o $motif ./DUMP-TEXT/$tmp/utf8-$j-$i.txt | sort -u) ;					
					count=$(egrep -c $motif ./DUMP-TEXT/$tmp/utf8-$j-$i.txt) ;
					cat ./DUMP-TEXT/$tmp/utf8-$j-$i.txt >> ./DUMP-TEXT/dumpydump.txt ;
					cat ./DUMP-TEXT/$tmp/utf8-$j-$i.txt >> ./DUMP-TEXT/$tmp-dumpydump.txt ;
					fencodage=$(file -b --mime-encoding ./DUMP-TEXT/$tmp/utf8-$j-$i.txt) ; # on reteste l'encodage à la sortie
					egrep -i "[Ss]pring|[Pp]rintemps|[Ff]r[üu][.]*hling|[Ff]r[üu][.]*hjahr|[Ll]enz" ./DUMP-TEXT/$tmp/utf8-$j-$i.txt > ./CONTEXTES/$tmp/$j-$i.txt ;
					cat ./CONTEXTES/$tmp/$j-$i.txt >> ./CONTEXTES/$tmp/$j-catcont.txt ;
					perl ./PROGRAMMES/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/$tmp/utf8-$j-$i.txt ./PROGRAMMES/motif-regexp.txt ;
					mv resultat-extraction.html ./CONTEXTES/$tmp/$j-$i.html ;
		        		cat ./CONTEXTES/$tmp/$j-$i.html >> ./CONTEXTES/$tmp/$tmp-cont_glob.txt ;
					echo "<td align="center" width="110">$vencodage</td><td align="center" width="100"><a href=\"../DUMP-TEXT/$tmp/utf8-$j-$i.txt\">$j-$i.txt</a><br>$fencodage</td>" >> $tablo ; # et ici on génère la fin de la ligne du tableau associée à chaque URL
					nbdump=`expr $nbdump + 1` ;

						if [ "$occur" != "" ]

							then
							echo "<td align="center" width="100">$count</td><td align="center" width="100"><a href=\"../CONTEXTES/$tmp/$j-$i.txt\">$j-$i.txt</a></td><td align="center" width="100"><a href=\"../CONTEXTES/$tmp/$j-$i.html\">$j-$i.html</a></td></tr>" >> $tablo ;

							else
							echo "<td align="center" width="100">Pas d'occurences</td><td align="center" width="100" bgcolor="red"></td><td align="center" width="100" bgcolor="red"></td></tr>" >> $tablo ;
						fi

					else 
					urlcharset=$(iconv -l | egrep -oi "charset=.*" ./PAGES-ASPIREES/$tmp/$j-$i.html | sed -e "s/\".*$//" | cut -d\= -f2) ; # autrement on tente de récupérer le charset dans la page
					echo "Le charset extrait sur les méta-données est: "$urlcharset ;

						if [ "$urlcharset" = "" ]

							then # si le charset n'est pas connu, on ne fait rien
							echo ;
							echo "!---------------------------------------------------------------------!" ;
							echo "L'encodage de la page n'est pas reconnu." ;
							echo "<td  align="center" width="110">Inconnu</td><td  align="center" width="100" bgcolor="red"><br><br></td><td  align="center" width="100" bgcolor="red"></td><td  align="center" width="100" bgcolor="red"></td><td  align="center" width="100" bgcolor="red"></td></tr>" >> $tablo ;
							echo "!---------------------------------------------------------------------!" ;
							echo ;

							else # autrement on lance les traitements
							echo ;
							echo "!---------------------------------------------------------------------!" ;
							echo "Second step" ; # indication visuelle pour voir où se trouve le programme
							echo "L'encodage initial de la page est: "$urlcharset ;
							echo "!---------------------------------------------------------------------!" ;
							echo ;
							lynx -dump -nolist -display_charset=$urlcharset ./PAGES-ASPIREES/$tmp/$j-$i.html > ./DUMP-TEXT/$j-$i.txt ;
							iconv -f $urlcharset -t utf-8 ./DUMP-TEXT/$j-$i.txt -o ./DUMP-TEXT/$tmp/utf8-$j-$i.txt ; # autrement, on lance les traitements
							occur=$(egrep -o $motif ./DUMP-TEXT/$tmp/utf8-$j-$i.txt | sort -u) ;
							count=$(egrep -c $motif ./DUMP-TEXT/$tmp/utf8-$j-$i.txt) ;
							cat ./DUMP-TEXT/$tmp/utf8-$j-$i.txt >> ./DUMP-TEXT/dumpydump.txt ;
							cat ./DUMP-TEXT/$tmp/utf8-$j-$i.txt >> ./DUMP-TEXT/$tmp-dumpydump.txt ;
							fencodage=$(file -b --mime-encoding ./DUMP-TEXT/$tmp/utf8-$j-$i.txt) ; # on reteste l'encodage à la sortie
							egrep -i "[Ss]pring|[Pp]rintemps|[Ff]r[üu][.]*hling|[Ff]r[üu][.]*hjahr|[Ll]enz" ./DUMP-TEXT/$tmp/utf8-$j-$i.txt > ./CONTEXTES/$tmp/$j-$i.txt ;
							cat ./CONTEXTES/$tmp/$j-$i.txt >> ./CONTEXTES/$tmp/$j-catcont.txt ;
							perl ./PROGRAMMES/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/$tmp/utf8-$j-$i.txt ./PROGRAMMES/motif-regexp.txt ;
		        				mv resultat-extraction.html ./CONTEXTES/$tmp/$j-$i.html ;
		        				cat ./CONTEXTES/$tmp/$j-$i.html >> ./CONTEXTES/$tmp/$tmp-cont_glob.txt ;
							echo "<td align="center" width="110">$urlcharset</td><td align="center" width="100"><a href=\"../DUMP-TEXT/$tmp/utf8-$j-$i.txt\">$j-$i.txt</a><br>$fencodage</td>" >> $tablo ; # et ici on génère la fin de la ligne du tableau associée à chaque URL
							nbdump=`expr $nbdump + 1` ;

								if [ "$occur" != "" ]

									then
									echo  "<td align="center" width="100">$count</td><td align="center" width="100"><a href=\"../CONTEXTES/$tmp/$j-$i.txt\">$j-$i.txt</a></td><td align="center" width="100"><a href=\"../CONTEXTES/$tmp/$j-$i.html\">$j-$i.html</a></td></tr>" >> $tablo ;

									else
									echo "<td align="center" width="100">Pas d'occurences</td><td align="center" width="100" bgcolor="red"></td><td align="center" width="100" bgcolor="red"></td></tr>" >> $tablo ;
								fi
						fi
				fi
		fi
	else
	echo "<tr><td align="center" width="50">$i</td><td align="center" width="100"><a href=\"$nom\">Page Web</a></td><td align="center" width="100" bgcolor="red"></td><td align="center" width="100">$retourcurl</td><td align="center" width="100" bgcolor="red"><br><br></td><td align="center" width="101" bgcolor="red"></td><td align="center" width="100" bgcolor="red"></td><td align="center" width="100" bgcolor="red"></td><td align="center" width="100" bgcolor="red"></td></tr>" >> $tablo ;
fi
fi

		 # a chaque passage de boucle, on récupere la variable $nom (contenant une url) que l'on inscrit dans une ligne inférieure  du tableau html renvoyant à son lien, face à son numero de ligne $i, on récupère aussi la variable $j-$i.html qui correspond à la page aspirée et qui est associée à un lien redirigeant vers le fichier correspondant


		i=`expr $i + 1` ; # on incrémente le numero de ligne (designe a la fois les lignes du tableau et la numerotation du nom des fichiers d'url aspires)

		done # équivaut à } sous cygwin

	perl ./PROGRAMMES/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/$tmp-dumpydump.txt ./PROGRAMMES/motif-regexp.txt ;
	mv resultat-extraction.html ./CONTEXTES/$tmp-resultat-extraction.html ;

	echo "<tr><td align=\"center\" colspan=\"7\">&nbsp</td><td align=\"center\" width=\"100\"><a href="../CONTEXTES/$tmp/$j-catcont.txt">Fichier CONTEXTES<br>global</a><br><small>$nbdump fichier(s)</small></td><td align=\"center\" width=\"100\"><a href="../CONTEXTES/$tmp-resultat-extraction.html">Résultat EXTRACTION</a><br><small>$nbdump fichier(s)</small></td></tr><br>" >> $tablo;

	j=`expr $j + 1` ; # on incremente le numero de dossier (contenant les pages aspirees)

	done # on ferme ici la boucle initiale, pour obtenir les tableaux à la suite
	
	perl ./PROGRAMMES/minigrepmultilingue.pl "UTF-8" ./DUMP-TEXT/dumpydump.txt ./PROGRAMMES/motif-regexp.txt ;

echo "</table></body></html>" >> $tablo ; 

