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

全部無料で、自動ツイートするbotを作る

やったこと

自動でつぶやくTwitterのbotを作成した。

  • 定型文の中からランダムに文章を選び、ツイートする
  • 一定の時間ごとに自動でツイートする
  • 全部無料(クレジットカードの登録も不要)

ソースコード(GitHub)

環境

  • 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回となる。任意の分に変更すれば良い。

clock.py
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の設定値を参照するようにしている。

words.py
#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

requirements.txt
web: python index.py
clock: python clock.py

runtime.txt

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

参考

以下を参考にさせていただきました。ありがとうございました。

Pythonで作ったTwitterのbotをHerokuで動かす
twitter定期botをHerokuにデプロイ

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
ユーザーは見つかりませんでした