前回は、Bot開発の準備まで行いましたので、
ここからは、実際にサーバ上でBotを稼働させるまでをご紹介します。
なお、今回はすでに作成済みのBotをもとに紹介いたします。
画像が手順とは異なる場合がございますので、ご了承ください。
ユーザの作成・パーミッションの設定は、各自の環境に合わせて設定してください。
環境などはこちら
サーバ | CentOS Linux release 7.8 |
その他 | Node.js |
Twitter APIモジュール | |
Postgres モジュール |
環境準備
ディレクトリの作成
まずは、Bot用のディレクトリを作成しておきましょう。
mkdir /home/Twitter/

Node.js
以下のコマンドにて、Node.jsをインストール
yum install nodejs
確認方法
node -v

Twitterモジュール
ディレクトリを変更
cd /home/Twitter/
Twitterモジュールをインストール
npm install twitter
カレントディレクトリに以下が作成されていれば完了

Postgresモジュール
DBは、PostgreSQLを使用しますので、
Posgres用のモジュールもここでインストールします。
npm install pg
node_modulesディレクトリに、以下のようなpg~ディレクトリが追加されていれば完了です。

Twitter Developer Platform
Twitter Developer Platformへアクセス

Project & Apps → Overview より、プロジェクトを作成します。

プロジェクト名を入力し、

Making a bot を選択し、

プロジェクトの説明を記入し、

アプリ環境を選択し、

- Development
- For new work and in progress features
- 新しい作業および進行中の機能の場合(開発中)
- For new work and in progress features
- Staging
- Used to test out changes
- 変更をテストするために使用されます(テスト中)
- Used to test out changes
- Production
- Used for live products
- ライブ製品に使用(リリース)
- Used for live products
アプリ名を入力し、

ここでAPIキーが発行されます。
それぞれわかるようにメモしておきましょう。
メモしたら、を押して完了しましょう。

続いて、AccessToken キーを取得します。
「Project & Apps」より作成したAppを選択し、下のほうにある「Access Token and Secret」項にて、 を選択し、キーを生成してください、

生成されたキーは、必ずメモしておきましょう。
Botのプログラムに記述します。

開発
メインプログラム
まずは、JavaScriptファイルを用意しましょう。
vim bot.js

必要なものだけ、先に定義しておきましょう。
以下の内容をファイルに記述し、保存します。
require('dotenv').config(); const twitter = require('twitter'); const { Client } = require('pg') 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 }); function dbConnection(){ return new Client ({ user: "DBユーザ", password: "DBパスワード", host: "DBホスト(もしくはIPアドレス)", port: "DBポート", database: "DB名" }); }
以下のコマンドで保存し、Viエディタを終了しておきます。
:qw
Twitter APIキーを設定
以下のコマンドにて、.envファイルを作成します。
vim .env
上記までに取得したキーを以下の通りに設定します。
CONSUMER_KEY="API Key" CONSUMER_SECRET="API Key Secret" ACCESS_TOKEN_KEY="Access Token" ACCESS_TOKEN_SECRET="Access Token Secret"
以下のコマンドで保存し、Viエディタを終了しましょう。
:qw
Tweet方法
以下がtweetするプログラムの一部になります。
var proc = async function() { // メッセージ生成 var text = 'テスト Tweet'; // ツイート client.post('statuses/update', { status: text }, function(error, tweet) { console.log(tweet); } ); } proc();
DBから取得した情報をtweet
var proc = async function() { var clientDb = dbConnection(); clientDb.connect(); // DBよりデータ取得 var result = await selectDatabase( clientDb ); // DBより取得したデータを、メッセージにセット var text = ''; for( int i = 0; i < result.length; i++ ){ text += reuslt[i].id + ":" + result[i].value + '\n'; } // 取得した内容をtweetする client.post('statuses/update', { status: text }, function(error, tweet) { console.log(tweet); } ); } procc(); /* DBよりデータ取得関数 */ async function selectDatabase( clientDb ){ var ret_array = []; const query = "SELECT id, value FROM SAMPLE_TABLE"; await clientDb.query(query) .then( res => { for( var i = 0; i < res.rows.length; i++ ){ var record = { "id" : res.rows[i].id, "value" : res.rows[i].value } ret_array.push(record); } }) .catch( e => { console.log("error"); throw e; }) return ret_array; }
最終形態
require('dotenv').config(); const twitter = require('twitter'); const { Client } = require('pg') 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 }); function dbConnection(){ return new Client ({ user: "DBユーザ", password: "DBパスワード", host: "DBホスト(もしくはIPアドレス)", port: "DBポート", database: "DB名" }); } var proc = async function() { // DBコネクション var clientDb = dbConnection(); clientDb.connect();// DBよりデータ取得
var result = await selectDatabase( clientDb );
// DBより取得したデータを、メッセージにセット
var text = '';
for( int i = 0; i < result.length; i++ ){
text += reuslt[i].id + ":" + result[i].value + '\n';
}
// 取得した内容をtweetする
client.post('statuses/update', { status: text },
function(error, tweet) {
console.log(tweet);
}
);
} procc(); /* DBよりデータ取得関数 */ async function selectDatabase( clientDb ){ var ret_array = []; // SQL const query = "SELECT id, value FROM SAMPLE_TABLE"; // SQL実行await clientDb.query(query)
.then( res => {
// 取得分ループfor( var i = 0; i < res.rows.length; i++ ){
var record = {
"id" : res.rows[i].id,
"value" : res.rows[i].valu
}
// 取得データを変数へセットret_array.push(record);
}
})
.catch( e => {
console.log("error");
throw e;
})
return ret_array;
}
起動設定
ログ出力
以下のコマンドで、ログディレクトリを作成しておく
mkdir log
起動シェル
起動するのが面倒なので、シェルで実行させる
vim start.sh
内容は以下の通り
#!/bin/sh /usr/local/bin/node /home/Twitter/bot.js >> /home/Twitter/log/out.log 2>> /home/Twitter/log/error.log &
自動起動
定期的にTweetされるよう、以下のコマンドでcronへ登録する
crontab -e
設定値
(今回は、毎日18:00に起動するようセット)
0 18 * * * /home/Twitter/start.sh >> /home/Twitter/log/cron.log
以下のコマンドで保存して、cronエディタを終了する
:qw
以上で、一通りの設定が完了です。
実際にテストする際には、cronからではなく、/home/Twitter/start.sh を実行することで、
作成したアカウントでtweetされていることが確認できるかと思います。
なお、本ページで解説した内容は、実際に稼働しているものの一部を抽出し、
カスタマイズしたものになります。
これ自体での稼働確認はしておりませんので、
万が一不具合がございましたらご連絡ください。
コメント