作成日:2019-02-05, 更新日:2019-02-06
基本
・2019-02-05時点
・Google Apps Scriptが何かは分かっていない・・・調査する予定は今のトコ無し
・自分のGoogleカレンダーの予定を自分のLINEに送りたい・・・ただそれだけ
・参考サイト:Googleカレンダーの予定を毎朝LINEに通知する
仕様・要望
・面倒なコトはしたくない
・予定が無いときは「無い」ってコトが分かるようにLINEに送ってほしい
経緯
どうにかして、Googleカレンダーの予定をスマホに送りたかった。
スマホでGoogleカレンダーを開くのは面倒。PUSH通知でしてほしい。
・ひとまずPHP+ハングアウトで考える
→ハングアウトチャットというヤツが別にいて、コイツにアップグレードさせないといけないっぽいのであきらめる
・次にPHP+SMSで考える
→有料のSMSのAPIを使う or モデムか何かで敷居の高い設定をする・・・どちらもお手軽じゃないのであきらめる
・次にPHP+LINEで考える
→調べているPHP使わなくても簡単に出来るってコトでやってみる。
処理の流れ(2019-02-05時点)
1.LINE Notifyのトークン取得
2-1.Google Apps Script(Googleドライブ上にスクリプトファイル作成)
2-2.スクリプトファイルの修正、実行
2-3.cronの設定
3.その他
1.LINE Notifyのトークン取得
・PCからLINEにログインできるようにする(LINEのアプリ側の設定)
・「https://notify-bot.line.me/doc/ja/」からログインする
・「マイページ」に移動
・「トークンを発行する」から登録
※「サービスを登録する」は、企業名やURL、メアドの登録が必要。「トークンを発行する」は不要。
2-1.Google Apps Script(Googleドライブ上にスクリプトファイル作成)
・Googleドライブにアクセス
・「新規作成」で「Google Apps Script(「その他」の中。無ければ追加)」
▼コピペするソース
var lineToken = "〇〇〇〇"; var calName = "〇〇〇〇"; function main() { var calendars = CalendarApp.getAllCalendars(); var tmpFrom = new Date(); var fromAt = new Date(tmpFrom.getFullYear(), tmpFrom.getMonth(), tmpFrom.getDate(), 0, 0); var toAt = new Date(fromAt.getTime() + (((3600*24*2)-1)*1000)); var headText = Utilities.formatDate(fromAt, 'JST', 'yyyy/MM/dd'); headText += ' - '; headText += Utilities.formatDate(toAt, 'JST', 'dd') + "\n"; var text = ''; for(i in calendars) { var calendar = calendars[i]; //var events = calendar.getEventsForDay(new Date()); var events = calendar.getEvents(fromAt, toAt); if ( calendar.getName() != calName ){ continue; } if( events.length > 0 ) { text += "◆" + calendar.getName() + "\n"; } else { continue; } var tmpDay = ''; for(j in events) { var event = events[j]; if ( tmpDay != Utilities.formatDate(event.getStartTime(), 'JST', 'yyyy/MM/dd') ) { tmpDay = Utilities.formatDate(event.getStartTime(), 'JST', 'yyyy/MM/dd'); text += "・" + tmpDay + "\n"; } var title = event.getTitle(); var start = toTime(event.getStartTime()); var end = toTime(event.getEndTime()); text += start + ' - ' + end + " " + title + '\n'; } text += "\n"; } if ( text == '' ){ text += 'nothing' + "\n"; } sendToLine(headText+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'); }
2-2.スクリプトファイルの修正、実行
・「var lineToken = "〇〇〇";」にLINEのトークンをコピペ
・「var calName = "〇〇〇〇";」を表示したいカレンダー名にする(※全部表示なら、関連するif文削除)
・欲しいのが「今日」ならコメントにしている「var events = calendar.getEventsForDay(new Date());」を使う。
・欲しいのが「今日と明日」以外なら「fromAt」「toAt」を修正
・保存して実行
※Googleカレンダーの認証をする必要あり
2-3.cronの設定
・「メニュー:編集」の「現在のプロジェクトのトリガー」をクリック
・ページ右下部あたりにある「トリガーを追加」をクリック
毎日1回で良いなら・・・
実行する関数 | main |
---|---|
デプロイ | Head |
イベントのソース | 時間主導型 |
時間ベースのトリガーのタイプ | 日付ベースのタイマー |
時刻 | 〇時~〇時 |
エラー通知 | 毎日通知を受け取る |
3.その他
・PCからLINEにログインできないように戻す(LINEのアプリ側の設定)
※ログイン出来ても問題無い人は何もしなくて良い。
注意
Googleドライブで作成するときのアカウントのGoogleカレンダーの認証なら問題無し。
例えば、下記のようにドライブとカレンダーで異なるアカウントにすると後が面倒。
・Googleドライブのアカウント:hogeA@gmail.com
・Googleカレンダーのアカウント:hogeB@gmail.com