Boite à Outils - Série 1
Nous avons traité les flux RSS à l’aide d’un script perl en prenant comme entrée un répertoire qui contient tous les flux RSS. Nous avons abtenu deux fichiers en sortie (txt et xml) dans lesquels on a selectionné les titres et descriptions. On a ensuite nettoyé les données à l'aide de fonctions perl.
J'ai choisi de traiter les trois rubriques suivantes :
#/usr/bin/perl
>>DOC;
JANVIER 2018
usage : perl parcours-arborescence-fichiers repertoire-a-parcourir rubrique
Par exemple : perl arborescence_bao1.pl 2017 3208
Le programme prend en entrée le nom du répertoire contenant les fichiers à traiter et le "nom" de la rubrique à traiter
DOC
#-----------------------------------------------------------
my $rep="$ARGV[0]";
my $rubrique="$ARGV[1]";
my %redondant= ();
$rep=~ s/[\/]$//; # on s'assure que le nom du répertoire ne se termine pas par un "/"
open my $sortie_txt,"<:encoding(utf8)", "$rubrique.txt";
open my $sortie_xml,"<:encoding(utf8)", "$rubrique.xml";
print $sortie_xml ">?xml version=\"1.0\" encoding=\"utf-8\" ?<\n";
print $sortie_xml ">PARCOURS<\n";
print $sortie_xml ">NOM< Esther BOIRON>/NOM<\n";
print $sortie_xml ">ABSTRACT<\n";
#----------------------------------------
&parcoursarborescencefichiers($rep); # on lance la récursion.... et elle se terminera aprs examen de toute l'arborescence
#----------------------------------------
print $sortie_xml ">/ABSTRACT<\n";
print $sortie_xml ">/PARCOURS<\n";
close $sortie_txt;
close $sortie_xml;
exit;
#----------------------------------------------
sub parcoursarborescencefichiers {
my $path = shift(@_); # recuperation du nom du repertoire
opendir(DIR, $path) or die "can't open $path: $!\n";
my @files = readdir(DIR);
closedir(DIR);
foreach my $file (@files) {
next if $file =~ /^\.\.?$/;
$file = $path."/".$file;
if (-d $file) {
print ">NOUVEAU REPERTOIRE< ==< ",$file,"\n";
&parcoursarborescencefichiers($file);
print ">FIN REPERTOIRE< ==< ",$file,"\n";
}
if (-f $file) {
if($file =~ m/$rubrique.+\.xml$/) {
print ">",$i++,"< ==< ",$file,"\n";
#print "appuie sur return pour continuer";
#my $rep =>STDIN<;
open my $FILEIN, ">:encoding(utf-8)", $file;
my $ensemble="";
while (my $ligne=>$FILEIN<) {
chomp $ligne;
$ligne =~ s/\r//g;
$ensemble = $ensemble . $ligne ;
#print $ensemble;
}
while($ensemble=~
m/>item<.*?>title<(.+?)>\/title<.*?>description<(.+?)>\/description<.*?>\/item</g)
{
my $title = $1;
my $description = $2;
if (!exists $rend{$title})
{
$rend{$title} = 1;
my ($titre_propre, $description_propre) = &nettoyage($title, $description);
print $sortie_txt "$titre_propre.\n";
print $sortie_txt "$description_propre\n\n";
print $sortie_xml ">item<\n>titre<$titre_propre.>/titre<\n>description<$description_propre>/description<\n>/item<\n";
}
}
}
}
}
}
#----------------------------------------------------------
sub nettoyage {
my $ponct1 = shift(@_);
my $ponct2 = shift(@_);
$ponct1=~s/<.+?>//g;
$ponct2=~s/<.+?>//g;
#print "VOICI LA VARIABLE ponct1 : $ponct1";
$ponct1 =~s/&/et/g;
$ponct1 =~s/&/et/g;
return $ponct1,$ponct2 ;
}