【GAS】指定したGoogleカレンダーの予定をLINEに送信する方法

Googleカレンダー

LINEとの連携一覧

ご訪問ありがとうございます。

Googleシートマスターのひろしです。

前回

【GAS】今日の予定を自動的にLINEに送信する方法(LINE アクセストークンの取得方法)
  • Googleカレンダーの今日の予定がLINEに送信されます。
  • Googleカレンダーを開かなくても良いので便利です。
  • 今回は、とっても価値の高い方法をお伝えします。


    これを知ることであなたは、

    • 指定したカレンダーの予定のみLINEに通知されるようになります。
    • 以前作成したスクリプトの変更方法がわかります。

     

     

    動画はこちら

     

    スクリプト

    const LINE_NOTIFY_TOKEN = "*****あなたのトークン*****";
    const LINE_NOTIFY_API = "https://notify-api.line.me/api/notify";
    const CALENDER_NAME =  "xxx";   //取得するカレンダー名
    
    
    function calendarToLine() {
      var calendars = CalendarApp.getAllCalendars();
    //  var text = "\n" + Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd') + "\n" ;
      var text = "\n" + Utilities.formatDate(new Date(), 'JST', 'M月d日') + "\n" ;
    
      for(i in calendars) {
         var calendar = calendars[i];
        var events = calendar.getEventsForDay(new Date());
     
    /* 
        //カレンダー名を取得する
        if( events.length > 0 ) {
          text += "■ " + calendar.getName() + "\n";
        }
      */  
        
        if( calendar.getName() == CALENDER_NAME )
        {
          
    //       text += "■ " + calendar.getName() + "\n";
    
          
          //カレンダーの内容を取得する
          for(j in events) {
            var event = events[j];
            var title = event.getTitle();
            var start = toTime(event.getStartTime());
            var end = toTime(event.getEndTime());
            text += start + ' - ' + end + " " + title + '\n';
          }
          
          if( events.length > 0 ) {
            text += "\n";
          }
        }
      }
     
      sendToLine(text);//LINEにデータを送信する
    }
     
    //LINEにデータを送信する
    //text:送信するデータ
    function sendToLine(text){
      var token = LINE_NOTIFY_TOKEN;
      var options =
       {
         "method"  : "post",
         "payload" : "message=" + text,
         "headers" : {"Authorization" : "Bearer "+ token}
     
       };
       UrlFetchApp.fetch(LINE_NOTIFY_API, options);
    }
     
    //'HH:mm'に変換する
    function toTime(str){
      return Utilities.formatDate(str, 'JST', 'HH:mm');
    }

     

    最後までご覧いただきありがとうございます。

    つぎはこちら

    【GAS基礎講座】明日の予定がある場合のみLINEに送信する方法 Q&A
  • GASで明日の予定を取得する方法がわかります。
  • 今日の予定をLINEに送信するスクリプトの変更方法がわかります。
  • LINEとの連携一覧
    Googleカレンダー関連

    コメント

    1. ミズティ より:

      質問させてください。
      コードの紹介ありがとうございます。
      こちら1週間の予定を送る場合はどう変更したらいいでしょうか?

      ご教授いただけましたら。

      • hiroshi より:

        質問ありがとうございます。

        13行め
        var events = calendar.getEventsForDay(new Date());

        で、今日(new Date())をしているので、この部分に
        必要とする日付を入れていけばいいです。

    2. ミズティ より:

      別の質問ですが、
      10件以上のカレンダーのイベントを取得したいのですが、カレンダー名のところに加えられなくて別のやり方も教えていただければ幸いです。

      • hiroshi より:

        すみません、意味がよくわかりません。
        具体的な例を提示していただけると助かります。

        • ミズティ より:

          すみません。送ったと思っていたのですがコメントが消えてしまっていました。
          こちらから尋ねておいて申し訳ありません。

          いまグーグルカレンダーで自分のアドレス*****@gmail.comと別に******@group.calendar.google.com
          というグループカレンダーを10件以上連携させています。
          そのカレンダーの今日のイベントもLINEに一緒に送るようにしたいと思ったのですが、getAllCallendersのみだと引っ張ってこれなくて悩んでいます。

          何かいいやり方があれば教えてほしいと思いましてコメントしました。

          • hiroshi より:

            この質問は、*****@group.calendar.google.com のイベントが
            getAllCallendersでは取得できないということでしょうか?

            • ミズティ より:

              そうです。getAllでgroupのカレンダーの予定が取得されなかったので違う方法がないか調べているんですが。
              なかなか見つからなくて。

    3. ミズティ より:

      すみません説明が悪かったです。
      最初の部分ですが、

      const LINE_NOTIFY_TOKEN = “****************”;
      // 予定
      const LINE_NOTIFY_API = “https://notify-api.line.me/api/notify”;
      const CALENDER_NAME = “*******@gmail.com” ; //取得するカレンダー名

      ここの取得するカレンダーのところが1つではなくて

      aaaaaaaaaaaaaaaaaaaa@group.calendar.google.com,
      bbbbbbbbbbbbbbbbbbbb@group.calendar.google.com,
      cccccccccccccccccccc@group.calendar.google.com

      というようにいくつもの予定を取り出してlineに送りたい場合はどうしたらよろしいでしょうか?

      • hiroshi より:

        #すみません、コメントが承認待ちになっていました。

        原始的なやり方ですが、

        if( calendar.getName() == CALENDER_NAME )
        {}

        の処理をカレンダー数分やれば取得できると思います。

        if( calendar.getName() == “aaaaaaaaaaaaaaaaaaaa@group.calendar.google.com”)
        {}
        if( calendar.getName() == “bbbbbbbbbbbbbbbbbbbb@group.calendar.google.com”)
        {}
        ・・・・・

        配列がおわかりであれば、
        カレンダー名を配列にし

        const calbuff = [
        “aaaaaaaaaaaaaaaaaaaa@group.calendar.google.com”,
        “bbbbbbbbbbbbbbbbbbbb@group.calendar.google.com”,
        “cccccccccccccccccccc@group.calendar.google.com”]

        calbuff.forEach(function (element) {
        if (calendar.getName() == element) {
        //LINEに送信する処理
        }
        }
        で行けると思います。

    4. hiroshi より:

      なるほど、それはわからないですね。

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