J'ai été confronté à un problème intéressant ce matin. Le problème était le suivant :
Une liste de sites dont nous souhaitions avoir les fils RSS.
Au niveau des solutions, il n'y avait pas trop de choix possibles :
- faire le travail manuellement ;
- développer une solution plus automatisée.
Mon cœur penche évidemment pour la solution automatisée. J'avais développé un
petit outil permettant de récupérer les fils RSS d'un site. Cet outil était
vraiment très simple puisque s'appuyait sur la fonction find_feeds() du
module XML::Feed. Voici la version en one-liner :
perl -MXML::Feed -MData::Dump -e 'dd(XML::Feed->find_feeds(shift))' http://lesoir.be
J'ai donc modifié mon script de manière à gérer une liste de liens, et fournir en retour une liste des fils RSS. J'ai également ajouté une petite gestion de statistiques de manière à savoir le nombre de sites traités et quels sont ceux n'offrant pas de fils RSS (ou plus exactement, les sites dont XML::Feed n'a pas pu récupérer les fils RSS). Voici le script final :
#!/usr/bin/env perl use strict; use warnings; use YAML; use Getopt::Long; use XML::Feed; my $config = {}; GetOptions( $config, "input=s", "output=s" ); die _usage() unless _valid($config); my $sites = YAML::LoadFile( $config->{input} ); my @feeds; my @with_feeds; my @no_feeds; foreach my $site ( @{$sites} ) { my @site_feeds = XML::Feed->find_feeds($site); if ( scalar(@site_feeds) > 0 ) { push @feeds, @site_feeds; push @with_feeds, $site; } else { push @no_feeds, $site; } } YAML::DumpFile( $config->{output}, \@feeds ); print "# sites avec feeds : ", scalar(@with_feeds), $/; print "# sites sans feed : ", scalar(@no_feeds), $/; YAML::DumpFile( './sites_without_feed.yml', \@no_feeds ); sub _usage { return "Usage: $0 --input file.yml --output file-output.yml\n"; } sub _valid { my $config = shift; if ( exists $config->{input} and exists $config->{output} ) { return 1; } else { return 0; } }
