Python Cloud9を利用して、定期処理をherokuから行う
Cloud9というIDEを利用して、PythonからSeleniumを利用し、あるサイトでいいねを自動化するプログラムを作った。
これを定期実行を行いたい。検索してみると、crontabを使えば定期実行ができるようだが、cloud9上では実行できないらしい。
ほかの代替案を考えたとき、heroku schedulerを利用して定期実行を行えるのではと思い、やってみたらうまくいった。その時の作業ログを残しておく。特に詰まったところ。
手順としては
・bottleを使ってherokuにdeploy
・heroku schedulerに接続
・heroku schedulerに実行プログラムを入力
pythonプログラムをherokuにdeployする
実行したいプログラムをherokuにdeployする。herokuにdeployするところまでは下記参照。これ通りにやれば、ひとまずherokuにdeployするまではできまする。
【ローカル環境構築不要】Cloud9で作ったPythonのbottleアプリケーションをHerokuにdeployする - Qiita http://qiita.com/masaibar/items/86dd57efd50ab729ccf6
Selenium関係のインストール
あとは自分のseleniumを使うアプリケーションのファイルをcloud9上のrootディレクトリに保存する。
その後以下をインストールする。
$ pip install selenium
$ pip install crontab
$ npm install phantomjs
で、heroku上で環境を構築するために、requirements.txtを作成する。
$ pip freeze -l > requirements.txt
requirements.txtから、つかわない以下の項目を削除する。
ちなみに今回はここで詰まって、3日間解決できなかった。結局、scipyはherokuだと動かないらしい。なので、自分のアプリケーションとは関係ないmoduleは全部削除しておく。
matplotlib==1.3.1
pygobject==3.12.0
python-apt==0.9.3.5ubuntu2
python-dateutil==2.0
unattended-upgrades==0.1
scipy==0.13.3
numpy==1.8.2
requests==2.2.1
numpy==1.8.2
で、普通にgitにcommitした後に、herokuにpushすれば大丈夫。
$ git push heroku master
これでdeployがうまくいったみたい。
herokuスケジューラーを起動する。heroku schedulerはdeployしたファイルを定期実行してくれる。10minutes, hourly, dailyで実行を決められる。djangoとか使わなくても、シンプルなpythonプログラムをコマンドで実行できるので今回はこれを利用した。
Heroku Schedulerと接続する
herokuスケジューラーを起動する。heroku schedulerはdeployしたファイルを定期実行してくれる。10minutes, hourly, dailyで実行を決められる。djangoとか使わなくても、シンプルなpythonプログラムをコマンドで実行できるので今回はこれを利用した。
$ heroku addons:create scheduler:standard
で、今度はherokuで実行するスケジュールをセットする
$ heroku addons:open scheduler
Opening https://addons-sso.heroku.com/apps/d5087dc6-6949-4335-bd42-3f13150fa199/addons/9a753940-5305-4b2e-b520-a7cc80f7655e...
実行するとこんな感じのURLが出てくる。
簡単!Herokuで動くTwitter botをPythonで実装する - Qiita http://qiita.com/enomotok_/items/41275dd904c8aa774e72
こんな感じで、スクレーピングするプログラムを自動定期処理できることができました。Cloud9からできるのいいね!
>Python データ分析入門マニュアルに戻る