#!/usr/bin/perl

use warnings;
use XML::XPath;
use HTML::Entities;
use Encode 'decode';

# On vérifie le nombre d'arguments de l'appel au script ($0 : le nom du script)
if($#ARGV!=0){
print "usage : perl $0 fichier_tag fichier_motif";
exit;
}
my $rep="$ARGV[0]";
# on s'assure que le nom du rÈpertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;
#tableau associatif contenant les noms des rubriques et leurs codes
my %rubrique = (
#  "0,2-3208,1-0,0" => "ALAUNE",
  "0,2-3210,1-0,0" => "INTERNATIONAL",
  "0,2-3214,1-0,0" => "EUROPE",
  "0,2-3224,1-0,0" =>"SOCIETE",
  "0,2-3232,1-0,0" =>"IDEES",
  "0,2-3234,1-0,0" =>"ECONOMIE",
  "0,2-3236,1-0,0" =>"MEDIAS",
  "0,2-3238,1-0,0" =>"VOUS",
  "0,2-3242,1-0,0" =>"SPORT",
  "0,2-3244,1-0,0" =>"PLANETE",
  "0,2-3246,1-0,0" =>"CULTURE",
  "0,2-3260,1-0,0" =>"LIVRES",
  "0,2-3404,1-0,0" =>"ALAUNE",
  "0,2-3476,1-0,0" =>"CINEMA",
  "0,2-3546,1-0,0" =>"VOYAGE",
  "0,2-651865,1-0,0" =>"TECHNOLOGIES",
  "0,57-0,64-823353,0" =>"POLITIQUE",
);
# on initialise des variables contenant le flux de sortie 
my %dictionnairedestitres=();
my %dictionnairesdesresumes=();
#----------------------------------------
while (($code,$nom)=each(%rubrique))
{
my $outRubriqueXml="sortie_XPath".$nom.".xml";

if (!open (OUT2,">:encoding(utf-8)","$outRubriqueXml")) {die "Pb a l'ouverture du fichier $outRubriqueXml"};
print OUT2 "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
print OUT2 "<?xml-stylesheet href=\"feuille_xsl_sortie_XML_XPath.xsl\" type=\"text/xsl\"?>\n";
print OUT2 "<rubrique nom=\"".$nom."\">\n";
close OUT2;
my $outRubriqueTxt="sortie_XPath".$nom.".txt";
if (!open(OUT1,">:encoding(ISO-8859-1)","$outRubriqueTxt")) {die "Pb a l'ouverture du fichier $outRubriqueTxt"}
print OUT1 "Rubrique : ".$nom."\n";
close OUT1;
}

&parcoursarborescencefichiers($rep);

	#---------------------------------------
while (($code,$nom) = each(%rubrique))
{
my $outRubriqueXml ="sortie_XPath".$nom.".xml";

if (!open (OUT2,">>:encoding(UTF-8)","$outRubriqueXml")) { die "pb a l'ouverture du fichier $outRubriqueXml" };
  print OUT2 "<\/rubrique>\n";
  close OUT2;
  }
		#---------------------------------------
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;
		if (-d $file) {
			&parcoursarborescencefichiers($file);	#recurse!
		}
		if ((-f $file) && ($file=~/(0,\d+-(0,)*\d{2,}(,1)*-\d+,0)\.xml$/)) {
			print $file;
			$rub=$1;
			my $xp = XML::XPath->new($file);
			my $search_path.="//item";
			# boucle sur les nœud s reconnus du chemin xpath
			foreach my $noeud ( $xp->find($search_path)->get_nodelist ) {
				my $titre=$noeud->findnodes('title')->string_value;
				my $resume=$noeud->findnodes('description')->string_value;
				$titre=&nettoieTexte($titre);
				$resume=&nettoieTexte($resume);
				if (!(exists $dictionnairedestitres{$titre}) and (!(exists $dictionnairesdesresumes{$resume})))
					{
					$dictionnairedestitres{$titre}=1;
					$dictionnairesdesresumes{$resume}=1;
	
			if(exists $rubrique{$rub})
	  		  {
			my $outRubriqueXml="sortie_Xpath".$rubrique{$rub}.".xml";
				if (!open (OUT2,">>:encoding(UTF-8)","$outRubriqueXml")) { die "Pb a l'ouverture du fichier $outRubriqueXml"};
			    print OUT2 "<item><titre>".$titre."</titre><description>".$resume."</description></item>\n";
			    close OUT2;	
		    

			my $outRubriqueTxt="sortie_XPath".$rubrique{$rub}.".txt";
		
		
		    $titreiso=decode("iso-8859-1",$titre);
		    $resumeiso=decode("iso-8859-1",$resume);
		
		if(!open(OUT1,">>:encoding(ISO-8859-1)","$outRubriqueTxt")) {die "pb a l'ouverture du fichier $outRubriqueTxt" };
	
		  	  print OUT1 	" Titre : ".$titreiso."\n"."Description : ".$resumeiso."\n";
		  	  close OUT1;
		    					
					 }   
					
					}
				}
				}
			}
	
}
		#---------------------------------------
#----------------------------------------------
sub nettoieTexte {
    my $texte=shift; 
    $texte=HTML::Entities::decode($texte);
    $texte =~ s/&#(\d+);/chr($1)/ge;
    $texte =~s/&/&amp;/g;
    $texte =~ s/<a href[^>]+>//g;
    $texte =~ s/<img[^>]+>//g;
    $texte =~s/<(.+?)>//g;
  #  $texte =~s/[ ]+//g;
    $texte =~ s/<[^>]+>//g;
    $texte =~ s/<\/a>//g;
   #trop de points à la ligne	
    #$texte.=".";
   	return $texte;
	}