[GoogleAppsScript] スケジュールをLINEに通知する

# はじめに
LINE Notifyを使用してスケジュールを通知するBOTを作成しました。
<img width="237" alt="IMG_5272_1.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50563/62854de2-845d-d392-815d-e01de2bb8e07.png">

GoogleAppsScript（GAS）にて1日1回通知プログラムを実行します。そのプログラムでは、Googleカレンダーからその日のスケジュールを取得して、[LINE Notify](https://notify-bot.line.me/ja/)に通知します。
![SoWkIImgAStDuNBFpq_FINKiA2WEJYxAB2XHqBLJG1UpKZ1yDdsfuTFPyrvitVwqUofNOd99PbbYIIg6IYu51Mm6FkrTyBYnvMLhxvFz2wqKt5r35FGpyeloYvFp2rA1Mc36eQW3YcCnp4PN5zKqAEzPS-lJ1Hk1Ub9IiPg6ms5AFfv-hWf--IMPQPLALWfwUde1_i50r-M1HRXIKd7x52Q.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50563/c63bcb35-980f-7b04-2a83-4ffef8c63d85.png)

# LINE Notify
- [詳しくはこちら](https://qiita.com/yun_bow/items/cc1f3c45c2d86e39c6f7)

# GoogleAppsScript
1. GoogleAppsScriptを開いて、以下のスクリプトを実装します。`LINE_NOTIFY_TOKEN`にLINE Notifyで発行したトークンを指定する。

```JavaScript:main.gs
/**
 * スケジュール通知BOT
 */
const LINE_NOTIFY_TOKEN = '*****'; // LINE NOTIFY用のアクセストークン 
const WEEKDAY = ["日", "月", "火", "水", "木", "金", "土"];

/**
 * メイン処理
 */
function main() {
    try {
        let nowDt = new Date();
        let dt = Utilities.formatDate(nowDt, 'Asia/Tokyo', `MM/dd(${WEEKDAY[nowDt.getDay()]})`);
        let message = `\n今日の予定だよ!!\n\n--- ${dt} ----\n`;

        let userMessage = '';
        let calendarList = CalendarApp.getAllCalendars();
        for (let i in calendarList) {
            let calendar = calendarList[i];
            let eventMessage = '';
            let eventList = calendar.getEventsForDay(nowDt);
            for (let j in eventList) {
                let event = eventList[j];
                eventMessage += `${getEventTime(event.getStartTime())} - ${getEventTime(event.getEndTime())} ${event.getTitle()}\n`;
            }
            if (0 < eventMessage.length) {
                userMessage += `\n< ${calendar.getName()} >\n`;
                userMessage += eventMessage;
            }
        }
        if (0 < userMessage.length) {
            message += userMessage;
        } else {
            message += '今日の予定はありません。';
        }
        sendLineNotify(message);

    } catch (e) {
        console.error(e.stack);
    }
}

/**
 * イベント時刻を取得する
 * @param {String} str 
 */
function getEventTime(str) {
    return Utilities.formatDate(str, 'Asia/Tokyo', 'HH:mm');
}

/**
 * LINEにメッセージを送信する
 * @param {String} message メッセージ 
 */
function sendLineNotify(message) {
    let url = 'https://notify-api.line.me/api/notify';
    let options = {
        'method': 'post',
        'headers': {
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'Authorization': `Bearer ${LINE_NOTIFY_TOKEN}`
        },
        'payload': `message=${message}`
    };
    let response = UrlFetchApp.fetch(url, options);
    return JSON.parse(response.getContentText('UTF-8'));
}
```
`CalendarApp.getAllCalendars()`でGoogleカレンダーの情報を取得することができます。`calendar.getEventsForDay()`でカレンダーの予定を取得することができます。

# 参考リンク
- [【GAS修行④】明日のスケジュール報告で忘れ癖解消BOTをLINE Notifyで作成](https://qiita.com/t_o_d/items/eb03325f37e837de44ea)
- [家族のGoogleカレンダーの予定をLINEに通知する](https://qiita.com/monoqlock/items/55bf4860003ab1405a7f)
- [【GAS】Googleカレンダーの予定をLINEで受け取る](https://qiita.com/ikei/items/8c837444dcab6c0e4629)
- [10分でできる ~ Googleカレンダー[ 自社版 ]を作ってみよう ~ [ Google Apps Script ]](https://qiita.com/ykhirao/items/09ebaedd0f6f0438f422) 

# さいごに
ソースコードをGitHubに公開しています。

- [ソースファイルはこちら](https://github.com/yunbow/GoogleAppsScript-LINE-Schedule)

以上です。