【GAS】今日の予定を自動的にLINEに送信する方法(LINE アクセストークンの取得方法)

Googleカレンダー

LINEとの連携一覧

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

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

前回

【GAS】GoogleスプレッドシートからLINEにメッセージを送る方法(トークルームの作成、LINE Notify APIの登録)
  • 簡単にスプレッドシートからLINEにメッセージが送れます。
  • スプレッドシートに貼り付けたボタンからマクロを起動することができます。
  • 今回は、とっても価値の高い方法をお伝えします。


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

    • Googleカレンダーの今日の予定がLINEに送信されます。
    • Googleカレンダーを開かなくても良いので便利です。

    といった、Googleカレンダーと
    LINEを連携するという夢のような
    状態になります。

     


    逆に、知らないと



    いくらGoogleカレンダーに予定を
    登録しておいても、Googleカレンダーを
    見るのを忘れてしまい

    あなた:「あー、Googleカレンダーには登録したのにー」

    という、残念な結果になりかねません。

     

    なので、そんな残念な事が起こらないためにも、
    サクッとGoogleカレンダーの予定を
    LINEに飛ばすようにしちゃってください。

     

    そして、こんな感じで答えてあげてください。

    マインドセットします。

    マインドセット
    せっかくのGoogleカレンダーとLINEを有効活用しないやつはバカ

    ぶっちゃけ、私もやるまでは、
    ちょっと億劫でした。

    でも一旦やってしまうと
    LINEに予定が届くのが当たり前
    になります。

    便利というか「当たり前のこと」になります。

    なので、あなたのその高機能なスマホを
    ぜひ有効活用してください。

     

    今日の予定をLINEに送る方法

    動画はこちら

    Googleカレンダーから今日の予定をまとめてLINEに送信する方法

    基本 設定方法

     

    Step1.

    ①グーグルドライブの[その他]-[Google Apps Script]をクリックする

     

    Step2.

    以下の画面に

    以下のスクリプトを貼り付ける。

    スクリプト

    var LINE_NOTIFY_TOKEN = "*****あなたのトークン*****";
    var LINE_NOTIFY_API = "https://notify-api.line.me/api/notify";
    
    
    function calendarToLine() {
      var calendars = CalendarApp.getAllCalendars();
      var text = Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd') + "\n";
    
      for(i in calendars) {
         var calendar = calendars[i];
        var events = calendar.getEventsForDay(new Date());
     
        //カレンダー名を取得する
        if( events.length > 0 ) {
          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');
    }
    
    
    

     

    Step3.

    LINE Notify APIの登録

    LINE→https://notify-bot.line.me/ja/

     

    Step4.

    トークンを発行する

     

    Step5.

    ①トークン名を記入する
    ②トークルームを選択する
    ③[発行する]をクリックする

     

    Step6.

    ①[コピー]をクリックする

    Step7.

    以下の箇所にコピペする

    var LINE_NOTIFY_TOKEN = “*****あなたのトークン*****”;

     

     

     

    日付がずれる場合

    日付がずれる場合は、一旦、旧エディターに戻し
    「プロジェクトのプロパティ」ー「タイムゾーン」が (GMT+
    09:00) 東京
    になっていることを確認してください。 →
    https://youtu.be/4qPFuM-bbJg?t=412

     

     

    では、今回のGoogleシートマスターへの究極の方法です。

    Step1.
    グーグルドライブの[その他]-[Google Apps Script]をクリックする

    Step2.

    スクリプトをコピペする。

    Step3.
    https://notify-bot.line.me/ja/
    をクリックする

    Step4.
    LINE Notify APIを登録する

    Step5.
    あなたのトークンをスクリプトにコピペする

    では、早速 Googleドライブを開いてください
    今すぐです。

    さらにブラッシュアップ

    特定のカレンダーに送信する

    【GAS】Googleカレンダーから指定したカレンダーの予定をLINEに送信する方法
  • 指定したGoogleカレンダーの今日の予定がLINEに送信されます。
  • Googleカレンダーを開かなくても良いので便利です。
  • カレンダーを指定して送信する

    【GAS】Googleカレンダーから指定したカレンダーの予定をLINEに送信する方法
  • 指定したGoogleカレンダーの今日の予定がLINEに送信されます。
  • Googleカレンダーを開かなくても良いので便利です。
  • 曜日付きで送信する

    【GAS】Googleカレンダーの予定を曜日付きでLINEに送信する方法
  • Googleカレンダーの今日の予定がLINEに送信されます。
  • Googleカレンダーを開かなくても良いので便利です。
  •  

     

     

     

     

     

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

    つぎはこちら

    【GAS】Googleカレンダーから指定したカレンダーの予定をLINEに送信する方法
  • 指定したGoogleカレンダーの今日の予定がLINEに送信されます。
  • Googleカレンダーを開かなくても良いので便利です。
  •  

    LINEとの連携一覧

    GAS応用の一覧
    Googleカレンダー関連

    コメント

    1. 1 anonymous より:

      返信ありがとうございます。
      以下に貼り付けますのでよろしくお願いします。

      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”;
      }

      //カレンダーの内容を取得する
      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’);
      }

    2. より:

      日頃よりお世話になりいつも大変助かっております。

      本日頃から、下記のエラーによりLINE通知が来ない状況が発生しております。

      ────────────────────
      Exception: Request failed for https://notify-api.line.me returned code 400. Truncated server response: {“status”:400,”message”:”Bad Request”} (use muteHttpExceptions option to examine full response)
      sendToLine @ 無題.gs:46
      calendarToLine @ 無題.gs:32
      ────────────────────

      昨日までは通常通りLINEへ通知されておりました。

      改善・対処法ございましたらご教授頂きたく
      お忙しいところ恐縮ですが、何卒宜しくお願い申し上げます。

      • hiroshi より:

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

        ただ、そのようなエラーが出た場合、実際にエラーが発生する状況で
        色々と試行錯誤し原因を突き止めていきます。
        (私自身が、sさんのPCを操作できたとしてもそれなりに時間がかかる)

        今回のように、メールのやりとりで原因を探るのは、現実的ではありません。

        なので一旦、今までのスクリプトを忘れて、再度、0からやって正常に動作させる
        方が早いと思います。

    3. emi より:

      はじめまして。
      Googleカレンダー予定をSlackに送信していたのですが、
      LINEに送信に変更したいと検索していたところこちらにたどり着きました。
      自分のカレンダーが4種(マイカレンダー)と、
      共有しているカレンダー(他のカレンダー)が2種あるのですが、
      このうちマイカレンダー3つと他のカレンダー1つをLINEに通知したい場合は
      どのようにすればよろしいいでしょうか?

      >以下のスクリプトを貼り付ける。
      こちらを貼り付け実行し通知はうまくできたました。
      ですが、全部通知されるので、通知されるカレンダーを指定したいのです。

      プログラム用語などが全くわかりませんので、今回のように
      コピペで自分のカレンダーに対応できるような動画などを作成していただけると幸いです。

      (ひろしさんのでYou Tubeをはじめてしっかりと見ました)

      • hiroshi より:

        emiさん、コメントありがとうございます。
        簡単にコピペというわけには行きませんが、アンサー動画作成しました。

        https://youtu.be/HcsrMOzpPWY

        • emi より:

          ひろしさん
          早速動画(わかりやすかったです!)と、
          スプリクトをありがとうございます!

          度々申し訳ありません。
          >動画内のスクリプト
          こちらをコピペし、取得するカレンダー名を変更して
          >const CALENDER_NAME1 = “emi” //取得するカレンダー名
          ※以下3種変更済
          テスト実行してみたのですが、すべて予定が取得できないです。
          ————-
          [今日の予定]
          3月10日
          ————-
          これだけはLINEに通知されます。

          カレンダー4種のうち3種は3/10に予定が入っています。
          (時間指定の予定または終日の予定)
          Googleカレンダー上「予定あり」にもなっています。

          ほかに自分用に修正する必要な箇所はございますでしょうか。
          申し訳ありませんがご教示くださいませ。

          • hiroshi より:

            うーん、では、まず
            15行目以降のコメントを外してください(/* と */を削除する)
            /*
            //カレンダー名を取得する
            if( events.length > 0 ) {
            text += “■ ” + calendar.getName() + “\n”;
            }
            */

            あるいは、14行目あたりにログを入れて

            console.log(calendar.getName())

            カレンダー名が取得できているか?
            定義したカレンダー名と同じか確かめてください。

            • emi より:

              さっそくありがとうございます。

              >15行目以降のコメントを外してください(/* と */を削除する)
              こちらを実行すると、指定したカレンダー以外のカレンダー名が
              LINEに通知されました。
              (指定したカレンダー以外のカレンダーにも予定は入っているのですが予定は通知されませんでした)

              >console.log(calendar.getName())
              こちらは上記の/* と */を削除して追記しても
              削除せず追記してもエラーになりました。

    4. hiroshi より:

      >console.log(calendar.getName())
      こちらは上記の/* と */を削除して追記しても
      削除せず追記してもエラーになりました。

      あ、すみません。20行目でした。

      var events = calendar.getEventsForDay(new Date());
      console.log(calendar.getName()) //ここ

      で、結果を教えてください。

      • emi より:

        ありがとうございます。

        /* と */を削除せずに追記しましたが、希望の通知にならなかったので
        /* と */を削除して追記したところ、
        自分のメインのカレンダーはちゃんと予定通知されました。
        ですが、指定しているほかのマイカレンダーはカレンダー名称のみ通知だったり、
        指定していないカレンダーの名称が通知されたりで、
        また、他のカレンダーは共有元のメールアドレスが表示されるだけでした。
        (ほかのカレンダーは予定入っていました)

        大変お手数をおかけいたしました。
        もうあきらめて、1つずつ別のファイル?プロジェクト?で実行させることにします。

        ちょっとGASに興味がわきました。 (*´ェ`*)

        • hiroshi より:

          返信ありがとうございます。
          console.log()
          でいろいろ出力すれば、わかると思います。

          >ちょっとGASに興味がわきました。 (*´ェ`*)
          すばらしい。

    5. 赤さん より:

      今日から通知されず、API調べていました。
      https://notify-bot.line.me/doc/ja/
      見てもよく解らず(笑)
      payloadをオブジェクトで渡すようにして解決しました。

      var options =
      {
      “method” : “post”,
      “payload” : “message=” + text,
      “headers” : {“Authorization” : “Bearer “+ token}
      };

      var options =
      {
      “method” : “post”,
      “payload” : {“message=” + text },
      “headers” : {“Authorization” : “Bearer “+ token}
      };

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