#/usr/bin/perl

#*************************************************************************************
#	BAO1 : extraire le contenu textuel des fils rss du Monde d'une année entière,
#		le stocker au format xml et txt
#		On utilise la bibliothèque XML::RSS
#*************************************************************************************

use open qw< :encoding(UTF-8) >;
use XML::RSS;
my $rep="$ARGV[0]"; #corpus de fils rss
$rep=~ s/[\/]$//;# on s'assure que le nom du répertoire ne se termine pas par un "/"
my $rubrique = "$ARGV[1]";
my $rss=new XML::RSS;
my %nom_rubriques = (	3208 => "A LA UNE",
						3210 => "INTERNATIONAL",
						3214 => "EUROPE",
						3224 => "FRANCE",
						3226 => "SOCIETE",
						3228 => "ENVIRONNEMENT",
						3234 => "ENTREPRISES",
						3236 => "MEDIAS",
						3242 => "SPORTS",
						3244 => "SCIENCES",
						3246 => "CULTURE");

#------------------------------------------------------------------------------------
#		Initialisation des variables contenant le flux de sortie :
#		- surface (titre et description) : SURFACEXML , SURFACETXT 
#------------------------------------------------------------------------------------
my $output1="$rubrique.xml";
$nom_rubrique=$nom_rubriques{$rubrique};
if (!open (SURFACEXML,">$output1")) { die "Pb a l'ouverture du fichier $output1"};
print SURFACEXML "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
print SURFACEXML "<PARCOURS>\n";
print SURFACEXML "<rubrique>$nom_rubrique</rubrique>\n";
close (SURFACEXML);

my $output2="$rubrique.txt";
if (!open (SURFACETXT,">$output2")) {die "Problème à l'ouverture du fichier $output2"};
print SURFACETXT "Rubrique : $nom_rubrique\n";
close SURFACETXT;

#----------------------------------------
&parcoursarborescencefichiers($rep);	
#----------------------------------------
open (SURFACEXML,">>", $output1);
print SURFACEXML "</PARCOURS>\n";
close(SURFACEXML);
exit;

#----------------------------------------
#PROCEDURE : parcourir l'arborescence du répertoire -> extraire le contenu textuel des fichiers
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;   #2016/01/19,00,00
		#si $file est un répertoire
		if (-d $file) {
			print "<NOUVEAU REPERTOIRE> ==> ",$file,"\n";
			&parcoursarborescencefichiers($file);	#recurse!
			print "<FIN REPERTOIRE> ==> ",$file,"\n";
		}
		#si $file est un fichier
		if (-f $file) {  
	      		#extraire la surface (titre et description)
		    	if ($file =~ /$rubrique.+\.xml$/) {		        
					open (SURFACETXT, ">>", "$rubrique.txt");
	                open (SURFACEXML, ">>", "$rubrique.xml");
					#Parser le fil rss ->produit table de hachage (title=>"exemple de titre")
					$rss->parsefile($file);
					my $nombredechampdescription=0;
					#transformer table de hachage en tableau
					#chercher élément du tableau 'title' et 'description'
					foreach my $item (@{$rss->{'items'}}) {
					    $nombredechampdescription++;
					    my $titre=$item->{'title'};
						$titre=~s/&lt;.+?&gt;//g;
					    $titre=~s/<.+?>//g;
					    my $description=$item->{'description'};
					    $description=~s/&lt;.+?&gt;//g;
					    $description=~s/<.+?>//g;
					    print SURFACETXT "$titre\n$description\n\n";
					    print SURFACEXML "<item><title>$titre</title><description>$description</description></item>";
					}
		    	} #fin if rubrique.xml
       		 } #fin if f file
    }#fin foreach myfile
} #fin procédure subarborescence
#----------------------------------------------
