33
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LINE Notify + GoogleAppsScript + Googleカレンダーで明日の予定を絶対忘れない

Last updated at Posted at 2018-07-27

はじめに

最近毎日違った予定が入りすぎて明日の予定を忘れがちになってきてしまいました。
Googleカレンダーの明日の予定をまとめてLINE Notifyに送ってくれるようにしました。

必要なもの

  • LINEアカウント
  • Googleアカウント(GoogleカレンダーとGASを使います)

LINE Notifyのトークンを取得する

以下のページからログインし、マイページへ移動してください。

LINE_Notify.png

ページ下の方にある「トークンを発行する」ボタンをクリック。

LINE_Notify.png

すると、トークン発行画面が出てくるので、トークン名の入力と通知するトークルームを選択して「発行する」ボタンをクリック。

LINE_Notify.png

トークンが発行されるので、コピーしてメモしておく。

LINE_Notify.png

cRULコマンドで試してみる

トークンだけ変更して実行してみてください。

curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" -F "message=ABC" https://notify-api.line.me/api/notify

以下の画像のような通知がくると思います。

LINE_Notify.png

GoogleAppsScriptで毎日同じ時間に予定を通知する

カレンダーIDを取得する

Googleカレンダーをブラウザで開きます。
左側のマイカレンダーから「設定と共有」を開きます。

Google_カレンダー_-_2018年_7月.png

カレンダーIDをメモします。
メインアカウントだとおそらくただのメアドだと思います。

Google_カレンダー_-_「Takeyuki_Imajo」のカレンダー設定.png

GoogleAppsScriptで新規プロジェクト

GoogleAppsScriptで新規プロジェクトを作成し、以下のコードをコピペする。
(calIdはカレンダーIDに、keyはLINE Notifyで取得したトークンに変更する)

function myFunction() {
  // カレンダーID
  var calId = "カレンダーID";
  // LINE Notifyのアクセストークン
  var key = "access token";
  
  var url = "https://notify-api.line.me/api/notify";
  

  var cal = CalendarApp.getCalendarById(calId);
  var now = new Date();
  var tomorrow = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1);
  // googleカレンダーより明日の予定を配列で取得。
  var tomorrowEvent = cal.getEventsForDay(tomorrow);
  
  // LINE Notifyに送るメッセージ
  var msg = "";
  // 予定がない時
  if(tomorrowEvent.length === 0){
    msg = "明日の予定はありません。";
  }
  // 予定がある時
  else{
    msg += "明日の予定は" + String(tomorrowEvent.length) + "件あります。\n\n";
    msg += allPlanToMsg(tomorrowEvent);
  }
  
  var jsonData = {
    message: msg
  }

  var options =
  {
    "method" : "post",
    "contentType" : "application/x-www-form-urlencoded",
    "payload" : jsonData,
    "headers": {"Authorization": "Bearer " + key}
  };

  var res = UrlFetchApp.fetch(url, options);
}

// イベントの配列をテキストにして返す
function allPlanToMsg(events/* array */){
  var msg = "";
  events.forEach( function(event, index){
    var title = event.getTitle();
    var start = event.getStartTime().getHours() + ":" + ("0" + event.getStartTime().getMinutes()).slice(-2);
    var end = event.getEndTime().getHours() + ":" + ("0" + event.getEndTime().getMinutes()).slice(-2);
    // 予定が終日の時
    if( event.isAllDayEvent() ){
      msg += String(index + 1) + "件目: " + title + " 終日の予定です。\n\n";
      return;
    }
    msg += String(index + 1) + "件目: " + title + " " + start + "~" + end + "\n\n";
  });
  return msg;
}

テストしてみる

うまくLINE Notifyに送れるかテストしてみます。
画面左上の関数をmyFunctionを選択し、実行ボタンを押してみます。

tester.png

認証画面が出てくるので、認証を許可します。

tester.png

Googleアカウントのアクセスも許可します。

ログイン_-_Google_アカウント.png

許可できたら、再度実行ボタンを押します。

以下のように通知がきたら成功です。

LINE_Notify.png

毎に同じ時間に実行する

手動で実行していたら意味がないので、自動的に毎日同じ(くらい)の時間に実行されるように設定します。

画面左上の時計見たいなボタンをクリックします。

tester.png

トリガーの追加ボタンをクリック。

tester.png

myFunctionを選択肢、お好きな時間帯を選択し、保存します。

tester.png

おそらくこれで、毎日同じ時間に通知がくると思います。

参考

[超簡単]LINE notify を使ってみる - Qiita
毎朝、当日の予定をGoogleカレンダーから取得してチャットワークに送る

33
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?