#/usr/bin/perl 
<<DOC;
Fait par : Maria DOGANOVA & Nadia MAKOUAR
FEVRIER 2008
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 structuré contenant sur chaque
 ligne le nom du fichier et le résultat du filtrage :
<FICHIER><NOM>du fichier</NOM></FICHIER><CONTENU>du filtrage</CONTENU></FICHIER>
DOC

my $dir="$ARGV[0]"; # lecture du répértoire directement

$dir=~s/[\/]$//; # vérification que le nom du répértoire ne se termine pas par un "/"

#========================================================

# création d'un tableau de hachage, qui donne automatiquement pour chaque entrée une sortie en fichier xml. Chaque nom de rubrique "0,2-....." est renommé 
my %rubric_file = (	"0,2-3208,1-0,0" => "xml/A_la_Une.xml",
					"0,2-3232,1-0,0" => "xml/Opinions.xml",
					"0,2-3210,1-0,0" => "xml/International.xml",
					"0,2-829254,1-0,0" => "xml/Les_élections_américaines.xml",
					"0,2-3214,1-0,0" => "xml/Europe.xml",
					"0,2-3224,1-0,0" => "xml/Société.xml",
					"0,2-3234,1-0,0" => "xml/Economie.xml",
					"0,2-3236,1-0,0" => "xml/Médias.xml",
					"0,2-3238,1-0,0" => "xml/Rendez-vous.xml",
					"0,2-3242,1-0,0" => "xml/Sports.xml",
					"0,2-3244,1-0,0" => "xml/Environnement_Sciences.xml",
					"0,2-3246,1-0,0" => "xml/Culture.xml",
					"0,2-3476,1-0,0" => "xml/Cinéma.xml",
					"0,2-3546,1-0,0" => "xml/Voyages.xml",
					"0,2-3260,1-0,0" => "xml/Livres.xml",
					"0,2-3404,1-0,0" => "xml/Examens.xml",
					"0,57-0,64-823353,0" => "xml/Politique.xml",
					"0,57-0,64-987718,0" => "xml/Municipales_et_Cantonales.xml"
					);
@liste = keys(%rubric_file);
#===============
# on prepare les fichiers de sortie avec l'entete XML
foreach my $nomfichier (@liste) {
    my $nomrubriquesortie=$rubric_file {$nomfichier};
	open(FILE,">$nomrubriquesortie");
	print FILE "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>";
	print FILE "<FILTRAGE>";
	close(FILE);
}

# appel de la fonction paf qui  Parcours  l'Arborescence des Fils et qui concatene dans les fichiers de sortie
	&paf($dir);    			
	
# on ferme les fichiers de sortie avec la balise racine
	
foreach my $nomfichier (@liste) {
    my $nomrubriquesortie=$rubric_file {$nomfichier};
	open(FILE,">>$nomrubriquesortie");
	print FILE "<\/FILTRAGE>";
	close(FILE);
}
		
 exit;
	
#  procedure de parcours

sub paf	{						# déclaration de la fonction paf et on extrait les fichiers
	
	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 =~ /^\.\.?$/;
		$files = $path."/".$file;
		if (-d $files) 
			{
			&paf($files);	#recurse!
			}

	if (-f $files) #extraire le texte et etiqueter, on  fait  les test si c'est un fichier un txt , ici on traite qu'un fichier donc il faut le réouvrir 18 fois... on obtient un fichier temporaire qu'il faudra enregistrer 
				{
			if ($file=~/(.*).xml/)
					{
					open(FILEINPUT,"$files");
					$cle=$rubric_file {$1};
					open(FILEOUTPUT,">>$cle");
				

			        while ($ligne=<FILEINPUT>)
							{	
							$ligne=&net_entites($1);
									
							if ($ligne=~/<title>([^<]+)<\/title>\n/ || $ligne=~/<description>([^<]+)<\/description>\n/) 
								{
								print FILEOUTPUT "$1\n"
								}
							
							
							}
						close FILEINPUT;
						close FILEOUTPUT;
						
					}
					print $i++,"\n";
						}
					}
		
	#========================================================
    sub net_entites
		{
		$ligne=~s/&#38;#39;/\'/g;
						$ligne=~s/&#38;#34;/\"/g;
						$ligne=~s/&#233;/é/g;
						$ligne=~s/&#234;/è/g;
						$ligne=~s/&#234;/ê/g;
						$ligne=~s/&#38;nbsp//g;
		return $ligne;
		}
	#----------------------------------------------
	}