こんにちは、2回生のこまです。
Twitterのbotが作りたくなったので作りました。
https://twitter.com/substr_bot
はじめに
ツイッターアカウントを作ります
https://developer.twitter.com/en
で登録します。(「What’s your use case?」という項目があるので「Making a bot」を選びます)
英語で適当に目的を書いて送ればすぐ承認されると思います。
[Create New App]で新規appを作成して- Consumer Key(API Key)
- Consumer Secret(API Secret)
- Access Token
- Access Token Secret
を取得できればOKです
Pythonからツイートする
Tweepyをインストールします。
先に取得したConsumer Key、Consumer Secret、Access Token、Access Token Secretを使って
import tweepy
consumer_key = 'CONSUMER_KEY'
consumer_secret = 'CONSUMER_SECRET'
access_token = 'ACCESS_TOKEN_KEY'
access_token_secret = 'ACCESS_TOKEN_SECRET'
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
api.update_status(status = "ツイートする文章")
でツイートすることができます。
画像やURLなども載せられるようです。
https://docs.tweepy.org/en/stable/api.html?highlight=update#tweepy.API.update_status
自分宛のツイートに返信する
search_word = "@アカウント名"
set_count = 100
results = api.search_tweets(q=search_word, count=set_count, result_type = 'recent')
で自分宛のツイートを検索することができます。(1回あたり100ツイートが上限)
検索したツイートに返信するには
for result in results:
tweet_id = result.id
reply_text = "@"+result.user.name+"返信したい文章"
api.update_status(status = reply_text ,in_reply_to_status_id=tweet_id)
とすることで返信できます。
あとはこれを定期的に実行することでbotの完成です!(完成じゃない)
- 余談
Twitterの検索機能で時間指定やリツイートの除外、一定数以上のリツイートやいいねされたツイートを絞り込むことができます。
これは↑のツイートを検索する部分をいじるだけなので簡単にできます!
Herokuでbotを動かす
いちいち返信するたびにプログラムを動かすのは面倒なので、Herokuで定期的に実行できるようにします。
ここからHeroku CLIをインストールしておきます。Gitもインストールしておきます。
https://devcenter.heroku.com/ja/articles/heroku-cli#download-and-install
アカウントはもう作ってあったので、VSCodeのターミナルからログインします。
$ heroku login
の後に何か聞かれるので適当にエンターを押すとブラウザからログインできます。
その後に
$ heroku create アプリケーション名
でアプリケーションを作成します。
(https://dashboard.heroku.com/appsから確認できます。)
$ git init
$ git add .
$ git commit
$ git push heroku master
で作ったPythonのプログラムをHerokuにデプロイできます。
次に定期的にプログラムを実行するようにします。
次にHeroku Schedulerを開いてCreate jobで
Run CommandにPython プログラム名
を入力すれば定期的に実行してくれます。
これでできました!
(10分ごと、1時間ごと、1日ごとにしか動かせないので少し不便です。自分はシェルスクリプトで10秒ごとに動くようにしています)