GASで複数のGoogleカレンダーから今日の予定を取得する

GoogleAppsScript(GAS)
スポンサーリンク

みなさんこんにちは。
ノンプログラマーのうえはらです。

今日はGoogle Apps Scriptで複数のカレンダーから今日の予定を取得する方法について、お伝えします。

こちらのブログを参考にしました。

毎朝、当日の予定をGoogleカレンダーから取得してチャットワークに送る
Google Apps Scriptを使ってチャットワークに色々と送ることができます。Googleカレンダーから当日の予定を取得してチャットワークに送る方法についてお伝えしたいと思います。

1つのカレンダーであれば、上記のサイトで十分なのですが、今回は、複数のカレンダーからイベントを取得するので、この部分について解説していきます。

複数のカレンダーから今日の予定を取得する

それでは、複数のカレンダーから今日の予定を取得するスクリプトです。

後で明日の予定も取得するので、それぞれの機能ごとに関数をわけています。

get_Today_Schedule()がメインの関数で、これを実行することで、予定を取得します。

今回はLog出力としています。Ctrl + Enter で確認してください。

/*カレンダーのIDを取得*/
function get_Calendar() {
  var arrCals=[];
  arrCals.push(CalendarApp.getCalendarById('*******@gmail.com'));
  arrCals.push(CalendarApp.getCalendarById('*******@group.calendar.google.com'));//小学校
  arrCals.push(CalendarApp.getCalendarById('*******@group.calendar.google.com'));//中学校
  arrCals.push(CalendarApp.getCalendarById('*******@group.calendar.google.com'));//PTA
  
  return arrCals;
}

/*今日の予定を取得するメインの関数*/
function get_Today_Schedule(){ 
  var arrCals = get_Calendar();//カレンダーID取得
  var date = new Date()  
  var strIntro = "おはようございます。\n今日のうえはら家の予定です。\n" ;
  var strBody = strIntro;
  /*カレンダーの本日のイベント取得*/
  for (var i = 0 ; i< arrCals.length ; i++){
    strBody = strBody + getEvents(arrCals[i],date);
  }
  
  if (strBody == strIntro){
    strBody = "おはようございます。\n今日のうえはら家の予定はありません。\n" ;
  }
  Logger.log(strBody);
}

/*カレンダーのイベント取得*/
function getEvents(Cals,getDate){
  var arrEvents = Cals.getEventsForDay(getDate);
  var strName = Cals.getName();//カレンダーの名前取得
  var strEvents ="";
  for (var i=0; i<arrEvents.length; i++){
    var strTitle = arrEvents[i].getTitle();
    var strStart = _HHmm(arrEvents[i].getStartTime());//開始時刻
    var strEnd = _HHmm(arrEvents[i].getEndTime());//開始時刻
    if (strStart == strEnd){
      strEvents = strEvents + '終日イベント:' + strTitle + ' (' + strName + ')' + '\n';
    }else{
      strEvents = strEvents + strStart + '~' + strEnd+ ':'  + strTitle + ' (' + strName + ')' + '\n';
    }
  }
  return strBody;
}

/*時間の表示変更*/
function _HHmm(str){ 
  return Utilities.formatDate(str,'JST','HH:mm');
}

カレンダーIDの取得

get_Calendar()でカレンダーのIDを取得します。2~10行目です。

自分の場合は、複数のカレンダーから予定を取得したかったので、配列arrCalsにそれぞれのカレンダーのIDを追加しています。

配列への追加はpushを使用します。

配列.push(追加要素)

最後にカレンダーIDの入った配列をメインの関数へ戻します。

カレンダーのイベント取得

getEvents(Cals,getDate)でカレンダーのイベントを取得します。30~45行目です。

複数のカレンダーに対応できるように「Cals」と、今日と明日の予定を取得できるように「getDate」の2つの引数を受け取ります。

複数のカレンダーがあるので、どの予定かわかるようにカレンダーの名前を取得しています。

Calendarオブジェクト.getName()

予定は「開始時刻~終了時刻」の形式で表示するようにしますが、時刻を設定しない終日の場合は開始時刻、終了時刻ともに「00:00」となるので、開始時刻と終了時刻が同じであれば、「終日イベント」と表示するようにしています。

今日の予定を取得するメインの関数

メインの関数はget_Today_Schedule()で13~27行目です。

get_Calendar()でカレンダーIDを、getEvents(Cals,getDate)でカレンダーのイベントを取得して、strEventsに追加しています。

ただ、予定のない日も「今日の予定です。」と表示するのは違和感があるので、予定がなければ、本文を変更するようにしています。

今回は確認として、Log表示としていいます。

まとめ

今回はGoogle Apps Scriptで複数のカレンダーから今日の予定を取得する方法についてお伝えしました。

今はコンソールログに表示しているだけなので、物足りないですね。

次回は翌日の予定を取得する方法をお伝えしようと思ったのですが、先にLINEへ送信する方法を紹介したいと思います。

それでは、次回も宜しくお願いします。

連載目次:GASでGoogleカレンダーの予定をLINEに送る

GASでGoogleカレンダーの予定をLINEに送る方法をお伝えします。

配信内容は、下記の様にします。

1.毎朝(07:05)、その日の予定を配信する。

2.夕方(19:05)、向こう1週間の予定を配信する。

これで、予定を忘れる事もなくなるはず・・・。

  1. GASで複数のカレンダーから今日の予定を取得する
  2. GASでLINEのグループIDを確認する
  3. GASでLINEのグループにメッセージを送る
  4. GASで複数のGoogleカレンダーの予定を1週間取得する

コメント