対象者
- インフラ勉強会に参加している人
- インフラ勉強会に興味がある人
- とりあえずGASでなにか作ってみたい人
背景
最近インフラ勉強会(Discordを使用して行われるオンラインの勉強会)に参加することが増えてきたので、その日開催される勉強会のタイトルと時間を毎日LINEに通知するようにGoogleAppsScriptとLineNotifyを使って組んでみました。
準備
Googleアカウントの発行
Googleアカウントの発行(GmailもっていればOK)をしましょう。
アクセストークン取得
まずLineNotifyのアクセストークンをこちらから発行してください。
実装
Googleスプレッドシートで新規シートを開いてツールからスクリプトエディタを選択します。Google Apps Scriptのエディタが開きますので、下記コードを実装します。
infra.gs
var LINE_NOTIFY_TOKEN = [取得したアクセストークン];
var LINE_NOTIFY_API = "https://notify-api.line.me/api/notify";
var INFRA_CALENDAR = "https://wp.infra-workshop.tech/events/";
function sendInfraSchedule() {
var today = new Date();
var targetYMD = today.getYear() + "-" + ("0" + (today.getMonth()+1)).slice(-2) + "-" + ("0" + today.getDate()).slice(-2); //YYYY-MM-DD形式
var bodyItem = ["-本日のインフラ勉強会-"];
var targetURL = INFRA_CALENDAR + targetYMD;
var searchTagTitle = "<h3 class=\"tribe-events-list-event-title summary\">";
var searchTagTitleStart = " rel=\"bookmark\">";
var searchTagA = "\t</a>";
var searchTagDateStart = "<span class=\"tribe-event-date-start\">";
var searchTagDateEnd = "\t</div>";
var response = UrlFetchApp.fetch(targetURL);
var html = response.getContentText("UTF-8");
//タイトルの個数取得
var num = html.split(searchTagTitle).length - 1;
var index = 0;
for (var i = 0; i < num; i++) {
//タイトルの取得
index = html.indexOf(searchTagTitle);
if (index !== -1) {
html = html.substring(index + searchTagTitle.length);
index = html.indexOf(searchTagTitleStart);
if (index !== -1) {
html = html.substring(index + searchTagTitleStart.length);
index = html.indexOf(searchTagA);
var title = "";
if (index !== -1) {
title = html.substring(0, index).trim();
}
}
}
//開始時刻の取得
index = html.indexOf(searchTagDateStart);
if (index !== -1) {
html = html.substring(index + searchTagDateStart.length);
index = html.indexOf(searchTagDateEnd);
var date = "";
if (index !== -1) {
//タグを削除した状態の時刻を抽出
date = html.substring(0, index).trim().replace(/<("[^"]*"|'[^']*'|[^'">])*>/g,"");
}
}
bodyItem.push(date + " > " + title);
}
if (bodyItem.length == 1) {
bodyItem.push("今日の予定はありません。");
}
_sendMessage(bodyItem.join("\n"));
}
function _sendMessage(msg) {
// 認証情報のセット
var headers = {
"Authorization": "Bearer " + LINE_NOTIFY_TOKEN
};
// メッセージをセット
var payload = {
"message": msg
};
// 送信情報をまとめる
var options = {
'method' : 'post',
'contentType' : 'application/x-www-form-urlencoded',
'headers': headers,
'payload' : payload
};
Logger.log(options);
// 実際に送信する
var response = UrlFetchApp.fetch(LINE_NOTIFY_API, options);
Logger.log(response);
}
なんかスマートじゃないコードですが、とりあえず動きます^^;
ご指摘いただければリファクタリングしたいと思います。
トリガーの設定
- Google Apps Script の「編集」 - 「現在のプロジェクトのトリガー」を選択
- 新しいトリガーを追加
- 実行欄にsendInfraSchedule
- イベントに 「時間主導型」「日タイマー」「午前8時~9時」に設定 ※時間はお好みで
以上で完了です!
それでは良いインフラ勉強会ライフを!