Vous pouvez le télécharger ici !
1 #!/bin/bash 2 3 4 # *******INFORMATION IMPORTANTE******** 5 # La première ligne du fichier paramêtres.txt doit contenir le nom du tableau.html à être créé. Car le programme a besoin de cette information avant de commencer à construire le fichier HTML qui contiendra les tableaux urls. 6 7 8 function create_global_files() { 9 10 nbdump=$1; 11 langue=$2; 12 x=$3; 13 14 #création d'un fichier qui va contenir tous les contextes des pages aspirées 15 echo "<file=$nbdump>" >> ../FICHIERGLOBAUX/CONTEXTES-GLOBAUX_$langue.txt ; 16 cat ../CONTEXTES/$langue$x-utf8.txt >> ../FICHIERGLOBAUX/CONTEXTES-GLOBAUX_$langue.txt ; 17 18 #création d'un fichier qui va contenir tous les dumps des pages aspirées 19 echo "<file=$nbdump>" >> ../FICHIERGLOBAUX/DUMP-GLOBAUX_$langue.txt ; 20 cat ../DUMP-TEXT/$langue$x-utf8.txt >> ../FICHIERGLOBAUX/DUMP-GLOBAUX_$langue.txt ; 21 22 } 23 24 #la fonction create_table_line reçoit 10 arguments pour créer les lignes du tableau d'urls 25 function create_table_line(){ 26 27 #déclaration des variables pour chaque colonne du tableau 28 col_index=$1; 29 col_url=$2; 30 col_pagaspiree=$3; 31 col_retour_curl=$4; 32 col_encodage=$5; 33 col_dump_encodage=$6; 34 col_dump_utf8=$7; 35 col_contexte_utf8=$8; 36 col_contexte_hmtl=$9; 37 col_freq_motif=${10}; 38 col_index_dump=${11}; 39 40 #code HTML responsable pour la création du tableau 41 echo "<tr> 42 <td id="celula">$col_index</td> 43 <td id="celula">$col_url</td> 44 <td id="celula">$col_pagaspiree</td> 45 <td id="celula">$col_retour_curl</td> 46 <td id="celula">$col_encodage</td> 47 <td id="celula">$col_dump_encodage</td> 48 <td id="celula">$col_dump_utf8</td> 49 <td id="celula">$col_contexte_utf8</td> 50 <td id="celula">$col_contexte_hmtl</td> 51 <td id="celula">$col_freq_motif</td> 52 <td id="celula">$col_index_dump</td> 53 </tr>" >> $NOMDEFICHIER; 54 } 55 56 function create_table () { 57 58 #variable qui stock le nom du fichier .html 59 NOMDEFICHIER=$1; 60 61 #fichier de parametres 62 fichier=$2; 63 64 65 #la variable $langue stocke l'information du fichier de langue obtenue par le code regex. Ce code capture les 4 lettres du nom du ficher concernant les infortions de langue et de pays des urls. Ex. ptBR pour portugais du Brésil, ptPT pour portugais de Portugal et etc. 66 langue=`echo $2 | grep -o [a-z][a-z][A-Z][A-Z]_` 67 68 #les commandes suivantes echo insèrent les tags pour créer le tableau qui contiendra la liste d'urls 69 #echo "<p><hr></p>" >> $NOMDEFICHIER; 70 echo "<table width=200 class="pretty">" >> $NOMDEFICHIER; 71 72 73 #le case nous permet de choisir le bon contexte et créer le parametre-motif.txt, selon la langue utilisée 74 case $langue in 75 76 frFR_) 77 motif="[Mm]ariages? [hH]omosexuels?" 78 motif2="Mariage Homosexuel" 79 langue_pays="français | pays: France" 80 echo "MOTIF=[Mm]ariages? [hH]omosexuels?" > parametre-motif.txt 81 ;; 82 enUS_) 83 motif="[Ss]ame[ -][Ss]ex [Mm]arriages?" 84 motif2="Same Sex Marriage" 85 langue_pays="anglais | pays: Étas-Unis" 86 echo "MOTIF=[Ss]ame[\s-][Ss]ex [Mm]arriages?" > parametre-motif.txt 87 ;; 88 enGB_) 89 motif="[Ss]ame[ -][Ss]ex [Mm]arriages?" 90 motif2="Same Sex Marriage" 91 langue_pays="anglais | pays: Angleterre" 92 echo "MOTIF=[Ss]ame[\s-][Ss]ex [Mm]arriages?" > parametre-motif.txt 93 ;; 94 95 ptBR_) 96 motif="[cC]asamentos? [hH]omo(s|ss)exua(l|is)" 97 motif2="Casamento Homosexual" 98 langue_pays="portugais | pays: Brésil" 99 echo "MOTIF=[cC]asamentos? [hH]omo(s|ss)exua(l|is)" > parametre-motif.txt 100 ;; 101 102 ptPT_) 103 motif="[cC]asamentos? [hH]omo(s|ss)exua(l|is)" 104 motif2="Casamento Homosexual" 105 langue_pays="portugais | pays: Portugal" 106 echo "MOTIF=[cC]asamentos? [hH]omo(s|ss)exua(l|is)" > parametre-motif.txt 107 ;; 108 esac 109 110 echo "<tr><th colspan="11" ><b>URLs langues </b> : $langue_pays <b> cod : </b> $langue | <b> Motif : </b> <i> $motif2 </i> |<b> REGEX : </b> $motif </th></tr>" >> $NOMDEFICHIER; 111 create_table_line "n°URL" "URL" "Page Aspirée" "Retour Curl" "Encodage" "Dump <br/>(non-uft8)" "Dump <br/>(uft8)" "Contexte" "Contexte <br/>(minigrep)" "Fq Motif <br/>dans DUMP" "Index Dump"; 112 113 #afficher message de lecture du fichier url 114 echo -e 'Reading the urls file '$fichier'' 115 #création du compteur qui sera utilise dans la boucle 'for'. 116 let "x = 1"; 117 118 #création du la variable qui compte les fichier dump insérés dans les fichiers de dumps globaux et contextes globaux 119 nbdump=0; 120 121 #Cette boucle for lit ligne à ligne le fichier avec la liste d'urls, ici refférencie par la variable $fichier 122 for element in `cat ../URLS/$fichier` 123 do 124 #commande qui aspire la page et la stocke dans le dossier /PAGE-ASPIREES. Le nom du fichier .html est construit avec l'information de variable langue (ex. enUS, ptBR...) + la numérotation construite par la variable compteur $x' 125 curl -o ../PAGES-ASPIREES/$langue$x.html "$element"; 126 127 #commande pour extraire l'information d'encodage du fichier! 128 encodage=$(file -i ../PAGES-ASPIREES/$langue$x.html | cut -f2 -d=); 129 130 #la variable $? nous permet de savoir s'il la commande curl a été bien executée. 131 retourcurl=$? ; 132 133 #code en regex pour vérifier le contenu de la page aspirée. Ce code nous permet de savoir si la page a été bien aspirée 134 contenupageaspiree=$(egrep -i -o "(400 )?Bad request|Moved Permanently|Not Acceptable|Access Denied|Object Moved|The document has moved" ../PAGES-ASPIREES/$langue$x.html | sort -u); 135 136 #teste pour vérifier si le curl a retourné l'une des messages d'erreur specifiée par le code regex 137 if [[ $contenupageaspiree != "" ]] 138 then 139 140 #afficher une message d'erreur dans le tableau 141 #retourcurl="<span style='background-color:red;color:white;font-family:arial,helvetica,sans-serif;font-variant:small-caps;font-size:120%;padding:2px;border-right:1px solid #C90;border-bottom:1px solid #C90;'>$retourcurl</span><br/><small>Error : $contenupageaspiree</small>"; 142 143 retourcurl="<b>$retourcurl</b><br/>Error:$contenupageaspiree"; 144 145 fi 146 147 echo "Retour de la commande curl: $retourcurl" 148 149 #vérification si la commande curl a retourné la valeur 0 150 if [[ $retourcurl==0 ]] 151 then 152 153 if [[ $encodage == "utf-8" ]] 154 then 155 156 # si encodage est utf-8 on fait le traitement suivant : lynx etc 157 echo "la page a $element a été bien aspirée"; 158 159 #aspirer le text del'url dans le dump sans les tags hmtl 160 lynx -dump -nolist -nomargins -width=1024 -display_charset="$encodage" $element > ../DUMP-TEXT/$langue$x-utf8.txt; 161 162 #extraction du contexte avec 2 lignes avant et 2 lignes après le motif 163 egrep -i "$motif" -A2 -B2 ../DUMP-TEXT/$langue$x-utf8.txt > ../CONTEXTES/$langue$x-utf8.txt 164 165 #création du fichier index-dump 166 egrep -o "\w+" ../DUMP-TEXT/$langue$x-utf8.txt | sort | uniq -c | sort -r > ../DUMP-TEXT/index-$langue$x.txt ; 167 168 #execution du script minigrep pour construire le fichier .html avec le contexte mise en évidence 169 perl ../PROGRAMMES/minigrep/minigrepmultilingue.pl "utf-8" ../DUMP-TEXT/$langue$x-utf8.txt parametre-motif.txt --fileout="../CONTEXTES/$langue$x-utf8.html"; 170 171 #comptage d'ocurrences du motif dans la page aspirée 172 comptagemotif=$(egrep -io "$motif" ../DUMP-TEXT/$langue$x-utf8.txt | wc -l); 173 174 echo "======> $element =====> traitement 1" 175 176 create_table_line $x "<a href=\"$element\">$element</a>" "<a href=\"../PAGES-ASPIREES/$langue$x.html\">$x</a>" "$retourcurl" "$encodage<br/>(detect-encodage)" "-" "<a href=\"../DUMP-TEXT/$langue$x-utf8.txt\">dump-$x</a>" "<a href=\"../CONTEXTES/$langue$x-utf8.txt\">contexte-$x</a>" "<a href=\"../CONTEXTES/$langue$x-utf8.html\">contexte-$x</a>" $comptagemotif "<a href=\"../DUMP-TEXT/index-$langue$x.txt\">index-$x</a>" 177 178 create_global_files $nbdump $langue $x; 179 180 #incrémenatation du compteur de la variable 181 let "nbdump+=1"; 182 183 #incrémenatation du compteur index 184 let "x = x + 1"; 185 else 186 187 #l'encodage n'est pas utf-8. Utilisation de l'iconv pour vérifier l'encodage de la page aspirée. 188 encodage_iconv=$(iconv -l | egrep -io $encodage | sort -u); 189 if [[ $encodage_iconv == "" ]] 190 then 191 # afficher message d'erreur 192 echo "L'encogade n'a pas été trouvée. Chercher le 'charsert'"; 193 194 if egrep -qi "meta.+charset" ../PAGES-ASPIREES/$langue$x.html ; 195 then 196 # afficher message de charsert trouvé 197 echo "Charset détecté! Récupération de charset en cours"; 198 199 #regex pour récupérer un des informations de regex sur la page et la stocker dans la variable encodage 200 encodage=$(egrep -m 1 -o '(((utf|UTF)-(8|16|32))|(gb|GB)(k|K|2312|18030)|(iso|ISO|Iso)-8859-(\w)(\w)?|(WINDOWS|windows)-1252|(WINDOWS|windows)-1256|((m|M)(a|A)(c|C)(R|r)(O|o)(M|m)(a|A)(n|N))|us-ascii)' ../PAGES-ASPIREES/$langue$x.html | tr "a-z" "A-Z" | sort -u) ; 201 202 #afficher le charset trouvé 203 echo "charset extrait : $encodage "; 204 205 #vérification du charset 206 encodage_iconv=$(iconv -l | egrep -io $encodage | sort -u); 207 if [[ $encodage_iconv == "" ]] 208 then 209 #cette encodage ne peut pas être traitée par iconv 210 echo "encodage non connu de iconv... on fait rien..."; 211 212 echo "======> $element =====> traitement 2" 213 214 #insérer ligne aux tableau d'urls 215 create_table_line $x "<a href=\"$element\">$element</a>" "<a href=\"../PAGES-ASPIREES/$langue$x.html\">$x</a>" "$retourcurl" "charset<br/>encodage<br/>non reconnus" "-" "-" " - " " - " " - " " - " 216 217 let "x = x + 1"; 218 else 219 echo "Le charset peut être traité par iconv."; 220 echo "Traitement en cours..."; 221 lynx -dump -nolist -nomargins -width=1024 -display_charset="$encodage" $element > ../DUMP-TEXT/$langue$x.txt ; 222 iconv -f $encodage -t utf-8 ../DUMP-TEXT/index-$langue$x.txt > ../DUMP-TEXT/$langue$x-utf8.txt ; 223 egrep -i "$motif" ../DUMP-TEXT/$langue$x-utf8.txt > ../CONTEXTES/$langue$x-utf8.txt ; 224 perl ../PROGRAMMES/minigrep/minigrepmultilingue.pl "utf-8" ../DUMP-TEXT/$langue$x-utf8.txt parametre-motif.txt --fileout="../CONTEXTES/$langue$x-utf8.html" ; 225 226 comptagemotif=$(egrep -io "$motif" ../DUMP-TEXT/$langue$x-utf8.txt | wc -l); 227 228 #contexte crée par Minigrep 229 egrep -o "\w+" ../DUMP-TEXT/$langue$x-utf8.txt | sort | uniq -c | sort -r > ../DUMP-TEXT/index-$langue$x.txt ; 230 231 echo "======> $element =====> traitement 3" 232 233 #insérer ligne au tableau d'urls 234 create_table_line $x "<a href=\"$element\">$element</a>" "<a href=\"../PAGES-ASPIREES/$langue$x.html\">$x</a>" "$retourcurl" "$encodage<br/>(charset extrait)" "<a href=\"../DUMP-TEXT/$langue$x.txt\">dump-$x</a>" "<a href=\"../DUMP-TEXT/$langue$x-utf8.txt\">dump-$x</a>" "<a href=\"../CONTEXTES/$langue$x-utf8.txt\">contexte-$x</a>" "<a href=\"../CONTEXTES/$langue$x-utf8.html\">contexte-$x</a>" $comptagemotif "<a href=\"../DUMP-TEXT/index-$langue$x.txt\">index-$x</a>" 235 236 create_global_files "$nbdump" "$langue" "$x"; 237 let "nbdump+=1"; 238 let "x = x + 1"; 239 fi 240 else 241 # afficher message de charset pas trouvé 242 echo "le charset n'a pas été trouvé. Aucun traitement sera fait"; 243 244 echo "======> $element =====> traitement 4" 245 246 blank=" - " 247 248 create_table_line $x "<a href=\"$element\">$element</a>" "<a href=\"../PAGES-ASPIREES/$langue$x.html\">$x</a>" "$retourcurl" "pas de charset..." "-" "-" $blank $blank $blank $blank 249 250 let "x = x + 1"; 251 fi 252 else 253 # afficher message d'encodage connu 254 echo "L'encogade est connu de iconv"; 255 256 #aspirer page 257 lynx -dump -nolist -nomargins -width=1024 -display_charset="$encodage" $element > ../DUMP-TEXT/$langue$x.txt ; 258 iconv -f $encodage -t utf-8 ../DUMP-TEXT/$langue$x.txt > ../DUMP-TEXT/$langue$x-utf8.txt 259 egrep -i "$motif" ../DUMP-TEXT/$langue$x-utf8.txt > ../CONTEXTES/$langue$x-utf8.txt ; 260 perl ../PROGRAMMES/minigrep/minigrepmultilingue.pl "utf-8" ../DUMP-TEXT/$langue$x-utf8.txt parametre-motif.txt --fileout="../CONTEXTES/$langue$x-utf8.html"; 261 comptagemotif=$(egrep -io "$motif" ../DUMP-TEXT/$langue$x-utf8.txt | wc -l); 262 egrep -o "\w+" ../DUMP-TEXT/$langue$x-utf8.txt | sort | uniq -c | sort -r > ../DUMP-TEXT/index-$langue$x.txt ; 263 264 echo "======> $element =====> traitement 5" 265 266 create_table_line $x "<a href=\"$element\">$element</a>" "<a href=\"../PAGES-ASPIREES/$langue$x.html\">$x</a>" "$retourcurl" "$encodage<br/>(detect-encodage ; iconv OK)" "<a href=\"../DUMP-TEXT/$langue$x.txt\">dump-$x</a>" "<a href=\"../DUMP-TEXT/$langue$x-utf8.txt\">dump-$x</a>" "<a href=\"../CONTEXTES/$langue$x-utf8.txt\">contexte-$x</a>" "<a href=\"../CONTEXTES/$langue$x-utf8.html\">contexte-$x</a>" $comptagemotif "<a href=\"../DUMP-TEXT/index-$langue$x.txt\">index-$x</a></td>" 267 268 create_global_file "$nbdump" "$langue" "$x"; 269 let "nbdump+=1"; 270 let "x = x + 1"; 271 fi 272 fi 273 else 274 echo "Problème lors de l'aspiration de la page. Aucun traitement sera effectué."; 275 276 echo "======> $element =====> traitement 6" 277 278 create_table_line $x "<a href=\"$element\">$element</a>" $blank "$retourcurl" $blank $blank $blank $blank $blank $blank $blank 279 280 let "x = x + 1"; 281 282 fi 283 done 284 285 egrep -o "\w+" ../FICHIERGLOBAUX/DUMP-GLOBAUX_$langue.txt | sort | uniq -c | sort -r > ../FICHIERGLOBAUX/index-dump-$langue.txt ; 286 egrep -o "\w+" ../FICHIERGLOBAUX/CONTEXTES-GLOBAUX_$langue.txt | sort | uniq -c | sort -r > ../FICHIERGLOBAUX/index-contexte-$langue.txt ; 287 echo "<tr><td class="center" colspan=\"6\" bgcolor=\"silver\"> </td><td class="center" width=\"100\"><a href="../FICHIERGLOBAUX/DUMP-GLOBAUX_$langue.txt">Fichier DUMP<br/>global</a><br/><small>$nbdump fichier(s)</small></td><td class="center" width=\"100\"><a href="../FICHIERGLOBAUX/CONTEXTES-GLOBAUX_$langue.txt">Fichier CONTEXTES<br/>global</a><br/><small>$nbdump fichier(s)</small></td><td colspan="3" bgcolor=\"silver\"></td></tr>" >> $NOMDEFICHIER; 288 289 echo "<tr><td class="center" colspan=\"6\" bgcolor=\"silver\"> </td><td class="center" width=\"100\"><a href="../FICHIERGLOBAUX/index-dump-$langue.txt">Index DUMP<br/>global</a><br/><small>$nbdump fichier(s)</small></td><td class="center" width=\"100\"><a href="../FICHIERGLOBAUX/index-contexte-$langue.txt">Index CONTEXTES<br/>global</a><br/><small>$nbdump fichier(s)</small></td><td colspan="3" bgcolor=\"silver\"></td></tr>" >> $NOMDEFICHIER; 290 let "x = x + 1"; 291 292 echo "</table>" >> $NOMDEFICHIER; 293 echo "<p><hr/></p>" >> $NOMDEFICHIER; 294 295 } 296 297 #boucle for pour lire le fichier parametres.txt, ici representé dans la variable $1 298 for line in $(cat $1); do 299 300 #teste conditionnel pour vérifier quelles lignes du fichier parametres.txt commencent par schéma "../TABLEAUX/" 301 if ( echo $line | grep -qs TABLEAUX ); then 302 303 #la variable nomfichier permet de garder le nom du fichier html, lorque la boucle for lit la deuxième ligne du fichier paramêtres.txt Le nom du fichier HTML doit être enregistré parce qu'il sera utilisé pour finaliser le fichier HTML à la fin du programme, après la création des tableaux urls' 304 NOMFICHIER=$line 305 echo -e '****** creating '$NOMFICHIER' ******' 306 #création du fichier html 307 cat > $NOMFICHIER <<EOF 308 <html> 309 <head> 310 <title>URL List </title> 311 </head> 312 <body> 313 <style> 314 .center { text-align: center; } 315 .container { width: 1024px; margin: 0 auto; } 316 table.pretty { margin: 0px auto; border: 1px solid #970c65; margin: 0; padding: 0; } 317 table.pretty td { border: 1px solid #970c65; padding: 5px; } 318 table.pretty tr:nth-child(even) { background: #f7ecf5 } 319 a { text-decoration: none; color: #000; } 320 a:hover { text-decoration: underline; } 321 td { font-size:90%; text-align:left; text-align: left; } 322 celula{ width: 250px; padding:10px; _width: 255px; } 323 </style> 324 <div class="container"> 325 <h1 class="center"> URLS </h1> 326 EOF 327 else 328 if ( echo $line | egrep -qs URLS ); then 329 330 #afficher message de création des tableaux urls 331 echo -e '****** preparing to read the '$line' file ******' 332 #creation du tableau 333 334 for fichier in `ls $line` 335 do 336 create_table $NOMFICHIER $fichier 337 done 338 339 #fin du teste if 340 fi 341 fi 342 343 #fin de la boucle for de lecture du fichier paramêtres.txt 344 done < $1 345 346 #afficher un message pour indiquer la finalisation du procès 347 echo -e '****** finalizing the HTML file ******' 348 349 cat >>$NOMFICHIER <<EOF 350 </div> 351 </body> 352 </html> 353 EOF 354 355 #afficher un message pour indiquer la finalisation du procès 356 echo -e '****** DONE! ******'