#/usr/bin/perl
<<DOC; 
Nom: SY Malick
Année : 2020/2021
 usage : perl bao1.pl 2020 code catégorie
 Le programme prend en entrée le nom du répertoire-racine contenant les fichiers
 à traiter et le code de la catégorie
DOC
#-------------------------On ne travaille que sur l'encodage utf8 avec la bibliothèque XML::RSS---------------------------------
use XML::RSS;
use utf8; 
use open ':utf8';
binmode(STDIN,":utf8");
binmode(STDOUT,":utf8"); 
#------------------------------------------------------------------
my $rep="$ARGV[0]";  
$rep=~ s/[\/]$//;
my $rubrique="$ARGV[1]"; 
my %dejavu; #
open(OUTTXT,">:encoding(utf-8)","fil_rss_bao1_$rubrique.txt"); 
open(OUTXML,">:encoding(utf-8)","fil_rss_bao1_$rubrique.xml"); 
print OUTXML "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
#------------------------------------------------------------------
print OUTXML "<entete type=\"$rubrique\">\n"; 
my %dico_des_titres=();
&parcoursarborescencefichiers($rep); 
print OUTXML "</entete>";
close OUTTXT; 
close OUTXML; 
exit;
#--------------------------------- Fonction recursive et appel de la fonction de nettoyage---------------------------------
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;
	if (-d $file) {
	    &parcoursarborescencefichiers($file);	#recurse!
	}
	if (-f $file) {
	    if ($file =~/$rubrique.+xml$/) {
		print $i++," Traitement de : ",$file,"\n";
		open(FIC,"<:encoding(utf8)",$file);
		$/=undef;     #ou $\=""
		my $textelu=<FIC>;
		close FIC;
		while ($textelu=~/<item>.*?<title>(.+?)<\/title>.+?<description>(.+?)<\/description>/sg) {
		    my $titre=$1;
		    my $description=$2;
		    if (!(exists $dico_des_titres{$titre})) { 
			$dico_des_titres{$titre}=$description ;
			# Appel du sous-programme de nettoyage 
			($titre,$description)=&nettoyage($titre,$description);
			# Ecriture des résultats en sorties
			print OUTTXT $titre,"\n";
			print OUTTXT $description,"\n";
			print OUTTXT "-------------------------------------------------------------------------------------------\n";
			print OUTXML "<item>\n";
			print OUTXML "<titre>$titre</titre>\n";
			print OUTXML "<description>$description</description>\n";
			print OUTXML "</item>\n";
		    }
		}
	    }
	}
    }
}
#-------------------------------------Fonction de nettoyage des données unitiles------------------ 
sub nettoyage {
    my $titre = $_[0];
    my $description = $_[1];
	$titre=~s/^<!\[CDATA\[//;
	$titre=~s/\]\]>$//;
	$description=~s/^<!\[CDATA\[//;
	$description=~s/\]\]>$//;
    $description=~s/&lt;.+?&gt;//g;
    $description=~s/&#38;#39;/'/g;
    $description=~s/&#38;#34;/"/g;
    $titre=~s/&lt;.+?&gt;//g;
    $titre=~s/&#38;#39;/'/g;
    $titre=~s/&#38;#34;/"/g;
    $titre=~s/$/\./g;
    $description =~ s/&nbsp/ /g;
    return $titre,$description;
}
