5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

MYJLabAdvent Calendar 2023

Day 5

Lineに予定を自動で送って管理しよう!

Last updated at Posted at 2023-12-04

はじめに

アドベントカレンダー5日目、担当は、桃山です。
昨日は、岡田さんのpaiza就活についての記事でした!私はpaiza就活はやっていなかったのですが、paizaやLeetCodeをテスト対策で解いていたのを思い出しました。就活頑張ってください📣!

アドベントカレンダーは2年目!あっという間の1年でした。
残る12月と、春休み、学生生活を謳歌しようと思います!

作るもの

今日のアドベントカレンダーでは、私の使っている便利な機能を紹介したいと思います。

カレンダーに入っている共有したい予定を、GASとLINE notifyを用いて、グループLINEに毎日通知するものです!

コードもシステムの機能も簡単ではあるので、宮治研究室の人には物足りない可能性はありますが、だからこそ便利なのでぜひやってほしい!と思い記事にさせていだきます。

※ちなみに、共有カレンダーにTimeTreeを使っていたのですが、APIが2023年12月22日(金)でサービス終了になってしまうみたいです( ; ; )
今回は急遽Googleカレンダーから取ってくることにしました。便利な共有カレンダーアプリがあれば教えてください。

システム構成

システム構成はこのようになっています

スクリーンショット 2023-12-03 14.05.32.png

  • Google App Scriptが毎日決まった時間に作動する
  • カレンダーから当日の予定を取得する
  • 予定をLINE Notifyに送信
  • LINEグループで予定が見れる

実装

カレンダーの設定

今回は、急遽Googleカレンダーに変更したため、私1人の予定をラインに転送する実装になっています。
実際に家族・友達で使う場合はファミリーカレンダーを使ったり、カレンダーを共有してもらう作業が必要になります!

Googleファミリーカレンダー

LINE notifyの設定

  1. 上記のページから、LINEアプリで登録しているメールアドレスとパスワードでログインする
    ログインが完了し、LINE Notifyから通知が来ていればLINE Notifyとの連携は完了

  2. マイページからアクセストークンの発行(開発者向け)のトークンを発行するをクリックし、連携したいグループを選択する
    (今回は家族のラインに共有という想定ですが、個人のチャットに転送してリマインダーとしても活用可能です)

  3. トークンがコピーできる画面が表示されるので、トークンをコピーして保持しておく

  4. LINE上でLINE Notifyの公式アカウントを友達追加し、送りたいトークルーム・グループなどに招待しておく

GAS

コード

// 1.メインの処理(ここで他の関数を呼び出し)
function notifyTodayEvents() {
  const events = getCalendar()
  console.log(events)
  var message = "今日のはなこの予定\n\n" + createMessage(events);//はなこにしていますが、自由にタイトルを変えてください
  console.log(message)
  sendMessageToLine(message);
}

// 日付の表示形式を変える関数(2のカレンダーで使用)
function formatDate(inputDate) {
  const options = {
    month: '2-digit',
    day: '2-digit',
    weekday: 'short', 
    hour: '2-digit',
    minute: '2-digit',
    hour12: false,
    timeZone: 'Asia/Tokyo',
  };
  const formattedDate = new Date(inputDate).toLocaleString('ja-JP', options);
  return formattedDate.replace(/,/g, '');
}

// 2.カレンダーの情報取得
function getCalendar() { 
  var myCalendar = CalendarApp.getCalendarById("**************");//カレンダーidはGoogleのマイカレンダーの設定から確認可能
  // var motherCalender = CalendarApp.getCalendarById("");// 他の人のカレンダーを追加すれば、その予定も送信可能
  
  // 今日の日付
  var today = new Date();
  today.setHours(0, 0, 0, 0);

  // 明日の日付
  var tomorrow = new Date(today);
  tomorrow.setDate(today.getDate() + 1);
  
  //今日のイベントを取得
  var myEvents = myCalendar.getEvents(today, tomorrow);

  var Events = []; 
  for (var i = 0; i < myEvents.length; i++) {
    var event = myEvents[i];
     //今回はイベントタイトル、時間を取得(他の情報も追加すれば取得することができます)
      var eventData = {
        title: event.getTitle(),
        startTime: event.getStartTime(),
        endTime: event.getEndTime(),
        name: "はなこ",//複数のカレンダーを追加する場合、名前を入れるとわかりやすいです
      };
      console.log(eventData)
      Events.push(eventData);
  }
  return Events;
}

//3.メッセージの作成
function createMessage(events) {
  var message = '';
  var eventsSize = events.length;

  //予定がない場合のメッセージ
  if (eventsSize === 0) {
    return message += "今日は予定がないよ";
  }

  events.forEach(function(event, index) {
    console.log("event",event)
    let title = event.title;
    let startDate = formatDate(event.startTime);
    let endDate = formatDate(event.endTime);
    let name = event.name;
    message +="名前:" + name +"\n予定:"+ title+"\n" + startDate + ' - ' + endDate ;

    if (index < eventsSize - 1) message += "\n\n";
  });

  return message;
}


// 4.LINE Notifyにメッセージを送信
function sendMessageToLine(message) {
  var url = 'https://notify-api.line.me/api/notify';
  var payload = "message=" + message;
  lineNotifyAPI(url, 'post', payload);
}

function lineNotifyAPI(url, method, payload){
  var accessToken = "*******************";//ここにLineで発行したトークンを入れる
  var headers = {
   'Authorization': 'Bearer '+ accessToken
  };
  var options = {
     "method": method,
     "headers": headers,
     "payload": payload
  };

  return UrlFetchApp.fetch(url, options);
}


トリガーの設定

  1. Gasのメニューからトリガーページに移動
  2. トリガーを通知してほしい時間に設定する
    1日1回6時から7時の間に通知するように設定しました

トリガー設定画像

実際のLINE

実際のLINE例

このように通知が来ます!

まとめ

このシステムのおかげで予定の共有が便利になりました。

私はLINE Notifyを用いて、大事なメールもLINEに転送しています。
自分が困っていることなどに合わせてぜひ実装してみてください!(ChatGPTを使えばある程度の変更は対応してくれるはずです)

今年ももう少しですが、よろしくお願いします!みんなで忘年会したいですね

参考

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?