Plagger::Plugin::Publish::InfoseekMail
PlaggerのPlugin作ってみた。
取得したフィードをInfoseekのwebメールに送信。
package Plagger::Plugin::Publish::InfoseekMail; use strict; use warnings; use base qw( Plagger::Plugin ); our $VERSION = '0.0.1'; use Plagger::Mechanize; use Encode; sub rule_hook { 'publish.feed' } sub register { my($self, $context) = @_; $context->register_hook( $self, 'publish.feed' => \¬ify, ); } sub init { my $self = shift; $self->SUPER::init(@_); $self->conf->{username} or Plagger->context->error("username is required"); $self->conf->{password} or Plagger->context->error("password is required"); $self->conf->{to} ||= $self->conf->{username}; } sub notify { my($self, $context, $args) = @_; return if $args->{feed}->count == 0; my $cfg = $self->conf; my $feed = $args->{feed}; my $uri = 'http://email.www.infoseek.co.jp/'; my $username = $cfg->{username}; my $password = $cfg->{password}; my $to = $cfg->{to}; my $subject = $feed->title || '(no-title)'; my $body = $self->templatize('infoseek_notify.tt', { feed => $feed }); $context->log(info => "Sending $subject to $to"); # トップページ取得 my $mech = Plagger::Mechanize->new; $mech->get($uri); # ログイン $mech->submit_form( form_name => 'login', fields => { username => $username, password => $password, }, ); # メール作成画面へ移動 $mech->follow_link(url => $uri); $mech->submit_form( form_number => 3, ); # 送信 $mech->form_name('tform'); $mech->set_fields( sto => $to, ssbj => $self->to_eucjp($subject), sbdy => $self->to_eucjp($body), ); $mech->click_button(number => 1); } sub to_eucjp { my ($self, $str) = @_; $str = encode('eucjp', $str); return $str; } 1;
YAMLはこんな感じ。
- module: Publish::InfoseekMail config: to: 送信先メールアドレス(指定しない場合はusername) username: Infoseekのメールアドレス password: パスワード
ほとんどPublish::Gmailのコピペ。
とりあえず送信はできました。
※ちゅういがき※
エラー処理とかしてません。
enclosureよくわからんかったので省いた。
テキストメールで送信しちゃうのでHTMLタグがそのまま表示されます。
rule_hookて何をするところなのかわかってません。