-+  Associazione
-+  Documenti
-+  Eventi
-+  Community
-+  Blog
-+  Link

Ottobre 2013

Dom Lun Mar Mer Gio Ven Sab
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

Cerca






 

« iPod mania | Home | hanc project: e non siamo criminali! »

Podcast mania
29.09.06

Il mio problema è che sono pieno di colleghi. Ne ho uno che s'è comprato un iPod nano 8G di recente (bellissimo!), e s'è innamorato dei podcast. Uno di questi è quello di Radio 2 della RAI, che mette a disposizione varie trasmissioni più sul faceto che sul serio.

Il tizio di turno si lamenta perché il feed RSS del podcast, pur integrandosi alla perfezione con iTunes... gli fa vedere troppe cose. In particolare, a lui non interessano tutti i programmi, ma solo un paio. Che fare? Beh, un'idea potrebbe essere quella di prendere il feed RSS e filtrarlo lasciando solamente quello che ci interessa. E' per l'appunto quello che ho fatto con XML::Twig:

#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;

my $rss_url = shift
  || 'http://www.radio.rai.it/radio2/podcast/rssradio2.jsp';
my $filter = shift || 'Ottovolante';
$filter = qr/\A$filter\z/;

my $twig = XML::Twig->nparse(pretty_print => 'indented', $rss_url);
foreach my $item ($twig->descendants(qr/\Aitem\z/)) {
   my ($author) = $item->descendants(qr/\Aauthor\z/);
   $item->delete() unless $author->text() =~ /$filter/;
}
$twig->print();
Le inizializzazioni sono banali; in questo caso, per default prendiamo il feed di cui sopra, ed ipotizziamo di voler isolare la trasmissione "Ottovolante". XML::Twig è sufficientemente simpatico da prendersi il file direttamente (con nparse, che immagino stia per new & parse), per cui $twig è già un oggetto con precaricato tutto quel che ci serve.

I vari elementi del podcast sono racchiusi nel tag item: nel ciclo foreach li cerchiamo e ci assicuriamo di cancellare tutti quelli il cui sotto-campo author non corrisponde al filtro impostato. Da notare che tali campi non sono figli diretti della radice del documento, ma non importa: il metodo descendants fa tutto da solo. Una volta finito basta stampare e siamo a posto!

Rendere questo script un CGI vagamente più generale è un gioco da ragazzi... ma lasciamolo fare al collega ;)

Inviato da polettix il 29.09.06 00:12
Ti è piaciuto questo articolo? Iscriviti al feed!










Devo ricordare i dati personali?






D:
Sull'autore...
D:
La ML di Perl.it
Iscriviti! mongers@lists.perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
D:
Annunci Google