Rechercher dans ce blog

lundi 17 novembre 2014

Tableau HTML à 4 colonnes

Bonjour ! 

Aujourd'hui nous allons tout d'abord modifier le code écrit la semaine dernière car on y duplique les traitements sur tous les blocs d'URLs, ce qui n'est pas raisonnable d'un point de vue informatique. 
Ce que l'on attend, c'est que pour chacun des fichiers URL, on lance un et un seul traitement qui fonctionnera sur chaque ligne du fichier x.

On doit mettre en place un mécanisme qui prend en compte chacun des fichiers d'URLs qu'il va lire ligne par ligne. C'est donc deux boucles for imbriquées qui nous seront utiles ici.

Pseudo-code : pour chacun des fichiers (x)
                              pour chacune des lignes du fichier x
                              ...
Le script doit être modifié pour que le programme ne travaille plus sur des noms précis de fichier mais sur un ensemble de fichiers.

Attention toujours à la localisation dans l'arborescence, il faut savoir où l'on se trouve pour éviter les erreurs de "fichier introuvable" dans un programme.

On va donner au programme le chemin vers le répertoire qui contient les fichiers d'URLs et le chemin vers le fichier de sortie dans le fichier paramètres. 

Les deux boucles imbriquées se présentent ainsi dans le code, puisque pour chacun des fichiers on souhaite créer un tableau qui s'affichera sur la page HTML :
Pseudo-code : pour chacun (x) des fichiers du dossier URLS
                             x déclarer le début du tableau HTML (x)
                                 pour chacune des lignes du fichier x
                                       code écrit précédemment

Ensuite, on déplace les compteurs qui sont désormais mal situés. 
Le compteur de langue doit être incrémenté juste avant de commencer un nouveau tableau.
Le compteur de lignes : le bon endroit pour définir ce compteur est juste avant la deuxième boucle for, c'est-à-dire celle qui nous sert à lire chaque ligne d'un fichier x. 

Attention, cette étape est très importante car la fois prochaine le code aura triplé (voire quadruplé) au niveau du nombre de lignes. 

A présent, nous allons ajouter une nouvelle colonne au tableau : la colonne DUMP qui récupérera le contenu textuel des URLs, avec comme contrainte que l'encodage soit en utf-8. 
Ce qu'il faut faire concrètement :
Pseudo-code : si (URLi) est encodée en UTF-8
                              aucun problème
                       sinon
                              récupérer (URLi)
                              transcoder en UTF-8

La commande file est capable de détecter, pour un fichier dans l'arborescence, l'encodage de celui-ci par rapport aux caractères utilisés ; elle ne lit pas le charset. Le souci, c'est qu'elle ne fonctionne pas toujours bien, dans ce cas, il faudra aller directement chercher le charset. 

Comment ne récupérer que la valeur de l'encodage ?
On introduit une autre nouvelle commande : cut. Cette commande nous permet de travailler sur des fichiers généralement structurés en colonnes. On peut n'afficher que certaines colonnes spécifiques. Cut est une commande très sophistiquée qui considère par défaut que le délimiteur est la tabulation mais on peut lui donner un autre délimiteur, par exemple "=, ce qui va nous intéresser ici pour récupérer la valeur de l'encodage (pas d'ambiguité possible car il n'y a qu'un seul "=" dans la chaîne de caractères de l'encodage). 
On peut mémoriser le résultat de cette commande dans une variable pour ensuite par exemple l'afficher à l'écran grâce à la commande echo. 

Pour ajouter la colonne DUMP à notre tableau, nous allons nous servir de la commande lynx (ancêtre de Firefox). Lynx prend comme argument une URL, c'est un navigateur en ligne de commandes. On peut surfer mais de manière rustique. 
L'option -dump va permettre, associée à la commande lynx, de récupérer le contenu textuel de la page sur laquelle on travaille. 
L'option -nolist élimine les liens.
L'option -display_charset va permettre de spécifier l'encodage du fichier de sortie en conservant l'encodage du fichier initial. Attention cependant aux problèmes d'aspiration

On va essayer de modifier le programme pour ne mettre en place le traitement que sur des fichiers codés en utf-8. Pour le moment, on met en place une boucle de ce type :
if condition
   then ...
   else ...
Syntaxe en bash : if [[encodage=="utf-8" ]]

Dans la boucle, on n'exclut aucune URL mais pour celles en utf-8, le contenu textuel est récupéré alors que pour les autres, il n'y a que de l'affichage.

Voyons maintenant ce que tout cela donne en images (cliquez dessus pour les agrandir) :

Le nouveau fichier paramètres

Le début du script

La fin du script

Le début du tableau des URLs en tchèque

Le début du tableau des URLs en anglais

Le début du tableau des URLs en espagnol

Le début du tableau des URLs en français

Tout irait bien s'il n'y avait pas ces erreurs avec la commande curl...





Que faire pour éviter cela ? Nous allons y réfléchir et essayer de trouver une solution que nous vous donnerons sur ce blog...

A très vite pour la suite !

Aucun commentaire:

Enregistrer un commentaire