##やったこと
自動でつぶやくTwitterのbotを作成した。
- 定型文の中からランダムに文章を選び、ツイートする
- 一定の時間ごとに自動でツイートする
- 全部無料(クレジットカードの登録も不要)
##環境
- Windowsで開発
- Python3
- Heroku上でWebサービスを起動
##作業内容
###Herokuの準備
https://signup.heroku.com/login
上記にアクセスしてアカウントを作成(Sign up)する。
メール認証後、アカウントが作成される。
https://devcenter.heroku.com/articles/heroku-cli
上記にアクセスして The Heroku CLIをダウンロードしてインストールする。
これによって端末からコマンドラインでHerokuを操作できるようになる。
###Twitterの準備
twitterアカウントがない場合は作成しておく。
https://apps.twitter.com/
上記にアクセスして、Twitter app を作成する。
必要情報を入力して登録すると、以下の情報が表示される。
(これらの情報を後でHerokuに登録する。)
- Consumer Key (API Key)
- Consumer Secret (API Secret)
- Owner
- Owner ID
###プログラムの作成
HerokuでPythonを動かすために、以下のファイルを作成する。
- clock.py
- index.py
- words.py
- Procfile
- requirements.txt
- runtime.txt
####clock.py
BlockingScheduler を使用し、定期的に実行するための記述を行う。minutes=60 という記述箇所が実行間隔(単位は分)。以下の例の場合は、1時間に1回となる。任意の分に変更すれば良い。
from apscheduler.schedulers.blocking import BlockingScheduler
import words
twische = BlockingScheduler()
@twische.scheduled_job('interval',minutes=60)
def timed_job():
words.puttweet()
if __name__ == "__main__":
twische.start()
####index.py
ダミーファイルであって記述内容に特別な意味はない。
####words.py
TwitterのAPIを呼び出す処理を記述する。以下の例の場合は、文章1から文章5がランダムで選択される。文章は好きな数だけ追加することが可能。
["CONSUMER_KEY"]等キーの値は、ベタ打ちするとセキュリティ上の問題があるので、ここではHerokuの設定値を参照するようにしている。
#coding; utf-8
from requests_oauthlib import OAuth1Session
import json
import os
import random
import datetime
def puttweet():
twitter = OAuth1Session(os.environ["CONSUMER_KEY"], os.environ["CONSUMER_SECRET"], os.environ["ACCESS_TOKEN_KEY"], os.environ["ACCESS_TOKEN_SECRET"])
tweets = ["文章1",\
"文章2",\
"文章3",\
"文章4",\
"文章5"]
randomtweet = tweets[random.randrange(len(tweets))]
params = {"status": randomtweet}
req = twitter.post("https://api.twitter.com/1.1/statuses/update.json", params = params)
####Procfile
web: python index.py
clock: python clock.py
####requirements.txt
web: python index.py
clock: python clock.py
####runtime.txt
python-3.6.5
###デプロイ
コマンドラインからHerokuにキーの値を設定する。XXXのところを、上記Twitterの準備の手順で入手したキーの値にする。
heroku config:set CONSUMER_KEY="XXX"
heroku config:set CONSUMER_SECRET="XXX"
heroku config:set ACCESS_TOKEN_KEY="XXX"
heroku config:set ACCESS_TOKEN_SECRET="XXX"
Herokuにデプロイする。
以下で行う内容は、Heroku上にプロセスを作成、Gitでファイルを登録、更新、Heroku上に上程。
heroku create
git add .
git commit -m "Initial commitment."
git push heroku master
deploy...done. と表示されれば成功となる。エラーが出た場合は、その内容を読んで修正する。
デプロイできたのに定期ツイートがうまくいかない場合は、コマンドラインからherokuのログを参照して、そこにPythonの実行時エラーが出ていないか確認するとよい。
heroku logs
なお、words.pyに表示する文章のバリエーションを追加するときは、git addからgit pushを繰り返せばよい。
git add .
git commit -m "Added words."
git push heroku master
###参考
以下を参考にさせていただきました。ありがとうございました。