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モジュール使って送信っと。
なるほど。