MSN Messengerに送るプラグインって無いのかな?というわけでちょっと書いてみた。

  • 別に見なくてもいいけど気になる
  • ログに残さなくて良い
  • がんがん更新される

というFeedがあって、そのエントリはメッセンジャーに送れるといいなあと思ったのです。探してみたけど上手く見つからず。

お知らせとか

  • タイムアウト処理を実装しました。
  • ウェイトを実装しました。一気にメッセージが送られてくるとメッセンジャーがしばらく固まってしまうので、メッセージの間隔を指定できるようにしました。
  • 文字化け直しました。適当にやり過ぎた。。。処理中はutf8フラグを付けたままにしておいて、最終的に出力するときにencodeするようにしようね。お兄さんとの約束だぞ(*^ー゚)b
  • hookをちょっと真面目に使いました。Publish::Debugをコピって作っていたので、Feedが複数個あると複数回ログインするようになっていました。この修正で、複数個Feedがあっても1回しかログインしないようになりました。(それでも新着エントリがある度にログインするので、plagger-ircbotのようなものを作った方が良いと思います)
  • 途中で終了できるようにしました。"quit","exit","die","bye"のいずれかのメッセージを送信すると途中で終了させることができます。工夫すれば対話的に操作できますね。
  • Google Code Archive - Long-term storage for Google Code Project Hosting.に置かせていただきました。id:Seacolorさんありがとうございました。)よってソース置き場をこのエントリからGoogleCodeに移動しました→MSN.pm
  • configの「wait」を「interval」に変えました。


  • 適当なボットアカウントを用意して、そのアドレスを「通知して欲しいアカウント」のコンタクトリストに追加してから実行してください。
  • タイムアウト処理が無いので適当に実装してください。「通知して欲しいアカウント」がオンラインじゃないときに動かすとplaggerプロセスが終了しません。
  • 毎回ログインするので、Plaggerサーバーでできるといいなー。
  • メッセージの形式は適当に変更してください。configで指定できるといいなー。

Net::MSN

POE::Component::Client::MSNが上手く動かない。というかPOE::Component::Client::HTTPが壊れてるっぽい。
なのでNet::MSNにしてみました。

  • 何故かLiveMessenger相手ではNLNとかILNとかが来ないのでNet::MSNに動的にパッチを当ててます(BEGINブロックの( $cmd eq 'LST' )のところ)。オンラインかオフラインか分からないのでちょっと困った感じ。
  • LSTの終わりが分からんのでQNGを独自に拾っています(BEGINブロックの( $cmd eq 'QNG' )のところ)。※QNGはLSTの終わりではないけど、これで取り敢えずは上手く行くので。
  • リンクのアンカーを貼ったりするには、Net::MSN::SB#sendmsgにパッチ当ててtext/htmlにしないといけないかもです。

config.yaml

---
plugins:
  - module: Subscription::Config
    config:
      feed:
        - url: http://d.hatena.ne.jp/holidays-l/
  - module: Filter::Rule
    rule:
      module: Deduped
  - module: Summary::Auto
  - module: Publish::MSN
    config:
      email: 通知して欲しいアカウント
      bot:
        email: ボットのアカウント
        password: ボットのパスワード
        timeout: 60
        interval: 3