他人に甘く、自分にも甘く

GLCOの社長が運営する雑記です。

カレンダーの予定とToDoリストの内容を取得して、ラインに通知を入れる方法

f:id:gamelifecompany55:20181119125041j:plain

GOOGLEカレンダーの予定とToDoリストの内容を取得して、ラインに通知を入れる方法

頻繁に予定とやることを忘れるので
グーグルカレンダーに記入した予定や、ToDoリストの内容を
そのままラインに定期的に送信すれば、さすがに忘れないだろうと思い作成しました。
f:id:gamelifecompany55:20181214144643p:plain
完成はこんな感じ。指定した時刻や日にちに通知を送ることができます。

作成したといっても、すでに作ってくださっている
Googleカレンダーから予定を取得してラインに送信する方法
ToDoリストを取得する方法を合わせただけです。

なので、私はほとんどコピペしただけです。

Googleカレンダーから予定を取得してラインに送信する方法
参考サイト
www.wassyoi-hack.com

ToDoリストを取得する方法
www.virment.com

LINE Notifyの登録

グーグルのカレンダーとTodoリストの送信にLINE Notifyを使用します。

ログインしたら、マイページからアクセストークンを発行します。

トークン名は、グーグルから内容を取得してラインに送信するときに、LINE Notifyから通知がくる時に表示されるので、
カレンダー&Todoリスト とかにしとけばいいと思います。

通知をするトークルームは、
先にLINEでLINE Notifyを招待してグループを作っておき、そこを指定する方が楽かなと思います。

発行したトークンをコピーして、保存しておく
コピーしたトークンIDを下のコード内の"ライントークンID"の部分を消して、貼り付ければプログラムは完成です。

Google App script (gas)の使用

グーグルアカウントが必要です。ない方は、作成してください。
次に、グーグルドライブを開きます。

新規+からGoogle App Scriptを選択します。 ない方は、アプリ追加から追加してください。
f:id:gamelifecompany55:20181214142005p:plain

下のコードとライントークンを合わせたものを、作成したGasに貼り付けます。

f:id:gamelifecompany55:20181214143011p:plain
こんな感じではりつけ

f:id:gamelifecompany55:20181214143021p:plain
リソースのグーグル拡張サービスから、GoogleカレンダーとTodoリストのAPIを許可します。

f:id:gamelifecompany55:20181214143026p:plain
f:id:gamelifecompany55:20181214143030p:plain

次に。Google Clould platform APIでも....っていうリンクをクリックします。

f:id:gamelifecompany55:20181214143034p:plain
Tasks APIを有効にします。

コード

var lineToken = " ライントークンID ";
 
function myFunction() {
  var calendars = CalendarApp.getAllCalendars();
  var text = Utilities.formatDate(new Date(), 'JST', 'yyyy/MM/dd') + "\n";
 
 //Calender
  for(i in calendars) {
    var calendar = calendars[i];
    var events = calendar.getEventsForDay(new Date());
 
    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);
  
  //Todo List
  var myTaskLists = getTaskLists();
  var myTasks       = getTasks( myTaskLists[0].id );
  var msg = "[Todo List]\n";

  Logger.log( myTasks );
  /*myTask[0].titleの配列を変更することで他のリストに変更することができる。*/
  Logger.log( myTasks[0].title ); // = "first todo"
  
  for(i in myTasks){
    msg += myTasks[i].title + "\n";
    }
  text +=msg;
  sendToLine(text);
}
 
function sendToLine(text){
  var token = lineToken;
  var options =
   {
     "method"  : "post",
     "payload" : "message=" + text,
     "headers" : {"Authorization" : "Bearer "+ token}
 
   };
   UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}
 
function toTime(str){
  return Utilities.formatDate(str, 'JST', 'HH:mm');
}

function getTaskLists() {
  var taskLists = Tasks.Tasklists.list().getItems();
  if (!taskLists) {
    return [];
  }
  return taskLists.map(function(taskList) {
    return {
      id: taskList.getId(),
      name: taskList.getTitle()
    };
  });
}

function getTasks(taskListId) {
  var tasks = Tasks.Tasks.list(taskListId).getItems();
  if (!tasks) {
    return [];
  }
  return tasks.map(function(task) {
    return {
      id: task.getId(),
      title: task.getTitle(),
      notes: task.getNotes(),
      completed: Boolean(task.getCompleted())
    };
  }).filter(function(task) {
    return task.title;
  });
}


これをGoogle APP scriptに貼り付けて、好きな時間にトリガーを設定したら大丈夫だと思います。
"ラインID"の部分に取得した、アクセストークンを入力します。

ちょっとめんどくさくなっって、時間なくなったので
そのうち続きを更新します。
更新しました。

実行方法

f:id:gamelifecompany55:20181214143552p:plain
myFunctionの関数を実行するととりあえずは、プログラムは動作します。
ここで、Googleにアクセスする許可を求められるので、許可してください。

トリガーの設定

このままでは、定刻にプログラムが動作してくれないので
指定した時刻にプログラムが勝手に起動してくれるトリガーを設定します。
f:id:gamelifecompany55:20181214144033p:plain
時計みたいなアイコンをクリックしてトリガーの設定を行います。

f:id:gamelifecompany55:20181214144026p:plain
午前7〜8時の間に通知を送る場合のトリガー

複数のトリガーを設定をすることも可能です。好きな時間にセットしてください。
f:id:gamelifecompany55:20181214144643p:plain
こんな感じになります。