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

くりにっき

ドリコムのプリキュアの人です

Tカード個人情報提供先新着botを作りました

https://twitter.com/ccc_privacy_bot

f:id:sue445:20141118233237p:plain

作った経緯

  1. Tカードが個人情報を提携企業に提供開始

  2. 個人情報提供の中止はいつでもできるが、「提供先企業は随時増える」「提供先企業が増えてもCCCからは通知は来ない」「新規企業は何もしないとデフォルトで個人情報提供する設定」というユーザフレンドリーじゃない仕様

    • f:id:sue445:20141118234558p:plain

  3. 毎日PDFをチェックしにいくほど暇じゃないのでボット作るか

という感じ

ボット自体は半月くらい前にはできてたのですが、2回目以降のCCCの更新が取得できるまで公開を控えていました。

【追記】「個人情報」について

語弊あったようなので捕捉

ボットでやっていること

  • 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

f:id:sue445:20141118235651p:plain

sidekiqが立ち上がっている時はDynoはずっと立ち上がったままですが、1 Dynoをずっと動かす分には無料枠で大丈夫です。

ブコメレス

id:tmd45

crawler Dynoっていうのがあるのか…

crawlerはProcfileで指定しているDyno名ですね https://github.com/sue445/ccc_privacy_crawler/blob/master/Procfile

web dynoがhttpにroutingされること以外は特にルールはなかったはず。

Twitterでの質問

resque はプロセスでworkerを処理する仕組みだけど sidekiq はスレッドでworkerを処理するのでcrawler dyno内で完結します

*1:定期実行の間隔が1日1回なら無料だが、それより多いと有料