#!/usr/bin/perl
<<DOC; 
Votre Nom : Chunxiao YAN 
 mars 2015
 usage : perl 2015BAO1exrg.pl repertoire-a-parcourir
DOC

use Unicode::String qw(utf8);

#----------------------bon script par rub ----------------------------------------
my $rep="$ARGV[0]";
$rep=~ s/[\/]$//;  

my $repsortie=$ARGV[1];
print $repsortie;
mkdir($repsortie) or die ("Probleme avec la creation du repertoire de $repsortie, verifier s'il en existe deja une");

my %dicTitle=();
my %dicDescription=();
my %dicrubriques=();
#----------------------------------------
&parcoursarborescencefichiers($rep);	# traitement de tous les fichiers 

opendir(DIR, $repsortie) or die "probleme d'ouverture de repertoire: $!\n";
my @listefichiers = readdir(DIR);
closedir(DIR);
foreach my $fichier (@listefichiers) {
    if ($fichier=~/\.xml$/) {
	if (!open (FILE,">>:encoding(utf-8)",$repsortie."\\".$fichier)) { die "Pb a l'ouverture du fichier $output1"};
    print FILE "</PARCOURS>\n";
    close(FILE);
	}    
}
exit;
#-----------fin d'execution-----------------------------------

#----------definition des focntions----------------------------------------------------------------------------------------------------------------
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!
		print "je rentre dans $file \n ";
		#my $attente=<STDIN>;
	    }
	
	if (-f $file) {
        print "Traitement de : $file\n";
		#print OUT "$file\n";
		if (($file=~/\.xml$/) && ($file!~/\/fil.+\.xml$/)){
		    open(FILE,$file);
		    $ligne=<FILE>;
		    print $file;
            close(FILE);
        #----------------------detecte encodqge--------------------------------
		     $ligne =~/encoding=[\'\"]([^\'\"]+)[\'\"]/i;

            my $encodage = $1;
            print "ENCODAGE : $encodage\n";
        #----------------------------------------------------------------------
			open (FILE,"<:encoding($encodage)",$file);
			$chainecomplete = "";
			while ($ligne=<FILE>) {
            chomp $ligne;
            $chainecomplete = $chainecomplete . " " . $ligne;
			}
			$chainecomplete=~s/> +</></g;
		#-------------------traitement de fichier rubrique---------------------------------------
	    if ($encodage ne "") {
		    print "Extraction dans : $file \n";
		    my $tmptexteXML="<file>\n";
		    $tmptexteXML.="<name>$file</name>\n";
			$chainecomplete=~/<pubDate>([^<]+)<\/pubDate>/;
			$tmptexteXML.="<date>$1</date>\n";
		    $tmptexteXML.="<items>\n";
			my $tmptexteBRUT="";
		    # on recherche la rubrique
		    $chainecomplete=~/<channel>.*?<title>([^<]+)<\/title>/;
		    my $rub=$1;
            $rub=&nettoyagerub($rub);
		    print "RUBRIQUE : $rub\n";
		    #---------------------------------------------------------------------------------------------------
		    my $output1=$repsortie."/SORTIE-extract-txt-".$rub.".xml";
		    my $output2=$repsortie."/SORTIE-extract-txt-".$rub.".txt";
			if ( -e $output1) {
			    print "exsite: $rub";   
			}
			else {
			&fichiersortie($rub);
			}
		    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"};
		    #----------------------------------------------------------------------------------------------------
		    my $cpt=0;
		    my $compteurEtiquetage=0;
			
			#----------------------------------------------
        while ($chainecomplete=~/<item><title>([^<]*)<\/title>.*?<description>([^<]*)<\/description>/g) {
		    my $title=$1; 
		    my $description=$2;
			if (uc($encodage) ne "UTF8") {
				      print "changement en utf8\n";
			            utf8($title);
			            utf8($description);
			        }
            if (!(exists $dicTitle{$title})){
                        $cpt++;			
					    $dicTitle{$title}++;
					    $dicDescription{$description}++;
			            $compteurEtiquetage++;
				#--------------nettoyage-------------------
				        print "nettoyage";
				        $title=&nettoyage($title);
		                $description=&nettoyage($description);
	
                        $tmptexteBRUT.="?$title \n";						
			            $tmptexteBRUT.="$description \n";
			            $tmptexteXML.="<item num=\"$cpt\"><title>$title</title><abstract>$description</abstract></item>\n";
                }
			      else {
			       $tmptexteXML.="<item><title>-</title><abstract>-</abstract></item>\n";
				   print "doublons";
			    }    
			    } 		
			    $tmptexteXML.="</items>\n</file>\n";
		        print FILEOUT1 $tmptexteXML;
		        print FILEOUT2 $tmptexteBRUT;
		        close FILEOUT1;
		        close FILEOUT2;
				}
				else {
				        print "$file ==> $encodage \n";
				    }
		}
	    }	

	}	
    }

sub fichiersortie {
    my $rub=shift(@_);
    my $output1=$repsortie."/SORTIE-extract-txt-".$rub.".xml";
    my $output2=$repsortie."/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";
	print FILEOUT1 "<NOM>Chunxiao YAN 2015</NOM>\n";
    close(FILEOUT1);
    close(FILEOUT2);

}

sub nettoyage {
    my $chainetrouvee=shift(@_);
	$chainetrouvee=~s/&#38;#39;/'/g;
	$chainetrouvee=~s/&#38;#34;/"/g;
	$chainetrouvee=~s/&#39;/'/g;
	$chainetrouvee=~s/&#34;/"/g;
	$chainetrouvee=~s/&#233;/é/g;
	$chainetrouvee=~s/&#234;/ê/g;
    $chainetrouvee=~s/&lt;.*?&gt;//g;
	$chainetrouvee=~s/&amp;/&/g;
	$chainetrouvee=~s/&gt;/&/g; 
	return $chainetrouvee;	
}

sub nettoyagerub {
    my $rub=shift(@_);
		$rub=~ s/Le ?Monde.fr ?://g;
		$rub=~s/ ?: ?Toute l'actualité sur Le Monde.fr.//g;
		$rub=~s/\x{E8}/e/g;
		$rub=~s/\x{E0}/a/g;
		$rub=~s/\x{E9}/e/g;
		$rub=~s/\x{C9}/e/g;
		$rub=~s/ //g;
		$rub=uc($rub); # mise en majuscules
		$rub=~s/-LEMONDE.FR//g;
		$rub=~s/:TOUTEL'ACTUALITESURLEMONDE.FR.//g;
		$rub=~s/LEMONDE.FR-ACTUALITE//g;
	return $rub
}