#!/usr/bin/perl

#-------------------------------------------------------------------------------------

<<DOC;
Gabriele CHIGNOLI
JANVIER 2017
 usage : perl scriptRSS.pl rubrique-recherchée repertoire-a-parcourir
 >_ repertoire-a-aparcourir/fil RSS
 -> titres+contenus du fil.txt ; titres+contenus du fil.xml : <PARCOURS><auteur nom prenom/><FILTRAGE><CONTENU>du filtrage</CONTENU></FILTRAGE></PARCOURS>
DOC

#-------------------------------------------------------------------------------------
my $rubrique="$ARGV[0]";
my $rep="$ARGV[1]";
$rep=~ s/[\/]$//;	# rep n'a pas de sous-rep
my %dico;

### sorties ###
mkdir "resultats$rubrique";
my $txt=".\/resultats$rubrique\/$rubrique.txt";
open TXT,">:encoding(utf-8)",$txt or die "Oups ! Ouverture de $txt non réussie\n$!";
close TXT;
my $xml=".\/resultats$rubrique\/$rubrique.xml";
open XML,">:encoding(utf-8)",$xml or die "Oups ! Ouverture de $xml non réussie\n$!";
print XML "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<PARCOURS>\n<auteur nom=\"CHIGNOLI\" prenom=\"Gabriele\"/>\n<FILTRAGE>\n";
close XML;

##--------------------lancement analyse de l'arborescence
&parkour($rep);

open XML,">>:encoding(utf-8)",$xml or die "Oups ! Ouverture de $xml non réussie\n$!";
print XML "</FILTRAGE>\n</PARCOURS>\n";
close XML;

####--------------------
exit;

##----------##----------
sub parkour {
	my $path = shift(@_);
	opendir(DIR, $path) or die "Oups ! Ouverture de $path impossible\n$!";
	my @files = readdir(DIR);
 	closedir(DIR);

	foreach my $file (@files) {
		next if $file=~/^\.\.?$/;
		next if $file=~/^fil/;
		$file = $path."/".$file;
		if (-d $file) {
			print "—NouveauRepertoire==>\s$file,\n";
# ça recommence !
			&parkour($file);	
			print "—FinRepertoire==>\s$file\n";
		}
		if (-f $file) {
			if ($file=~/.+$rubrique.+\.xml/) {
				open FIC,"<:encoding(utf-8)",$file;
				my $texte="";
				open TXT,">>:encoding(utf-8)",$txt;
				open XML,">>:encoding(utf-8)",$xml;
# flux textuel de FIC -> une seule ligne
				while (my $ligne=<FIC> ) {		### nettoyages ###
					chomp $ligne;			# \n*ligne en cours
					$ligne=~s/\r//g;		# \n windows
					$ligne=~s/&#38;#39;/'/g;	# caractères sous forme d'entités
					$ligne=~s/&#38;#34;/"/g;	# idem
					$ligne=~s/xE([0-9])//g;		# idem
					$texte=~s/>\s+</></g;		# suppression des espaces entre les balises
					$texte.=$ligne;			# concaténation 
				}
				close FIC;
				while ($texte=~/<item>(<link>(.+?)<\/link>)?<title>(.+?)<\/title>(<link>(.+?)<\/link>)?<description>(.+?)<\/description>/g) {
						my $titre=$3.".";
						$titre=~s/&lt;.+?&gt;//g;
						$titre=~s/\?\.$/\?/;
						my $description=$6;
						$description=~s/&lt;.+?&gt;//g;
						if (!(exists $dico{$titre})) {
							my ($xmltitre,$xmldescription) = &etiquette($titre,$description);
							print TXT "$titre\n$description\n\n";
							print XML "<item><titre>$xmltitre</titre><description>$xmldescription</description></item>\n";
							$dico{$titre}=1;
						}
					}
				}
				close TXT;
				close XML;
# fin traitement fichier
		}
	}
}

##----------##----------##----------
sub etiquette {
	my $t=shift(@_);
	my $d=shift(@_);
	
	my $t_out=".\/resultats$rubrique\/titre.txt";
	my $d_out=".\/resultats$rubrique\/description.txt";

	open TMP,">>:encoding(utf8)",$t_out;
	print TMP "$t\n";
	close TMP;
	system("perl tokenise.pl ./resultats$rubrique/titre.txt | ./tree-tagger -token -lemma -no-unknown french.par > ./resultats$rubrique/titre_treeTagger.txt");
	system("perl treetagger2xml.pl ./resultats$rubrique/titre_treeTagger.txt utf8");
	open TMP2,"<:encoding(utf-8)","./resultats$rubrique/titre_treeTagger.txt.xml";
	my $t_tag="";
	my $ligne = <TMP2>;
	while (my $ligne = <TMP2>) {
		$t_tag = $t_tag . $ligne;
	}
	close TMP2;

	open TMP,">>:encoding(utf8)",$d_out;
	print TMP "$d\n";
	close TMP;
	system("perl tokenise.pl ./resultats$rubrique/description.txt | ./tree-tagger -token -lemma -no-unknown french.par > ./resultats$rubrique/description_treeTagger.txt");
	system("perl treetagger2xml.pl ./resultats$rubrique/description_treeTagger.txt utf8");
	open(TMP2,"<:encoding(utf-8)","./resultats$rubrique/description_treeTagger.txt.xml");
	my $d_tag="";
	my $ligne = <TMP2>;
	while (my $ligne = <TMP2>) {
		$d_tag = $d_tag . $ligne;
	}
	close TMP2;

	return($t_tag,$d_tag);
}

#####
####
###
##
#
#
