IRCクライアントでMyはてなやRSS FeedをウォッチするためのIRCdを書いた

はてなのお気に入りアンテナをTwitter Clientで見れるゲートウェイ「Hatetter」作りました と同じようなことを,Twitterクライアントではなく,IRCクライアントでやりたかったのです.

というわけで,Pigというのを書いてgithubにあげてあります.

http://github.com/hakobe/pig

MyはてなやRSS Feedの新着項目を発言してくれるIRCdです.そのうち,Perlでごにょごにょした結果をIRCdになげるライトな感じのフレームワークになる予定です.

追記: Mooseの依存がひどいらしいのでとりあえずAny::Moose化したので,すこしは入れやすくなってる?

Myはてなをウォッチ

とりあえず以下のようにすると,IRCクライアントでMyはてながウォッチできます.

$ git clone git://github.com/hakobe/pig.git
$ cd pig
$ vim config/myhatena.yaml # あなたのhatena_idや更新間隔をせっていしてね!
$ perl -Ilib script/pig.pl config/myhatena.yaml

ローカルの16667ポートでIRCdが起動するので,お使いのIRCクライアントで接続してください.

IRCクライアントから特定のチャンネルにjoinすると,Myはてなの新着情報がながれて来ます.チャンネルに流れてくる新着情報の種類はチャンネルの名前で決まります.

  • #antenna : あなたのMyはてなアンテナの新着
  • #{hatena_id} : id:{hatena_id} さんの新着

これで,気になるあの子をウォッチしまくりです.


RSSをウォッチ

あと,副作用的にRSSもIRCクライアントからチェックできるようになったのですが,意外と便利です.

$ cd pig
$ vim config/feed_reader.yaml
$ perl -Ilib script/pig.pl config/feed_reader.yaml

feed_reader.yamlには,Feedを流したいチャンネルとFeedのuriの組を書いておきます.チャンネルにjoinすると指定したFeedがながれてきます.

port: 16668
log_level: debug
service:
  name: FeedReader
  interval: 300 # 5分毎にチェック
  bot_name: feed # feedをしゃべるbotの名前
  channels:
    '#fse':
      feeds:
        - uri: http://www.douzemille.net/labs/urlstack/rss.cgi
        - uri: http://www.himitsu.net/himitsunofeed
    '#gmail': # Gmailの新着
      feeds:
        - uri: https://id:pass@mail.google.com/mail/feed/atom/
    '#gmail-hatena': # HatenaラベルのついたGmailの新着
      feeds:
        - uri: https://id:pass@mail.google.com/mail/feed/atom/hatena

IRCはずっと見ているので,常にチェックしたいFeedや,LDRとかに登録できない認証付きのFeedを登録しておくと便利です.

上の設定例のようにGmailのAtom FeedをIRCで流しておくのが便利です.特にはてなから来るメールをIRCでウォッチしておくと,「id:hakobe932さんのダイアリーにコメントが付きました」みたいなタイトルに反応してIRCクライアントが教えてくれるので,idコールとかがすぐにわかって便利ですね.*1


まとめ

というわけで,IRCクライアントでMyはてなやRSSをウォッチするIRCdでした.

とりあえずなんでもIRCクライアントでみれるようにしておくと,いろんなツールを切り替える必要がなくて楽ちんです.それに,IRC周辺にはいろいろとツールがそろっているので,呼ばれたときに通知してもらえたり,ログ取りが簡単だったり,mobircなどを使ってモバイルでもいつでもみれたりして何かと柔軟に利用できます.IRCとても便利.

pig自体はまだいろいろ低機能で完成度が低い感じですが,IRCdに乗せたいことが増えるたびに高機能になっていく予定でございます.もし何かしら,IRCdに乗せたい機能があればぜひ教えてください.

おまけ: 実装について

フレームワークにあたる部分は,POE::Compoenent::Server::IRCをイベントをhookしやすいようにちょっとだけラップした感じになっています.POE::Compoenent::Server::IRCはIRCのプロトコルを細かく調べなくても簡単にIRCdが書けて便利です.pigでは加えて,定期的にRSSをチェックしにいくイベントをPOE上で起こして,それがhookできるようになっています.

ここはまだ,ぜんぜん低機能で,hookできるイベントがかなり制限されてたり*2,定期的にチェックルーチンをまわすくらいしかできません.今後に期待です.使うときに追加される予定です.

MyはてなやRSSを読む部分は,Serviceという種類のクラスになっていて,一つのpigごとに一つ渡されます.Serviceはいまのところ,フレームワークから渡されたイベントを処理できればなんでも良くなっています.Serviceを書けば,簡単にIRCdに機能を載せれるようになるのが目標です.

全体的な設計はまだいまいちな感じなので,綺麗に抽象化したいところです.いまはメインクラスにPOE::Compoenent::Server::IRCのイベント処理がいってたりするので,それをうまく分割したりとか.(POEのイベントを扱うところが複雑になりがちなんだよなぁ.) Serviceもちゃんとインターフェースきめたいです.

*1:ただし,Gmail Atom Feedの日付がおかしくなって同じ通知が何度もされたりすることがあるので注意です

*2:今回のはjoin/partくらいしかhookしなくてよかった