本を読む

読書やコンピュータなどに関するメモ

IPA最新情報をPlaggerでフィード化

 ひさしぶりにPlaggerいじり。

 IPA最新情報を自分用フィードにして読もうと思い立った。そこでWeb::Scraper(>= 0.22)+CustomFeed::Script。

変更:2007-10-26:
linkにas_stringを噛ませた。

追記:2007-10-27:

EnterFullTextナシで考えていたのですが、EntryFullTextするとPlagger::Date->parse_dwimしてくれるんですね。知らなかった。勉強になりました。

ipa-news.pl

#!/usr/bin/perl
use strict;
use warnings;
use URI;
use Web::Scraper 0.22;
use DateTime;
use DateTime::Format::W3CDTF;
use YAML;
use Encode;
use utf8;

my $uri = 'http://www.ipa.go.jp/about/news/index.html';

my $year = 1970;

sub parse_year {
    ($year) = $_[0] =~ /\[(\d+)年\]/;
    $year;
}

sub parse_date {
    my ($m, $d) = $_[0] =~ /(\d+)月(\d+)日/;
    my $date = DateTime->new(year => $year,
                             month => $m,
                             day => $d,
                             time_zone => 'Asia/Tokyo' );
    DateTime::Format::W3CDTF->format_datetime($date);
}

my $items = scraper {
    process '//title', 'title' => 'TEXT',
    process '//strong[text() =~ /最新情報.*\[.*年\]/]',
            'year' => ['TEXT', \&parse_year];
    process '//td[@nowrap]/..', 'entries[]' => scraper {
        process 'a', 'title' => 'TEXT';
        process 'a', 'link' => ['@href', sub { $_->as_string } ];
        process 'td[nowrap]', 'date' => ['TEXT', \&parse_date];
    };
    result 'title', 'entries';
};
my $result = $items->scrape(URI->new($uri));

my $out = {
    title => $result->{title},
    link => $uri,
    entry=> $result->{entries},
};
print encode('utf-8', Dump($out));

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/309-0880d86f

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad