#/usr/bin/perl
use XML::RSS;
<<DOC; 
Votre Nom : Rajosoa Mickael
JANVIER 2018
 usage : perl parcours-arborescence-fichiers repertoire-a-parcourir rubrique

 Le programme prend en entrée le nom du répertoire contenant les fichiers
 à traiter et le nom de la rubrique à traiter sous la forme de 4 chiffres

  ex: perl parcours-arborescence-fichiers 2017 3208

 Le programme construit en sortie un fichier structuré contenant sur chaque
 ligne le nom du fichier et le résultat du filtrage :
		<FICHIER><NOM>du fichier</NOM></FICHIER><CONTENU>du filtrage</CONTENU></FICHIER>
DOC

#-----------------------------------------------------------
my $rep="$ARGV[0]";
my $rubrique="$ARGV[1]";
my dico%;
open(OUT1,">:encoding(utf-8)","xmlrss.txt");
open(OUT2,">:encoding(utf-8)","xmlrss.xml");
print OUT2 "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
print OUT2 "<PARCOURS rubrique=\"$rubrique\">\n";
&parcoursarborescencefichiers($rep);	# on lance la récursion.... et elle se terminera après examen de toute l'arborescence
print OUT2 "</PARCOURS>\n";
close(OUT2);
close(OUT1);
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;
        if (-d $file) {
            print "<NOUVEAU REPERTOIRE> ==> ",$file,"\n";
            &parcoursarborescencefichiers($file);	#recurse!
            print "<FIN REPERTOIRE> ==> ",$file,"\n";
        }
        if (-f $file) {
            if ($file=~/$rubrique.+\.xml$/) {
                print "<",$compteurfile++,"> ==> ",$file,"\n";
                my $rss=new XML::RSS;
                eval {$rss->parsefile($file); };
                if( $@ ) {
                    $@ =~ s/at \/.*?$//s;               # remove module line number
                    print STDERR "\nERROR in '$file':\n$@\n";
                } 
               else {
                    print OUT2 "<file name=\"$file\">\n<items>\n";
                    foreach my $item (@{$rss->{'items'}}) {
                        my $description=$item->{'description'};
                        my $titre=$item->{'title'};
		
                        ($titre,$description) = &nettoyage ($titre,$description);
						if (!(exists $dico{$titre})) {
						$dico{$titre} = 1;
                        print OUT1 "Titre : $titre \n"; 
                        print OUT1 "Description : $description \n";
                    }
                print OUT2 "</items>\n</file>\n";
                }
		
            }
        }
    }
}
#----------------------------------------------
sub nettoyage {
    my $var1 = shift(@_);
    my $var2 = shift(@_);
    $var1=~s/<[^>]+?>//g; 
    $var2=~s/<[^>]+?>//g; 
    $var1=~s/&lt;.+?&gt;//g; 
    $var2=~s/&lt;.+?&gt;//g; 
	$var1.=".";
	$var1=~s/\?\.$/\?/;
    return $var1,$var2 ;
}