#!/usr/bin/perl
<<DOC; 
Nom : Daneau Caroline & Jandia Aurélie
Date : Mars 2021

 lancement sur le terminal avec la commande : perl BaO1-xml-rss.pl 2020 3246
DOC

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 $rss=new XML::RSS; # créé l'objet XML::RSS
#-----------------------------------------------------------
my $rubrique ="$ARGV[1]"; #pour récupérer dans variable le numéro de la rubrique souhaité
#--------------------------------------
open my $out, ">:encoding(UTF-8)","corpus-Rss-$rubrique.txt";
open my $output2, ">:encoding(UTF-8)","corpus-Rss-$rubrique.xml";
#-----------------------------------------------------------
print $output2 "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<corpus>\n";

$file=~ s/[\/]$//; 
my %dico=();

&parcoursarborescence($file); 

print $output2 "</corpus>\n";
close $out;
close $output2 ;
exit; 
#---------------------
sub parcoursarborescence {
	my $path = shift(@_);
	open (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) {
			&parcoursarborescence($file);  #recursivité
		}
		if (-f $file) {
			if ($file =~ /\.xml$/ and $file =~ /$rubrique/) {
				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'}}) {
							my $titre=&nettoyage($item->{'title'});	
							my $description=&nettoyage($item->{'description'});
							if (!(exists $dico{$titre})){
								$dico{$titre}=$description; 
								print $out "$titre \n";
								print $out "$description \n";
								print $out "----------------------------\n";
								print $output2 "<item><titre>$titre</titre><description>$description</description></item>\n";
							}
						}
					}
				}
			}
	print "---------------------\n";
	}
}


#------------------------------------------------
sub nettoyage {
	my $texte=shift @_;
	$texte=~s/(^<!\[CDATA\[)|(\]\]>$)//g;
	$texte.=".";
	$texte=~s/\.+$/\./;
	return $texte;
}