update.TokyoRのATNDを監視してメールを送るツールを作ってみた動機ほぼ毎月開催されている「R勉強会@東京(#TokyoR)」は人気が高く、ATNDに参加募集があがってから2〜3日で定員を超えてしまうこともしばしばです。twitterのタイムラインをチェックする、ハッシュタグ#TokyoRのツイートをチェックする、ATNDの検索ページをブックマークしておいてちょくちょく検索してみる、などをしていれば問題なく参加登録できますが、根が面倒くさがりなもので、「ATNDをチェックして、最新の開催情報を自分にメールする仕組み」が欲しくなりました。「欲しいものは作れ」という声が聞こえた気がするので自分で作ってみます。キーワード「tokyor」を含むイベントのうち最新のものは以下のクエリで取得できます。http://api.atnd.org/events/?keyword=tokyor&count=1なお、デフォルトでは結果はxmlで戻ってきます。formatオプションでjsonも指定できます。http://api.atnd.org/events/?keyword=tokyor&count=1&format=jsonRスクリプト(前半)を書くまずは手元のMacで動くRスクリプトを書いてみます。{curl}と{jsonlite}を使います。http://atnd.org/events/70522xmlでもやってみました。」を参考に書いていきます。html()はdeprecatedだからread_xml()使えと言われたりhtml_node()もxml_node()もdeprecatedだ{xml2}を使えと言われたりして苦しみながらなんとか書き上げました。xmlから中身を取り出すのは初めてなので、もっとスマートなやり方があるのかもしれません。")今回私は{curl}と{jsonlite}を使う方でいきます。Rスクリプト(後半)を書く後半のスクリプトはほぼ先ほどのdichika氏の記事から丸ぱくりです。私の環境ではgmailをsmtpサーバーとして使おうとすると認証がうまくいきませんでした。FALSE)にしてみたところ、うまくはいきますが、gmailから「送信元偽装してるな。お前フィッシングだろ」と目をつけられます。このスクリプトを繰り返し実行していると、googleから迷惑メール送信アカウントとしてマークされてしまうかもしれません。いうサービスがありました。フリーのアカウントで月間1万通まで無料でメールを送信できます。APIでの利用が推奨されていますが、smtpでの送信も可能です。mailgunやgmailに頼らなくても自由に使えるメールサーバーを持っているかたはどうぞそちらをお使いください。runtimeが無いと突然落ちるので注意」と書いてありました。私のMacにはJava8のruntimeが入っているので大丈夫だろうと思ってスクリプトを実行したら、いきなり落ちました。Java6SEが必要だそうです。コメントを修正しました。手軽に使えるPaaSのひとつです。rubyやpythonでの利用が普通ですが、サードパーティのbuildpackageを使うことでRでも使えます。readmeも丁寧ですしサンプルプログラムも豊富なので、使い方の説明は割愛します。私がはまったのは1つだけ。masterがうまくいかなかったのですが、ログからはそれが読み取れなくて悩みました。うまく動かないときはここをTRUEにするスクリプトを入れたフォルダーで以下を実行します。masterdeployの際にinit.rで指定したパッケージがインストールされます。5分位待って、deployが完了したら、以下のコマンドでスクリプトを実行してみます。--no-save指定したアドレス(上のサンプルではmy@address.com)あてにメールが届いたら成功です。定期的にスクリプトを実行するここまででは、まだスクリプトは手動で実行する必要があり、うれしくありません。手動でスクリプトを流すんなら、ブラウザでブックマークを開いたほうが楽チンです。herokuには定期的に処理を流すオプション(add-on)があります。minutesから選択して保存したら完了です。指定した間隔で処理が流れ、メールが飛んできます。更新がないのに延々と同じ内容のメールが来るのもうざいので、前回の結果を覚えておき、更新があったときだけメールを飛ばすようにしたいです。