« 32y+2d | ホーム | すてきなさむしんぐにゅ »
2007年4月10日
知り合いのサイトを勝手にRSS化してみる
Bloglinesを使い始めてRSSでWWWめぐりするのがらくちんになってきたので勢いに任せてというか現実逃避的にPlaggerで知り合いのページをRSS化してみた。余計な御世話とも言うが。
WWW初期のころからずっと続けてる個人ページなんかだとずっとつかってる日記アプリなどが使いやすくてしかも手製だからRSS導入しようにも、なんてときにはこうやって自前で規則性とってcrawler的な何かを回してやるのが手っ取り早い。しかしPlaggerわけがわからん。。。SubscriptionとかPublishとかFilterとか何を使って何を組み合わせればいいのか、きれいさっぱりだ。まあ、ろくにdocumentも読まずcookbookあたりを斜め読みするだけで済ませて力技で使ってしまおうとする俺が一番いけない。うん。
Plagger/Plugin/CustomFeed/Lapis.pm
package Plagger::Plugin::CustomFeed::Lapis;
use strict;
use base qw( Plagger::Plugin );
use LWP::UserAgent;
use HTML::Selector::XPath;
use HTML::TreeBuilder::XPath;
use Encode 'decode';
sub register {
my($self, $context) = @_;
$context->register_hook($self,
'subscription.load' => \&load,
);
}
sub load {
my($self, $context) = @_;
my $feed = Plagger::Feed->new;
$feed->aggregator( sub{ $self->aggregate(@_) } );
$context->subscription->add( $feed );
}
my $base_url = 'http://lapis.dameda.net/d/';
my $title = 'nomad, nomad';
my $xpath = q|//div[@class="articles-body"]//p|;
sub aggregate {
my($self, $context, $args) = @_;
my $ua = LWP::UserAgent->new;
my $resp = $ua->get($base_url);
my $tree = HTML::TreeBuilder::XPath->new;
my $content = decode('euc-jp', $resp->content);
$tree->parse($content);
my $nodes = $tree->findnodes($xpath);
my $feed = Plagger::Feed->new;
$feed->type('lapis');
$feed->url($base_url);
$feed->title($title);
$feed->description($title);
foreach my $n (@$nodes) {
my $a = $n->findnodes(q|./a[@name!=""]|)->[0];
my $title = $a->attr('name');
my $url = $a->attr('href');
my $entry = Plagger::Entry->new;
$entry->title($title);
$entry->link($base_url . $url);
$entry->author('tatenyon');
$entry->date(substr($title, 0, 8));
$entry->body( $n->as_XML );
$feed->add_entry($entry);
}
$context->update->add($feed);
}
1;
config.yaml
global:
assets_path: ./assets
timezone: Asia/Tokyo
#level: debug
plugins:
- module: CustomFeed::Lapis
#- module: Publish::Debug
- module: Publish::Feed
config:
format: RSS
dir: ./
filename: lapis.xml
トラックバック(0)
トラックバックURL: http://foursics.jp/cgi-bin/mt/mt-tb.cgi/80
コメントする