#!/bin/sh ## # Ce programme présente sous forme d'un tableau html, un ensemble # de quadruplets {O, A, L, C} tel que # - O est l'URL d'une page sur un serveur distant. # - A est l'URL d'une version aspirée par wget # et enregistrée localement de la page désignée par O. # - L est l'URL d'une version enregistrée localement # et sous format texte (lynxée) de la page désignée par A. # - C est l'URL d'une page enregistrée localement correspondant à # l'extraction du contexte où apparait un mot donnée par egrep dans la # page désigné par L. # # Usage : $0 fichierUrl "T"; # Où : # - fichierUrl est un fichier texte contenant une liste d'URLs # - T est le titre indiquant le lien sémantique (l'usage) qui est fait # par cette liste d'URLs. # Rq : Si le bon nombre d'argument n'est pas fourni le programme rentrera dans # un mode intéractif. # # Le fichier html produit contenant le tableau html sera nommé selon la # convention suivante : Si fichierUrl=base.ext ou base alors son # nom sera base.html # # Chaque page désignée par un élément du quadruplet sera enregistrée dans son # répertoire # correspondant et dans un sous répertoire dont le nom correspondrat à base_rep. # ## ### Initialisation des données configurables ## # # # # # Mot constituant le thème du projet. Ce mot sera dans toutes les pages # désignées par un élément du quadruplet. MOT="barrage"; # Nombre de lignes souhaitées pour illustrer le contexte d'utilisation # d'un mot. NBContexte=1; # Nb de paramètres attendu sur la ligne de commande NBPARAM=3; # Nb max d'occurence du mot apparaissant dans le résumé contexte. NBm=1; # Seront utilisé que s'il y a des URLs du monde. user="plurital" pass="20060220" # Répertoires contenants les différents sous-répertoires, constituant # l'arborescence pré-définies du projet. BREPASP="PAGES-ASPIREES"; BREPCONT="CONTEXTES"; BREPDUMP="DUMP-TEXT"; BREPURL="LISTES-URL"; BJOURNAL="JOURNAL"; # Liste contenant les répertoires principaux. tabRep="$BREPASP $BREPCONT $BREPDUMP $BREPURL $BJOURNAL"; #importe les fonctions . ./programmes/functions.sh ### Acquisition des paramètres soit par lecture sur la ligne de commande ## # soit par l'entrée standard. # # # # On teste si la ligne de commande ne contient pas le bon nombre d'argument. if [ $# != $NBPARAM ] then infouser "Usage: $0 fichierUrl \"titre pour les usages\"\n"; infouser "Entre dans le mode interactif\n"; #- Si le 1er paramètre n'est pas défini if [ -z $1 ] then infouser "Tapez le nom de fichier contenant les URLs à traiter : \n"; read fichierUrl; else fichierUrl=$1; fi #- Si le 2ème paramètre n'est pas défini if [ -z $2 ] then infouser "Tapez le titre pour les usages de ces URLs : \n"; read titre; else titre=$2; fi #- Si le 3ème paramètre n'est pas défini if [ -z $3 ] then infouser "Tapez le MOT à explorer : \n"; read MOT; else MOT=$3; fi else # La ligne contient le bon nombre d'arguments. fichierUrl=$1 titre=$2 MOT=$3 fi # Test de l'existence du fichier d'url dans le répertoire courant. # ou dans le répertoire LISTES-URLS ainsi que de sa régularité. if [ ! -f $fichierUrl ] && [ ! -f $BREPURL/$fichierUrl ] then infouser "Le fichier $fichierUrl n'existe ni dans le répertoire courant\n"; infouser " ni dans le répertoire $BREPURL ou n'est pas un fichier régulier\n"; # erreur. exit 1; fi ### Création de l'arborescence et du fichier html résultat. # # # # # Création de l'arborescence de niveau 1. for rep in $tabRep do # Test si $rep existe et est un répertoire. if [ ! -d $rep ] then infouser "le repertoire $rep n'existe pas, je le créé\n" mkdir $rep || exit 1 fi done # Extraction de la base du nom de $fichierUrl. fichier=`echo $fichierUrl|cut -d . -f 0,1` # Création des noms des sous répertoires. repPageAsp=$BREPASP/$fichier"_rep"; repPageLynx=$BREPDUMP/$fichier"_rep"; repPageContexte=$BREPCONT/$fichier"_rep"; repPageJournal=$BJOURNAL/$fichier"_rep"; # Liste contenant chaque sous répertoire. tabSousRep="$repPageAsp $repPageLynx $repPageContexte $repPageJournal"; ## Création des différents sous-répertoires s'ils n'existent pas. # for rep in $tabSousRep do if [ ! -d $rep ] then # Le repertoire n'existe pas. infouser "le repertoire $rep n'existe pas, je le créé\n" mkdir $rep || exit 1 fi done # Le fichier html résultat. ficHtml=$repPageJournal/$fichier.html; # Nom du fichier Url complet. RfichierUrl=$BREPURL/$fichierUrl; if [ -f $fichierUrl ] then # Le fichier URL est dans le repertoire courant, il faut le déplacer. mv $fichierUrl $RfichierUrl || exit 1 fi #### # # # Compte le nbr d'URL dans $RfichierUr nbUrl=`cat $RfichierUrl|wc -l` nbPageATelecharger=$nbUrl action="N" if [ -f $ficHtml ] then # La page html existe. # Gestion des choix utilisateurs. echo "Le fichier $ficHtml existe déjà :" echo "Taper E pour écraser la page html et recommencer les téléchargements à partir de ce fichier URL." echo "Taper C pour concaténer les résultats." echo "Taper Q pour quitter le programme maintenant." read choix case "$choix" in "C" | "c" ) echo "Vous concatenez le fichier" # appelle la fonction test_coherence test_coherence_corpus if [ $? -ne 0 ]; then echo "Etat du corpus incohérent"; exit 1; fi; # prepare la concatenation, recopie début fichier, compose nouveau fichier URL # en faisant la différence du fichier URL passé en paramètre et de ce qui existe déjà concatenation if [[ $? -ne 0 ]]; then echo "Concatenation impossible"; exit 1; fi; action="C" break ;; "E" | "e" ) echo "Vous écraser le fichier html mais pas les pages déjà téléchargées" action="E" # On va continuer le traitement normal. break ;; "Q" | "q" ) echo "Au revoir" exit 0 ;; * ) # Cas par défaut. echo "Vous ne respecter pas les consignes, au revoir" exit 0 ;; esac fi # Compte le nombre d'URL dans le fichier d'URL. infouser "Nbe d'URLs dans $RfichierUrl : $nbUrl" infouser "Nbre d'URLs à télécharger $nbPageATelecharger"; ### Début des traitements ### # # # # # Le fichier n'existe pas je créer les headers if [ "$action" != "C" ] then echo "<html>" > $ficHtml echo_header $titre $ficHtml echo "<body><table border=1>" >> $ficHtml; # Ecriture à la suite. echo "<h1>$titre</h1>" >> $ficHtml; echo "<tr><td>URL</td><td>Page Aspirées : <BR> $repPageAsp</td><td>Page Lynxée : <BR> $repPageLynx</td><td>Contexte : $NBm occ. <BR>$repPageContexte</td></tr>" >> $ficHtml; # Création dynamique des noms de fichiers locaux. Tous les éléments d'un même # quartet ont un nom de fichier dont la base est un même chiffre. nbPageHtml=0 #Puisque le fichier n'est pas concaténé les noms de fichier vont commencer à 1 echo "action $action" fi ## Début de la boucle principale # : $[ fileName=$nbPageHtml + 1 ] for url in `cat $RfichierUrl` do # On télécharge la page, elle portera l'extension .html ficDestAsp="$repPageAsp""/""$fileName"".html" cmd="wget -N --user=$user --password=$pass --dns-timeout=60 --connect-timeout=60 -O $ficDestAsp $url" infouser $cmd "\n"; `$cmd`; err=$? # enregistre le code de sortie de wget. # on teste si wget à réussi, le test de l'existence # du fichier ne suffit pas, wget le créé dans tous les cas, il faut # donc tester le code de sortie 0 succès, autre erreur. if [ -f $ficDestAsp ] && [ $err -eq '0' ] then # On lynxe la page ficSourceLynx=$ficDestAsp # Les pages lynxées ont l'extension .txt ficDestLynx="$repPageLynx""/""$fileName"".txt" cmd2="lynx -force_html -dump $ficSourceLynx > ./$ficDestLynx" infouser $cmd2 "\n"; #`$cmd2`; # Ne marche pas en passant par la variable intermédiaire !! lynx -force_html -dump $ficSourceLynx > ./$ficDestLynx # On grep le contexte de la page à partir de la page lynxée ficSourceCont=$ficDestLynx; # # Le contexte porte aussi l'extension .txt ficDestCont="$repPageContexte""/""$fileName"".txt" cmd2="grep -i $MOT -C $NBContexte $ficSourceCont > ./$ficDestCont" infouser $cmd2, "\n"; #`$cmd2` # Ne marche pas en passant par la variable intermédiaire !! # -C est equivalent à -A et -B egrep -i $MOT -C $NBContexte $ficSourceCont > ./$ficDestCont specFicDestCont="$BREPCONT\/""$fichier""\_rep""\/""$fileName"".txt"; contexte=`grep $MOT -C $NBContexte -m $NBm $ficSourceCont|sed -e "s/$MOT/\<a href=..\/..\/$specFicDestCont\>$MOT\<\/a\>/g"`; # Ajout dans le tableau html. # Ici <tr> est début de ligne (quartet), <td> est une colonne (élément du quartet) echo "<tr> <td><a href=$url>$fileName</a></td> <td><a href=../../$ficDestAsp>$fileName.html</a></td> <td><a href=../../$ficDestLynx>$fileName.txt</a></td> <td>$contexte</td> </tr>" >> $ficHtml; : $[ fileName=$fileName + 1 ] fi done echo "</table></body></html>" >> $ficHtml;