BASH : nouvelle étape
Nous avons repris notre programme précédent, et nous y avons apporté quelques améliorations, à savoir :
- Nous avons amélioré la détection de l'encodage des pages en utilisant la commande file sur la page aspirée, avant d'exécuter le dump. Nous avons ainsi pu repérer a priori l'encodage des pages pour pouvoir les traiter différemment grâce à une clause if.
Voici donc notre nouveau programme :
#!/bin/bash
read EnsembleURL;
read tablo;
# mise en place de l'en-tête de la page html
echo "<html>" >$tablo;
echo "<head>" >> $tablo;
echo "<meta http-equiv=\"Content-Type\" content=\"texte/html;charset=ISO-8859-1\"> </head> <body> <center>">> $tablo;
# création de l'en-tête d'un tableau et récupération du fichier URLS désiré. Début de la boucle 1
for fichier in `ls $EnsembleURL`; #debut de la boucle 1
do echo "<table border=\"2\">" >> $tablo;
echo "<th bgcolor=\"grey\" colspan=\"5\">Liste URL $fichier</th><tr><td bgcolor=\"#A9A9A9\" align=\"center\">nº</td><td bgcolor=\"#A9A9A9\" align=\"center\">URL</td><td bgcolor=\"#A9A9A9\" align=\"center\">Pages aspirées</td><td bgcolor=\"#A9A9A9\" align=\"center\">Dump UTF-8</td><td bgcolor=\"#A9A9A9\" align=\"center\">Dump Autre Encodage</td></tr>" >> $tablo;
numligne=1;
# création du corps d'un tableau. boucle 2
while read url
do
echo "url n°$numligne du fichier $fichier : $url"; #affichage dans le terminal d'URL qu'il est en train de traiter
curl -L $url >./PAGES-ASPIREES/$fichier$numligne.html; #aspiration de l'URL
echo "<tr><td align=\"center\"> <font color=\"red\">$numligne</font> </td>" >>$tablo; #impression de la premiere colonne
echo "<td align=\"center\"><a href=\"$url\" target=\"_blank\">URL nº$numligne</a></td>" >>$tablo; #impression de la deuxieme colonne
echo "<td align=\"center\"><a href=\"../PAGES-ASPIREES/$fichier$numligne.html\" target=\"_blank\">Page Aspirée nº$numligne</a></td>" >> $tablo; #impression de la troisieme colonne
encodage=$(file -i PAGES-ASPIREES/$fichier$numligne.html | cut -d = -f2); #trouver l'encodage de l'URL
if [ "$encodage" = "utf-8" ]
then
lynx -dump -nolist -display-charset="UTF-8" $url >./DUMP-TEXT/$fichier$numligne.txt; #dumper la page en UTF-8
echo "<td align=\"center\"><a href=\"../DUMP-TEXT/$fichier$numligne.txt\" target=\"_blank\">Résultat du dump initial nº$numligne</a> <br> $encodage</td>" >> $tablo; #impression de la quatrieme colonne
echo "<td align=\"center\"></td></tr>" >> $tablo; #impression de la cinquieme colonne
else
lynx -dump -nolist -display-charset="$encodage" $url >./DUMP-TEXT/$fichier$numligne.txt; #dumper la page dans l'encodage desire
echo "<td align=\"center\"></td>" >> $tablo; #impression de la quatrieme colonne
echo "<td align=\"center\"><a href=\"../DUMP-TEXT/$fichier$numligne.txt\" target=\"_blank\">Résultat du dump initial nº$numligne</a> <br> $encodage</td></tr>" >> $tablo; #impression de la cinquieme colonne
fi
let "numligne=numligne+1"; #incrementation d'une variable numligne
done <./$EnsembleURL/$fichier; #fermeture de la boucle
echo "</table><br><br>" >> $tablo; #impression de la fermeture du tableau
done < $EnsembleURL/$fichier/; # fin de la boucle 1
# fin de la page html
echo "</center></body></html>" >> $tablo;
Quelques soucis cependant cette semaines :
- Certaines pages dont l'encodage était détecté comme de l'UTF-8 ont mal été dumpées : en allemand, par exemple, toutes les lettres avec des umlaut : ä, ü, ö sont mal affichées. Il s'agit peut-être d'une erreur lors de la détection de l'encodage.
- Certaines pages sont bien aspirées, mais le résultat de la page dumpée affiche une erreur. Il s'agit peut-être de pages avec redirection, que nous avons réussi à aspirer grâce à l'option -L de curl. Peut-être avons-nous intérêt de travailler sur les pages aspirées directement, à moins qu'il existe une option de lynx, équivalente à celle -L de curl?
- Nous avons essayé, mais nous n'avons vraiment pas réussi à ajouter une clause sur le retour de curl, afin de ne poursuivre le traitement que sur les pages accessibles. Nous avons essayé les options -w http_code (ou --write-out http_code) et -f (ou --fail). Nous n'avons pas réussi à en comprendre le fonctionnement, malgré des tests sur le terminal et la lecture du manuel. La sortie que nous obtenons est la page aspirées avec une suite de nombres, correspondant sans doute au retour de curl, mais nous n'avons pas su les déchiffrer. Nous attendons le prochain cours avec impatience.