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' => \&notify,
    );
}

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て何をするところなのかわかってません。