Pythonで作ったTwitterのbotをHerokuで動かす
目次
「botを作ったはいいけど、それを常に動かしておく方法がわからない…。」→Herokuで解決!
Twitterのbotを作るのは割と簡単なのですが、それを常に動かしておく方法が少しわかりにくいです。
なので今回はHerokuを使った定期投稿のやり方を説明していきます。
この記事ではコードやAPIキーの取得方法などの細かい説明を省いているので、わからなければ過去記事を参照してください。
環境によって細かいところが違うので、詳しくはHerokuの公式のチュートリアルを見てください。英語ですがわかりやすいです。
Getting Started on Heroku with Python | Heroku Dev Center
Herokuにデプロイするまでの準備
Herokuのアカウントを準備する
Cloud Application Platform | Heroku
上のリンクへ行き、Herokuのアカウントを取得しておきます。制限はありますが、無料で使えます。ただしアカウントの認証にクレジットカードの登録が必要になります。
HerokuのCLI(コマンドラインインターフェース)をインストールする
ほとんどの作業はターミナルを使用して進めます。そのためにまずCLIをインストールします。
公式のチュートリアルを見て進めてください。
(ラズパイの場合ですが、OSはLinux系のRaspbianなのでUbuntu/Debian系のやり方で進められるかなと思ったら無理だったので、standalone用のやり方でインストールしたらうまくいきました。
以下のようにOSはlinux, archはarmに置き換えて指定しました。forbiddenエラーみたいなのが出たらsudoで実行します。 )
wget https://cli-assets.heroku.com/branches/stable/heroku-linux-arm.tar.gz mkdir -p /usr/local/lib /usr/local/bin tar -xvzf heroku-linux-arm.tar.gz -C /usr/local/lib ln -s /usr/local/lib/heroku/bin/heroku /usr/local/bin/heroku
インストールできたらheroku login
でログインしておきます。
作業用フォルダを作る
ターミナルで作業用フォルダを作って、そこに移動しておきます。
mkdir 作りたいフォルダ名 cd 上で作ったフォルダ名
用意するファイル
作ったフォルダの中に、以下のファイルを入れておきます。
それぞれの中身は順番に説明します。
- Procfile
- runtime.txt
- requirements.txt
- index.py
- tweet.py
Procfile
Herokuにこれを動かせばいいんだよと指示するファイル。拡張子なし。
web: python index.py
runtime.txt
Pythonのバージョンを書いておくファイル。
python-3.6.1
requirements.txt
必要なモジュールを書いておくファイル。ここに書いておくと、pipからインストールしてくれます。
virtualenvの仮想環境で必要なモジュールをインストールして、pip freeze > requirements.txt
としておくと簡単。
サンプルのbotではこんな感じ。
bottle==0.12.9 certifi==2017.4.17 chardet==3.0.3 idna==2.5 oauthlib==2.0.2 requests==2.17.3 requests-oauthlib==0.8.0 urllib3==1.21.1
index.py
botとは直接関係ないけど、動作を安定させるための(?)ダミープログラム。
#coding:utf-8 import os from bottle import route, run @route("/") def hello_world(): return "hello world" run(host="0.0.0.0", port=int(os.environ.get("PORT",5000)))
tweet.py
botの本体プログラム。これは後述するherokuのスケジューラで定期実行します。
# coding: utf-8 from requests_oauthlib import OAuth1Session import json import os import random import datetime twitter = OAuth1Session(os.environ["CONSUMER_KEY"], os.environ["CONSUMER_SECRET"], os.environ["ACCESS_TOKEN_KEY"], os.environ["ACCESS_TOKEN_SECRET"]) tweets = ["文言1","文言2","文言3"] randomtweet = tweets[random.randrange(len(tweets))] timestamp = datetime.datetime.today() + datetime.timedelta(hours=9) timestamp = str(timestamp.strftime("%Y/%m/%d %H:%M")) params = {"status": randomtweet + " " + timestamp} req = twitter.post("https://api.twitter.com/1.1/statuses/update.json", params = params)
デプロイする
Gitを使います。
heroku create git add . git commit -m "first commit" git push heroku master
TwitterのAPIキーはセキュリティ上、プログラムに直接書かずに環境変数に設定します。***部分を自分のbot用APIキーに置き換えてください。クオーテーションマークはいりません。
heroku config:set CONSUMER_KEY=*** CONSUMER_SECRET=*** ACCESS_TOKEN_KEY=*** ACCESS_TOKEN_SECRET=***
まず手動で動くか確認
heroku run python tweet.py
動いたら次へ。
スケジューラを設定する
これを設定して初めてbotが自動で動くようになります。
$ heroku addons:create scheduler:standard $ heroku addons:open scheduler
開いたらAdd new job
を押します。
すると新しいタスクができるので、$の後にpython tweet.py
と入力し、頻度などを設定しsaveすれば終わりです。やったね。
botの内容を変更する時は
ローカルで変更してから、あげ直します。
botのフォルダに移動してから下記のような感じでOK。詳しくはgitでぐぐーる。
git add 変更を加えたファイル git commit -m "変更内容を簡潔にコメント" git push heroku master
参考サイト
簡単!Herokuで動くTwitter botをPythonで実装する - Qiita
Getting Started on Heroku with Python | Heroku Dev Center
サルでもわかるGit入門〜バージョン管理を使いこなそう〜【プロジェクト管理ツールBacklog】
おまけ(自分用メモ:virtualenvの使い方)
virtualenv hoge
source hoge/bin/activate
関連記事