﻿#!/usr/bin/perl -w

use Unicode::String qw(utf8);
# tells Perl to process the program's text as Unicode characters in the UTF-8 format. 



#--------------------------parcours répertoire-----------------------------------------------------------
my $racine="$ARGV[0]";
print " Répertoire de départ : $racine\n ";
$racine=~ s/[\/]$//;
#on enlève la barre verticale

my $encodagesortie="utf-8"; 


print "L'ecodage de sortie est $encodage\n";

my $output1="2008-sortie-regex.txt";
my $output2="2008-sortie-regex.xml";
open(OUT1,">:encoding($encodagesortie)", $output1) || die ("Erreur d'ouverture de $output1");
open(OUT2, ">:encoding($encodagesortie)", $output2) || die ("Erreur d'ouverture de $output2");



print OUT2 "<?xml version=\"1.0\" encoding=\"$encodagesortie\" ?>\n";
print OUT2 "<files>\n"; 

&recursive($racine);

print OUT2 "</files>\n";

sub recursive {
	my $dossier=shift(@_);#on prend le 1e element de la liste de la variable @_
	opendir(DOSSIER, $dossier);
	my @files=readdir(DOSSIER);
	closedir(DOSSIER);
	print "liste des fichiers de $dossier : @files\n";
	print "Le chemin est le suivant : @files\n";
	#3 conditions:

	#si le fichier courant est . ou .., on les ignore
	#next if $file =~/~\.\.?$/; #identique au if juste en dessous

	foreach $fic (@files){
		next if $fic =~ /^\.\.?$/; print "On ne fait rien\n";
		next if $fic =~ /\.txt$/; print "On ne fait rien\n";
		$fic = $dossier."/".$fic;

		#if (($fic eq ".") or ($fic eq "..")){ # on passe à l'intération suivante
			
			#next;#passe au suivant }

		#$fic = $dossier."/".$fic;
	#si le fichier courant est un vrai fichier et si c'est une fichier XML on le traite
		if (-f $fic){ # True if FILE exists and is a regular file
			print "$fic\n";

			#mettre le code de l'extraction

#----------------------------------------le code de l'extraction-----------------------------------------
			#my $encodagesortie="utf-8";
			my $encodage=`file -i $fic | cut -d= -f2`;

#-i, --mime
#Causes the file command to output mime type strings rather than the more traditional human readable ones. Thus it may say 'text/plain; charset=us-ascii' rather than 'ASCII text'. In order for this option to work, file changes the way it handles files recognized by the command itself (such as many of the text file types, directories etc), and makes use of an alternative 'magic' file. (See the FILES section, below). 

			print "ENCODAGE : $encodage \n";
			chomp($encodage);#la commande chomp enlève le dernier caractère de la chaine $encodage
			if ($encodage eq "unknown-8bit"){
				open(FILE, $fic)|| die ("Erreur d'ouverture de $fic");}
			else{
				open(FILE, "<:encoding($encodage)", $fic)|| die ("Erreur d'ouverture de $fic");}
#command-line arguments are stored in a special array named @ARGV. So you just need to read from that array #to access your script's command-line arguments.
#ARGV array elements: In the ARGV array, $ARGV[0] contains the first argument, $ARGV[1] contains the second argument, etc.


				print OUT2 "<file>\n";
				print OUT2 "<name>$fic</name>\n";
				my $texte ="";

				while (my $ligne =<FILE>){
				#print ligne
					$ligne=~s/\n//g;#on enlève le retour à la ligne
					$texte.=$ligne;

				}

				$texte=~ s/> *</></g;
				$texte=~/<pubDate>([^<]+)<\/pubDate>/;
				my $date=$1;
				# Si le motif est trouvé, il est renvoyé dans une variable de perl appelé $1

				if (uc($encodage) ne "UTF-8"){
					utf8($date);}
				print OUT2 "<date>".$date."</date>\n";
				print OUT2"<items>\n";

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

			while ($texte =~/<item><title>(.+?)<\/title>.+?<description>(.+?)<\/description>/g) {
				my $titre=$1;
				my $resume=$2;
				if (uc($encodage) ne "UTF-8") {utf8($titre);utf8($resume);}
				#uc renvoie la chaîne en majuscules 
					$titre = &nettoietexte($titre);
					$resume = &nettoietexte($resume);
					print OUT1 "Titre : $titre \n";
					print OUT1 "Resume : $resume \n";;
					print OUT2 "<item><title>$titre</title><abstract>$resume</abstract></item>\n";
	}

				print OUT2 "</items>\n</file>\n";
		}

	#si le fichier courant est un répertoire : on regard son contenu
		if (-d $fic) {#True si le fichier existe et est un répertoire 
			&recursive($fic);#$file est une chaine de caractères

	}
	
 }
}

close(OUT1);
close(OUT2);
close(FILE);

#----------------------------------------------------
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/<[^>]+>//g;
	$texte=~ s/&nbsp;&nbsp;//g;
	$texte=~s/]]>//g;
	$texte=~s/&#233;/é/g;
	$texte=~s/&#234;/é/g;
	return $texte;
		}


#-----------------------------fin du code de l'extraction/nettoyage----------------------------------------


