dots


Notre script

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" "-" "-" "&nbsp;-&nbsp;" "&nbsp;-&nbsp;" "&nbsp;-&nbsp;" "&nbsp;-&nbsp;"
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="&nbsp;-&nbsp;"
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\">&nbsp</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\">&nbsp</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! ******'