この記事ではPythonで作ったTwittter botをHerokuで定期実行する方法をWindows ver.で紹介します。
- Twitterのbotを作ったはいいが、それを定期実行する方法が分からない方
- Herokuの使い方を知りたい方
TwitterAPIを使うと、フォローやいいね、DMの送信などを、コードを書いて実行することができるので非常に便利です。
ただ、定期的にツイートの収集などをしてデータ分析する場合は、逐一PCを起動してコマンドを叩いてコード実行するのは面倒くさい。
そんな時に役立つのがHerokuというサービス。
Herokuを使うとオンラインにスクリプトを置いて定時実行することができます。
- Twitterのbotをオンラインで定期実行する方法
- Herokuのアカウント作成と基本的な使い方
それではこれからHerokuでのPythonスクリプトの定期実行の仕方について、丁寧に解説していきます。
- Windows10
- Python3.7
- Heroku7.19
- Git for Windows 2.19 64bit
Pythonを定期実行するには
定期実行はローカルでもできる
「オンラインでPyrhonスクリプトを定期実行する方法を紹介します」と宣言しましたが、実はWindowsのタスクスケジューラを使えばPythonのコードをローカルで定期的に実行することができます。
ただ、定時実行する時間にPCの電源を入れておかなければならないのはもちろんのこと、Wi-Fiが接続されていること、管理者権限でログインしていることが必要になります。
それに、個人的な問題だとは思うんですが、僕のPCだとアクセス権限の問題で定期実行がされないという事象が生じてしまいます。
そんなにWindowsへの造詣が深いわけでもないので何が原因かが分からない。
そんなわけで、「オンラインで定期実行した方が早いんじゃないか?」という結論に至り、Herokuを使うことになりました。
Herokuの公式ドキュメント
さっそく次の章からHerokuの使い方を解説していくのですが、公式のドキュメントも一読してみることをおすすめします。
公式のドキュメントは英語で書かれてはいますが、わかりやすいように書かれているので参照してみたい方は下のリンクからアクセスしてみてください。
HerokuでTwitterのbotを定期実行
Herokuのアカウントを新規作成
下のリンクから、Herokuのアカウントを取得します。
苗字、名前、メールアドレスなどを入力して次に進むと、登録したアドレス宛にアクティベート用のメールが届くのでリンクをクリックしてアクティベートを完了させます。
パスワードを設定し、ログインをします。
ただし、パスワードには英字、数字、記号を含める必要があるので注してください。
無料プランだと使用できるリソースに制限がありますが、今回のような使い方の場合は無料プランでも大丈夫です。
ただし、無料プランであってもアカウントの認証のためにクレジットカードの認証が必要になるので注意してください。
HerokuのCLI(コマンドラインインターフェイス)をインストール
Herokuの作業の大半は、コマンドを使って行います。
ただWindowsのデフォルトでは「herokuコマンド」という、Herokuでもろもろの操作をするために必要なコマンドを使うことができません。
なので、それに必要なHeroku CLIをインストールします。
今回は、【Windows 64-bit installer】をダウンロードします。
インストールが完了したらコマンドプロンプトを起動し、次のコマンドでログインを完了しておきます。
heroku login
作業用フォルダの作成
コマンドプロンプトで、cdコマンドを使いデスクトップに移動します。
【mkdir hoge】で「hoge」という名前の作業用フォルダを作りcdコマンドでそのフォルダに移動します。
cd desktop mkdir hoge cd hoge
必要なファイル
Herokuでアプリを動かす際には以下のファイルが必要です。
runtime.txt:Pythonのバージョンを記述するファイル
python-3.7.1
requirements.txt:必要なモジュールを記述するファイル
virtualenvの仮想環境で必要なモジュールをインストールして、【pip freeze > requirements.txt】というコマンドを実行します。
pip freeze > requirements.txt
すると、インストールされたモジュールがrequirements.txtに出力されるので、1つ1つ入力する手間が省けます。
bottle==0.12.9 certifi==2018.11.29 chardet==3.0.4 idna==2.7 oauthlib==2.1.0 requests==2.20.1 requests-oauthlib==1.0.0 urllib3==1.24.1
tweet.py:Twitterのbot本体
from requests_oauthlib import OAuth1Session import json import os twitter = OAuth1Session(os.environ["CONSUMER_KEY"], os.environ["CONSUMER_SECRET"], os.environ["ACCESS_TOKEN_KEY"], os.environ["ACCESS_TOKEN_SECRET"]) text = "Herokuからツイートいたしました。" params = {"status": text} req = twitter.post("https://api.twitter.com/1.1/statuses/update.json", params = params)
デプロイ
Gitを使ってデプロイをします。
Windowsのデフォルトではgitコマンドを使うことができないので、「Git Bash」というツールを使用します。
下の記事を参考にインストールしてください
インストールが完了したら次のコマンドを実行します。
heroku create 【アプリ名】 git init git config --global user.email "you@example.com" git config --global user.name "Your Name" git remote add heroku https://git.heroku.com/【アプリ名】.git git add . git commit -m "first commit" git push heroku master
TwitterのAPIキーは、スクリプトに直書きするのはセキュリティ上よろしくありません。
なので、これらのキーは環境変数に設定します。
以下のコマンドを実行して環境変数を設定します。
heroku config:set CONSUMER_KEY=***** CONSUMER_SECRET=***** ACCESS_TOKEN_KEY=***** ACCESS_TOKEN_SECRET=*****
クオーテーションは必要ないです。
登録された環境変数は以下のコマンドで確認できます。
heroku config
動作確認
定期実行をする前に、まずは次のコマンドを使って手動で動作確認をしましょう。
heroku run python tweet.py
次のようなツイートができていればOKです。
Herokuからツイートいたしました。
— くろやぎ@大学生ブロガー (@kuroyagikuncom) December 7, 2018
次に、定期実行をするためのスケジューラを設定します。
Herokuで定期実行するには「heroku scheduler」というアドオンを使用します。
heroku addons:add scheduler:standard
ただし、無料のアドオンを利用する場合でも、クレジットカードの登録が必要になります。
ブラウザでHerokuにアクセスし、コンソールから設定を行います。
heroku addons:open scheduler
【Add new job】をクリックすると、新しいタスクが作成されるので$の後に【python tweet.py】と入力し、タスクを実行するタイミングを設定して完了です。
Herokuはデフォルトで世界協定時刻を採用しているので、「表示されている時刻+9時間」が日本での時間になります。
まとめ
Herokuを使うことでPythonのスクリプトを定期的に実行することが可能になります。
Twitter APIと組み合わせて使うことで、フォローやDM、リツイート、ファボなどの操作を自動化させることができます。
使い方は∞なので、読者さんのよく使うアプリなどと連携させてみると面白いかもしれません。
ぜひ、おためしあれ~
コメント