日記

Gasでgoogleカレンダーを操作してみよう

前回の記事の続きです。
イベントの追加は前回やりました。今回は取得・表示・利用の部分です。

https://logzitsu.tlog.work/google%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%8B%E3%82%89%E3%82%AB%E3%83%AC%E3%83%B3%E3%83%80%E3%83%BC%E3%81%AB%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%82%92%E7%99%BB%E9%8C%B2/

まず、当日のスケジュールを取得してみる

function get_Week_Schedule(){
 // カレンダー情報を取得
  var calender = CalendarApp.getCalendarById('xxxxxxxxxx @ gmail.com');
  // 当日の予定を取得
  var schedules = calender.getEventsForDay(new Date());
  
  //当日のイベントを「全て」出力
  for (var i in schedules) {
    var title = schedules[i].getTitle();
    Logger.log(title);
  }
}

上記のようにループで吐き出す必要があるみたいです。
実際使う場合は「予定がない」ときの処理も必要そうですね。

続いて、あまり予定が多くない私ですので、先1週間の予定もいじりたいのです。

先1週間の予定を取得してみる。

function get_Week_Schedule(){
 // カレンダー情報を取得
  var calender = CalendarApp.getCalendarById('xx xxx xx@gmail.com');
  var date = new Date();
  
  for (var j = 0; j < 7 ; j++ ){
    //予定を取得
    date.setDate(date.getDate() + 1);
    var schedules = calender.getEventsForDay(date);
    Logger.log(date);
    
    //取得した日のイベントを全て出力
    for (var i in schedules) {
      var title = schedules[i].getTitle();
      Logger.log(title);
    }
  }
}

これでうまくできてんのかなー?
明日とかの処理をしたいときは date.setDate(date.getDate() + 1);
みたいな形でないとうまくいかないようです。

実際に作ったもの

作ったのは複数人で管理できるscheduleカレンダーです。
グループのLINEに追加して管理するのを想定しています。
*以下では、グループでは動きません

◆1週間のスケジュールを毎朝教えてくれる
◆googleフォームからスケジュールが追加できる
◆フォームのリンクが下についている

//送受信トークン
var CHANNEL_ACCESS_TOKEN = '';
//ID
var USER_ID = '';


function calender() {
  
  //メッセージ
  message = "予定が追加されたワン!"
  
  //シートを取得
  var Sheet = SpreadsheetApp.getActiveSheet();
  
  //データのある一番下の行を取得
  var lastRow = Sheet.getLastRow();
  
  //各データを取ってくる
  var title  = Sheet.getRange("B" + lastRow).getValue();
  var time  = Sheet.getRange("C" + lastRow).getValue();

  //登録するカレンダーIDを呼び出してeventへ格納
  var event = CalendarApp.getCalendarById('じーめーる@gmail.com');
  
  //createAllDayEventでカレンダーへイベントを登録
  event.createAllDayEvent(title,time);
  
  var Month = time.getMonth()+1;
  var day = time.getDate();
  
  var postData = {
      "to": USER_ID,
      "messages": [{
        "type": "text",
        "text": message + "\n" + time.getFullYear() + "年" + Month + "月" + day  + "日" + "\n" + title ,
      }]
    };
    
    var url = "https://api.line.me/v2/bot/message/push";
    var headers = {
      "Content-Type": "application/json",
      'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
    };
    
    var options = {
      "method": "post",
      "headers": headers,
      "payload": JSON.stringify(postData)
    };
    var response = UrlFetchApp.fetch(url, options);
}


function get_Week_Schedule(){
  
 // カレンダー情報を取得
  var calender = CalendarApp.getCalendarById('じーめーる@gmail.com');
  var date = new Date();
  var schedule = [];
  
  schedule.push("今日の予定");
  var schedules = calender.getEventsForDay(date);
  for (var i in schedules) {
      var title = schedules[i].getTitle();
      schedule.push("◆"+title);
    };
  
  for (var j = 0; j < 7 ; j++ ){
    //予定を取得
    date.setDate(date.getDate() + 1);
    var schedules = calender.getEventsForDay(date);
    //Logger.log(date);
    var month = date.getMonth() + 1;
    var dateT = ["日","月","火","水","木","金","土"];
    //if(schedules[j]){
    schedule.push("\n" + month + "月"+ date.getDate() +"日("+ dateT[date.getDay()] +")の予定");
      //};
    
    //取得した日のイベントを全て出力
    for (var i in schedules) {
      var title =  schedules[i].getTitle();
      schedule.push("✨"+title);
      Logger.log("✨"+title);
    }
  }
  
  schedule.push("\n\n新しい予定はここから追加するワン!\nhttps://docs.google.com/forms/d/e/xxxxxxxxxxxxxx/viewform?usp=sf_link");
  var message = "1週間の予定をお伝えするワン!!!\n";
  var message2 = schedule.join("\n");
 
    var postData = {
      "to": USER_ID,
      "messages": [{
        "type": "text",
        "text": message + "\n" + message2,
      }]
    };
    
    var url = "https://api.line.me/v2/bot/message/push";
    var headers = {
      "Content-Type": "application/json",
      'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
    };
    
    var options = {
      "method": "post",
      "headers": headers,
      "payload": JSON.stringify(postData)
    };
    var response = UrlFetchApp.fetch(url, options);
}

わりと単純ですが、結構便利なんじゃないかなと思います。
雑な記述があるけど、動いちゃうんだからいいよね!

ユーザーIDが自分のものだと、グループでは動きません!

以下の記事を参考にグループIDを取得してください

GASでLINEのグループIDを確認する
https://cyuraharuto.com/gas-line-gid-get/

USER_IDを取得したものに差し替えればいいです。

こちらの記事もおすすめ!