#/usr/bin/perl
use Unicode::String qw(utf8);
use utf8;
use Unicode::Normalize;
use Encode qw(encode decode);
#-----------------------------------------------------------
# le répertoire parent contenant le flux RSS
my $rep="$ARGV[0]";
# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;
# on initialise deux dictionnaires, un pour récupérer les rubriques
# et l'autre pour les items  
my %dictionnairedesitems=();
my %dictionnairesdesrubriques=();

# on lance la procédure de récupération de la liste des rubriques
&constructionrubriques($rep);
my @liste_rubriques = keys(%dictionnairesdesrubriques);

# construction de la liste des fichiers sortie selon les rubriques 
my $output1="";
my $output2="";
foreach my $rub (@liste_rubriques) {

$output1="./SORTIE/bao1-extract-txt".$rub.".xml";
$output2="./SORTIE/bao1-extract-txt".$rub.".txt";

if (!open (FILEOUT1,">:encoding(utf-8)", $output1)) { die "Pb a l'ouverture du fichier $output1"};
if (!open (FILEOUT2,">:encoding(iso-8859-1)",$output2)) { die "Pb a l'ouverture du fichier $output2"};
print FILEOUT1 "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
print FILEOUT1 "<PARCOURS>\n";
close FILEOUT1;
close FILEOUT2;
}

# on lance la procédure de parcours des fichiers avec rubrique
&parcoursarborescencefichierspourrepererlesrubriques($rep);

foreach my $rub (@liste_rubriques) {
$output1="./SORTIE/bao1-extract-txt".$rub.".xml";
if (!open (FILEOUT1,">>:encoding(utf-8)", $output1)) { die "Pb a l'ouverture du fichier $output1"};
print FILEOUT1 "</PARCOURS>\n";
close FILEOUT1;
}
#----------------------------------------

exit;
#-----------------------------------------------------------------------------------
sub parcoursarborescencefichierspourrepererlesrubriques {
    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) {
	    &parcoursarborescencefichierspourrepererlesrubriques($file);	#recurse!
	}
	if (-f $file) {
	    if (($file=~/\.xml$/) && ($file!~/\/fil.+\.xml$/)) {
		open(FILE, $file);
		#print "Traitement de :\n$file\n";
		my $texte="";
		while (my $ligne=<FILE>) {
		    $ligne =~ s/\n//g;
		    $texte .= $ligne;
		}
		close(FILE);
		$texte=~s/> *</></g;
		# on recherche la rubrique
		if ($texte=~/<channel><title>([^<]+)<\/title>/){
			my $rub=$1;
			$rub=~s/é/e/gi;
		    $rub=~s/è/e/gi;
		    $rub=~s/ê/e/gi;
		    $rub=~s/à/a/gi;
			$rub=~ s/Le *Monde *\. *fr *://gi;
			$rub =~ s/l'//;
			$rub =~ s/://;
			$rub = NFKD($rub);
			$rub =~ s/\p{NonspacingMark}//g;
			$rub=~ s/  / /g;
			$rub=~ s/ /-/g;
			$rub=lc($rub);
			print "rubrique => $rub \n"; 
			
		$texte=~/encoding ?= ?[\'\"]([^\'\"]+)[\'\"]/i;
		my $encodage=$1;
		print "ENCODAGE : $encodage \n";
	    if ($encodage ne "") {
		    print "Extraction dans : $file \n";
			my $tmptexteBRUT="";
			my $tmptexteXML="<file>\n";
		    $tmptexteXML.="<name>$file</name>\n";
		  
		    $texte =~ s/> *</></g;
		    $texte=~/<pubDate>([^<]+)<\/pubDate>/;
		    
			$tmptexteXML.="<date>$1</date>\n";
		    $tmptexteXML.="<items>\n";
	   	    
			$out1="./SORTIE/bao1-extract-txt".$rub.".xml";
            $out2="./SORTIE/bao1-extract-txt".$rub.".txt";			
			if (!open (FOUT1,">>:encoding(utf-8)", $out1)) { die "Pb a l'ouverture du fichier $out1"};
            if (!open (FOUT2,">>:encoding(iso-8859-1)",$out2)) { die "Pb a l'ouverture du fichier $out2"};
					
			while ($texte =~ /<item><title>(.+?)<\/title>.+?<description>(.+?)<\/description>/g) {
			my $titre=$1;
			my $resume=$2;
			
			$titre = &nettoietexte($1);
			$resume = &nettoietexte($2);
			
			my $titreBRUT= encode('iso-8859-1', $titre);
			my $resumeBRUT= encode('iso-8859-1', $resume);
			
			if (uc($encodage) ne "UTF-8") {utf8($titre);uf8($resume);}

			if (!(exists($dictionnairedesitems{$titre}))) {
			
			    $tmptexteBRUT.="§ $titreBRUT \n";
			    $tmptexteBRUT.="$resumeBRUT \n";
			    $tmptexteXML.="<item><title>$titre</title><abstract>$resume</abstract></item>\n";
			    	
			    $dictionnairedesitems{$titre}++;
			}
		  }
		    $tmptexteXML.="</items>\n</file>\n";
			
		    print FOUT1 $tmptexteXML;
		    print FOUT2 $tmptexteBRUT;
		    
		    close FOUT1;
		    close FOUT2;
		    
		}
		else {
		    print "$file ==> $encodage \n";
		}
		
	
		}
	    }
	}
    }
}

#----------------------------------------------------
sub nettoietexte {
    my $texte=shift;
    $texte =~ s/&lt;/</g;
    $texte =~ s/&gt;/>/g;
    $texte =~ s/<a href[^>]+>//g;
    $texte =~ s/<img[^>]+>//g;
    $texte =~ s/<\/a>//g;
    $texte =~ s/&#38;#39;/'/g;
    $texte =~ s/&#38;#34;/"/g;
    $texte =~ s/&#233;/é/g;
    $texte =~ s/&#234;/ê/g;
    $texte =~ s/<[^>]+>//g;
    $texte =~ s/&nbsp;/ /g;
    $texte=~s/&#39;/'/g;
    $texte=~s/&#34;/"/g;
    $texte=~s/&amp;#39;/'/g;
    $texte=~s/&amp;#34;/"/g;
    return $texte;
}

sub constructionrubriques {
    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) {
	    &constructionrubriques($file);	#recurse!
	}
	if (-f $file) {
	    if (($file=~/\.xml$/) && ($file!~/\/fil.+\.xml$/)) {
		open(FILE,$file);
		#print "Traitement de :\n$file\n";
		my $texte="";
		while (my $ligne=<FILE>) {
		    $ligne =~ s/\n//g;
		    $texte .= $ligne;
			}
			close(FILE);
		$texte=~s/> *</></g;
		
		# on recherche la rubrique
		if ( $txte=~/<channel><title>([^<]+)<\/title>/ ){
		my $rubb=$1;
		$rubb=~ s/é/e/g;
		$rubb=~ s/è/e/g;
		$rubb=~ s/ê/e/g;
		$rubb=~ s/à/a/g;
	    $rubb=~ s/Le *Monde *\. *fr *://g;
	    $rubb=~ s/l'//;
	    $rubb=~ s/://;
	    $rubb= NFKD($rubb);
	    $rubb=~ s/\p{NonspacingMark}//g;
	    $rubb=~ s/  / /g;
		$rubb=~ s/ /-/g;
		$rubb= lc($rubb);
		$dictionnairesdesrubriques{$rubb}++;
	   }

	 }
	}
   }
 }
