作成日: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