Archives mai 2010

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 :

  1. faire le travail manuellement ;
  2. 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;
    }
}

À propos de cette archive

Cette page est une archive des notes de mai 2010 listées de la plus récente à la plus ancienne.

avril 2010 est l'archive précédente.

août 2010 est l'archive suivante.

Retrouvez le contenu récent sur l'index principal ou allez dans les archives pour retrouver tout le contenu.

Pages

Powered by Movable Type 4.261