#/usr/bin/perl

#-----------------------------------------------------------
# Ce programme s'utilise ainsi :
# perl parcours-arborescence.pl ../2021 3232
# Il prend en arguments 2 éléments : (1) le nom de l'arborescence 2021
# contenant les fils RSS de l'année 2021, (2) le nom de la rubrique à traiter
# ici 3232 pour idées
# et 3476 pour cinéma
#-----------------------------------------------------------


use utf8;
use strict;


#fonction pour créer un répertoire
use File::Path qw(make_path);


binmode(STDOUT, ":encoding(UTF-8)");

#-----------------------------------------------------------

if ($#ARGV != 1) {print "Il manque un argument à votre programme....\n";exit;}


#on récupère les arguments dans des varibles
my $rep="$ARGV[0]";
my $RUBRIQUE="$ARGV[1]";


#on crée un répertoire avec le nom de la rubrique
make_path($RUBRIQUE);


# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;


#on crée et on ouvre des fichiers de sortie
open my $output_txt, ">:encoding(UTF-8)","$RUBRIQUE/corpus-titre-description.txt";
open my $output_xml, ">:encoding(UTF-8)","$RUBRIQUE/corpus-titre-description.xml";


#on écrit les premières balises xml dans le fichier de sortie xml
print $output_xml "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<corpus>\n";
#----------------------------------------


#on lance la fonction sur le répertoire 2021
&parcoursarborescencefichiers($rep);	#recurse!
#----------------------------------------


#on écrit la dernière balise xml et on ferme les fichiers de sortie
print $output_xml "</corpus>\n";
close $output_txt;
close $output_xml;

#----------------------------------------------
exit;


#----------------------------------------------
sub parcoursarborescencefichiers {
    my $path = shift(@_);
    opendir(DIR, $path) or die "can't open $path: $!\n";
    my @files = readdir(DIR);
    closedir(DIR);


    foreach my $file (@files) {
		next if $file =~ /^\.\.?$/;
		$file = $path."/".$file;


		#tant que l'élément trouvé est un répertoire,
		#on relance la fonction
		if (-d $file) {
			print "On entre dans le REPERTOIRE : $file \n";
			&parcoursarborescencefichiers($file);	#recurse!
			print "On sort du REPERTOIRE :  $file \n";
		}


		#si c'est un fichier, on le traite
		if (-f $file) {
			if ($file =~ /$RUBRIQUE.+\.xml$/) {
				print "Traitement du fichier $file \n";
				open my $input, "<:encoding(UTF-8)",$file;
				$/=undef; # par défaut cette variable contient \n
				my $ligne=<$input> ;
				close($input);


				#tant que l'on trouve ce schéma on récupère les éléments entre parenthèses
				while ($ligne=~/<item><title>(.+?)<\/title>.+?<description>(.+?)<\/description>/gs) {
					my $titre=&nettoyage($1);
					my $description=&nettoyage($2);


					#on écrit les éléments récupérés dans le fichier texte
					print $output_txt "$titre \n";
					print $output_txt "$description \n";
					print $output_txt "----------------------------\n";


					#on écrit les éléments récupérés dans le fichier xml
					print $output_xml "<item><titre>$titre</titre><description>$description</description></item>\n";
				}
			}
		}
    }
}


#----------------------------------------------
sub nettoyage {
	my $texte=shift @_;
	$texte=~s/(^<!\[CDATA\[)|(\]\]>$)//g;
	$texte.=".";
	$texte=~s/\.+$/\./;
	return $texte;
}
#----------------------------------------------