#!/bin/bash #Script réalisé par Arthur Lapraye pour le projet mot sur le web - 2013/2014 #Utilisation : Le script prend en entrée deux paramètres : #$1 Un dossier contenant des fichiers d'URL #$2 un nom pour le fichier HTML créé par le script. #Le gros avatage d'un script non-interactif prenant des paramètres au lancement : #on peut le relancer simplement en faisant !! dans la ligne de commande # C'est bien moins pénible à tester. #grep -E -o "\w+" D.txt | sort | uniq -c | sort -r #cat poliitikko-* | grep -E -o "\w+" | sort | uniq -c | sort -rn | less #Si les deux paramètres ne sont pas spécifiés, le script imprime une erreur sur stderr et s'arrête en renvoyant un code d'erreur : if [ -z $1 ] then echo "ERREUR : Aucun dossier d'URL spécifié. Usage : ./urlaspire.sh <dossier d'urls> <nom de fichier de sortie>" >&2 exit 87 elif [ -z $2 ] then echo "ERREUR : Vous devez spécifier un nom de fichier HTML. Usage : ./urlaspire.sh <dossier d'urls> <nom de fichier de sortie>" >&2 exit 88 # Si les deux paramètres du script sont spécifiés, le script peut commencer l'écriture de la page HTML else #Création de l'en-tête du fichier HTML, avec le doctype et le charset idoine. echo -e "<!DOCTYPE html>\n<html>\n<head>\n<title>L'ami des veaux</title>\n <meta charset=\"UTF-8\"> <link rel=\"StyleSheet\" href=\"style.css\" type=\"text/css\" media=\"screen\" /> <meta name=\"keywords\" content=\"TAL, politicien, politiker, politician,\" /> <meta name=\"description\" content=\"Le projet mot sur les internets\" /> <meta name=\"author\" content=\"Thibault Bejerano et Arthur Lapraye\" /> <link href=\"favicon.gif\" rel=\"shortcut icon\" type=\"image/x-icon\" /> </head>" > $2 echo -e "<body><header><h1>Pages aspirées</h1>\nTriées par fichier d’URL sources.\n</header>\n<nav style=\"margin-left: 1%;\">\n" >> $2 for fichier in $(ls -B $1) do echo "Création du menu : $fichier" echo -e "<p><a href=\"#$fichier\">URLs du fichier $fichier</a></p>\n" >> $2 done echo '</nav><section class="main" style="width: 90%;">' >> $2 # Initialisation du compteur d'URLs. compte=0 # Pour chaque fichier contenu dans le répertoire $1 (en l'occurence ce sera URLS), un tableau différent sera créé. # En revanche, le compteur n'est pas remis à 0 # L'option -B ordonne explicitement à ls de ne pas lister les fichiers de sauvegarde se terminant par un ~ for fichier in $(ls -B $1) do echo "fichier : $fichier" # Message permettant de se repérer dans l'exécution du script. # Chaque tableau d'URL a pour titre le fichier d'où proviennent les URLs en question echo "<table id=\"$fichier\"><caption>$fichier</caption>" >> $2 #En-têtes des différentes colonnes. echo -e "\t\t\t<tr><th class=\"numero\">N°</th><th>Lien </th><th class=\"statut\">Retour wget</th><th class=\"encodage\">Encodage</th> <th class=\"copies\">Copies</th><th class=\"dump\">Texte brut</th><th class=\"contexte\">Contextes</th> <th class=\"index\">Index</th></tr>" >> $2 #Boucle lisant un fichier ligne par ligne. #Et assignant le résultat à la variable $url while read url do if [ ! -z $url ] then #Incrémentation du compteur d'URLs. compte=$(($compte+1)) #Suppression de certains caractères grâce aux options de pattern-matching de Bash wrapper="${url#http://*/}" wrapper="${wrapper%%#*}" #Remplacement de caractères problématiques dans les URLs #pour pouvoir les transformer en noms de fichier. wrappee="$( echo $wrapper | sed -r "s/(\/|&|\?|\\|\.)/\-/g" | sed -r "s/\.php-/php/g" | sed -r "s/%/hex/g" )" copiz="PAGES-ASPIREES/$compte-${wrappee%%.html}.html" #Aspiration de la page web brute par wget & récupération du code de sortie. wget -nv $url -O $copiz statut=$? echo -e "\t\t\t<tr><td class=\"numero\">$compte</td> <td><a href=\"$url\">$wrapper</a></td> <td class=\"statut\">$statut</td>" >> $2 if [ $statut -eq 0 ] then #Nom et chemin vers les pages aspirées dump="DUMP-TEXT/$compte-$fichier-${wrappee%.*}" contexte="CONTEXTES/$fichier-$compte-$wrappee-contexts" index="index/$fichier-$compte-$wrappee-index" #Le script va nettoyer la page web en employant le navigateur textuel w3m si celui-ci est disponible #Sinon, si lynx est disponible, le script emploie Lynx #Si ni Lynx, ni w3m ne sont trouvés, le script s'arrête et renvoie une erreur. if [ $(which w3m) ] then w3m -O UTF-8 -dump $url > $dump elif [ $(which lynx) ] then echo "w3m non trouvé. Essai avec lynx" lynx -dump -nolist -display-charset=utf-8 $url > $dump else echo "ERREUR : veuillez installer Lynx ou W3m" exit 89 fi #Pour accommoder la morphologie particulière du finnois if [ $fichier == "poliitikko" ] then grep -Ei $dump -e "poliitikk?o" > $contexte else grep -Ei $dump -e "$fichier" > $contexte fi #Création de l'index du fichier cat $dump | grep -Ei -o "[[:alpha:]]+" | sort -f | uniq -ic | sort -rn > $index echo -e "<td class=\"encodage\">$(file -b --mime-encoding $copiz)</td> <td class=\"copie\"><a href=\"$copiz\">Copie locale</a></td> <td class=\"dump\"><a href=\"$dump\">dump</a></td> <td class=\"contexte\"><a href=\"$contexte\">contexte</a></td> <td class=\"index\"><a href=\"$index\">Index</a></td> </tr>" >> $2 else echo "<td colspan=\"5\" class=\"echec\">Page non téléchargée.</td>" >> $2 fi fi done < "$1/$fichier" # C'est ici qu'on indique à partir de quel fichier la boucle extrait les URLs. echo -e "<tr><td class=\"empty\" colspan=\"5\"></td>" >> $2 z="DUMP-TEXT/$fichier-global" echo "" > $z for file in $(ls "DUMP-TEXT" | grep -Ei -e "$fichier" | grep -vE -e "$fichier-global" ) do echo "Dumping $file in $z" cat "DUMP-TEXT/$file" >> $z echo -e "\n<§>\n" >> $z done echo -e "<td class=\"dump\"><a href=\"$z\">Dump global</a></td>" >> $2 cat $z | grep -Ei -o "[[:alpha:]]+" | sort -f | uniq -ic | sort -rn > "index/$fichier-index-global" z="CONTEXTES/$fichier-contexts-global" echo "" > $z for file in $(ls "CONTEXTES" | grep -Ei -e "$fichier" | grep -vE -e "$fichier-contexts-global" ) do echo "Dumping $file in $z" cat "CONTEXTES/$file" >> $z echo -e "\n\n" >> $z done echo -e "<td class=\"contexte\"><a href=\"$z\">Contextes globaux</a> </td> <td class=\"index\"><a href=\"index/$fichier-index-global\">Index global</a></td> </tr>" >> $2 echo -e "</table>" >> $2 echo -e "<div class=\"command\"> <a href=\"#\">Retourner en haut.</a> </div>" >> $2 done echo -e '\n <footer><a href="#">Retourner en haut</a> |' >> $2 echo -e ' <a href="analyse.html">Analyse des résultats</a>| <a href="script.html">Explications</a>| <a href="index.html">Accueil</a>' >> $2 echo -e '\n</body>\n</html>' >> $2 fi echo "Ouf !" exit 0 #Fin du script.