先程の記事で書いたように、GAEでFreeの受信メール数が制限されて厳しくなるため、個人的に使用しているさくらのレンタルサーバを使って
- さくら側でメールを受信
- メールを解析して、内容をGAE側にHTTP POSTで送信
のような処理をすることを見越し、とりあえず、さくらのレンタルサーバでメールを受信したときにスクリプトを起動させる方法を調べてみた。
■参考
情報科雑感: GmailとSAKURAでOpenPNEの携帯メール投稿設定
メール - 「さくらのレンタルサーバー」と「さくらのメールボックス」に関する情報 - mailfilterについて
スクリプト処理処理専用のメールアドレスを作成
幸い、さくらのレンタルサーバではメールアドレスをいくつも持てるので、
- 専用のメールアドレスを作成
- 当該アドレスの設定で[追加]ボタンを押し、適当なメールアドレス(ダミー)を指定した後、「○転送専用にする」にチェックを入れる
のようにしておく。
別に2.については実行しなくてもよいかも。
.mailfilterの設定変更
上記のようにして新規にメールアドレスを作成すると、
/home/アカウント名/MailBox/作成したメールアドレス名/
のようなディレクトリの下に、.mailfilterというファイルが出来ている。
この内容は(転送専用メールの場合)、
cc "!ダミーで指定したメールアドレス"
exit
のようになっているが、これを
to "| スクリプト実行ファイルのフルパス スクリプトのフルパス"
exit
のように変更する。
例えば、Pythonスクリプトの場合は、
to "| /usr/local/bin/python /home/account/mailhook/mailhook.py"
exit
のような感じに。
なお、.mailfilterはパーミッションが600である必要有り。telnet(ssh)経由で直接変更する場合はいいが、ftp(sftp)等で転送する場合はパーミッションの確認を忘れないこと。
後は実際に実行するスクリプト(上記例では~/mailhook/mailhook.py)を適当に作成して配置しておく。
メール処理にはemail_decoderもそれなりに使えるかも知れない。
さて、実際にどういうサービスを作れるか?
例えば「タイプ:リアルタイム」・「頻度:その都度」のGoogle アラートを作成しておき、上記のようなメールアドレスに転送するようにしておけば(Googleのアカウントで管理する場合はアラートの送信先がGMail固定になるみたいなので、GMail上でフィルタを作って転送をかけるようにしておけばよい)、(cron等で定期ポーリングすることなく)メール受信をトリガにして興味のある情報収拾と加工が自動的にできるようになる、かな。
実例と挫折の経緯
手ごろな題材として、
というbotを動かす処理を改修して試してみた。
このbotは、cronで定期的にTwitter SearchのAPIを使って「@yonda4 」を検索し、その結果を使って、@yonda4宛に発言したユーザにmentionを送る、というもの。
ところが、Twitter Search APIはアクセス制限がきついため(特にGoogle App Engineからの場合・同一IPアドレスからの検索と見なされてしまうためらしい?)、代わりにGoogle アラートで検索キーワードを「site:twitter.com "@yonda4"」にしたアラートを作成して、これをトリガにつぶやく、という処理に変更してみた。
結果としては一応、動くには動いたのだが、Google アラートだと結構とりこぼしが大きいため(それとある時点ではリアルタイム検索に上がってこなかったものがその後でインデックスに追加された場合、追加された分についてはアラートが送られてこない模様)、これについては挫折。現在はcron処理に戻している。
といってもそのままでは無く、Twitter Searchは止めて、直接twitterで読書記録。読んだ4!のAPIを使うように変更してみた。
とりこぼしがあることを前提に、おおまかな検索結果でもリアルタイムで得られれば効果が高い、というサービスの場合はいいかもしれない。
また、mention(@screen_name)反応型のbotであれば、cron無しでも作れそうではある(とりこぼしは発生するけれど、botなら「きまぐれなんです」といいはれる(笑))。