SKEの今日のスケジュール

ちょっとぶりのWeb::Scraper

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use URI;
use Encode;
use Web::Scraper;

my $today = (localtime())[3];
my $url   = 'http://www.ske48.co.jp/schedule/calendar.php';

my %type = (
    stage   => '公演',
    media   => 'メディア',
    release => 'リリース',
    bday    => '誕生日',
);

my $schedule = scraper {
    process '//table[@title="SCHEDULE"]/tr', 'tr[]' => scraper {
        process '//th', 'date' => 'TEXT';
        process '//td/ul/li', 'td[]' => scraper {
            process 'li', type => '@class';
            process 'a',  link => '@href';
            process '.',  text => 'TEXT';
        };
    };
};

my $detail = scraper { process '//div[@class="detail clearfix"]',    text  => 'TEXT'; };

my $sch = $schedule->scrape( URI->new($url) );

for my $tr (@{ $sch->{tr} }) {
    (my $date = $tr->{date}) =~ s/(\d+).*/$1/;
    next unless $date == $today;

    for my $td (@{ $tr->{td} }) {
        my $det = $detail->scrape( URI->new($td->{link}) )
            unless $td->{type} eq 'bday';
        my $type = $type{ $td->{type} };       
        print encode_utf8 <<"SKE48";
[$type] $td->{text}
$det->{text}
-----------------------------------
SKE48
    }
}