読者です 読者をやめる 読者になる 読者になる

ひとメモ

Pythonを勉強して主にラズパイで何かするブログ

PythonでTwitterのbotを作ろう!(定期投稿タイプ)

この記事を見て作れるbotの例

アファメーションbot (@affirfbm) | Twitter

アファメーション(自己暗示みたいなもの)を5分に1回ひたすら呟くbotです。(現在停止中)

本来は自分で声に出して言うものですが、中々続かないんですよね。私はTwitter依存気味なので、TLに勝手にアファメーションが流れてきたらいいかもと思い作成しました。願望垂れ流しでちょっと恥ずかしいけど、なかなかいい感じです。

 

以下で作り方を説明します。今回は定期投稿する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の部分に取得したキー等をそれぞれ入力します。(実際はもう少し長い文字列)

gist.github.com

 

実際のコード

gist.github.com

 では実際のコードを見てみましょう。これを"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分おきにプログラムが実行され、ツイートされます。

 詳しくはこのサイトなどを見てください。

cronの設定方法 - Qiita

私が引っかかったポイントを説明しておきます。 アスタリスク(*)の間には一つずつスペースを入れ、アスタリスクと何分おきかを示すスラッシュ(/)の間にはスペースを入れません。

 

もっと簡単な方法もあるみたいです

この方法で定期ツイートするbotはできるようになりましたが、ラズパイは立ち上げっぱなしです。どこかのサーバーにプログラムを置いて、みたいなやり方もあるようですが、面倒臭そうなので私は今のところこのやり方でいってます。ラズパイは消費電力も少ないらしいし。(Herokuってやつが良さそうなので、試してみて良ければ記事更新します)

もっと簡単に作れるサイトもあるようですが、短くて30分おきにしかツイートできないようなので、私は使いませんでした。それくらいの間隔で充分というなら便利に使えそうです。なので貼っておきます。

 twittbot - enjoy

 

注意事項

Twitterの規約はしっかり読んでおきましょう。うっかりするとbotだけでなく、通常利用のアカウントまで凍結される恐れがあります。

The Twitter Rules | Twitter Help Center

この中に気になる事項があって、複数アカウント取得するのはもしや禁止なのでは?と思ったのですが、以下のサイトによると、攻撃的なアカウントでなければ大丈夫なようです。人を傷つけることのないbotを作り、楽しいTwitterライフを!

Twitterルール改定──人種や性的指向へのヘイト行為や脅迫行為など、禁止事項が詳細に - ITmedia NEWS

 

参考サイト

かなり参考にさせてもらいました。わかりやすいです。

 PythonでTwitterしてみた - Qiita