Pythonで作ったTwittter botをHerokuで定期実行する方法【Windows版】

Python
スポンサーリンク
読了時間 挨拶

記事は約 7 分で読めます。

くろやぎ
くろやぎ

みなさん、こんにちは!
くろやぎ(kuroyagikuncom)です。
よろしければ、Twitterの方にも遊びに来てください。

この記事では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のアカウントを取得

苗字、名前、メールアドレスなどを入力して次に進むと、登録したアドレス宛にアクティベート用のメールが届くのでリンクをクリックしてアクティベートを完了させます。
パスワードを設定し、ログインをします。
ただし、パスワードには英字、数字、記号を含める必要があるので注してください。

無料プランだと使用できるリソースに制限がありますが、今回のような使い方の場合は無料プランでも大丈夫です。
ただし、無料プランであってもアカウントの認証のためにクレジットカードの認証が必要になるので注意してください。

HerokuのCLI(コマンドラインインターフェイス)をインストール

Herokuの作業の大半は、コマンドを使って行います。
ただWindowsのデフォルトでは「herokuコマンド」という、Herokuでもろもろの操作をするために必要なコマンドを使うことができません。
なので、それに必要なHeroku CLIをインストールします。

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」というツールを使用します。
下の記事を参考にインストールしてください

Git for Windowsのインストール方法

インストールが完了したら次のコマンドを実行します。

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で定期実行するには「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、リツイート、ファボなどの操作を自動化させることができます。
使い方は∞なので、読者さんのよく使うアプリなどと連携させてみると面白いかもしれません。
ぜひ、おためしあれ~

コメント

タイトルとURLをコピーしました