【GAS】Googleカレンダーの予定をLINEで通知

プログラミング

はじめに

GoogleAppsScriptLINE Notify API を使うことで、毎日指定した時刻に自動で予定の内容を通知することができます。

普段使ってるGoogleカレンダーの予定をLINEで通知できたら便利だと思って作ってみました。

Google Apps Script とは

GoogleAppsScript(GAS)は、GoogleカレンダーやGmail、スプレッドシートなどを連携し様々な業務を自動化できるJavaScriptベースのプラットフォームです。

Googleアカウントがあれば誰でも無料で使うことができます。

LINE Notify API とは

LINE Notifyにログインしてアクセストークを発行することでGASなどのWebサービスからメッセージを受け取れるようになります。こちらも無料で利用することができます。

では、実際に作っていきます。

1. LINEトークンを発行する

LINE NotifyにアクセスしてLINEアカウントでログインしてください。

マイページに移動し、アクセストークンの発行からトークンを発行していきます。

「1:1でLINE Notifyから通知を受け取る」を選び、発行します。

トークン名は何でもいいですが、今回はGASとしておきます。

発行したアクセストークンは後から使うのでコピーしておいてください。

2. Google Drive からプロジェクトを作成する

まず、GoogleアカウントにログインしてGoogleDriveにアクセスしてください。

「新規」から「Google Apps Script」を選択します。「Google Apps Script」がない場合は下の「アプリを追加」から追加してください。

コード編集画面が表示されたら、下記のコードをコピーして貼り付けてください。

const  CALENDER_GMAIL = PropertiesService.getScriptProperties().getProperty('CALENDER_GMAIL');
const  token = PropertiesService.getScriptProperties().getProperty('ACCESS_TOKEN');
const lineNotifyApi = 'https://notify-api.line.me/api/notify';

function handler() {
  const currentDate = new Date();

  let fromDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate(), 0, 0, 0);
  fromDate.setDate(fromDate.getDate() + 1);

  let toDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate(), 23, 59, 59);
  toDate.setDate(toDate.getDate() + 1);

  const calendar = CalendarApp.getCalendarById(CALENDER_GMAIL);
  const events = calendar.getEvents(fromDate, toDate);

  for (const event of events) {
    const message = `${event.getTitle()}\n${event.getDescription()}\n${Utilities.formatDate(event.getStartTime(), 'JST', 'yyyy-MM-dd HH:mm')}${Utilities.formatDate(event.getEndTime(), 'JST', 'yyyy-MM-dd HH:mm')}`;

    const options = {
      "method": "post",
      "payload": { "message": message },
      "headers": { "Authorization": "Bearer " + token }
    };

    UrlFetchApp.fetch(lineNotifyApi, options);
  }
}

LINEのアクセストークンやメールアドレスはコードに直書きしたくないため、プロパティサービスを使って保存しておいたものを呼び出しています。

headler関数では、実行した時刻を使って翌日の0時から23時59分までの予定をGoogleカレンダーから取得し、for文で予定ごとにAPIを叩いて通知メッセ―ジを送っています。

当日の朝に予定を通知したい場合は、下記の2行を削除しておいてください。

fromDate.setDate(fromDate.getDate() + 1);
toDate.setDate(toDate.getDate() + 1);

プロパティサービスを使用するには、設定のスクリプトプロパティの部分を編集していきます。

「ACCESS_TOKEN」と「CALENDER_GMAIL」というプロパティを追加し、先程のアクセストークンとGmailアドレスを入力して保存してください。

以上で基本的な設定は完了しました。

3. 実行

Googleカレンダーに予定を追加して実行してみます。

実行する関数がheadlerになっていることを確認して「実行」をクリックしてください。

「承認が必要」と表示された場合は、アカウントを選び「安全ではないページに移動」を選択してアカウントへのアクセスを許可すれば大丈夫です。

ここでLINE Notifyから予定が通知されていればOKです。

「実行」の左にあるボタンから保存してください。

あとは毎日実行されるようにトリガーを設定すれば完成です。

「トリガーを編集」から下記のように設定してください。時刻は好きな時間を選んでください。

おわりに

Google Apps Script と LINE Notify API を使って、毎日指定した時刻に通知が来るようにできました。

GASやLINE Notifyは無料で利用できるのでぜひ作ってみてください。

ここまで読んでいただき、ありがとうございました。

コメント

タイトルとURLをコピーしました