#!/usr/bin/perl
#----------------------------------------------------------------------------------
# MODE D EMPLOI : 
# un exemple de commande pour lancer l'extraction sur la rubrique "a la une" du fichier 2020
# On se position sur le répertoire BAO1, puis lancer : 
# 	perl parcours-arborescence-fichiers-xmlrss.pl ../2020 3208
# En entrée : le ficihier contenant tous les fils RSS à extraire + le numéro de la rubrique à extraire
# En sortie les résultats d'extraction au format text + les résultats d'extraction au format xml
#----------------------------------------------------------------------------------
use XML::RSS;
use strict;
use utf8;
use Timer::Simple ();
#-----------------------------------------------------------
my $rep="$ARGV[0]"; #donner le nom du fichier à traiter 
my $rubrique="$ARGV[1]"; #donner le numéro de la rubrique à traiter
my $rss=new XML::RSS;

$rep=~ s/[\/]$//;
# on crée deux fichiers de sortie
open my $output, ">:encoding(UTF-8)","../RESULTATS-XMLRSS/sortie-$rubrique.txt" or die ;
open my $outxml, ">:encoding(UTF-8)","../RESULTATS-XMLRSS/sortie-$rubrique.xml" or die ;

# écrire l'entête dans le fichier de sortie xml
print $outxml "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
print $outxml "<corpus2020>\n";
# on crée un dictionnaire qui a comme clé les titres extraits
my %dico_des_titres=();
my $numberItem=0;
my $nbFile=0;

my $time = Timer::Simple->new();
#recurse!
&parcoursarborescencefichiers($rep);
print $outxml "</corpus2020>\n";
close $output;
close $outxml;
print "Nb item : $numberItem \n";
print "temp d'exécution: $time\n";
exit;

#-----------------------------------------------------------
# Crée une fonction pour parcours l'arborescence du fichier 2020
sub parcoursarborescencefichiers 
{
    my $path = shift(@_);
    # ouvrir un répertoire, opendir prend en argument le nom du répertoire et le chemin 
    opendir(DIR, $path) or die "can't open $path: $!\n";
    my @files = readdir(DIR);
    closedir(DIR);
    	foreach my $file (@files) 
    	{
			# on ignore les répertoire dont le nom est . ou ..
			next if $file =~ /^\.\.?$/; 
			# on concatène le nom du répertoire courant à chaque fichier qui le compose pour voir s'il s'agit d'un fichier ou d'un répertoire
			$file = $path."/".$file;
			# s'il s'agit d'un répertoire, on entre dedans et recommence le parcours
			if (-d $file) 
			{
				#print "on entre dans $file \n";
	    		&parcoursarborescencefichiers($file);	#recurse!
	    		#print "on sort de $file \n";
			}
			# s'il s'agit d'un fichier, on vérifie s'il est le ficheir dont on a besoin 
			if (-f $file) 
			{
				#on traite uniquement les fichiers xml
				if ($file =~/$rubrique.+xml$/)
				{
					# un fichier trouvé ! 
					print $nbFile++," Traitement de : ",$file,"\n";
					# on extrait les titres et les descriptions avec le module "xml::rss"
					eval {$rss->parsefile($file); };
					if( $@ ) 
					{
    					$@ =~ s/at \/.*?$//s; # remove module line number
    					print STDERR "\nERROR in '$file':\n$@\n";
					} 
					else 
					{
     					foreach my $item (@{$rss->{'items'}}) 
     					{
							my $description=$item->{'description'};
							my $titre=$item->{'title'};
							# on supprime les balises dans les résultats d'extraction
							$titre=~s/<[^>]+>//g;
							$description=~s/<[^>]+>//g;
							$numberItem++;
							# On vérifie s'il n'existe pas de doublon titre/description
							if(!(exists $dico_des_titres{titres}))
							{
								$dico_des_titres{titire}=$description;
							}
							# Ecriture des résultats en sorties
							print $output $titre, "\n";
							print $output $description, "\n";
							print $output "--------------------\n";
							print $outxml "<item>\n";
							print $outxml "<titre>$titre</titre>\n";
							print $outxml "<description>$description</description>\n";
							print $outxml "</item>\n";
						}
					}
				}
			}
		}
}

