https://twitter.com/ccc_privacy_bot
作った経緯
Tカードが個人情報を提携企業に提供開始
個人情報提供の中止はいつでもできるが、「提供先企業は随時増える」「提供先企業が増えてもCCCからは通知は来ない」「新規企業は何もしないとデフォルトで個人情報提供する設定」というユーザフレンドリーじゃない仕様
- 毎日PDFをチェックしにいくほど暇じゃないのでボット作るか
という感じ
ボット自体は半月くらい前にはできてたのですが、2回目以降のCCCの更新が取得できるまで公開を控えていました。
【追記】「個人情報」について
語弊あったようなので捕捉
- 「個人情報」とは言っても、個人情報そのもの(メールアドレスや電話番号など)を提携先企業に丸渡しではなく分析や運営用に必要最低限しか提供されないです
- 参考
- アンチCCC目的でのボット作成とかではなく、PDFでしか提供されていない情報の取得を自動化することだけが目的なので個人情報云々について議論するつもりはないです
ボットでやっていること
- 30分に1回、提供先企業一覧のPDFをダウンロードできるページにいく
- PDFをダウンロードして提供先企業一覧を取得
- スクレイピングだけでいけると思ったらPDFで提供されていたのでparseするのが大変だったw
- 新着があればボットでつぶやく
技術的な話
ソースコード
https://github.com/sue445/ccc_privacy_crawler
使ってる技術
- ruby 2.1.5
- padrino
- Heroku
Herokuでも無料で1日1回以上cronを動かす方法
Herokuで30分に1回ボットを動かしているというと有料の Heroku Scheduler*1を思い浮かべると思いますが、このボットでは sidekiq-cronで自前でcron処理を行いwebのDynoを落とすことで無料でも30分に1回の定期実行を実現しています。webのDynoを落とすとURLでアクセスできなくなりますが、ボットということで割り切ってますw
sidekiqが立ち上がっている時はDynoはずっと立ち上がったままですが、1 Dynoをずっと動かす分には無料枠で大丈夫です。
ブコメレス
crawler Dynoっていうのがあるのか…
crawlerはProcfileで指定しているDyno名ですね https://github.com/sue445/ccc_privacy_crawler/blob/master/Procfile
web
dynoがhttpにroutingされること以外は特にルールはなかったはず。
Twitterでの質問
@ka_ sidekiqが動く時は同一プロセス内でスレッド立ち上がってcron処理するのでworkerのプロセスしか使いません
— sue445 (@sue445) 2014, 11月 18
resque はプロセスでworkerを処理する仕組みだけど sidekiq はスレッドでworkerを処理するのでcrawler dyno内で完結します
*1:定期実行の間隔が1日1回なら無料だが、それより多いと有料