#!/usr/bin/perl
use File::Spec;
use XML::XPath;
use XML::XPath::XMLParser;
use File::Basename;

<<DOC;
Pierre Marchal (INaLCO), janvier 2008.

usage : prog.pl [répertoire à parcourir]
 
Ce programme prend en entrée le nom du répertoire contenant les fichiers à traiter, extrait le contenu textuel des éléments <title> et <description>, et l'écrit dans un nouveau fichier XML.
DOC

my $rep="$ARGV[0]";
   $rep=~ s/[\/]$//;

mkdir "output";

%rubriques=("3208","une",
			"3210","international",
			"3214","europe",
			"3224","societe",
			"3232","opinions",
			"3234","economie",
			"3236","medias",
			"3238","rendez-vous",
			"3242","sports",
			"3244","environnement-sciences",
			"3246","culture",
			"3260","livres",
			"3404","examens_2008",
			"3476","cinema",
			"3546","voyages",
			"651865","technologies",
			"823353","politique",
			"987718","municipales-cantonales_2008",);
			
%cara=("&amp;#39;","'",
	   "&amp;#34;","\"",
	   "&#39;","'",
	   "&#34;","\"",
	   "&nbsp;"," ",
	   "&lt;", "<",);

foreach $rubrique (values %rubriques) {
	my $output="./output/".$rubrique.".xml";
	if (!open (FILEOUT,">:encoding(UTF-8)",$output)) {
		die "Pb a l'ouverture du fichier $output";
	}
	print FILEOUT "<?xml version=\"1.0\" encoding =\"utf-8\"?>\n";
	print FILEOUT "<bao1>\n";
	print FILEOUT "<etudiant>Pierre Marchal</etudiant>\n";
	close(FILEOUT);
}


&arborescence($rep);


foreach $rubrique (values %rubriques) {
	my $output="./output/".$rubrique.".xml";
	if (!open (FILEOUT,">>:encoding(UTF-8)",$output)) {
		die "Pb a l'ouverture du fichier $output";}
	print FILEOUT "</bao1>";
close(FILEOUT);
}

exit;


######################
## /S PROG. "ARBORESCENCE" ##
######################

sub arborescence {

my $path=shift(@_);
opendir(DIR, $path) or die "can't open $path : $!\n";
my @files=readdir(DIR);
closedir(DIR);

# le contenu du dossier est trié par ordre numérique croissant
@files = sort {$a <=> $b} @files;

foreach my $file (@files) {
	
	my $contenu = "";
	
	next if ($file =~ /^\.\.?$/);
	
	$file=$path."/".$file;

	if (-d $file) {
		&arborescence($file);
	}
	
	if (-f $file) {
		my $xp = XML::XPath->new(filename => $file);
		my $nodeset = $xp->find('//item/description/preceding-sibling::title[1] | //item/title/following-sibling::description[1]');
		foreach my $node ($nodeset->get_nodelist) {
			$temp = XML::XPath::XMLParser::as_string($node);
			foreach $car(keys %cara){
				my $remplace = $cara{$car};
				$temp=~ s/$car/$remplace/g;
				$temp=~ s/<\/?(p|img |a\W)[^>]*>//g;
			}
			
			unless ($contenu =~ $temp){
				$contenu .= $temp."\n";
			}
		}
	}
	
	
	foreach $code(keys %rubriques){
		my $rubrique = $rubriques{$code};
		if($file=~/$code/){
			@path = File::Spec->splitdir($path);
			$annee = shift @path;
			$mois = shift @path;
			$jour = shift @path;
			$heure = shift @path;
			my $output="./output/".$rubrique.".xml";
			if (!open (FILEOUT,">>:encoding(UTF-8)",$output)) {
				die "Pb a l'ouverture du fichier $output";
			}
			print FILEOUT "<fichier>\n";
			print FILEOUT "<nom>".basename($file)."</nom>\n";
			print FILEOUT "<date>\n<annee>".$annee."</annee>\n<mois>".$mois."</mois>\n<jour>".$jour."</jour>\n<heure>".$heure."</heure>\n</date>\n";
			print FILEOUT $contenu."</fichier>\n";
		}
	}
	
	close(FILEOUT);
}
}	
	