日曜は、Plagger を初めてちゃんとさわってみました。
Plagger の概略は、miyagawaさん自身による このYAPC::NAのPDF がわかりやすいです。要するに、 『ネットからフィードを集める → (ごにょごにょする) → 出力する』をするものです。
この「集める」や「ごにょごにょ」や「出力」の部分に、ブロックを重ねるようにしてモジュールを重ね、自分の好きな起承転結にできるという点が実にPerlぽい着想です。風がふけば桶屋がもうかるフレームワークと呼んでいます。
まあ、まずは普通に使ってみようということで、「Bloglinesから集める」→ (エントリごとに分割、RSS 広告除去、本文の内容をできるだけ収集→ Bloglines、Delicious へのリンク付与、はてブ登録数付与) → Gmail に送信 をやってみました。
Plaggerはこれを、以下のような設定を書くだけでできるのがかっこいい。モジュールをたたた、と重ねていく感じ。
global:
timezone: Asia/Tokyo
log:
level: error
plugins:
- module: Subscription::Bloglines
config:
username: my-blogline-id@example.com
password: p4ssw0rd
mark_read: 1
fetch_meta: 1
- module: Filter::BreakEntriesToFeeds
- module: Filter::StripRSSAd
- module: Filter::ResolveRelativeLink
- module: Filter::EntryFullText
- module: Widget::BloglinesSubscription
- module: Widget::Delicious
- module: Widget::HatenaBookmarkUsersCount
- module: Publish::Gmail
config:
mailto: your-gmail-id+plagger@gmail.com
mailfrom: your-gmail-id@gmail.com
mailroute:
via: sendmail
Bloglinesで読むのと比べて、データを後から検索できるという頼もしさがあり、大量の未読がたまったときの圧迫感がだいぶなくなりました。
ちなみに、Bloglinesの「未読にする」や、LDRのピンに相当するものとして、★を使ってます。GmailでショートカットキーをONにしてると、s で★を付けられます。j や n で読み進めつつ、あとで読もうと思うときは s。これでスターフォルダにためて、スターフォルダで見おわったら★を外してます。
Plagger の開発に関係している Perl ハカーたちがかなり熱いのと、Plagger Plugin が簡単に書けることから、おもしろい Plagger ネタがいろいろ出てきています。
たとえば、出力の部分で、CDトレイを開けるモジュールに渡して、「新しいニュースが入る → CDトレイがガチャーと開いてお知らせ!」とか、入力部分に MacBookに付いてる急な動きを察知するセンサーを使ったモジュールや、カメラやメールや「しゃべる」とかシャットダウンするというプラグインを出力部分に持ってきて、「置いといたMacBookが盗まれそうになったらカメラでそいつの写真を撮り、自分の携帯に送信、こら!と言った後シャットダウン」みたいなネタもあります。ていうか両方とも同じ人ですね。
http://blog.yappo.jp/yappo/archives/000435.html
さっそくワタクシも、ネタをやってみました。
設定YAMLはこんな感じ
plugins:
- module: CustomFeed::GoogleSearchHistory
config:
username: google-id
password: p4ssw0rd
- module: Filter::BreakEntriesToFeeds
config:
use_entry_title: 1
- module: Filter::Rule
rule:
- module: Deduped
- module: Fresh
duration: 10
- module: Notify::Pizza
rule:
expression: $args->{feed}->title =~ /^はらへった/
config:
username: my-demae-can-id
password: p4ssw0rd
order: 1
で、これを cron で 5分単位とかで動かす。
100個とか届いたらやだなーと、かなりびくびくしながら Google に...

すると、「【出前館】ご利用ありがとうございました!」 メールが! 嬉々
届いたピザ。
今日のあさごはんにもなりました。雨の中、配達ご苦労様でした。
書いたプラグインや、内部の説明。
実は Google Search History は RSS で取れるので、それこそ Plagger の本領発揮。別に新たにプラグインを書く必要なく、Subscription::Config プラグインとかで指定して取ってくるのが順等です。このRSS、Basic認証がかかるのですが、https://user:pass@... の形式で設定すればいける。
ただ、どうしても日本語の検索キーワードが文字化けしてしまう。いろいろ調べると、Google Search History の RSS は UserAgent がブラウザぽくないと charaset=utf-8 じゃなく、charset=ISO-8859-1 を返してきやがる。
で、Plaggerが内部で使っている URI::Fetch は、現在の仕様では UserAgent は URI::Fetch * 決め打ち(70行目)なので、どうもむずかしい。そんなわけで CustomFeed::GoogleSearchHistory という独自のプラグインを書いた
のですが、これは fix。なので、今回ぼくが書いた yaml ではなく、Plaggerオリジナルの Plugin だけで同じことができます。くわしくはこちらにまとめました )
config: use_entry_titleこれは、今回「フィードのタイトル」ではなく、「エントリのタイトル」で Filter::Rule するスマートなやり方がわからなくて、適当にパッチを当ててみたものです。
--- lib/Plagger/Plugin/Filter/BreakEntriesToFeeds.pm (リビジョン 1122)
+++ lib/Plagger/Plugin/Filter/BreakEntriesToFeeds.pm (作業コピー)
@@ -17,7 +17,8 @@
my $feed = $args->{feed}->clone;
$feed->clear_entries;
$feed->add_entry($args->{entry});
-
+ $feed->title($args->{entry}->title) if $self->conf->{use_entry_title};
+
push @{$self->{feeds}}, $feed;
}
もちろん、$args->{feed}{entries}[0]{title} とかでもいいと思うのですが。。追記:このパッチも、すでに対応してもらっています。
Plagger::Plugin::Notify::Pizza
これは、もう完全にネタですw
出前を頼むときはよく使っている出前館に、WWW::Mechanize でボットアクセスしてみました。出前館でピザーラを頼むと、ポテトが付いてきておトクです。
WWW::Mechanize 用スクリプト部分は、こんなネタのためにめんどうなことしたくないので、 HTTP::Recorder を使ってサクっとやりました。
HTTP::Recorder は、こんなのを書いて、
use strict;
use HTTP::Proxy;
use HTTP::Recorder;
my $proxy = new HTTP::Proxy(host => '127.0.0.1', port => 5656);
my $agent = new HTTP::Recorder(showwindow => 0, file => 'proxy.log');
$proxy->agent($agent);
$proxy->start();
ブラウザのプロキシを 127.0.0.1:5656 (おなかすいてたから)にすると、ブラウザでの動きをそのまま proxy.log に WWW::Mechanize 用スクリプトとして記述してくれるつう、すぐれものです。ただいろいろとバギーなのと、frame 処理とかイマイチで、そのへん考えてあげる必要あるのですが、下地造りとして便利。
というか、まあ ピザでお知らせ、というのはネタだけど、Googleに「あとで○○をする」とか入れるとそれが会社にメールされたりとか、実用的なアイディアがありそうな気が。Googleへの検索窓って、最近はブラウザにくっついてるから、楽だし。
実用編 へ続きます。
Plagger0.7.9未満では、設定ファイルのなかに日本語を入れる場合は工夫が必要でしたが、これは0.7.9で解消しています。上の例も0.7.9以降用な感じに変えました。
SUSE LinuxへPlaggerを導入
自宅サーバーに今話題のPlaggerを入れてみました(CPANより)。
Plaggerでは、こういうことができます。
otsune FreeStyleWi...
tracked from
みらいBlog
2006/08/27 23:49
はらへった
Elementary, ... Googleで「はらへった」と検索するとピザが届くようにするまで "勝手に 風がふけば桶屋がもうかるフレーム...
tracked from
パンデイロ惑星 (PukiWiki/TrackBack 0.3)
2007/01/05 13:27
オリコンのチャートとYouTubeをマッシュアップ(CDTube)
いつもこっそり除いている「ゆーすけべー日記」さんが作ったwebサービス「CDT...
tracked from
gadget taro
2007/01/08 23:08
授業メモ
Plagger Perlで記述されている「フィードアグリゲータ」 様々なプラグインを組み合わせ、オリジナルのツールを作る 「フィードを集める」->...
tracked from
Knaveの日記
2007/01/18 12:14
Got To Do (alternative GTD)
2005年に"Web2.0"というキャッチーなフレーズで総括されたここ数年のイン
tracked from
TEDDY-G本家
2007/01/18 20:52
Plagger
Elementary, ... Googleで「はらへった」と検索するとピザが届くようにするまで
tracked from
yamaGu's PukiWiki Plus! (PukiWiki/TrackBack 0.3)
2007/01/31 20:26
パンがなければお菓子を食べればいいじゃない
マリー・アントワネットのセリフだと思ってたんですが、実は違う人の言葉だったんです...
tracked from
SiebtNacht
2007/03/10 19:26
Plaggerの活用例:Googleで「はらへった」と検索するとピザが届くようにするまで
Plaggerを活用したネタ。面白い!
tracked from
pligg.com
2007/06/01 13:16
Plagger::Plugin::Notify::Pizzaで出前館
今さらPlaggerで使い尽くされたネタを実践 もう、Plaggerのこのピザネタ「Googleで「はらへった」と検索するとピザが届くようにするまで」が出...
tracked from
俺様メモ
2007/06/03 18:10
Plagger/Info
Plagger - Trac 実行フェーズ mizzy.org : Plagger プラグインの実行フェーズ ▲ ▼モジュール一覧 ...
tracked from
yamaGu's PukiWiki Plus! (PukiWiki/TrackBack 0.3)
2007/11/23 17:11
君のエントリで 僕が儲かる
plaggerに、そのヒントがありそうです。
plaggerとは、サーバー上でも動く、
「取得」→「加工」→「表示」の為のPerlで書かれたフ...
tracked from
気になったフィルター
2008/04/17 23:35
So cool. URI::Fetch はパッチあてときました。
posted by miyagawa 2006/07/25 05:31
すごすぎです!
posted by a 2006/07/25 18:03
miyagawaさん、URI::Fetch とuse_entry_titleありがとうございます。これで、PlaggerデフォルトのPluginだけで同じことができますね。
帰ったら 『Googleに「会社で○○をする」とか入れるとそれが会社にメールされたり』 とか、 『Googleに「あとで○○をする」とか入れるとそれがオンラインTODOリストに入る』、というのをやってみるよてい
posted by Tomi 2006/07/25 20:41
どうしてもピザが注文したくてPizza.pmをいじりました。perlの知識はほとんどないのですが、plaggerは楽しいので触っています。
http://www.greenplastic.net/2006/08/30_0319.php
posted by yosshi 2006/08/31 00:26
これは、凄い!! 感動です。
はてな経由です。
最近はテクノに感動することが少なかったのですけどね。
その昔に、applescriptでの自動化をちょこちょこ触っていたものの、web版進化型のツールですね。
これはもっと研究せねばなるまいて。
詳しい紹介ありがとうございます。
posted by pneuma 2006/09/14 09:29
yosshi さん、バグ報告ありがとうございます。出前館のHTMLが変わったのですね。Notify::Pizza 修正しておきました。
posted by Tomita 2006/09/16 20:51
はらへった、旅行もしたい
posted by たるぽん 2007/09/12 14:37