Raspberry PiとNode.jsでTwitter botを作る
ゴール
Twitter APIを利用し、Raspberry Piからcronで定期的にツイートをするbotをNode.jsで作ります。
環境
機器: Raspberry Pi 4 modelB
OS: Raspberry Pi OS
エディタ: VSCode(最近VSCodeがラズパイに正式対応しました)
操作方法: MacからSSH接続 -> tightVNCでリモートデスクトップ化
手順
①Twitter Developerに登録 -> API利用申請
- Twitterにて、botに使用したいアカウントを作成します。
- Twitter Develperにアクセスし、bot用に作成したTwitterアカウントでサインインします。
- Developer Portalに移動 -> Projects&Appsから「+Create App」でTwitter Appを作成します。
- サイトの指示に従って、利用目的, 利用者情報, APIの利用目的等を記入していきます。(全て英語で記入する必要があります。DeepLなどを活用すると便利かもしれません)
- Submit Applicationまでいって無事申請が通れば完了です!
②API Key, Access Tokenを取得
- 「Create Project」からTwitter Projectを作成 -> アプリ名やアプリの概要(botならどのようなbotか)などを入力していきます。
- 作成後、左ドロワーメニューの「Projects&Apps」-> Project名 -> 鍵マーク へ移動
- 鍵の管理ページに移動後、Authentication Tokens -> Permissionsを見ると最初はRead Onlyになっていると思います。これをRead and Writeに変えてください。Permissionを変更すると鍵が作り変えられるので、Permissionを変更する前の鍵を控えておく必要はありません。
- Permissionを変更後、API Key, API Key Secret, Access Token, Access Token Secretの4つをそれぞれRegenerateし、忘れないよう控えておいてください。
- これで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つの鍵を書いておきます。
CONSUMER_KEY=API Keyをここに入れます
CONSUMER_SECRET=API Key Secretをここに入れます
ACCESS_TOKEN_KEY=Access Tokenをここに入れます
ACCESS_TOKEN_SECRET=Access Token Secretをここに入れます
⑤tweet投稿処理を書く
tweetする内容は適宜変えてください。
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