読売新聞のトップページの記事を抽出するプラグインを書いてみた
ひよっこなんで、多分すでに他の方法で新聞社系のページからフィード取得とかあると思いますが、Plaggerを理解するため、Perlの勉強のため、プラグインを書いてみました。
他のCustomFeedのプラグインを真似して作っただけなんで、不必要な部分とかあったらご指摘してください。
あとかなり不完全な部分があります。使われる際は、自己責任でお願いします。
私は、PSPを活用するために、こうしたニュースサイトのデータをローカルで管理したいと考えています。
- Yomiuri.pm
package Plagger::Plugin::CustomFeed::Yomiuri; use strict; use base qw( Plagger::Plugin ); use Plagger::UserAgent; use Plagger::Util; use URI; use URI::QueryParam; sub register { my($self, $context) = @_; $context->register_hook( $self, 'customfeed.handle' => \&handle, ); } sub handle { my($self, $context, $args) = @_; if ($args->{feed}->url =~ m!^http://www\.yomiuri\.co\.jp/index\.htm! && $args->{feed}->url !~ /output=(?:rss|atom)/){ $self->aggregate($context, $args); return 1; } return; } sub aggregate { my($self, $context, $args) = @_; my $url = URI->new($args->{feed}->url); $context->log(info => "GET $url"); my $agent = Plagger::UserAgent->new; my $res = $agent->fetch($url, $self); if ($res->is_error) { $context->log(error => "GET $url failed: " . $res->status); return; } my $content = Plagger::Util::decode_content($res); my $title = Plagger::Util::extract_title($content); my $feed = Plagger::Feed->new; $feed->title($title); $feed->link($args->{feed}->url); while ($content =~ m!<a href="(.*?)" class="h">(.*?)</a>!g) { my $link = $1; unless ( $link =~ m!http://info\.yomiuri\.co\.jp/! ) { my $link = "http://www.yomiuri.co.jp" . $1; my $title = $2; my $news = $agent->fetch($link, $self); if ($news->is_error) { $context->log(error => "GET $link failed: " . $res->status); } my $body = Plagger::Util::decode_content($news); $body =~ m!<p>([\d\D]*)</p>!gs; $body = $1 . $2; my $entry = Plagger::Entry->new; $entry->title($title); $entry->link($link); $entry->body($body); $feed->add_entry($entry); } } $context->update->add($feed); } 1;
あとconfig.yaml
plugins: - module: Subscription::Config config: feed: - http://www.yomiuri.co.jp/index.htm - module: CustomFeed::Yomiuri - module: Publish::PSP config: output_file: パス指定
こんな感じでいいのかな。
はじめてのプラグイン作成でした。
追記
↑感謝。。
こういう事だよね。
[>いまさら聞けない? 初心者向けPlagger設定覚え書き その1