Notify::Pizzaネタ、大人気です。びっくり。
- http://b.hatena.ne.jp/entry/http://e8y.net/blog/2006/07/25/p126.html
- http://d.hatena.ne.jp/textfile/20060725/pizza
- http://del.icio.us/url/4b67a8710066baf05fab3c8d253ff02d
わくわくさせてくれるフレームワーク Plagger と、おもしろいことをするための言語 Perl に多くの人が興味を持つことになってくれたのなら、わざわざ面倒な方法でピザ頼んだかいがあったというものです。
OSCON での miyagawa さんによる Plagger のプレゼン にもネタとしていれてくださるということで、タイミング的にもよかった。外人にわかりやすく寿司じゃなくてピザにしておいてよかったw
実は日本時間で25日のうちに、今サンフランシスコの miyagawa さんが Filter::BreakEntriesToFeeds への config: use_entry_title
オプションを反映(plagger:r1143)、また URI::Fetch の UserAgent 固定問題を Ben が 修正してくれました 。
これで、Plagger標準の環境で、『Googleで○○と検索すると○○』ができるようになりました!
例えば、「あとで」で始まる単語を検索すると指定のアドレスにその内容を含んだメールを飛ばすをしたければ、以下のように Subscription::Config から Publish::Gmail までをつないでやればよい感じです。
global:
# for google search history
user_agent:
agent: Mozilla/5.0
timezone: Asia/Tokyo
log:
level: debug
plugins:
- module: Subscription::Config
config:
feed: https://www.google.com/searchhistory/?output=rss
- module: UserAgent::AuthenRequest
config:
host: www.google.com:443
auth: basic
realm: Google Search History
username: your-google-id
password: your-google-password
- module: Filter::BreakEntriesToFeeds
config:
use_entry_title: 1
- module: Filter::Rule
rule:
- module: Deduped
- expression: $args->{feed}->title =~ /^あとで/
- module: Publish::Gmail
config:
mailto: your-email-address@example.com
mailfrom: plagger@example.com
mailroute:
via: sendmail
ID や Pass 認証を新しくできた UserAgent::AuthenRequest を使ってみました。これで、以下のようなメールが届くようになります。
いい感じ。
ちなみに、Publish::Gmail は必ずしも Gmail 宛じゃなくてよいです。ここを会社のアドレスにして、『「会社で・・」』というように検索すると・・というのも直感的かと。あ、というか、Filter::Rule 以下を次のようにして、別々に振り分けるのがより実用的かもしれません。
- module: Filter::Rule
rule:
- module: Deduped
- module: Publish::Gmail
rule:
- expression: $args->{feed}->title =~ /^あとで/
config:
mailto: 自宅メール
mailfrom: plagger@example.com
mailroute:
via: sendmail
- module: Publish::Gmail
rule:
- expression: $args->{feed}->title =~ /^会社で/
config:
mailto: 会社メール
mailfrom: plagger@example.com
mailroute:
via: sendmail
上のコードの設定ファイル内の日本語の扱いを、Plagger 0.7.9に合わせ修正しました。0.7.8 未満ではちょっと工夫する必要がありました。$args->{feed}->title
が UTF8 文字列なのに対し、YAML 内の文字がただの UTF8バイトだからです。
以下のようにバイトに合わせるか、
expression: pack('C0A*', $args->{feed}->title) =~ /^はらへった/
UTF8文字列とするか
rule:
- module: Expression
keyword_pattern: "あとで"
expression: |
$args->{feed}->title =~
Encode::decode('utf-8', $self->{keyword_pattern})
する必要がありました。ただし、これは0.7.9で設定ファイル内の文字を utf8 として読むように変更になったため、解消しています。上の例も0.7.9以降用な感じに変えました。
Plagger 0.7.9 is released, with lots of quality improvements and various important fixed to the core, e.g. decode YAML config as UTF-8 by default.