#/usr/bin/perl 
<<DOC;
Nurul Zulaikha AZMI MURAD 22003626
BAO1 RSS
cmd : perl script repertoire rubrique
DOC
#-----------------------------------------------------------
use XML::RSS;

my $rep="$ARGV[0]"; # le répertoire à parcourir
my $rubrique="$ARGV[1]"; # la rubrique sur laquelle on travaille
my $rss=new XML::RSS; # créé l'objet XML::RSS

# on s'assure que le nom du répertoire ne se termine pas par un "/" 
$rep=~ s/[\/]$//;

#Initialisation des fichiers de sorties 
open my $OUTXML,">:encoding(utf8)","xmlrss_$rubrique.xml"; 
open my $OUTXT,">:encoding(utf8)","xmlrss_$rubrique.txt"; 

print $OUTXML "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; # écriture de l'en-tête dans le fichier xml
print $OUTXML "<extraction rubrique=\"$rubrique\" pg=\"perl\">\n"; # écriture de la balise racine dans le fichier xml
print $OUTXML "<File>"; #pour eviter le probleme d'indention 

#----------------------------------------
#appel de la fonction principale
&parcoursarborescencefichiers($rep); #recurse! 
#---------------------------------------- 
print $OUTXML "</File>";  
close $OUTXT;
exit; 
#---------------------------------------------- 
#on lance la fonction appelée plus haut
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) { # -d vrai si l'objet est un répertoire
		&parcoursarborescencefichiers($file); #recurse! 
		} 
		
		#Selection de la rubrique 
		if (-f $file) { # si l'objet n'est pas un répertoire
			if ($file =~/$rubrique.+xml$/) 
			{ 
				#Ouverture du fichier 
				open my $fic,"<:encoding(utf8)",$file; $/=undef;
				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'});

					# Ecriture des résultats en sorties
					print $OUTXT "$titre \n";
					print $OUTXT "$description \n";
					print $OUTXT "---------------------------------------------------------------------------\n";
					
					# Ecriture des résultats en sorties et des balises
					print $OUTXML "<item><titre>$titre</titre><description>$description</description></item>\n";
					}
				}
			}	
		}					
	}
}
#------------------------------------------------		
# appel a la fonction nettoyage
sub nettoyage { 
	my $texte=shift @_;
	$texte.=".";
	$texte=~s/\.+$/\./; 
	$texte=~s/&nbsp//g; #pour eviter le probleme d'espace 
	return $texte;
}
