NicoNotifier:公開マイリストの更新状況をチェック
NicoNotifierはニコニコ動画の公開マイリストの更新状況をメールでお知らせしてくれるアプリです。投稿作品一覧をマイリストで公開している動画制作者の方が多いので,これを使って誰よりも早く注目動画をチェックしようという試みです。個人的には気になるボカロPが投稿した新曲をいち早くチェックするために使っています*1。
使い方は比較的単純です。上記のページでユーザー登録を行い,チェックしたいマイリストのURLをチェックリストに追加します。以降,チェックリストにあるマイリストに動画が追加されると,以下のようなお知らせメールが届くようになります。
tondolさんのマイリスト「mylist」に動画が追加されました。 【初音ミク】celluloid【リミックス】 http://www.nicovideo.jp/watch/sm8468603 Mon, 04 Jan 2010 04:54:49 +0900 Bad Apple!! Game Boy 8bit ver http://www.nicovideo.jp/watch/sm8954478 Mon, 04 Jan 2010 04:54:49 +0900 NicoNotifier powered by tondol http://digilog.usamimi.info/nico_notifier/
10分間隔でマイリストの新着チェックを行っているので,最悪の場合でもマイリストに動画が追加されてから10分後にはメールが届くはずです。また,メール配信が絡むアプリなので,メール経由で本登録を完了しないとサービスを利用できない形にしてみました。
技術的なところ
NicoNotifierのユーザーはサービス表面のPHPスクリプトにアクセスするだけでメール配信サービスを利用できますが,内部的には定期的にDBに登録されているマイリストの新着をまとめてチェックし,そのマイリストを登録しているユーザーにメールを配信するRubyスクリプトが存在しています。
このRubyスクリプトは適当なサーバーのcronを利用して定期実行したいところですが,個人的に趣味で使っているサーバーでcronに対応したものがなかったので,Google App Engineのcron機能を使ってみました。つまり,GAEのcronによって10分毎にPythonスクリプトが起動し,そのPythonスクリプトの中で前述のRubyスクリプトをリクエストし,そのRubyスクリプトの中でマイリストのチェックとメール配信を行うという流れになっています。
(GAE上のcron) ↓ (GAE上のPythonスクリプト) ↓ (自前のRubyスクリプト) ←→ (DB:MySQL) ←→ (PHP製のフロントエンド) ↓ (ニコ動にアクセス&メール配信)
本来ならフロントエンド部分も含めてGAEだけですべて完結できるはずなので,単に処理のオーバーヘッドが増えているだけのような気もしますが,普段から慣れている環境で開発を行えることと,GAEの制限に囚われずにリソースを使えるのがメリットといえばメリット?かもしれません。とはいっても,内部でRubyとPHPの2つの言語を使う必要はなかったような気もします。
from google.appengine.api import urlfetch print 'Content-Type: text/plain' print '' api = "uri_of_your_api" myheaders = { 'pragma': 'no-cache', 'Cache-Control': 'no-cache, must-revalidate', } try: res = urlfetch.fetch(api, headers=myheaders) print "cron executed!" print res.content except Exception, e: print "cron failed!: %s" % e
GAE上でAPIをリクエストするPythonスクリプトのサンプルはこんな感じです。念のためキャッシュを無効にするようなヘッダを指定していますが,本当に必要なのかどうかよく理解していません。
追記
アカウント登録を行えない不具合があったため,修正しました。現在は問題なくアカウントを登録できるようになっています。