#!/usr/bin/perl
#Nom: Valentine DESPLAT
#Se lance comme suit: perl5.16.3 BAO1_xmlrss.pl 2013/

use XML::RSS;
use Unicode::String qw (utf8);
open(IN,"$ARGV[0]");
my %DICO=();
my $var = "$ARGV[0]";

#On prépare les fichiers pour chaque rubrique
my %nom_rubrique;
$nom_rubrique{UNE}= "0,2-3208,1-0,0.xml";
$nom_rubrique{INTERNATIONAL}= "0,2-3210,1-0,0.xml";
$nom_rubrique{EUROPE}= "0,2-3214,1-0,0.xml";
$nom_rubrique{SOCIETE}= "0,2-3224,1-0,0.xml";
$nom_rubrique{IDEE}= "0,2-3232,1-0,0.xml";
$nom_rubrique{ECONOMIE}= "0,2-3234,1-0,0.xml";
$nom_rubrique{MEDIAS}= "0,2-3236,1-0,0.xml";
$nom_rubrique{VOUS}= "0,2-3238,1-0,0.xml";
$nom_rubrique{SPORT}= "0,2-3242,1-0,0.xml";
$nom_rubrique{PLANETE}= "0,2-3244,1-0,0.xml";
$nom_rubrique{CULTURE}= "0,2-3246,1-0,0.xml";
$nom_rubrique{LIVRE}= "0,2-3260,1-0,0.xml";
$nom_rubrique{UNE1}= "0,2-3404,1-0,0.xml";
$nom_rubrique{CINEMA}= "0,2-3476,1-0,0.xml";
$nom_rubrique{VOYAGE}= "0,2-3546,1-0,0.xml";
$nom_rubrique{TECHNOLOGIES}= "0,2-651865,1-0,0.xml";
$nom_rubrique{POLITIQUE}= "0,57-0,64-823353,0.xml";
 
foreach $nom (keys(%nom_rubrique)){
#Création du fichier texte
	my $out1="sortie_$nom.txt";
	open(OUT1,">:encoding(UTF8)","$out1");
#Création du fichier xml	
	my $out2="sortie_$nom.xml";
	open(OUT2,">:encoding(UTF8)","$out2");
	print OUT2 "<?xml version=\"1.0\" encoding=\"UTF-8\" ?> \n";
	print OUT2 "<Racine> \n";
#On lance la procédure qui parcours l'arbo	
	&parcours($var, $nom_rubrique{$nom},$nom);
	
	print OUT2 "</Racine>\n";
	close (OUT1);
	close (OUT2);
	
}
#On ferme le tout.
exit;
#
################################################
#
sub parcours {
	my $dossier = shift(@_);
	my $nomfilrss=shift(@_);
	opendir (DOSSIER, $dossier);
# liste de tous les fichiers et répertoires à l'intérieur du répertoir racine
	my @files = readdir (DOSSIER);
	closedir(DOSSIER);
# pour avoir la liste de tous mes fichiers er répertoirs de façon organisée
	foreach my $file (@files){
# 3 conditions possibles:
# si le fichier courant est un rep : on regarde son contenu
		next if $file =~/^\.\.?$/;
		$file = $dossier."/".$file;
# si le fichier courant est un rep alors on regarde le contenu
		if (-d $file){
			&parcours ($file, $nomfilrss);
		}
# si c'est un vrai fichier uniquement en xml.
		if ($file=~/\.xml$/){
			if ($file=~/$nomfilrss/){
			&filtreur ($file);
			print $file,"\n";
			}
		}
	}
}
#
################################################
#
sub filtreur {
my $var = shift @_;
my $rss=new XML::RSS;
eval {$rss->parsefile($var); };
if( $@ ) {
		$@ =~ s/at \/.*?$//s; 
	}
else {
#On incruste la date dans chaque fichier
		my $date = $rss->{'channel'}->{'pubDate'};
		print OUT2 "<items>\n";
		print OUT3 "<items>\n";
		
		foreach my $item (@{$rss->{'items'}}) {
#On nettoye le texte pour éviter les problèmes d'encodage
			$titre = $item->{'title'};
			$resume = $item->{'description'};
			$titre = &nettoietexte($titre);
			$resume = &nettoietexte($resume); 
#Si le contenu existe déjà dans le dico, alors on ne le prends pas
			if (exists($DICO{$titre})) {
						
			}
#Sinon on prends, et on met entre les bonnes balises dans le fichier .xml
			else {
				print OUT1 "Titre : $titre \n";
				print OUT1 "Resume : $resume \n";
				print OUT2 "<item><title>$titre</title><abstract>$resume</abstract>\n";
				print OUT2 "</item>\n";
				$DICO{$titre}++;
			}
		}
        			
	}
print OUT2 "</items>\n";
}

#
################################################
#
sub nettoietexte {
my $texte=shift;
#tableau spécial qui permet de vider la valeur de titre et de resume 
#ce qui nous permet de ne pas y faire appel à chaque fois
$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/&#38;#39;/'/g;
$texte =~ s/&#38;#34;/"/g;
$texte =~ s/<[^>]+>//g;
return $texte;
};
#
################################################
#
