定期投稿する簡単なbotを作ります
アファメーションbot (@affirfbm) | Twitter
↑この記事で作れるbotの例です。
いくつも用意しておいた文章の中から、ランダムで10分に1回投稿します。かなり単純ですが、色んな応用例が考えられますね。
以下で作り方を説明します。今回は定期投稿するbotについてのみ解説します。(リプライに返事等はしません)
全ての作業はラズベリーパイ3で行なっています。OSはLinuxの一種のraspbianです。
まずはbot用アカウント作成
Twitterのサイトへ行き、作りたいbotの名前でアカウントを作成します。
この時メールアドレスが他のアカウントと重複していると作れないのですが、Gmailを使ってる場合はエイリアス機能というやつで解決できます。
例えば手持ちのGmailアドレスが"temochi@gmail.com"だとすると、"temochi+bot@gmail.com"などの様に、太字部分を付け足しても前者のメールアドレス("temochi@gmail.com")にメールが届くという仕組みです。
これで登録しておけば、別のメールアドレスだと認識されます。とっても便利。
また電話番号も重複していると登録できません。あらかじめ元々持っているTwitterアカウントに紐付けされている電話番号を削除しておけば問題ないので、先に消しておきましょう。
次の段階では電話番号の登録が必要になります。
必要なモジュールをインストール
sudo pip3 install requests_oauthlib
これをターミナルに打って、インストールしておきます。
キーやトークンを取得
Twitter Application Management
上記のサイトにアクセスし、Create New Appをクリック、上からbotの名前・説明、URLを入力します。規約に同意するチェックを入れて、下のボタンを押すと登録できます。
この時、さっき作ったbot用アカウントに電話番号が登録されていないとエラーが出るので気をつけてください。
登録できたらKeys and Access Tokensというところを開くと、以下のファイルに対応するキー4つが見つかるはずです。トークンはCreate my access tokenボタンを押せば出ます。
取得したキーをsettings.pyという名前で作ったファイルに以下のように保存しておきます。XXXXXXの部分に取得したキー等をそれぞれ入力します。(実際はもう少し長い文字列)
CONSUMER_KEY = "XXXXXXXXX" | |
CONSUMER_SECRET = "XXXXXXXXX" | |
ACCESS_TOKEN = "XXXXXXXXX" | |
ACCESS_TOKEN_SECRET = "XXXXXXXXX" |
実際のコード
#coding; utf-8 | |
from requests_oauthlib import OAuth1Session | |
import json | |
import settings #ここでトークンなどの設定ファイルを読み込む。 | |
import random | |
import datetime | |
twitter = OAuth1Session(settings.CONSUMER_KEY, settings.CONSUMER_SECRET, settings.ACCESS_TOKEN, settings.ACCESS_TOKEN_SECRET) | |
tweets = ["にゃーん","わおーん"] #ここにツイートする内容を入れる | |
randomtweet = tweets[random.randrange(len(tweets))] | |
timestamp = datetime.datetime.today() | |
timestamp = str(timestamp.strftime("%Y/%m/%d %H:%M")) #タイムスタンプを用意 | |
params = {"status": randomtweet + " " + timestamp} | |
req = twitter.post("https://api.twitter.com/1.1/statuses/update.json", params = params) |
では実際のコードを見てみましょう。これを"tweet.py"みたいな名前で保存しておきます。
まずこのコードを動かすためのモジュールがいくつかインポートされています。5行目でインポートされているのが、先ほど作った設定ファイルです。
11行目にツイートしたい内容を入力します。ダブルクォーテーション(")でくくり、コンマで区切って入力してください。
13行目で先ほど入力した内容の中から一つがrandomtweetという変数に入力されます。
14行目、15行目ではタイムスタンプを用意しています。これは、Twitterに一定時間内に全く同じ文言を何度もツイートしようとするとエラーが出るので、それを避けるためです。いらなかったら消してもOK。
17行目でrandomtweetとタイムスタンプを合わせてツイート内容を用意。
あとはインポートしたモジュールがうまいことしてくれます。詳しく知りたい人は下部にリンクした参考サイトを見てください。
実行してみてエラーが出ず、きちんとツイートされているようなら次へ進んでください。定期実行してみましょう。
cronの設定
cronとは決まった時間にプログラムを実行してくれるタイマーみたいなものです。さあここからがちょっとややこしいんですが、私はラズベリーパイでやってるのでそのやり方を説明します。
まずターミナルでcrontab -eと入力します。使うエディタを聞かれるので、2番のnanoを選びます。そして下の空いてるところに*/3 * * * * python3 /home/pi/tweet.py等と入力し(自分が保存したプログラムのパスを入れてください)、Ctrl+oを押してEnterで保存し、Ctrl+xを押して終了します。これで3分おきにプログラムが実行され、ツイートされます。
詳しくはこのサイトなどを見てください。
私が引っかかったポイントを説明しておきます。 アスタリスク(*)の間には一つずつスペースを入れ、アスタリスクと何分おきかを示すスラッシュ(/)の間にはスペースを入れません。
Herokuを使って定期実行できるようになりました(2017/06/04追記)
少しコードに変更(APIキーとタイムスタンプの部分)がありますので、注意してください。1番短い間隔で、10分おきにツイートできます。
もっと簡単にbotを作る
もっと簡単にbotを作れるwebサービスもあるようですが、短くて30分おきにしかツイートできないようなので、私は使いませんでした。それくらいの間隔で充分というなら便利に使えそうです。なので貼っておきます。
自分の普段使ってるアカウントで、何かのお知らせ定期ツイートだけしたいという人もこういうサービス使えば簡単そう。
注意事項
Twitterの規約はしっかり読んでおきましょう。うっかりするとbotだけでなく、通常利用のアカウントまで凍結される恐れがあります。
The Twitter Rules | Twitter Help Center
この中に気になる事項があって、複数アカウント取得するのはもしや禁止なのでは?と思ったのですが、以下のサイトによると、攻撃的なアカウントでなければ大丈夫なようです。人を傷つけることのないbotを作り、楽しいTwitterライフを!
Twitterルール改定──人種や性的指向へのヘイト行為や脅迫行為など、禁止事項が詳細に - ITmedia NEWS
参考サイト
かなり参考にさせてもらいました。わかりやすいです。
広告