概要
Google Apps Script を用いて,与えられた整数が素数かどうかを判定してくれる LINE Bot を作成する.
詳細
この記事の投稿日2020年5月11日は素数日(20200511は素数)である.前回の素数日2020年4月29日に投稿した記事に引き続き,本稿ではトークで送信した整数が素数かどうか教えてくれる LINE Bot を作成する手順を述べる.
準備
LINE Developers でチャネル作成
- https://developers.line.biz/console/ にアクセス1
- 適当な LINE アカウントでログイン
- Welcome to the LINE Developers console! 画面下部にある Create a new provider をクリック
- Provider name を入力し,Create をクリック
- This provider doesn't have any channels yet 画面の Create a Messaging API channel をクリック
- 作成するチャネルの情報を入力,各規約に目を通して同意
- optional(任意)とある項目は入力しなくても良い
- 個人作成の場合,Category(大業種)は「個人」,Subcategory(小業種)は「個人(その他)」で問題ない
- 「LINE公式アカウント 利用規約」「LINE公式アカウントAPI利用規約」を読み,同意する
- 入力や同意が済んだら,いちばん下の Create をクリック
- 「情報利用に関する同意について」が表示されるので,読んだ上で同意する
- チャネル基本設定が表示されたらMessaging API設定をクリック
- 設定画面にある QR コードを LINE で読み取り,作成したチャネルに対応する LINE 公式アカウントを友だち追加しておく
- いちばん下にある**チャネルアクセストークン(ロングターム)**を発行し,メモしておく
Google Apps Script のプロジェクト作成
- Google ドライブ上で 新規>その他>Google Apps Script を選択2し,GAS のプロジェクトを作成
- エディタ画面で既に書かれているもの(myFunction)を消して以下のコードを入力する.その際,先ほどメモした**チャネルアクセストークン(ロングターム)**を
accessToken
の箇所に書いておく
コード.gs
// 素数かどうか判定する関数
function is_prime(n) {
var num = Math.abs(n);
var result = true;
if(num <= 1) {
result = false;
}
else if(num > 2) {
for(let i = 2; i <= Math.ceil(Math.sqrt(num)); i ++) {
if(num % i == 0) {
result = false;
break;
}
}
}
return result;
}
// LINE Botにメッセージ等が送られると発動する関数
function doPost(event) {
var lineJson = JSON.parse(event.postData.contents); // LINE Botに送信されたメッセージ情報
var message = lineJson.events[0].message.text; // メッセージ情報の中からメッセージのみを抽出
// メッセージが整数であれば素数判定を行う(整数でなければメッセージをオウム返しする)
if(!isNaN(parseInt(message, 10))) {
var n = parseInt(message, 10);
if(is_prime(n)) {
message = n + "は素数です";
}
else {
message = n + "は素数ではありません";
}
}
// LINE Botにメッセージを返信する準備
var accessToken = ""; // チャネルアクセストークン(ロングターム)を "" 内に記述
var replyToken = lineJson.events[0].replyToken;
var url = "https://api.line.me/v2/bot/message/reply";
var headers = {
"Content-Type" : "application/json; charset=UTF-8",
"Authorization": "Bearer " + accessToken,
};
var postData = {
"replyToken": replyToken,
"messages": [
{
"type": "text",
"text": message,
}
]
};
var options = {
"method" : "post",
"headers": headers,
"payload": JSON.stringify(postData)
};
UrlFetchApp.fetch(url, options); // メッセージを返信
}
ウェブアプリケーションとして公開する
- GAS のエディタ画面で公開>ウェブ アプリケーションとして導入を選択
- Execute the app as: は Me(自分),Who has access to the app: は Anyone, even anonymousを選択し,Deploy をクリック
- Current web app URL が発行されるので,メモしておく
- 上記で記入したコードが初めて実行される際には Google アカウントへのアクセス許可を求められるので,許可する3
Webhook の設定
- 再び LINE Developers のチャネル画面で Messaging API設定を開く
- Webhook URL に上記でメモした Current web app URL を入力する
- Webhookの利用がオフになっていたら,オンにする
素数判定をさせてみる
ここまでできたら,作成したチャネルに対応する LINE 公式アカウントのトークルームで適当な整数を送信してみる.素数かどうかの判定が返ってくれば成功である.
# 整数だけのメッセージを送る --> 素数判定の結果が返ってくる
20200510 --> 20200510は素数ではありません
20200511 --> 20200511は素数です
# 先頭が整数のメッセージを送る --> 先頭の整数の素数判定が行われる
2020年5月11日 --> 2020は素数ではありません
# 先頭が整数でないメッセージを送る --> メッセージをオウム返しされる
ぴえん🥺 --> ぴえん🥺
時に、西暦2015年 --> 時に、西暦2015年
注意
Google Apps Script のコードを書き換えて LINE Bot の挙動に反映させるためには,変更の度にウェブアプリケーションとして公開する必要がある.具体的には次の手順を踏む.
- GAS のエディタ画面で公開>ウェブ アプリケーションとして導入を選択
- Project version を New に変更し,更新をクリック
参考
- GASとLINE Messaging APIでpushメッセージのLINEbotを作る! - Qiita
- LINE BOTをGASで作成 - Qiita
- Google Apps Script 文字列を整数に変換、文字列が整数か判定する
- Messaging APIリファレンス | LINE Developers