Boîte à outils I

Les objectifs

Le but de la boîte à outil 1 est de créer un script perl capable de parcourir l'arborescence des fichiers XML récupérés via le flux RSS du site de presse Le Monde.
On doit ensuite extraire le contenu des rubriques qui nous intéressent. On veut récupérer en sortie tous les contenus concaténés des balises <title> et <description> dans les fils RSS (flux de l'année 2012 dont on aura au préalable télécharger l'archive) de deux façons différentes :

Les scripts

Pour réaliser la boîte à outils 1, on a mis en place deux scripts :
Version Expressions Régulières (voir le script)

Tout d'abord le script va parcourir le répertoire (et ses éventuels sous-répertoires) qui a été passé en argument au programme. Tant qu'il n'y a pas de fichier lu, le programme continue à explorer les sous-répertoires. Sinon, lorsqu'un fichier est lu alors le traitement peut commencer. Tout d'abord le programme va veiller à ce que le fichier respecte certains critères de sélection (pas vide, pas de fichier inutiles) :

On lit le répertoire qui contient les documents XML du flux RSS

Ensuite on va tester si le fichier XML parcouru appartient à une rubrique déjà rencontrée (grâce aux expression régulières), auquel cas on concatènera les nouvelles informations (contenus des balises 'title' et 'description', récupérés via une expression régulière) sinon, on crée le nouveau fichier XML :

On teste si le fichier parcouru correspond à une rubrique déjà parcourue

Puis on procède au traitement du contenu de ces balises en veillant à ne récupérer qu'une seule fois le contenu de chaque balise : on ne veut pas de doublons. Une fois le traitement pour chaque contenu effectué, on enregistre ces contenus dans une variable (avec de nouvelles balises) qui nous permettra d'intégrer ces données au fichier de la rubrique traitée à la fin du traitement :

On récupère le contenu des balises <title> et <description> mais une seule fois

Enfin on imprime ces contenus traités dans les fichiers correspondant (rubrique par rubrique) :

On imprime ces contenus dans les nouveaux documents XML créés : un document par rubrique

Cependant il ne faut pas oublier de fermer les balises ouvertes pendant la phase de traitement des contenus sinon on aura comme sorties des documents XML mal formés :

On ferme les balises ouvertes en début de traitement



Le sous-programme de nettoyage des contenus

Version avec le module XML::RSS (voir le script)

Pour cette version, la lecture du/des répertoires se fait de la même façon que pour la version avec les expressions régulières. De plus, pour la reconnaissance des rubriques, on procède de la même manière. Cependant, pour le traitement des contenus, il commence à y avoir des différences...

La procèdure de traitement des contenus de ces balises se fait à l'aide du module XML::RSS qui sait identifer la structure arborescente d'un document XML issu d'un flux RSS. :

Identification des balises <title> et <description> et association de leur contenu

La vérification des contenus se fait de la même manière :

Vérification des contenus (s'ils existent déjà)

Quant à l'impression des données dans les documents XML et texte brute ainsi qu'à la fermeture des balises ouvertes lors du traitement, le processus est le même.

Cependant, quelques difficultés se sont présentées à nous pendant cette phase de traitement, essentiellement dues aux modules à installer avant de pouvoir utiliser XML::RSS. Voilà comment les résoudre :
  1. installer le programme CPAN (si ce n'est pas déjà fait). Elle permet d'installer un module directement depuis internet (sous-entend alors une connexion internet ^^) et ce de manière automatique; mode d'emploi :
    Tapez la commande suivante dans votre terminal (unix) :
    cpan nom_du_module::nom_de_la_bibliothèque (XML::Parser, XML::Entities...)
  2. installer le package libexpat1-dev
  3. installer le module XML::Parser. Dans un terminal, tapez : cpan XML::Parser
  4. installer le module XML::RSS. Dans un terminal, tapez : cpan XML::RSS

Les résultats

Une fois l'exécution des programmes terminées, on obtient alors un total de 17 fichiers pour 17 rubriques différentes dans chacune des versions, dont voici un échantillon :

Version expression régulière :

RubriquesFichiers textesDocuments XML
CinémaCinéma.txtCinéma.xml
MédiasMédias.txtMédias.xml
Rendez-vousRendezvous.txtRendezvous.xml
VousVous.txtVous.xml
VoyageVoyage.txtVoyage.xml

Version RSS :

RubriquesFichiers textesDocuments XML
CinémaCinéma.txtCinéma.xml
MédiasMédias.txtMédias.xml
Rendez-vousRendezvous.txtRendezvous.xml
VousVous.txtVous.xml
VoyageVoyage.txtVoyage.xml