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

LINEとの連携

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

 

 

カレンダーを指定してLINEに送信する方法。

 

動画

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

 

スクリプト

const LINE_NOTIFY_TOKEN = "*****あなたのトークン*****";
const LINE_NOTIFY_API = "https://notify-api.line.me/api/notify";
const CALENDER_NAME =  "new カレンダー1";   //取得するカレンダー名


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');
}

 

 

複数のカレンダーを指定してLINEに送信する方法(GAS)

 

  • GASのif内でOR条件を指定する方法がわかります。
  • 指定した複数のカレンダーの予定をLINEに送信する方法がわかります。

 

動画はこちら

 

- YouTube
YouTube でお気に入りの動画や音楽を楽しみ、オリジナルのコンテンツをアップロードして友だちや家族、世界中の人たちと共有しましょう。

 

カレンダーの定義を増やして、カレンダーを比較している箇所に追加すればOKです。

動画内のスクリプト
function ortest() {


  //   自分のカレンダーが4種(マイカレンダー)と、
  // 共有しているカレンダー(他のカレンダー)が2種あるのですが、
  // このうちマイカレンダー3つと他のカレンダー1つをLINEに通知したい場合は
  const CALENDER_NAME1 = "マイカレンダー1"  //取得するカレンダー名
  const CALENDER_NAME2 = "マイカレンダー2"  //取得するカレンダー名
  const CALENDER_NAME3 = "マイカレンダー3"  //取得するカレンダー名
  const CALENDER_NAME4 = "他のカレンダー"  //取得するカレンダー名


  let calendar_getName = "マイカレンダー4"  //カレンダーから取得したカレンダー名(calendar.getName())


  if ((calendar_getName == CALENDER_NAME1) ||
    (calendar_getName == CALENDER_NAME2) ||
    (calendar_getName == CALENDER_NAME3) ||
    (calendar_getName == CALENDER_NAME4)) {


    console.log("LINEに送信する")
  }
  else {
    console.log("LINEに送信しない")


  }


}

 

動画内のスクリプト

動作は未検証です。

const LINE_NOTIFY_TOKEN = "*****あなたのトークン*****";
const LINE_NOTIFY_API = "https://notify-api.line.me/api/notify";
// const CALENDER_NAME = "new カレンダー1";   //取得するカレンダー名
const CALENDER_NAME1 = "マイカレンダー1"  //取得するカレンダー名
const CALENDER_NAME2 = "マイカレンダー2"  //取得するカレンダー名
const CALENDER_NAME3 = "マイカレンダー3"  //取得するカレンダー名
const CALENDER_NAME4 = "他のカレンダー"  //取得するカレンダー名


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_NAME1) ||
      (calendar.getName() == CALENDER_NAME2) ||
      (calendar.getName() == CALENDER_NAME3) ||
      (calendar.getName() == CALENDER_NAME4)) {


      //      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');
}

 

 

 

 

 

 

カレンダーの予定を曜日付きでLINEに送る方法

 

  • スプレッドシートの曜日の指定方法がわかります。
  • GASで日本語の曜日を取得することができます。
  • カレンダーの予定をLINEに送信する際に曜日付きで送ることができます。

動画

Googleカレンダーの予定を曜日付きでLINEに送る方法。スプレッドシートの曜日指定方法

スクリプト

const LINE_NOTIFY_TOKEN = "*****あなたのトークン*****";
const LINE_NOTIFY_API = "https://notify-api.line.me/api/notify";
const CALENDER_NAME =  "new カレンダー1";   //取得するカレンダー名

function calendarToLine() {
 const wname = ["dummy","月","火","水","木","金","土","日"];

  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" ;

  
  var text = "\n" + Utilities.formatDate(new Date(), 'JST', 'M月d日') + 
    wname[Utilities.formatDate(new Date(), 'JST', 'u')] + "曜日" + "\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にデータを送信する
}

 

 

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

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

Step2.

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

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

Step4.
LINE Notify APIを登録する

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

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

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

つぎはこちら

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

 

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に興味がわきました。 (*´ェ`*)
        すばらしい。

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