#!/usr/bin/perl
<<DOC; 
Nom : YU Xin
Date : 20/02/2019
usage : perl parcours-arborescence-fichiers repertoire-a-parcourir rubrique
2018 est le répertoire  ; 3476 est la rubrique
 Le programme construit en sortie 2 fichiers :
 - un fichier TXT
 - un fichier structuré en XML 
 Les 2 fichiers contiennent les zones textuelles extraites des fils RSS
DOC
#-----------------------------------------------------------
my $rep="$ARGV[0]"; # répertoire
my $rubrique = "$ARGV[1]"; # le 2er argument
my $i=1;
my %doublons; #créer un tableau associatif
# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//; #on entre par la racine
#----------------------------------------
open(OUT, ">:encoding(utf-8)", "bao1-sortie-$rubrique-egrep.txt");
open(OUTXML, ">:encoding(utf-8)", "bao1-sortie-$rubrique-egrep.xml");
print OUTXML "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
print OUTXML "<racine>\n";
&parcoursarborescencefichiers($rep);	#recurse! recurse p.ex. 4! = 4*3*2*1
print OUTXML "</racine>\n";
close OUT;
close OUTXML;
exit;
#----------------------------------------
sub parcoursarborescencefichiers {
    my $path = shift(@_); # après la premier tour la ligne 44, on recommence ici, et mtn $path est 2018/Jan
    opendir(DIR, $path) or die "can't open $path: $!\n"; # opendir() : fonction d'ouvrir un répertoire. le pointeur DIR. fonctionner comme ls -la 2018-2-journees
    my @files = readdir(DIR); # readdir() : fonction permet de lire le contenu du répertoire. il renvoie la liste de ressource du répertoire
    closedir(DIR);
    foreach my $file (@files) { # on examine la liste
		next if $file =~ /^\.\.?$/; # surtout, on fait rien sur les éléments contenant . et .. on traite que l'élément Jan # /^\.\.?$/ si le nom du fichier comment par . ou ..
		$file = $path."/".$file; # recréer un chemin depuis le sommet 2018 pour accéder au ressource Jan, $file est donc 2018/Jan  
		if (-d $file) { #-d : opérateur pour tester si $file est un dossier 
			print "on entre dans $file \n";
			&parcoursarborescencefichiers($file);	#recurse! on ré-ouvert le dossier Jan
		}
		if (-f $file) { # détecter si $file est un fichier
	#       TRAITEMENT à réaliser sur chaque fichier
	#       Insérer ici votre code (le filtreur)
			if($file =~/$rubrique.+\.xml$/) { # on cherche dans le 3ere argument qui contient 3028
				print $i++," : $file  \n";
				# à compléter
				open(FIC, "<:encoding(utf-8)", $file);
				my $tout_le_texte="";
				while (my $ligne = <FIC>) {
					chomp $ligne;
					$tout_le_texte = $tout_le_texte . $ligne . " ";
				}
				close FIC;
				while ($tout_le_texte =~ /<item>.*?<title>([^<]*)<\/title>.*?<description>([^<]*)<\/description>.*?<\/item>/g) {
					my $titre = $1;
					my $description = $2;
					#my $date = $file;
					#$date =~ s/,1-0,0.xml/ /g;
					my ($titrenettoyage, $descriptionnettoyage) = &nettoyage($titre, $description); # l'activation d'un sous-programme, l'appel du sous-programme commence par un '&'
					if (exists $doublons{$titrenettoye}) {
							print "Titre $titrenettoye existe déjà\n";
							$doublons{$titrenettoye}++;
					}
					else { # si la clé n'existe pas
						$doublons{$titrenettoyage}=1;
						#print OUT "$date\n";
						print OUT "$titrenettoyage\n"; # on ne peut pas travailler/ modifier la variable $1 car elle fait partie du programme
						print OUT "$descriptionnettoyage\n";
						#print OUTXML "<date>$date</date>";
						print OUTXML "<article>\n";
						print OUTXML "<titre>$titrenettoyage</titre>\n";
						print OUTXML "<description>$descriptionnettoyage</description>\n";
						print OUTXML "</article>\n";
					} # else
				} # while
			} #if		
		} # if
	} # foreach
} # parcoursarborescencefichiers

# définir le sous-programme/fonction qui renvoie une valeur
sub nettoyage {
	my ($titre, $desc) = @_;  # OU my $var = $_[0]; my $var1 = $_[1];
	$titre = $titre."."; # OU $titre .= ".";
	$titre =~ s/&#38;#39;/'/g;
	return $titre, $desc
}