#!/usr/bin/perl
use XML::RSS;
use Data::Dumper;
use Data::Dump qw(dump);
use strict;
use warnings;
binmode(STDOUT, ":encoding(UTF-8)");
#-----------------------------------------------------------
my $file="$ARGV[0]";
my $rubrique ="$ARGV[1]";
# on s'assure que le nom du répertoire ne se termine pas par un "/"
$file=~ s/[\/]$//;
my %dico_des_titres=();

my $rss=new XML::RSS; # créé l'objet XML::RSS
#-----------------------------------------------------------
open my $output, ">:encoding(UTF-8)","XML_RSS_sortie-$rubrique.txt";
open my $output2, ">:encoding(UTF-8)","XML_RSS_sortie-$rubrique.xml";
#-----------------------------------------------------------
print $output2 "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
print $output2 "<corpus2020>\n";

#----------------------------------------
&parcoursarborescencefichiers($file);	#recurse!
#----------------------------------------

print $output2 "</corpus2020>\n";
close ($output);
close ($output2);

exit;

sub parcoursarborescencefichiers {
    my $path = shift(@_);
    opendir(my $DIRhandle, $path) or die "can't open $path: $!\n";
    my @files = readdir($DIRhandle);
    closedir($DIRhandle);
	foreach my $file (@files) {
		next if $file =~ /^\.\.?$/;
		$file = $path."/".$file;
		if (-d $file) {
			&parcoursarborescencefichiers($file);	#recurse!
		}
		if (-f $file) {
			if ($file =~/$rubrique.+xml$/) {
				eval {$rss->parsefile($file); };  # on remplit l'objet via parsefile
				if( $@ ) {
   			 			$@ =~ s/at \/.*?$//s;               # remove module line number
    					print STDERR "\nERROR in '$file':\n$@\n";
				} 
				else {
	
						foreach my $item (@{$rss->{'items'}}) { #pour chaque balise item
							my $description=$item->{'description'}; #on récupère le contenu de son fils "description"
							my $title=$item->{'title'}; #et celui de son fils 'title'
							$title=~s/<[^>]+>//g; #on en retire les balises
							$description=~s/<[^>]+>//g;
							if (!exists $dico_des_titres{$title}){
								$dico_des_titres{title}=1;
								my ($title_new, $description_new)= &nettoyage ($title,$description) ; #on appelle la fonction nettoyage, définie plus bas
								print $output "$title_new\n";
								print $output "$description_new\n";
								print $output "-------------------\n";
								print $output2 "<item>\n";
								print $output2 "<titre>$title_new</titre>\n";
								print $output2 "<description>$description_new</description>\n";
								print $output2 "</item>\n"
							}
						}
				}	
			}
		}
	}
}
				

#------------------------------------------------
sub nettoyage {
	my $var1 = shift @_ ;
	my $var2 = shift @_ ;
	$var2=~s/&lt;.+?&gt;//g; #élimine ce qui sert à rien
	$var1=~s/&lt;.+?&gt;//g;
	$var2=~s/&#38;#39;/'/g;	#remplace l'entité HTML de l'apostrophe
	$var1=~s/&#38;#39;/'/g;
	$var2=~s/&#38;#34;/"/g; #remplace l'entité HTML des guillemets
	$var1=~s/&#38;#34;/"/g; 
	if ($var1!~/[\.?!]$/){ 
		$var1=$var1.'.'} 
	if ($var2!~/[\.?!]$/){
		$var2=$var2.'.'} 
	return $var1, $var2 ;
}