Help us understand the problem. What is going on with this article?

簡単!Herokuで動くTwitter botをPythonで実装する

More than 3 years have passed since last update.

Herokuで動くTwitter botをPythonで実装する方法を紹介します。
やり尽くされたネタだとは思いますが、2016年版ということで。

実現方法としては、Heroku上にPythonスクリプトをデプロイして、Heroku Schedulerを使ってスクリプトを定期実行します。

完成版のソースコードは以下にあります。
https://github.com/k-enomoto/minimum_twitter_bot

この記事で説明すること

  • Twitter Botの最低限のソースコード
  • Herokuへのデプロイ
  • Heroku Schedulerの設定

この記事で説明しないこと

  • Herokuの使い方
  • pipの使い方
  • Twitter APIのアカウント作成方法

それぞれ他に詳しい記事がありますので、参考にしてください。

ライブラリの準備

使用するライブラリをインストールします。

$ pip install python-twitter
$ pip install bottle

Herokuにどのライブラリを使うか教えてあげる必要があるので、 requirements.txt を作成します。

$ pip freeze -l > requirements.txt

多分こんな内容になります。

bottle==0.12.9
future==0.15.2
oauthlib==1.1.2
python-twitter==3.1
requests==2.10.0
requests-oauthlib==0.6.2

Twitter APIにアクセスするコード

事前にTwitter APIの consumer_key, consumer_secret, access_token_key, access_token_secret を取得しておきます。
取得方法は以下の記事を参考にしてください。
RubyでTwitter APIを使ってツイートする
また各キーはセキュリティの観点から、環境変数に設定します。Herokuでの環境変数の設定方法は後述します。

つぶやきの内容はWeb APIから取るなり、ご自由にアレンジしてください。

tweet.py
# -*- coding: utf-8 -*-

import os
from datetime import datetime

import twitter


api = twitter.Api(consumer_key=os.environ["CONSUMER_KEY"],
                  consumer_secret=os.environ["CONSUMER_SECRET"],
                  access_token_key=os.environ["ACCESS_TOKEN_KEY"],
                  access_token_secret=os.environ["ACCESS_TOKEN_SECRET"]
                  )
api.PostUpdate("system time is %s" % datetime.now())

Webアプリのコード(ダミー)

今回のポイントになる箇所です。
Herokuでプロセスを動かしておくために、ダミーのWebアプリを用意します。本記事では軽量Webフレームワークbottleを使いました。
bottleのドキュメントにあるサンプルコードをそのまま流用しています。

index.py
# -*- coding: utf-8 -*-

import os
from bottle import route, run


@route("/")
def hello_world():
    return "" # ここで返す内容は何でもよい

run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))

Procfile

ProcfileにはHerokuのコンテナで実行するコマンドを記載します。
前述のダミーWebアプリを起動するコマンドを記載します。

Procfile
web: python index.py

runtime.txt

ポイントその2です。
runtime.txt を作成し、使用するランタイムを記述します。

runtime.txt
python-3.5.2

デプロイ

以上で必要なファイルが揃いました。

index.py
tweet.py
requirements.txt
runtime.txt
Procfile

Herokuにデプロイするために、ファイルはGitで管理する必要があります。Gitにコミットします。

git add .
git commit -m "Initial commit"

Herokuにデプロイします。
また前述した環境変数の設定はここで行います。 your_cosumer_key, your_consumer_secret, your_access_token_key, your_access_token_secretはご自身の値に読み替えてください。

$ heroku create --stack cedar
$ git push heroku master
$ heroku config:set CONSUMER_KEY=your_cosumer_key CONSUMER_SECRET=your_consumer_secret ACCESS_TOKEN_KEY=your_access_token_key ACCESS_TOKEN_SECRET=your_access_token_secret

ちゃんとデプロイできているか、確認しておきます。

$ heroku logs

スケジューラタスクの登録

最後に、Heroku Schedulerにタスクを登録します。
以下のコマンドを入力すると、スケジューラの登録ページが立ち上がります。

$ heroku addons:create scheduler:standard
$ heroku addons:open scheduler

スケジューラで実行するコマンドと、頻度を設定します。
つぶやくためのPythonスクリプトを設定しておきましょう。

$ python tweet.py

scsho.png

これでTwitter botが完成しました。

enomotok
iOS Developer
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした