#/usr/bin/perl

#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]"; 
#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(FILEOUT,">:encoding(utf8)","le_monde_$rubrique.txt"); 
open(XML, ">:encoding(utf8)", "le_monde_$rubrique.xml");
#ecriture en-tête 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>\n\n";
print XML "</Document>\n";
#on ferme nos deux fichiers de sortie 
close XML;
close FILEOUT; 


exit;
#----------------------------------------------
#definition de la fonction de parcours
sub parcoursarborescencefichiers {
	#declaration de la variable path, shift va supprimer le premier élément du tableau @_ et le renvoyer 
my $path = shift(@_);
#fonction qui permet d'ouvrir un repertoire à la manière de l'ouverture d'un fichier 
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 =~ /^\.\.?$/;
next if $file =~ /^\._/;
next if $file =~ /^fil/;
		$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);	#recurse!
			print "<FIN REPERTOIRE> ==> ",$file,"\n";
		}
		#on arrive sur fichier
		if (-f $file) {
			if ($file =~m/.*$rubrique.+\.xml$/){ #m=match si l'extension est xml
				$codage = "utf-8";
				
				#initialisation d'un variable ou seront stockées les données
				my $ensemble="";
				open(FILEIN, "<:encoding(utf8)", $file);

				#tant qu'on lit une ligne du fichier $input on supprime le dernère caractère \n 
				while (my $ligne=<FILEIN>) {
					chomp $ligne;
					#suppression de la tabulation
					$ligne=~s/\t//g;
					#concatenation 
					$ensemble = $ensemble . $ligne; 
					$ensemble=~s/> +</></g;

				}
				#tant qu'il existe dans mon texte quelque chose qui est la forme de l'expression régulière 
				#on sauvergarde dans des variables ce qui se trouve entre les balises <title> et <description>
				while ($ensemble=~ m/<item>.*?<title>(.*?)<\/title>.*?<description>(.*?)<\/description>/g) {
					if (!(exists $redondant{$title})) 

					{
					my $title=$1;
					#on lance la fonction point qui ajoute un point après chaque titre 
					my $title_point = &point($1);
					#on lance le nettoyage du titre et de la description 
					my $title_clean = &nettoyage($title_point);
					my $description=$2;
					$description = &nettoyage($2);

					#initialisation du compteur pour compter les balises item 
					$compteur=$compteur+1;
					#incrémentation de la variable redondant 
					$redondant{$title}=1;
					#on écrit dans le fichier texte les titres et descriptions après nettoyage
					print FILEOUT "$title_clean\n$description\n\n"; 
					#on écrit dans le fichier XML
					print XML "<item num=\"$compteur\">\n<title>\n$title_clean</title>\n\n<description>\n$description</description>\n</item>\n\n"; 
					}
				}
				
				close FILEIN; 

			} 
		}
}
}

#---------------------------------------------------
#fonction qui ajoute un point après chaque titre

sub point {

	my $var1=shift @_;
	$var1.=".";

	return $var1;
}
#---------------------------------------------------
#fonction qui nettoie toutes les entités 
sub nettoyage {
my $ensemble=shift;
$ensemble =~ s/&lt;.+?&gt;//g;
$ensemble=~s/&amp;/et/g;
$ensemble=~s/amp;/et/g;
$ensemble=~s/&/et/g;
return $ensemble;
}

