#/usr/bin/perl
#-----------------------------------------------------------
use warnings FATAL => 'all';
use utf8;
use strict;
# fonction pour créer un répertoire
use File::Path qw(make_path);

binmode(STDOUT, ":encoding(UTF-8)");
#-----------------------------------------------------------
# Ce programme s'utilise ainsi :
# perl parcours-arborescence-fichiers-BAO1-2022.pl ../2021 3208
# 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 3208 pour A la une
#-----------------------------------------------------------

# perl data/bao1/parcours_arbo_fichiers_bao1.pl 651865

if ($#ARGV != 0) {print "Il manque un argument à votre programme....\n";exit;} 
# my $rep="$ARGV[0]";
my $rep="data/2021";

# 3244 : planète
# 3246 : culture
# 3232 : idées
# 3224 : société
my $RUBRIQUE="$ARGV[0]";

# création d'un répertoire avec le nom de la rubrique
make_path("data/bao1/$RUBRIQUE");

# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;
open my $output, ">:encoding(UTF-8)","data/bao1/$RUBRIQUE/corpus-titre-description_$RUBRIQUE.txt";
open my $output2, ">:encoding(UTF-8)","data/bao1/$RUBRIQUE/corpus-titre-description_$RUBRIQUE.xml";

print $output2 "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<corpus>\n";
#----------------------------------------
&parcoursarborescencefichiers($rep);	#recurse!
#----------------------------------------
print $output2 "</corpus>\n";
close $output;
close $output2;
#----------------------------------------------
exit;
#----------------------------------------------
sub parcoursarborescencefichiers {
    my $path = shift(@_);
	my %item = ();

    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;
		if (-d $file) {
			# print "On entre dans le REPERTOIRE : $file \n";
			&parcoursarborescencefichiers($file);	#recurse!
			# print "On sort du REPERTOIRE :  $file \n";
		}
		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);

				while ($ligne=~/<item><title>(.+?)<\/title>.+?<description>(.+?)<\/description>/gs) {
					# $1 = 1er parenthese 
					my $titre=&nettoyage($1);
					my $description=&nettoyage($2);
					
					# on évite les doublons
					if (!(exists $item{$titre})){
						$item{$titre}=$description;
						print $output "$titre\n";
						print $output "$description\n\n";
						print $output2 "<item><titre>$titre</titre><description>$description</description></item>\n";
					}
				}
			}
		}
    }
}
#----------------------------------------------
sub nettoyage {
	my $texte=shift @_;
	$texte=~s/(^<!\[CDATA\[)|(\]\]>$)//g;
	$texte.=".";
	$texte=~s/\.+$/\./;
	return $texte;
}
#----------------------------------------------
