#/usr/bin/perl


<<DOC; 
Votre Nom : Roxane Anquetil et Marine Damiani
Mai 2010
 usage : perl parcours-arborescence-fichiers repertoire-a-parcourir
 Le programme prend en entrée le nom du répertoire contenant les fichiers
 à traiter
 Le programme construit en sortie un fichier:
 - un fichier contenant le corpus  extrait des fils RSS (format texte)
 - un fichier contenant le corpus extrait des fils RSS (format XML)
DOC
#-----------------------------------------------------------
use XML::RSS; #on signale que l'on va utiliser la bibliothèque XML::RSS
use XML::Entities; #on signale que l'on va utiliser la bibliothèque XML::Entities
my $rep="$ARGV[0]";
# on s'assure que le nom du répertoire ne se termine pas par un "/" si ça se termine par / on remplace par rien
$rep=~ s/[\/]$//;
# création d'una variable enregistrant la sortie
my $TEXTEDUFIL="";
#----------------------------------------
#on ouvre le fichier texte de sortie
my $sortie="sortie.xml";
if (!open (SORTIE,">$sortie")) { die "Pb a l'ouverture du fichier $sortie"};
my $sortie2="sortie.txt";
if (!open (OUT,">$sortie2")) { die "Pb a l'ouverture du fichier $sortie"};

#----------------------------------------------
&parcoursarborescencefichiers($rep);	# on appelle le sous programme
#----------------------------------------
#on crée les balises pour notre fichier XML de sortie
#le contenu du filtage contenu dans la variable $TEXTEDUFIL sera intégré dans la balise <FILTRAGE>
print SORTIE "<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n";
print SORTIE "<PARCOURS>\n";
print SORTIE "<NOM>Marine et Roxane</NOM>\n";
print SORTIE "<FILTRAGE>".$TEXTEDUFIL."</FILTRAGE>\n";
print SORTIE "</PARCOURS>\n";
close(SORTIE);
#on va remplir le fichier de sortie avec le contenu de TEXTE
print OUT "$TEXTE";
close(OUT);


exit;
#----------------------------------------------
#on entre dans le sous programme
sub parcoursarborescencefichiers {
    my $path = shift(@_); # $path récupère la première valeur du tableau
    opendir(DIR, $path) or die "can't open $path: $!\n"; # on ouvre le répertoire appelé par le nom DIR, sinon un messsage d'erreur s'affiche
    my @files = readdir(DIR); # on stocke le contenu du répertoire dans le tableau @files
    closedir(DIR); #on ferme le répertoire
    foreach my $file (@files) {
	# pour chaque fichier ou répertoire présent dans le tableau @files on effctue les instructions suivantes:
	next if $file =~ /^\.\.?$/; # on veut ignorer les fichiers commençant par un .
	$file = $path."/".$file; # on récupère le chemin d'accès complet au fichier
	if (-d $file) { # avec l'option -d on vérifie que file est un répertoire, il faut donc à nouveau fouiller ce répertoire
	    &parcoursarborescencefichiers($file);	#on relance le sous programme sur $file
	}
	if (-f $file) { # l'option -f vérifie que file est un fichier
	
	if ($file=~/0,2-3210,1-0,0\.xml/) { # on ne garde dans l'arborescence que les fichier 0,2-3208,1-0,0.xml, rubrique à la une
		my $rss = XML::RSS->new; # crée variable $rss qui utilisera la méthode XML::RSS

	
		#-----------------------------------------------------------
		$TEXTEDUFIL.="<nom_fichier>$file</nom_fichier>\n";
		#print $TEXTEDUFIL;
		
		#-----------------------------------------------------------
		$rss->parsefile($file);
		my $nombredechampdescription=0;
		foreach my $item (@{$rss->{'items'}}) {
			$nombredechampdescription++;
			$TEXTEDUFIL.="<article_nb>$nombredechampdescription</article_nb>\n";
			my $description=$item->{'description'};
			#print $description;
			$description=~s/<[^>]+>//g;	
			XML::Entities::decode('all', $description);
			$description=~s/Retrouvez *l.*ensemble *des//g;
			#print $description;
			$TEXTEDUFIL.=$description."\n";
			$TEXTE.="".$description."\n";
			#normalisation de la casse
			$TEXTE=~ tr /A-Z/a-z/ ;
			#suppression des accents
			$TEXTE=~ tr /àéèëçù/aeeecu/ ;
			
			
			
		}
		}
		#----------------------------------------------------------

			}

			}
}
#----------------------------------------------