🤖

Raspberry PiとNode.jsでTwitter botを作る

2021/07/04に公開約2,900字

ゴール

Twitter APIを利用し、Raspberry Piからcronで定期的にツイートをするbotをNode.jsで作ります。

環境

機器: Raspberry Pi 4 modelB
OS: Raspberry Pi OS
エディタ: VSCode(最近VSCodeがラズパイに正式対応しました)
操作方法: MacからSSH接続 -> tightVNCでリモートデスクトップ化

手順

①Twitter Developerに登録 -> API利用申請

  1. Twitterにて、botに使用したいアカウントを作成します。
  2. Twitter Develperにアクセスし、bot用に作成したTwitterアカウントでサインインします。
  3. Developer Portalに移動 -> Projects&Appsから「+Create App」でTwitter Appを作成します。
  4. サイトの指示に従って、利用目的, 利用者情報, APIの利用目的等を記入していきます。(全て英語で記入する必要があります。DeepLなどを活用すると便利かもしれません)
  5. Submit Applicationまでいって無事申請が通れば完了です!

②API Key, Access Tokenを取得

  1. 「Create Project」からTwitter Projectを作成 -> アプリ名やアプリの概要(botならどのようなbotか)などを入力していきます。
  2. 作成後、左ドロワーメニューの「Projects&Apps」-> Project名 -> 鍵マーク へ移動
  3. 鍵の管理ページに移動後、Authentication Tokens -> Permissionsを見ると最初はRead Onlyになっていると思います。これをRead and Writeに変えてください。Permissionを変更すると鍵が作り変えられるので、Permissionを変更する前の鍵を控えておく必要はありません。
  4. Permissionを変更後、API Key, API Key Secret, Access Token, Access Token Secretの4つをそれぞれRegenerateし、忘れないよう控えておいてください。
  5. これでTwitter Developerでの作業は完了です!

③必要なnodeモジュールをインストール

Raspberry Pi OSの場合は、Node.jsとnpmがプリインストールされています。
ディレクトリを作成し、npm init -> 必要なモジュールをインストールしていきます。

$ npm init
$ npm i dotenv
$ npm i twitter

dotenv -> .envファイルに定義された値(ここではAPI Keyなど)を環境変数として使うことができます。
twitter -> Twitter APIを叩く用のクライアントライブラリ。

④.envファイルにAPI Key等を書く

.envファイルを作成し、Twitter Developerで控えておいた4つの鍵を書いておきます。

.env
CONSUMER_KEY=API Keyをここに入れます
CONSUMER_SECRET=API Key Secretをここに入れます
ACCESS_TOKEN_KEY=Access Tokenをここに入れます
ACCESS_TOKEN_SECRET=Access Token Secretをここに入れます

⑤tweet投稿処理を書く

tweetする内容は適宜変えてください。

bot.js
require('dotenv').config();
const twitter = require('twitter');

const client = new twitter({
    consumer_key: process.env.CONSUMER_KEY,
    consumer_secret: process.env.CONSUMER_SECRET,
    access_token_key: process.env.ACCESS_TOKEN_KEY,
    access_token_secret: process.env.ACCESS_TOKEN_SECRET
});

const text = 'Test tweet'

client.post('statuses/update', { status: text }, 
    function(error, tweet) {
        if (!error) {
            console.log(tweet);
        }
    }
)

これで実際にツイートできるようになりました!
試しに

node bot.js

と打って、実際にツイートが反映しているか確認しておきます。

⑥cronの設定

あとはnode bot.jsのコマンドをcronで定期実行するようにすれば完成です。
nodeコマンドはpackage.jsonのあるディレクトリまで移動してからでないと打てないので、注意してください。
また、nodeコマンドを打つためにnodeのフルパスが必要です。

$ which node

上のコマンドで、nodeのフルパスを調べることができます。
crontab -e でcronを登録します。
以下のような感じです。

$ crontab -e
*/[何分毎に呟くか] * * * * cd [ディレクトリ名]; [which nodeで調べたフルパス] [bot.jsのフルパス]

以下は例です。30分毎にnode bot.jsを実行します。

*/30 * * * * cd /home/pi/Desktop/HogeBot; /usr/bin/node /home/pi/Desktop/HogeBot/bot.js

⑦完成

以下のコマンドで登録されたcronを確認することができます。

$ crontab -l

以上で完成です!

Discussion

ログインするとコメントできます