#!/bin/bash ########################################################Fontion traitant le sens#################################################################################### function traiteSens { #On regroupe ici tous les motifs motif_anglais="bud|button|switch|simple|spot"; motif_arabe="برﻋﻢ|ﺯﺮ|بشرة"; motif_espagnol="botón|grano|pustula|capullo"; motif_francais="bouton"; motif_malgache="vontsina|bokotra|mony|forofotra"; motif_russe="бутон|пуговица|кнопка|прыщ"; #On cré et on initialise les compteurs à 0 #Le compteur j sert à crée des sous-répertoires dans les répertoires PAGESASPIREES, DUMP, ET CONTEXTES. Chaque sous-répertoire va stocker les résultats crée par le programme. j=0; #Le compteur c sert à compter uniqument les urls. c=0; #Le compteur i sert à crée des fichiers dans les répertoires PAGESASPIREES, DUMP, ET CONTEXTES. Chaque fichier va stocker les résultats crée par le programme. i=0; #On crée et on initialise le compteur nbdump qui servira pour le répertoire FICHIERSGLOBAUX nbdump=0; #Pour chaque fichier dans chaque répertoire sens, on fait: for fic in `ls $dossier/$sens` { #On incrémente le compteur j let "j+=1"; #On extraie la langue de chaque fichier basename=$(basename $fic); langue=$(echo $basename |cut -d"_" -f2 |cut -d"." -f1); echo -n "traiteSens langue=$langue"; # On attribue un ou des motif(s) parmi chaque langue. On crée donc une condition. if [ "$langue" == "ar" ] then motif=$motif_arabe; fichier="motif_arabe.txt"; elif [ "$langue" == "an" ] then motif=$motif_anglais; fichier="motif_anglais.txt"; elif [ "$langue" == "es" ] then motif=$motif_espagnol; fichier="motif_espagnol.txt"; elif [ "$langue" == "fr" ] then motif=$motif_francais; fichier="motif_francais.txt"; elif [ "$langue" == "ma" ] then motif=$motif_malgache; fichier="motif_malgache.txt"; else [ "$langue" == "ru" ] motif=$motif_russe; fichier="motif_russe.txt"; fi #fin de la condition #Pour chaque url dans chaque fichier, on fait: for nom in `cat $dossier/$sens/$fic` { #On incrémente les compteurs let "c+=1"; let "i+=1"; #On crée des sous dossiers pour mettre tous les résultats mkdir -p CONTEXTES/$sens/$j ; mkdir -p DUMP-TXT/$sens/$j ; mkdir -p PAGES-ASPIREES/$sens/$j ; echo "================================================================"; echo "==========TRAITEMENT : $nom "; #--------------- On CURL et on détermine l'encodage ----------------------------------------------------------------------------------------- curl -o ./PAGES-ASPIREES/$sens/$j/$i.html "$nom"; #C'est une variable qui vérifie si le curl se passe bien ou pas retourcurl=$? ; echo "RETOUR CURL : $retourcurl"; #si le curl se passe bien, if [[ $retourcurl == 0 ]] then #alors je lance ma detection d'encodage encodage=$(file -i ./PAGES-ASPIREES/$sens/$j/$i.html | cut -d= -f2); echo "ENCODAGE initial : $encodage"; #------------------ on continue en tenant compte de l'encodage fourni par curl------------------------------------------------------------- #si l'encodage est de l'utf8, alors je fais le travail habituel: lynx et dump if [[ $encodage == "utf-8|UTF-8" ]] then lynx -dump -nolist -display_charset=$encodage ./PAGES-ASPIREES/$sens/$j/$i.html > ./DUMP-TXT/$sens/$j/$i-utf8.txt ; egrep -i "\b$motif\b" ./DUMP-TXT/$sens/$j/$i-utf8.txt > ./CONTEXTES/$sens/$j/$i-utf8.txt ; perl ./PROGRAMMES/minigrepmultilingue.pl "UTF-8" ./DUMP-TXT/$sens/$j/$i-utf8.txt ./PROGRAMMES/$fichier ; #On renomme le résultat, avec une nomination cohérente mv ./resultat-extraction.html ./CONTEXTES/$sens/$j/$i-utf8.html ; #On écrit après les résultats dans le tableau echo " $c $fic $nom $i.html $i.txt
($encodage) $i-utf8.txt $i-utf8.txt $i-utf8.html " >> $tablo; #On génère le dossier global cat ./CONTEXTES/$sens/$j/$i-utf8.txt >> ./FICHIERGLOBAUX/CONTEXTES-GLOBAUX_$j.txt ; cat ./DUMP-TXT/$sens/$j/$i-utf8.txt >> ./FICHIERGLOBAUX/DUMP-GLOBAUX_$j.txt ; #Le compteur nbdump est initialisé pour savoir où on empile let "nbdump+=1"; #------------------------------------------------------------------------------------------------------------------------------------------------- # la page n'est pas en utf-8, on cherche un charset... #------------------------------------------------------------------------------------------------------------------------------------------------- #autrement, l'encogage de la page aspirée n'est pas en utf8 else echo "on cherche un charset dans la page aspiree..."; #on détecte l'encodage de la page web au niveau du charse et encoding: if egrep -qi "(charset ?=.*?(\"|\')|encoding ?=.*?(\"|\'))" ./PAGES-ASPIREES/$sens/$j/$i.html ; then #-------------------------------------------------------------------------------------------------------------------------------------------------- # on a peut-etre trouve un charset..... #------------------------------------------------------------------------------------------------------------------------------------------------- #S'il y a la présence d'un charset, on va l'extraire l'encodage avec la commande egrep: echo "Presence d'un charset..."; encodage=$(egrep -m 1 -o '(((utf|UTF)-(8|16|32))|(gb|GB)(k|K|2312|18030)|(iso|ISO|Iso)-8859-(\w)(\w)?|(WINDOWS|windows|Windows)-1251|(WINDOWS|windows|Windows)-1256|((m|M)(a|A)(c|C)(R|r)(O|o)(M|m)(a|A)(n|N))|us-ascii)' ./PAGES-ASPIREES/$sens/$j/$i.html | sort -u) ; echo "charset extrait : $encodage "; #------------------------------------------------------------------------------------------------------------------------------- # avant de continuer on va vérifier si le charset est connu de iconv #------------------------------------------------------------------------------------------------------------------------------- VERIFENCODAGEDANSICONV=$(iconv -l | egrep -io $encodage | sort -u); if [[ $VERIFENCODAGEDANSICONV == "" ]] then #------------------------------------------------------------------------------------------------------------------------------------------------------------- # le charset n'est pas connu de iconv : on fait rien.... #------------------------------------------------------------------------------------------------------------------------------------------------------------- echo "VERIF : <$VERIFENCODAGEDANSICONV> ==> inconnu par inconv, on ne fait rien" #On écrit les résultats dans le tableau echo " $c $fic $nom $i.html Encodage
non détecté
Encodage
non détecté
Encodage
non détecté
Encodage
non détecté
" >> $tablo; else #---------------------------------------------------------------------------------------------------------------------------------------------------------- # le charset extrait est connu de iconv : on lynxe et on dump !!! #---------------------------------------------------------------------------------------------------------------------------------------------------------- echo "VERIF : <$VERIFENCODAGEDANSICONV> ==> connu par inconv, c'est parti ==> lynx, iconv..." lynx -dump -nolist -display_charset=$encodage ./PAGES-ASPIREES/$sens/$j/$i.html > ./DUMP-TXT/$sens/$j/$i.txt ; echo "ENCODAGE final : $encodage (avant conversion vers utf-8)"; iconv -f $encodage -t utf-8 ./DUMP-TXT/$sens/$j/$i.txt > ./DUMP-TXT/$sens/$j/$i-utf8.txt egrep -i "\b$motif\b" ./DUMP-TXT/$sens/$j/$i-utf8.txt > ./CONTEXTES/$sens/$j/$i-utf8.txt ; perl ./PROGRAMMES/minigrepmultilingue.pl "UTF-8" ./DUMP-TXT/$sens/$j/$i-utf8.txt ./PROGRAMMES/$fichier ; mv ./resultat-extraction.html ./CONTEXTES/$sens/$j/$i-utf8.html ; #On écrit les résultats dans le tableau echo " $c $fic $nom $i.html $i.txt
($encodage) $i-utf8.txt $i-utf8.txt $i-utf8.html " >> $tablo; #On génère le dossier global cat ./CONTEXTES/$sens/$j/$i-utf8.txt >> ./FICHIERGLOBAUX/CONTEXTES-GLOBAUX_$j.txt ; cat ./DUMP-TXT/$sens/$j/$i-utf8.txt >> ./FICHIERGLOBAUX/DUMP-GLOBAUX_$j.txt ; #Le compteur nbdump est initialisé pour savoir où on empile let "nbdump+=1"; fi else #Sinon, le charset n'est pas détecté, on ne fait rien echo "Pas de charset detecte : on ne fait rien pour le DUMP... "; #On écrit les résultats dans le tableau echo " $c $fic $nom $i.html Encodage
non détecté
Encodage
non détecté
Encodage
non détecté
Encodage
non détecté
" >> $tablo; fi fi # Fin de curl else #On écrit les résultats dans le tableau echo " $c $fic $nom Page non aspiree... Encodage
non détecté
Encodage
non détecté
Encodage
non détecté
Encodage
non détecté
" >> $tablo; fi } } #On écris les résultats de FICHIERGLOBAUX à la fin du tableau echo "   Fichier Dump
global

$nbdump fichier(s) Fichier Contexte
global

$nbdump fichier(s) " >> $tablo; #On ferme le tableau echo "" >> $tablo; } ############################# FIN de la fonction qui traite le sens ################################################################################# #On enregistre le nom du répertoire contenant les urls dans la variable 'dossier' dossier="./URLS/"; #On enregistre le nom du fichier de sortie dans la variable tablo tablo="loulou.html"; #On crée le début de la page web echo "Tableau de liens" > $tablo; echo " " >> $tablo; #Création du répertoire FICHIERGLOBAUX mkdir -p FICHIERGLOBAUX ; #On supprime tous les répertoires contenant dans le répertoire FICHIERGLOBAUX rm ./FICHIERGLOBAUX/*.*; ########################On crée un tableau pour chaque sens:##################################################################### #Pour chaque sans dans le répertoire URLS, for sens in `ls $dossier` { #Si le sens est botanique alors, if [[ $sens == "botanique" ]] then #On écrit "sens botannique" dans le tableau echo "

Sens botanique :

" >> $tablo; #On crée la première ligne du tableau qui contient tous les titres des colonnes echo "" >> $tablo; #On fait l'appel de la fonction 'traite sens' traiteSens; #Sinon si le sens est "electrique", alors elif [[ $sens == "electrique" ]] then #On écrit "sens electrique" dans le tableau echo "

Sens électrique :

" >> $tablo; #On crée la première ligne du tableau qui contient tous les titres des colonnes echo "
Nombre d'url: Nom des fichiers: Urls: Pages aspirées: Dump initial: Dump utf-8:
Contextes utf-8:
Contextes html:
" >> $tablo; #On fait l'appel de la fonction 'traite sens' traiteSens; #sinon si le sens est medical, alors elif [[ $sens == "medical" ]] then #On écrit "sens médical" dans le tableau echo "

Sens médical :

" >> $tablo; #On crée la première ligne du tableau qui contient tous les titres des colonnes echo "
Nombre d'url: Nom des fichiers: Urls: Pages aspirées: Dump initial: Dump utf-8:
Contextes utf-8:
Contextes html:
" >> $tablo; #On fait l'appel de la fonction 'traite sens' traiteSens; #sinon le sens est couture, alors else [[ $sens == "couture" ]] #On écrit "sens couture" dans le tableau echo "

Sens couture :

" >> $tablo; #On crée la première ligne du tableau qui contient tous les titres des colonnes echo "
Nombre d'url: Nom des fichiers: Urls: Pages aspirées: Dump initial: Dump utf-8:
Contextes utf-8:
Contextes html:
" >> $tablo; #On fait l'appel de la fonction 'traite sens' traiteSens; #Fin de la condition fi } ######################################### FIN du programme ######################################################################################################################################################################################################################### #On ferme les balises body et html echo "" >> $tablo; ################################################################################################################################################################################################################################################
Nombre d'url: Nom des fichiers: Urls: Pages aspirées: Dump initial: Dump utf-8:
Contextes utf-8:
Contextes html: