Googleで○○と検索すると○○:実用編

Notify::Pizzaネタ、大人気です。びっくり。

わくわくさせてくれるフレームワーク 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-dev 0.7.9 released

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.