#!/usr/bin/perl

#$rep = le répertoire
my $rep="$ARGV[0]"; 
#$rub = la rubrique à traiter 
my $rub="$ARGV[1]";
#on vérifie s'il y a des doublons  
my %doublon; 

#création des fichiers XML et TXT
open(OUTTXT,">:encoding(utf8)","$rub.txt"); 
open(OUTXML, ">:encoding(utf8)", "$rub.xml");
#en-tête XML  
print OUTXML "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
print OUTXML "<root>\n";

# on vérifie que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;
# on lance la fonction de la récursion
&recursion($rep);	

#on crée la balise fermante pour le fichier xml
print OUTXML "</root>\n";
#ferméture des fichiers XML et TXT
close OUTXML;
close OUTTXT; 

exit;

#definition de la fonction de parcours
sub recursion {
# shift permet de supprimer le 1er é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 "je ne peux pas ouvrir $path: $!\n";
#fonction readdir rassemble tous les fichiers/répertoires 
    my @files = readdir(DIR);
    closedir(DIR);
#pour chaque fichier 
    foreach my $file (@files) {
#passe au suivant si l'élément est un chemin 
		next if $file =~ /^\.\.?$/;
        next if $file =~ /^\._/;
        next if $file =~ /^fil/;
		$file = $path."/".$file;
#si c'est un repertoire - d appliqué a un objet est vrai  
		if (-d $file) {
			print "REPERTOIRE : ",$file,"\n";
#on lance le parcours du repertoire 
			&recursion($file);	
#recursion
			
		}
#quand on est au niveau de fichier
		if (-f $file) {
			if ($file =~m/.*$rub.+\.xml$/){ 
				print "fichier num.",$i++,": ",$file,"\n";
				$codage = "utf-8";
				
#la variabl où on stocke des données
				my $tout_le_texte="";
				open(FILEIN, "<:encoding(utf8)", $file);  

				while (my $ligne=<FILEIN>) {
					chomp $ligne;
#on supprime la tabulation
					$ligne=~s/\t//g;
#concatenation 
					$tout_le_texte = $tout_le_texte . $ligne; 
					$tout_le_texte=~s/> +</></g;

				}
#on cherche dans le texte ce qui se trouve entre les balises 'title' et 'description' à l'aide de regex

				while ($tout_le_texte=~ m/<item>.*?<title>(.*?)<\/title>.*?<description>(.*?)<\/description>/g) {
					if (!(exists $doublon{$title})) 
					{
					my $title=$1;
#on ajoute un point après chaque titre 
					my $ajout_point = &point($1);
#on nettoye le titre et la description 
					my $titre_nettoye = &clean($ajout_point);
					my $description=$2;
					$description = &clean($2);

#le compteur pour les balises 'article' 
					$compteur=$compteur+1;
#initialisation de la vérification des doublons
					$doublon{$title}=1;
#écriture dans le fichier .txt
					print OUTTXT "$titre_nettoye\n\n$description\n\n"; 
#écriture dans le fichier .xml
					print OUTXML "\t<article num=\"$compteur\">\n\t\t<titre>$titre_nettoye</titre>\n\n\t\t<description>$description</description>\n\t</article>\n\n"; 
					}
				}
				
				close FILEIN; 

			} 
		}
    }
}

#---------------------------------------------------
#déclaration de la fonction qui ajoute un point après chaque titre

sub point {

	my $var1=shift @_;
	$var1.=".";

	return $var1;
}
#---------------------------------------------------
#fonction du nettoyage
sub clean {
    my $tout_le_texte=shift;
    $tout_le_texte =~ s/&lt;.+?&gt;//g;
    $tout_le_texte=~s/&amp;/et/g;
    $tout_le_texte=~s/amp;/et/g;
    $tout_le_texte=~s/&/et/g;
    return $tout_le_texte;
}

