#!usr/bin/perl
use XML::RSS;
use strict;


#récupération du nom de l'arborescence
my $rep="$ARGV[0]";
my $rubrique="$ARGV[1]";
my %dico=();
my $compteur=0;


#deux sorties en txt et en xml
open my $output1,">>:encoding(UTF-8)","3210_rubrique.txt";
open my $output2,">>:encoding(UTF-8)","3210_rubrique.xml";
print $output2 "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
print $output2 "<rubrique>\n";


#parcours de l'arborescence des fichiers
&parcours($rep);
sub parcours{
#on récupère l'argument passé à la procédure $rep (Perl range les arguments de la procédure dans une liste spéciale: @_)	
my $path=shift(@_);
#voir le contenu : ouverture du répertoire 
opendir(DIR,$path);
#récupère la liste des fichiers du répertoire et la lit
my @liste=readdir(DIR);
#on examine un à un les fichiers du répertoire 
foreach my $file (@liste) {
#on ne conserve pas les répertoires courant et parent	
next if $file=~ /^\.|\.$/;
#réécriture des localisations des ressources
$file=$path."/".$file;
#teste le statut de la chaine de caractère : est-ce que c'est un dossier?
#si c'est un répertoire, on lance le parcours
if (-d $file) {
&parcours($file);
}
#teste le statut de la chaine de caractère : est-ce que c'est un fichier?
if (-f $file) {
#on veut traiter les fichiers de la rubrique avec l'extension xml	
if ($file=~ /.*$rubrique.+\.xml/) {
open my $input,"<:encoding(UTF-8)","$file";
#on récupère le contenu de la balise titre et de la balise description
my $rss=new XML::RSS;
# on remplit l'objet, qui est un tableau associatif, via parsefile
eval {$rss->parsefile($file);};
foreach my $item (@{$rss->{'items'}}) {
my $description=&nettoyage($item->{'description'});
my $titre=&nettoyage($item->{'title'});
#remplissage du dictionnaire sans doublon
if (!(exists $dico{$titre})){
$dico{$titre}=$description;
$compteur=$compteur+1;


#impression des données 
print  $output1 "Titre : $titre\n";
print $output1 "Description : $description\n\n";
print $output2 "<item number=\"$compteur\"><title>$titre</title>\n";
print $output2 "<description>$description</description></item>\n";
}


#sous programme de nettoyage des données
sub nettoyage{
#variable qui récupère le premier élément de la liste (premier argument)
my $text=shift(@_);
# s = substitute / g=substitution globale
$text=~ s/<!\[CDATA\[//g;
$text=~ s/\]\]//g;
#on remplace les fins de ligne par des points
$text=~ s/$/\./g;
$text=~ s/>.//g;
#si plusieurs points on remplace par un seul point
$text=~s/\.+$/\./g;
$text=~ s/<a href[^>]+>//g;
$text=~ s/&/&amp\;/g;
$text=~ s/&#38;#34;//g;
$text=~ s/&#38;#39;//g;
#retourner la chaîne de caractères nettoyée
return $text;
}
}
}
}
}
}
print $output2 "<\/rubrique>\n";