#/usr/bin/perl
#use Unicode::String qw(utf8);
use XML::RSS;
# on lance le programme comme ceci: perl parcours.pl 2008/
my $racine=$ARGV[0];
print "Repertoire de depart: $racine \n";
#-------------------------------------------->
#tables associatifs 
# pour vérifier la non-duplication des infos
#-------------------------------------------->
my %dicoTitre=();
my %dicoDescription=();

my %liste_rubriques;
$liste_rubriques{ALAUNE} = "0,2-3208,1-0,0\.xml";
$liste_rubriques{INTERNATIONAL} = "0,2-3210,1-0,0\.xml";
$liste_rubriques{EUROPE} = "0,2-3214,1-0,0\.xml";
$liste_rubriques{SOCIETE} = "0,2-3224,1-0,0\.xml";
$liste_rubriques{OPINION} = "0,2-3232,1-0,0\.xml";
$liste_rubriques{ECONOMIE} = "0,2-3234,1-0,0\.xml";
$liste_rubriques{MEDIA} = "0,2-3236,1-0,0\.xml";
$liste_rubriques{RDV} = "0,2-3238,1-0,0\.xml";
$liste_rubriques{VOUS}="0,2-3238,1-0,0\.xml";
$liste_rubriques{SPORT} = "0,2-3242,1-0,0\.xml";
$liste_rubriques{ENVIRONNEMENT} = "0,2-3244,1-0,0\.xml";
$liste_rubriques{CULTURE} = "0,2-3246,1-0,0\.xml";
$liste_rubriques{LIVRES} = "0,2-3260,1-0,0\.xml";
$liste_rubriques{ALAUNEBIS} = "0,2-3404,1-0,0\.xml";
$liste_rubriques{CINEMA} = "0,2-3476,1-0,0\.xml";
$liste_rubriques{VOYAGES} = "0,2-3546,1-0,0\.xml";
$liste_rubriques{TECHNOLOGIES} = "0,2-651865,1-0,0\.xml";
$liste_rubriques{POLITIQUE} = "0,57-0,64-82330\.xml";

$racine=~ s/[\/]$//;
#----------------------------------------
#Ouverture des fichiers de sortie et traitement avec la sous-routine de parcours d'arborescence fichiers recurse :
#----------------------------------------
my $repertoire = "./resultats_BAO/";
if (! -e $repertoire)
	{	
		mkdir($repertoire) or die ();
	}
my $sousrepertoire1 ="./resultats_BAO/BAO2/";
if (! -e $sousrepertoire1)
	{
		mkdir($sousrepertoire1) or die ();
	}
#Si le dossier existe déjà, on l'écrase pour éviter les doublons	
else
	{
		opendir(DIR, $sousrepertoire1) or die ();
		my @listedecrasement = readdir(DIR);
		foreach my $fichierecrase(@listedecrasement)
		{
			if (-e ($fichierecrase))
			{
				unlink $sousrepertoire1.$fichierecrase;
			}
		}
		closedir(DIR);
	}
my $sousrepertoire2 ="./resultats_BAO/BAO2_TAG/";
if (! -e $sousrepertoire2)
	{
		mkdir($sousrepertoire2) or die ();
	}
#si le dossier existe déjà on l'écrase
else
	{
		opendir(DIR, $sousrepertoire2) or die ();
		my @listedecrasement = readdir(DIR);
		foreach my $fichierecrase(@listedecrasement)
		{
			if (-e ($fichierecrase))
			{
				unlink $sousrepertoire2.$fichierecrase;
			}
		}
		closedir(DIR);
	}	
#--------------------------------------------------	
foreach my $nom (keys(%liste_rubriques)){
	my $output1="SORTIE_$nom.xml";
	my $output2="SORTIE_$nom.txt";
	
	open (OUT1,">:encoding(UTF-8)",$sousrepertoire1.$output1);
	open (OUT2,">:encoding(UTF-8)",$sousrepertoire1.$output2);
	
	print OUT1 "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
	print OUT1 "<rubrique>\n";
		
	&recurse($racine, $liste_rubriques{$nom});	#recurse!
	print OUT1 "</rubrique>\n";
	close OUT1;
}
#----------------------------------------
foreach my $nom (keys(%liste_rubriques)) {
	my $output2= "SORTIE_$nom.txt";
	my $sanstag= $sousrepertoire1.$output2;
	&treetagger ($sanstag, $nom);
}
#------------------------------------

sub recurse {
    my ($path, $nom_du_fichier_traite) = @_;
    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;

# Si $file correspond au nom d'un répertoire, on relance la sous-routine :
		if (-d $file) {
			&recurse($file, $nom_du_fichier_traite);	#recurse!
		}
		
# Si $file est un fichier, on le traite :		
		if (-f $file) {
			if ($file=~/\.xml$/) {
				if ($file=~/$nom_du_fichier_traite$/) {						
# On passe le fichier à la procédure @traitement fichier :						
					&traitementfichier($file);	
				}
			}
			
		}		
	}
}
#--------------------------------------------------------------
sub nettoietexte {
    my $texte=shift;
    #rechercher/remplacer les entites
    $texte=~s/&lt;/</g;
	$texte=~s/&gt;/>/g;
	$texte=~s/<a href[^>]+>//g;
	$texte=~s/<img[^>]+>//g;
	$texte=~s/<\/a>//g;
	$texte=~s/&#38;#34;/"/g;
	$texte=~s/<[^>]+>//g;
	$texte=~s/&#39;/'/g;
	$texte=~s/&#34;/"/g;
	$texte=~s/&nbsp;&nbsp;//g; 
	$texte=~s/&#8211;/–/g;
	$texte=~s/ & / &amp; /g;
	$texte=~s/  / oe /g;
	$texte=~s/&#38;/&/g;
	$texte=~s/&amp;/&/g; 
	$texte=~s/&quot;/"/g; 
	$texte=~s/&apos;/'/g; 
	$texte=~s/&#60;/</g; 
	$texte=~s/</</g; 
	$texte=~s/&#62;/>/g; 
	$texte=~s/>/>/g; 
	$texte=~s/&#160;//g; 
	$texte=~s/&#163;/£/g;
	$texte=~s/&pound;/£/g; 
	$texte=~s/&#169;/©/g;
 	$texte=~s/&#171;/«/g;
 	$texte=~s/&laquo;/«/g;
 	$texte=~s/&#187;/»/g;
 	$texte=~s/&raquo;//g;
 	$texte=~s/&#201;/É/g;
 	$texte=~s/&Eacute;/É/g;
 	$texte=~s/&#237;/î/g;
 	$texte=~s/&icirc;/î/g;
 	$texte=~s/&#239;/ï/g;
 	$texte=~s/&iuml;/ï/g;
 	$texte=~s/&#224;/à/g;
 	$texte=~s/&agrave;/à/g;
 	$texte=~s/&#226;/â/g;
 	$texte=~s/&acirc;/â/g;
 	$texte=~s/&#231;/ç/g;
 	$texte=~s/&ccedil;/ç/g;
 	$texte=~s/&#232;/è/g;
 	$texte=~s/&egrave;/è/g;
 	$texte=~s/&#233;/é/g;
 	$texte=~s/&eacute;/é/g;
 	$texte=~s/&#234;/ê/g; 
	$texte=~s/&ecirc;/ê/g; 
	$texte=~s/&#244;/ô/g; 
	$texte=~s/&ocirc;/ô/g; 
	$texte=~s/&#251;/û/g; 
	$texte=~s/&ucirc;/û/g; 
	$texte=~s/&#252;/ü/g; 
	$texte=~s/&uuml;/ü/g;
	$texte=~s/&uuml;/ü/g;
	$texte=~s/\x9c/œ/g; 
	$texte=~s/<br\/\>//g;
	$texte=~s/<img.*?\/>//g;
	$texte=~s/<a.*?>.*?<\/a>//g;
	$texte=~s/<![CDATA[(.*?)]]>/$1/g; 
	$texte=~ s/<[^>]>//g; 
	$texte=~s/\.$//; 
	$texte=~s/&/et/g; 	
    return $texte;
}
#----------------------------------------------
sub traitementfichier {
	my $file= shift(@_);
	open(FILE,$file);
	my $firstLine=<FILE>;
	if($firstLine=~/encoding='([^\']+)'/) {
		$encodage=$1;
		}
	else {next};
	close(FILE);
	
	open(FILE,"<:encoding($encodage)",$file);
	my $texte="";
	print $file,"\n";
	
# On utilise la bibliothèque XML::RSS pour extraire les titres et les descriptions :	
	my $rss = new XML::RSS;
	$rss->parsefile($file);
	if ($@) {
		$@=~s/at\/.*?$//s;
	}
	else {
		my $date=$rss->{'channel'}->{'pubDate'};
		print OUT1 "<date>$date</date>\n";
		foreach my $item (@{$rss->{'items'}}){
			$titre = $item->{'title'};
			$description = $item->{'description'};			
# On utilise la bibliothèque XML::Entities pour décoder le texte extrait				
		#$titre = XML::Entities::decode('all', $titre);			
		#$description = XML::Entities::decode('all', $description);
		#$description=~ s/<.+?>//g;
			$titre = &nettoietexte($titre);
			$description = &nettoietexte($description);		
# Filtre pour savoir si on a déjà vu l'article traité :				
			if ((!(exists $dicoTitre{$titre})) and (!(exists $dicoDescription{$description}))){
				$dicoTitre{$titre}=1;
				$dicoDescription{$description}=1;
				print OUT1 "<item><title>$titre</title><description>$description</description></item>\n";											
				print OUT2 "Titre: $titre\n";
				print OUT2 "Description: $description\n";
			}
	}

	close(FILE);

}
}

#----------------------------------------------
sub treetagger {
	my $contenu= shift(@_);
	my $rubrique = shift(@_);
	
	my $outtree= "SORTIE_treetagger".$rubrique.".txt";
# On fait appel à une commande système pour lancer tree-tagger :	
	system ("perl utf8-tokenize.perl $contenu | tree-tagger.exe TreeTagger/lib/french-utf8.par -lemma -token -no-unknown -sgml >> $sousrepertoire2/$outtree");
# On passe le fichier de sortie de tree-tagger au programme treetagger2xml pour le convertir en XML :
	
	system ("perl treetagger2xml-utf8.pl $sousrepertoire2/$outtree utf-8 ");
	
	print "$outtree \n";
# On récupère les données sur le fichier produit par la routine treetagger2xml :
}
#----------------------------------------------
#sub treetagger2xml 