#!/usr/bin/perl

#ce script utilisera la bibliothéque XML::RSS
use XML::RSS;

#-----------------------------------------------------------
#déclarations des variables d'arguments 
#$rep = le nom du répertoire dans lequel on va aller chercher les fichiers à traiter
my $rep="$ARGV[0]";
my $rss=new XML::RSS;
#la rubrique qu'on va traiter 
my $rubrique="$ARGV[1]";
#tableau qu'on utilise pour vérifier que les données stockées étaient déjà récupérées (1 seule fois seulement)
my %redondant;

#création du fichier TXT et du fichier XML en sortie 
open(TXT,">:encoding(utf-8)","lemonde_rss$rubrique.txt");
open(XML,">:encoding(utf-8)","lemonde_rss$rubrique.xml");

#ecriture du début du fichier XML
print XML "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
print XML "<Document>\n";
print XML "<Extraction>\n\n";
#-----------------------------------------------------------

# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;

#----------------------------------------
# on lance la récursion.... et elle se terminera après examen de toute l'arborescence
&parcoursarborescencefichiers($rep);
#----------------------------------------

#on referme les balises d'en tête
print XML "</Extraction>";
print XML "</Document>\n";
#on ferme nos deux fichiers de sortie 
close XML;
close TXT;

exit;
#------------------------------------------
#definition de la fonction de parcours et de filtrage avec le module XML::RSS
sub parcoursarborescencefichiers {
	#declaration de la variable path, shift va supprimer le premier élément du tableau @_ et le renvoyer 
	my $path = shift(@_);
	#la fonction opendir prend deux arguments
	opendir(DIR, $path) or die "can't open $path: $!\n";
	#fonction readdir va rassembler dans ce tableau tous les fichiers/répertoires contenus dans le répertoire principal
	my @files = readdir(DIR);
	
closedir(DIR);
#pour chaque fichier parmi tous les fichiers
	foreach my $file (@files) {
		#passe au suivant si l'élément sur lequel on est, est un chemin 
		next if $file =~ /^\.\.?$/;
		$file = $path."/".$file;
		#- d appliqué a un objet sera vrai si c'est un repertoire 
		if (-d $file) {
			print "<NOUVEAU REPERTOIRE> ==> ",$file,"\n";
			#on relance le parcours de repertoire
			&parcoursarborescencefichiers($file);	
			print "<FIN REPERTOIRE> ==> ",$file,"\n";
		}
		#on arrive sur fichier
		if (-f $file) { #m=match si l'extension est xml
			if ($file=~m/$rubrique.+\.xml$/){
				print "<",$i++,"> ==> ",$file,"\n";
				
				
				eval {$rss->parsefile($file); };
				if( $@ ) {
					$@ =~ s/at \/.*?$//s; 
					print STDERR "\nERROR in '$file':\n$@\n";
				}
				else {
					foreach my $item (@{$rss->{'items'}}) {
						my $description=$item->{'description'};
						my $titre=$item->{'title'};
						
						if (!(exists $redondant{$titre})) {
							$redondant{$titre}=1;
							my ($titre_propre_rss,$description_propre_rss) = &nettoyage($titre,$description);
							#on écrit dans le fichier txt 
							print TXT "$titre_propre_rss\n";
							print TXT "$description_propre_rss\n\n";

							$compteurItem++;
							#on écrit dans le fichier XML
							print XML "<item number=\"$compteurItem\">\n<titre>\n$titre_propre_rss</titre>\n\n<description>\n$description_propre_rss</description>\n</item>\n\n";
						}
					}
				}
				
			}
		}
		
		
	}

}


#----------------------------------------------

sub nettoyage {

	#on vide la liste des arguments
	my $var1=shift @_;
	my $var2=shift @_;
	
	#on rajoute un point à la fin de chaque titre 
	$var1.=".";
	#on remplace le & par la forme et 
$var1=~s/&amp;/et/g;
$var1=~s/amp;/et/g;
$var1=~s/&/et/g;
$var1 =~ s/&lt;.+?&gt;//g;
$var2=~s/&amp;/et/g;
$var2=~s/amp;/et/g;
$var2=~s/&/et/g;
$var2 =~ s/&lt;.+?&gt;//g;

	
	return $var1,$var2;

}

#-----------------------------------------------