#!/usr/bin/perl
<<DOC; 
Menel Mahamdi, Vanessa Gaudray-Bouju, Xiaomin Huang
cd /mnt/c/users/mmaha/bureau/projet-BAO2021
usage : perl script_BAO1_XMLRSS.pl 2020 rubrique
 Le programme prend en entrée le nom du répertoire-racine contenant les fichiers (cette année c'est 2020)
 à traiter et le nom de la rubrique à traiter parmi ces fichiers
 rubriques : international 3210 , 
DOC
#------------------------------------------------

use strict;
use utf8;
#----------------------------------------------------------
use XML::RSS;
use Unicode::String qw(utf8);
#----------------------------------------------------------


my $rep="$ARGV[0]";
my $rubrique ="$ARGV[1]";
# on s'assure que le nom du répertoire ne se termine pas par un "/"
$rep=~ s/[\/]$//;
my $encodage="utf-8";

open my$OUTTXT,">:encoding(utf8)","sortietxt_BAO1_XMLRSS_$rubrique.txt";
open my$OUTXML,">:encoding(utf8)","sortiexml_BAO1_XMLRSS_$rubrique.xml";
print $OUTXML "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n";
print $OUTXML "<corpus2020>\n";

my %dico_des_titres=();
my $numberItem=0;
my $nbFile=0;
#----------------------------------------
&parcoursarborescencefichiers($rep);	#parcours
#-----------------------------------------

print $OUTXML "</corpus2020>\n";
close $OUTTXT;
close $OUTXML;
print "Nb item : $numberItem \n";
print "nb files : $nbFile \n";
exit;

#----------------------------------------------------------
sub parcoursarborescencefichiers
{
    my $chemin = shift(@_);
    opendir(my $dossier, $chemin) or die "can't open $chemin: $!\n";
    my @files = readdir($dossier);
    closedir($dossier);
		foreach my $file (@files)
		{
			next if $file =~ /^\.\.?$/;
			$file = $chemin."/".$file;
			if (-d $file)
			{
			&parcoursarborescencefichiers($file);	#recurse!
			}
			if (-f $file)
			{
				if ($file =~/$rubrique.+xml$/) 
				{
				
					print $nbFile++," Traitement de : ",$file,"\n";
#-----------------------------------------------------------
					my $rss=new XML::RSS;

					eval {$rss->parsefile($file); };
					if( $@ ) 
					{
						$@ =~ s/at \/.*?$//s; # remove module line number
						print STDERR "\nERROR in '$file':\n$@\n";
					}
					else 
					{
 
						print $OUTXML "<items>\n";
						foreach my $item (@{$rss->{'items'}}) 
						{
							my $titre=$item->{'title'};
							my $description=$item->{'description'};
							$titre, $description=&nettoyage($titre, $description);
							
							if (uc($encodage) ne "UTF-8") {utf8($titre);utf8($description);}
							print $OUTTXT "Titre : $titre \n";
							print $OUTTXT "Description : $description \n";;
							print $OUTXML "<item><titre>$titre</titre><description>$description</description></item>\n";
						}		
					}
				}
			}
		}
}
    

#----------------------------------------------
sub nettoyage {
    #my $titre=shift(@_); autre solution en vidant la liste des arguments du programmes...
    #my $description=shift(@_);
    my $titre = $_[0];
    my $description = $_[1];
	$titre=~s/^<!\[CDATA\[//;
	$titre=~s/\]\]>$//;
	$description=~s/^<!\[CDATA\[//;
	$description=~s/\]\]>$//;
    $description=~s/&lt;.+?&gt;//g;
    $description=~s/&#38;#39;/'/g;
    $description=~s/&#38;#34;/"/g;
    $titre=~s/&lt;.+?&gt;//g;
    $titre=~s/&#38;#39;/'/g;
    $titre=~s/&#38;#34;/"/g;
    $titre=~s/$/\./g;
	$titre=~s/\.+$/\./g;
    return $titre,$description;
}

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