読者です 読者をやめる 読者になる 読者になる

evac - Node.js based simple aggregator

evacというシンプルなアグリゲーターを作りました。個人用途で作っていたのですが、そこそこ形になったのでnpmで公開しています。

NPM

よくあるアグリゲータの実装と同様に入力、加工、出力をJSONファイルで定義することでアグリゲーションすることができます。

例えば自分の場合は以下の様な使い方をしています。

  • ブログの記事に更新があれば、gmail通知
  • 社内SNSのスケジュール機能で用意されているiCalファイルを読んで、一時間以内に予定があれば仕事で利用しているMac上にgrowl通知
  • DBに接続して数値を取り、dashingAPIに向けてPOSTする
  • あるサービスのwebページをスクレイピングしてKPIにしているパラメータを抽出してIRCに通知
  • RSSを走査し特定の文字列があればIRCに通知

などなど、いままでであれば小物スクリプト書いて動かしたりしていたものを置き換えすることができました。

自分以外だと、街に詳しい@

  • iTunesConnectから自分が管理しているiPhoneアプリのダウンロード数を取得してIRCに通知

といった形でも利用してくれています。

実際の例として、例えば予定通知の例だと以下の様な設定ファイルを準備します。

{
  "in": {
    "ical": {
      "url": "http://****.********.jp/calendar/ical/*****.ics",
      "within": 1
    }
  },
  "filter": {
    "through": {}
  },
  "out": {
    "notice": {
      "type": "growl",
      "title": "予定の通知"
    }
  }
}

これを定期的にevacで呼び出してやると、呼び出し時から一時間以内に予定があれば…

f:id:hideack:20141114092941g:plain

の様にgrowl通知できます。当たり前ですがOutput変えれば、何か予定があればIRC通知させたり、Yoさせたり、Pushbulletでプッシュ通知させたりもできます。

出力用のプラグインとしてYoやPushbulletを利用して出力ができるようにしたので私が以前作っていたTOKYOAMEDAYOの様なbotも比較的簡単に作れるのではないかと思います。

このあたりの実装しているプラグインは以下のページに簡単にまとめてあります。*1

基本、cronで定期的に回す等々が使い方かなと思うのですが、evac自身にもcron的な動きができる様に実装がしてあるので

[
  {"*/10 * * * *": "/home/hideack/recipe/rss.js"},
  {"0 18 * * *": "/home/hideack/recipe/news.js"}
]

といった具合に設定ファイルを準備してあげることで一般的なcron書式に従って、evacを起動させることができます。foreverで永続化する等をしてやるとよいかもしれません。

設定ファイルのフォーマットやプログラムの作り自体も荒削りなところがあるのですが、まずは自分の周りが少し便利になったのでより使いやすくなる様に対応進めていきたいと思います。

蛇足

evacは脱出という意で情報をあるところからあるところに飛ばす的な意でつけました。

*1:簡単すぎますね...