Googleカレンダーの情報をLINEグループに自動配信する 

留学＋自粛生活で四股を踏んじゃいたくなるくらいに太り、ちょっと前からスポーツトレーナーの友達にトレーニング・食事と体重の管理をお願いしています。

でも、しょっちゅう報告を忘れるし、それで怒られるしで（自分が悪いケド）LINEbotを使ってこの作業を自動化させたいと思います。

<img width="200" alt="sumo_rikishi_harite2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697384/403f929e-6030-9e1e-cd17-31c6cf5dbabf.png">


## 機能概要 
・Googleカレンダーに記録したデータをLINEで送る（←今回はここを作ります）
・特定の時間までに記録されてなければリマインドする
・毎週日曜日に月/週の経緯（グラフ画像）を送る
・前日と比較して体重が減ってたらめちゃくちゃに褒めてくれる

## 今回の目的
・GASに触れる、GASでGitHubを使ってみる
・APIを使ってみる

## 環境を作る
### 1. コード管理導入
今回コード管理にGitHubを使いたいのでGithubとGASを連携します。
参考：https://qiita.com/Massasquash/items/1ebb722272a114c62d79

拡張機能Google Apps Script GitHub アシスタントをインストール
https://chrome.google.com/webstore/detail/google-apps-script-github/lfjcgcmkmjjlieihflfhjopckgpelofo/related

ここでリモートリポジトリに対して操作できるようになります。
![スクリーンショット 2020-11-14 103835.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697384/afc42f20-7a9d-33d6-763f-1e4f701eeab9.png)

### 2. 体重記録用カレンダーの作成
体重記録用のカレンダーを新規作成しカレンダーのIDを取得します。
対象カレンダーの詳細から［設定と共有］＞[カレンダーの設定]＞カレンダーIDをコピー
<img width="300" alt="スクリーンショット 2020-11-14 102313.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697384/489cf91f-6e3d-38f0-44de-d86f641046b1.png">

## Googleカレンダーの予定をLINEに送る
参考：https://qiita.com/ikei/items/8c837444dcab6c0e4629

### 1. APIの導入
LINE Notifyにログインして連携を行います。
ここで接続するグループを指定できます。

### 2. コード
````javascript:GoogleカレンダーLinebot連携
function todayWeight() {
  var accessToken = PropertiesService.getScriptProperties().getProperty('LINE_TOKEN');
  var cal = CalendarApp.getCalendarById('hogehoge@group.calendar.google.com');  
  var today = Utilities.formatDate(new Date(), 'JST', 'M/d');
  var weightData = getweight(cal);
  
  //LINEbotで通知
  var sendToLineMessage =
   {
     'method'  : 'post'
    ,'payload' : 'message=' + '\n' + today + 'の体重報告：' + weightData
    ,'headers' : {'Authorization' : 'Bearer '+ accessToken}
    ,muteHttpExceptions:true
   };
  UrlFetchApp.fetch('https://notify-api.line.me/api/notify', sendToLineMessage);
}

/**
* カレンダーからイベントを取得し体重データを返す
*/
function getweight(prmCal) {
  var strWeight = '';
  var arrWeight = prmCal.getEventsForDay(new Date());
  if ( _isNull(arrWeight) ) strWeight = '本日の記録がありません。';
     for (var i=0; i<arrWeight.length; i++) {
           strWeight += arrWeight[i].getTitle();
     }
  return strWeight;
}

/**
* NULL判定
*/
function _isNull(prm) {
  if ( prm=='' || prm===null || prm===undefined ) {
    return true;
  } else {
    return false;
  }
}
````

### 3.トリガーの設定
今回は毎日12時～1時にトレーナーとのグループに投稿されるようにします。
<img width="300" alt="スクリーンショット 2020-11-14 104207.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697384/28fb61f4-9e7c-8562-3f24-0881939416b1.png">

## 実際に動かしてみる
Googleカレンダーに体重を登録して、
<img width="150" alt="スクリーンショット 2020-11-14 105204.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697384/91e35e87-9821-7376-0d76-2dac737faeef.png">

実行してみると、無事LINEに送ってくれました。
![スクリーンショット 2020-11-14 104732.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697384/0b8946a0-f498-fa66-dbb2-dbf39a9741cf.png)

## まとめ
・LINE Notifyは便利！いろいろなことに使えそう
・こういうシステム作りたい私は、そもそもダイエットに向いてない




まだ最低限の機能だけどこれから機能追加して激やせ最強ダイエットツール開発するぞ～（クリームパラーメンとポテチ食べたいビール飲みたい）