百人一首Botを作ってみた(GAS + SendGrid)
Ⅰ.きっかけ
GAS初心者向けのとある記事1に、「Botの作成は『コストパーヨロコビ』が大きいので初心者にとってもオススメ」と書いてあるのを見て、「これは楽しそうだからやるしかない!」と思ってトライしました。
Ⅱ.Google Apps Script(GAS)とは2
- Google製のサービスのプログラム環境
- 簡単なスクリプトを記述し、Googleのサーバーで実行することで、Googleが提供する各種のサービスを操り、独自のWebアプリを実現できる
- Googleアカウントがあり、GoogleドライブやGoogleスプレッドシートなどが利用できれば使える
Ⅱ.方針
- Botのテーマは個人的に好きな百人一首とする
- 百人一首の歌を1分おきに1首ずつ、自動で送信する
- 参考とした記事では通知先としてChatworkが使われていたが、今回はSendGridを利用してメール通知を行う
Ⅲ.使用したもの
Ⅳ.手順
1.百人一首のデータを準備する
(1)スプレッドシートを新規で開く
2.スクリプトを作成・保存する
(2)開いているシートのメニューから「ツール > スクリプトエディタ」を選択し、プロジェクトに名前を付ける(今回は「百人一首Bot」とした)
(3)以下のコードを記述する
function myFunction() { /*アクティブな(スクリプトがバインドしている)スプレッドシートを Spreadsheetオブジェクトとして取得する(今回は「百人一首の一覧」のシート)*/ var sheet = SpreadsheetApp.getActiveSheet(); //最終行の行数を取得する(今回は「見出し行+歌100首」で101行) var lastRow = sheet.getLastRow(); for(var i = 2; i <= lastRow; i++){ //もしシート(i, 3)の値が空白ならば if(!sheet.getRange(i, 3).getValue()){ //(i, 1)を起点として1行×2列分のデータを取得する var values = sheet.getRange(i, 1, 1, 2).getValues(); //メールの本文を記述する var body = "" body += values[0][0] + '\n'; //歌 body += values[0][1]; //作者 //メールの宛先、件名、送信元、差出人、本文を指定する sendMail("宛先メールアドレス(To)を入力する", "百人一首Bot", "送信元メールアドレス(From)を入力する", "しいすけ", body); //送信を終えた歌の横に「送信済」と入力する sheet.getRange(i, 3).setValue("送信済"); break; } } //最終行まで行ったら、すべての行の「送信済」を削除する if(i >= lastRow){ sheet.getRange(2, 3, lastRow -1).clearContent(); } } //SendGridでメールを送信する SEND_GRID_ENDPOINT = "https://api.sendgrid.com/v3/mail/send"; SEND_GRID_API_KEY = "作成したAPIキーを貼り付ける"; function sendMail(to, subject, from, from_name, body_text){ var body = { "personalizations": [ { "to": [ { "email": to } ], "bcc":[ { "email": from } ], "subject": subject } ], "from": { "email": from, "name": from_name }, "content": [ { "type": "text", "value": body_text } ] } var payload = JSON.stringify(body); UrlFetchApp.fetch(SEND_GRID_ENDPOINT, { method: "POST", headers: { "Content-Type": "application/json", "Authorization": "Bearer " + SEND_GRID_API_KEY}, payload: payload }); }
(4)メニューの「ファイル > 保存」または「Ctrl + S」(Macの場合は command + S)で保存する
3.メールの送信タイミングを設定する
(1)メニューの「編集 > 現在のプロジェクトのトリガー」を選択し、画面右下の「トリガーを追加」を選択する
(2)「イベントのソースを選択」で「時間主導型」を、「時間ベースのトリガーのタイプを選択」で「分ベースのタイマー」を、「時間の間隔を選択(分)」で「1分おき」をそれぞれ選択し、「保存」をクリックする
4.スクリプトを実行する
(1)メニューの「実行 > 関数を実行」または「Ctrl + R」(Macの場合は command + R)を押す
(2)「承認が必要です」というダイアログが表示されるので、「承認を許可」→自分のアカウントを選択→「詳細 > 百人一首Bot(安全ではないページ)に移動」→「許可」という手順を踏む(初回の実行時のみ)5
(3)1分おきにメールが届き、スプレッドシートでは、送信後の歌の横に「送信済」と記載されていることを確認する
<届いたメール>
<実行後のスプレッドシート>
Ⅴ.感想
今回の作業はとても手軽で、半日ほどで完成しました。そしてイメージ通りのものができた時は嬉しくて、一人で思わずガッツポーズしていました。「コストパーヨロコビが大きい」というのは本当でした(^^)
完成後に、「メール送信部分はGmailやOutlookを使う方が簡単だったのではないか?」と気づいたので、次はそちらを試したいと思います。
Ⅵ.参考記事
@erb_owl 氏「GASでSendGridを使ってメールを1日100件以上送信する方法」