Boite à Outils - Série 1

Traitement des flux RSS

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 :

  • Rubrique 1
  • Rubrique 2
  • Rubrique 3
  • Le Script Perl
    											
    #/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 aprs 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 ; 
    }
    								
    							
    LIENS

    Exemple de sortie XML

    On obtient ici en sortie un fichier XML qui contient les mentions TITRE et DESCRIPTION.

    Exemple de sortie TXT

    On obtient ici en sortie un fichier TXT qui contient les titres et les descriptions.