LoginSignup
6
10

More than 3 years have passed since last update.

TweepyとcronでTwitterボットを作ってみた話

Last updated at Posted at 2020-06-04

この記事に書いてあること

PythonでTwitterボット作ってみたのでそこでやったことをまとめました。
TwitterAPIのアカウント登録申請してLinuxサーバにPythonとTweepyをインストールしてPythonでプログラムを書いてcronで時間になったらプログラム起動してつぶやくという流れです。

TwitterAPIのアカウント登録申請

Pythonでやってみたかったので、いろいろ調べたらTweepyというTwitterのAPIをラップしたサービスを発見。使いやすそうだと思ったのでこれを使ってみる。
しかしいずれにしてもTwitterAPIのアカウントが必要です。私はこの記事を参考にアカウントを申請しました。
これで取得する以下4項目が後程重要になります。
- CONSUMER_KEY
- CONSUMER_SECRET
- ACCESS_TOKEN
- ACCESS_TOKEN_SECRET

参考

LinuxにPythonインストール

私はサクラインターネットでLinuxサーバ(CentOS)をレンタルしているので、それにPythonをインストールします。この記事を参考にしました。
以下のコマンドで、IUS Community Projectのリポジトリを持ってきます。

sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpm

次に、以下のコマンドでPython3をインストールします。

sudo yum install  -y python36u-devel python36u-pip

Pythonがインストールされたか確認します。

python --version

インストールしたバージョンが表示されればOKです。

Python 3.6.2

参考

Tweepyを使用してPythonプログラム作成

プログラムを作成するために、まずはTweepyをインストールします。pipが入っていれば、pip install tweepyでインストールできます。

文字列のみでつぶやく

Tweepyをインストールした後は以下のようなプログラムを書きました。指定したアカウントのフォロワー数を取得してつぶやくというものです。

TwitterBot
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
sys.path.append('/usr/local/lib/python3.6/site-packages')

import tweepy

CONSUMER_KEY = "[twitterAPIのアカウント作成で取得した値]" 
CONSUMER_SECRET = "[twitterAPIのアカウント作成で取得した値]"
ACCESS_TOKEN = "[twitterAPIのアカウント作成で取得した値]"
ACCESS_TOKEN_SECRET = "[twitterAPIのアカウント作成で取得した値]"

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth ,wait_on_rate_limit = True)

# フォロワー数の取得
user = api.get_user(screen_name="[twitterアカウント名(「@」は除く)]")
count = user.followers_count

# つぶやきたい内容の文字列を生成
# (この内容だと指定したアカウントのフォロワー数をつぶやきます)
message= str(count)

# つぶやく
api.update_status(message)

画像付きでつぶやく(単一画像)

文字だけではなく、画像付きでつぶやきたい場合はこんな感じです。当プログラムと同一ディレクトリに「xxx.png」という画像ファイルが置いてある前提でのプログラムです。
最後に呼び出す関数が変わっているぐらいで、他は基本的に先ほどと同じです。

TwitterBotSinglePicture
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
sys.path.append('/usr/local/lib/python3.6/site-packages')

import tweepy

CONSUMER_KEY = "[twitterAPIのアカウント作成で取得した値]" 
CONSUMER_SECRET = "[twitterAPIのアカウント作成で取得した値]"
ACCESS_TOKEN = "[twitterAPIのアカウント作成で取得した値]"
ACCESS_TOKEN_SECRET = "[twitterAPIのアカウント作成で取得した値]"

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth ,wait_on_rate_limit = True)

# つぶやきたい内容の文字列を生成
message = str("私はbot\n")

# 文字列と単一画像の投稿
api.update_with_media(filename='xxx.png', status=message)

画像付きでつぶやく(複数画像)

画像を複数枚添付してつぶやきたい場合はこんな感じです。当プログラムと同一ディレクトリに「xxx1.png」、「xxx2.png」という画像ファイルが置いてある前提でのプログラムです。

TwitterBotSinglePicture
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
sys.path.append('/usr/local/lib/python3.6/site-packages')

import tweepy

CONSUMER_KEY = "[twitterAPIのアカウント作成で取得した値]" 
CONSUMER_SECRET = "[twitterAPIのアカウント作成で取得した値]"
ACCESS_TOKEN = "[twitterAPIのアカウント作成で取得した値]"
ACCESS_TOKEN_SECRET = "[twitterAPIのアカウント作成で取得した値]"

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth ,wait_on_rate_limit = True)

# つぶやきたい内容の文字列を生成
message = str("私はbot\n")

# 複数画像を添付
file_names=["xxx1.png", "xxx2.png"]
media_ids = []
for filename in file_names:
    res = api.media_upload(filename)
    media_ids.append(res.media_id)

# 文字列と複数画像の投稿
api.update_status(status=message, media_ids=media_ids)

※単一画像のときも最後に呼び出す関数はapi.update_with_mediaではなくapi.update_statusで行けそうな気がしますが未検証です。

参考

cron設定

主にこの記事を参考にcronの設定をしていきました。
最初は、毎日8時に稼働するように設定しました。crontab -eで以下のように編集します。

0 8 * * * [実行コマンド(python /XXX/XXX.py)]

暫くすると8時と19時に稼働させたくなったので、今度はcrontab -eで以下のように編集しました。

0 8,19 * * * [実行コマンド(python /XXX/XXX.py)]

最終的には1時間おきに稼働させたくなったので、今度は以下のように編集しました。

0 */1 * * * [実行コマンド(python /XXX/XXX.py)]

お役御免になったので、crontab -irコマンドでcronの設定を削除しました。
crontab -rで削除することもできますが、オプションを-irとすることで削除前に本当に削除していいか認してくれます。

各コマンド実行後は、毎回crontab -lで設定内容を確認するようにしていました。

参考

結果

こんなBOTができましたとさ。

文字列のみのつぶやき

画像を1枚だけ添付してつぶやいた結果

こんな感じ

画像を複数枚添付してつぶやいた結果

こんな感じ

6
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
10