#######nettoyeur perl
##Fait par Thibault Bejerano dans le cadre du cours "<projet encadré 2" du master Ingénierie Linguistique à Paris Sorbonne-Nouvelle. Paris, 2014.
##le programme se lance ainsi : se situer dans le dossier où est le programme, perl [programme] [dossier contenant les fichiers à traiter]
#! usr/bin/perl
use 5.018;
use XML::RSS;
use Encode qw (encode);
my %DICO=();
my %rubrique;
	$rubrique{Une}="0,2-3208,1-0,0.xml"; 
	$rubrique{International}="0,2-3210,1-0,0.xml";	
	$rubrique{Europe}="0,2-3214,1-0,0.xml";
	$rubrique{Societe}="0,2-3224,1-0,0.xml";
	$rubrique{Opinion}="0,2-3232,1-0,0.xml";
	$rubrique{Economie}="0,2-3234,1-0,0.xml";
	$rubrique{Media}="0,2-3236,1-0,0.xml";
	$rubrique{Rendez_vous}="0,2-3238,1-0,0.xml";
	$rubrique{Sports}="0,2-3242,1-0,0.xml";
	$rubrique{Science_et_Environnement}="0,2-3244,1-0,0.xml";
	$rubrique{Culture}="0,2-3246,1-0,0.xml";
	$rubrique{Livres}="0,2-3260,1-0,0.xml";
	$rubrique{Examen_2008}="0,2-3404,1-0,0.xml";
	$rubrique{Cinema}="0,2-3476,1-0,0.xml";
	$rubrique{Voyages}="0,2-3546,1-0,0.xml";
	$rubrique{Technologie}="0,2-651865,1-0,0.xml";
##########
system("mkdir -p Sortie-XmlRss");
########## 
#création des fichiers
foreach my $rubric (keys(%rubrique)){
	open (OUT1,">>", "Sortie-XmlRss/".$rubric.".txt") or die "Error:$!";
	open (OUT2,">>", "Sortie-XmlRss/".$rubric.".xml") or die "Error:$!";
	print OUT2 "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"."<file>\n";	

my $var = "$ARGV[0]";
&parcours($var,$rubrique{$rubric});

print OUT2 "</file>\n";
close OUT1;
close OUT2;
}

exit;

sub parcours
{	
	my $dossier=shift(@_);
	my $rub=shift(@_);
	opendir(Traitement,$dossier) or die $!;
	my @files = readdir(Traitement);
	for my $file (@files)
	{
		if ($file =~/^\.\.?$/) {next}
		my $file=$dossier."/".$file;
		if (-d $file) 
		{
			&parcours($file,$rub);
		}
		foreach (-f $file,$rub) 
		{
			if ($file=~m/\.xml$/){
				if ($file=~m/$rub/){
					&traitement($file,$rub);
				}
			}
		}
	}
}

sub nettoie {
	my ($texte)=shift;
		$texte=~s/&#38;#39;/'/g;
		$texte=~s/&#38;#34;/"/g;
		$texte=~s/&#233;/é/g;
		$texte=~s/&#234;/è/g;
		$texte=~s/&#39;/'/g;
		$texte=~s/&#34;/"/g;
		$texte=~s/&lt;/</g;
		$texte=~s/&gt;/>/g;
		$texte=~s/<a href[^>]+>//g;
		$texte=~s/<img[^>]+>//g;
		$texte=~s/<\/a>//g;
		$texte=~s/<[^>]+>//g;
		$texte=~s/&nbsp/ /g;
		$texte=~s/&/and/g;
	return $texte
};

sub traitement
{
	my $fichier=shift(@_);
	my $rss = new XML::RSS;
	eval {$rss->parsefile($fichier);};
	if ($@) {
		$@=~s/at \/.*?$//s;
		print $@ or die $!;
		say STDERR "Failed on '$fichier':\t$@";
	}	
	else { 
		my $fichier=encode('UTF-8', $fichier);
		my $date=$rss->{'channel'}->{'pubDate'};
		print OUT2 "\t<date>$date</date>\n";
		foreach my $item (@{$rss->{'items'}}) {
			my $titre=$item->{'title'};
		if (exists($DICO{$titre})) {
						
 				}
		else{
			$titre=&nettoie($titre);
			my $titreiso=encode('ISO 8859-1', $titre);
			my $titreutf=encode('UTF-8', $titre);
			my $content=$item->{'description'};
			$content=&nettoie($content);
			my $contentiso=encode('ISO 8859-1', $content);
			my $contentutf=encode('UTF-8', $content);
			print OUT1 "\tTitre: $titreiso\nDescription: $contentiso\n";
			print OUT2 "\t<item>"."\t<title>$titreutf</title>\n"."\t<abstract>$contentutf</abstract>\n</item>\n";
			}
		$DICO{$titre}++;
		}
	}
}
