Publish::Gmailの$argsをDumperしてみた。

Publish::Gmailの実行フェーズであるpublish.feedフェーズで渡される$args。
その中身はPlagger::Feedオブジェクトみたい。


※追記:下記はSubscription::Configでfeedにhttp://d.hatena.ne.jp/tayaya/rssを指定した時のものです。


ちょっと見にくいけどこんな感じ。

'feed' => { bless ( {
    'source_xml'  => 'XMLソース',
    'link'        => 'http://d.hatena.ne.jp/tayaya/',
    'language'    => undef,
    'entries'     => [Plagger::Entryオブジェクト], 
    'author'      => 'tayaya',
    'description' => 'qw/Perる 日誌/',
    'tags'        => [],
    'meta'        => {},
    'url'         => 'http://d.hatena.ne.jp/tayaya/rss',
    'updated'     => DateTimeオブジェクト,
    'type'        => 'feed',
    'title'       => 'qw/Perる 日誌/'
    }, 'Plagger::Feed' )
}

entriesの中身。Plagger::Entryオブジェクトを要素にもつ無名配列。

'entries' => [ bless( {
    'link'       => 'http://d.hatena.ne.jp/tayaya/20061002/1159796655',
    'widgets'    => [],
    'feed_link'  => 'http://d.hatena.ne.jp/tayaya/',
    'date'       => Plagger::Dateオブジェクト
    'author'     => 'tayaya',
    'meta'       => {},
    'tags'       => [
                     'perl'
                    ],
    'body'       => 'HTMLソース',
    'rate'       => 0,
    'enclosures' => [],
    'id'         => 'http://d.hatena.ne.jp/tayaya/20061002/1159796655',
    'title'      => '[perl]Publish::Gmailの$argsをDumperしてみた。'
    }, 'Plagger::Entry' ),
]


これらを踏まえてPublish::Gmailのソースを読むとなんとなく流れが見えてきます。


Feedオブジェクトをtemplatizeメソッドに突っ込んでメールの本文を生成。

my $feed = $args->{feed};
・
・
・
my $body = $self->templatize('gmail_notify.tt', { feed => $feed });

テンプレートのgmail_notify.ttはこんなんになってて、

[% FOREACH entry = feed.entries -%]
<div>
<div>
・
・
[% IF entry.body.match('(?i)^<p[ >]') %][% entry.body %]
[% ELSE %]<div style="padding: 1em 0">[% entry.body %]</div>[% END %]
・
・
[%- END %]

entriesの数だけループさせて、Entryオブジェクトの中のbodyやらtitleやらを書き出してる。
そして生成されたHTML($body)をMIME::Liteモジュール使って送信っと。


なるほど。