#/usr/bin/perl

#                   _     _                      #
#                  |_) _./ \ /|                  #
#                  |_)(_|\_/  |                  #
#                                                #

use Unicode::String qw(utf8);

my $rep="$ARGV[0]";
# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;
# on initialise une variable contenant le flux de sortie 
my %dictionnairedesitems=();
my %dictionnairesdesrubriques=();

#-----8<-------Recuperation des rubriques--------8<-------------
&parcoursarborescencefichierspourrepererlesrubriques($rep);

my @liste_rubriques = keys(%dictionnairesdesrubriques);
foreach my $rub (@liste_rubriques) {

    my $output1="SORTIE-extract-txt-".$rub.".xml";
    my $output2="SORTIE-extract-txt-".$rub.".txt";
    if (!open (FILEOUT1,">:encoding(utf-8)", $output1)) { die "Pb a l'ouverture du fichier $output1"};
    if (!open (FILEOUT2,">:encoding(utf-8)",$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);
}
#-----8<-------Traitement de tous les fichiers-----8<----------

&parcoursarborescencefichiers($rep);	

foreach my $rub (@liste_rubriques) {
    my $output1="SORTIE-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;


#-----8<---------FONCTIONS--------------8<----------------------

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) {
	    if (($file=~/\.xml$/) && ($file!~/\/fil.+\.xml$/)) {
		open(FILE, $file);
		my $texte="";
		while (my $ligne=<FILE>) {
		    $ligne =~ s/\n//g;
		    $texte .= $ligne;
		}
		close(FILE);
		$texte=~/encoding ?= ?[\'\"]([^\'\"]+)[\'\"]/i;
		my $encodage=$1;
		if ($encodage ne "") {
		    my $tmptexteXML="<file>\n";
		    $tmptexteXML.="<name>$file</name>\n";
		    $texte =~ s/> *</></g;
		    $texte=~/<pubDate>([^<]+)<\/pubDate>/;
		    $tmptexteXML.="<date>$1</date>\n";
		    $tmptexteXML.="<items>\n";
		    my $tmptexteBRUT="";
		    open(FILE,"<:encoding($encodage)", $file);
		    $texte="";
		    while (my $ligne=<FILE>) {
			$ligne =~ s/\n//g;
			$texte .= $ligne;
		    }
		    close(FILE);
		    $texte=~s/> *</></g;
		    $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 ?://;
		    $rub=~ s/ //g;
		    $rub=uc($rub);

		    my $output1="SORTIE-extract-txt-".$rub.".xml";
		    my $output2="SORTIE-extract-txt-".$rub.".txt";
		    if (!open (FILEOUT1,">>:encoding(utf-8)", $output1)) { die "Pb a l'ouverture du fichier $output1"};
		    if (!open (FILEOUT2,">>:encoding(utf-8)", $output2)) { die "Pb a l'ouverture du fichier $output2"};
			
		    #----8<-------Extraction du contenu---------8<---------
			
		    while ($texte =~ /<item><title>(.+?)<\/title>.+?<description>(.+?)<\/description>/g) {
				my $titre=$1; #premiere extraction
				my $resume=$2; #deuxieme
				if (uc($encodage) ne "UTF-8") {utf8($titre);utf8($resume);}
					$titre = &nettoietexte($1);
					$resume = &nettoietexte($2);
				if (!(exists($dictionnairedesitems{$resume}))) {
					$tmptexteBRUT.="§ $titre \n";
					$tmptexteBRUT.="$resume \n";
					$tmptexteXML.="<item><title>$titre</title><abstract>$resume</abstract></item>\n";
					$dictionnairedesitems{$resume}++;
				}
				else {
					$tmptexteXML.="<item><title>-</title><abstract>-</abstract></item>\n";
				}
		    }
		    $tmptexteXML.="</items>\n</file>\n";
		    print FILEOUT1 $tmptexteXML;
		    print FILEOUT2 $tmptexteBRUT;
		    close FILEOUT1;
		    close FILEOUT2;
		}
		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 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=~/encoding ?= ?[\'\"]([^\'\"]+)[\'\"]/i;
		my $encodage=$1;
		if ($encodage ne "") {
		    open(FILE,"<:encoding($encodage)", $file);
		    $texte="";
		    while (my $ligne=<FILE>) {
			$ligne =~ s/\n//g;
			$texte .= $ligne;
		    }
		    close(FILE);
		    $texte =~ s/> *</></g;
		    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 ?://i;
			$rub=~ s/ //g;
			$rub=uc($rub);
			$dictionnairesdesrubriques{$rub}++;
		    }
		}
		else {
		}
	    }
	}
    }
}