WebAPIが提供する機能
IFTTTからのリクエストに応じてGoogleカレンダーに登録されている服薬予定を服薬済みに変更する。
構築環境
GAS (Google Apps Script) を利用して開発。
doPostを使ったPOSTメソッドによるWebAPIの提供
インターフェース
服用済みのリクエスト
入力データ(IFTTT → Webサービス)
{ "parameter": {}, "contextPath": "", "contentLength": -1, "queryString": "", "parameters": {} }
リスト1.要求パラメタ
Google Home に向かって「朝の薬飲んだよ」と言うと、IFTTTがWebhook機能を使って服用タイミング(朝・昼・夜・就寝)をパラメタとして当該WebAPIにHTTPリクエスト(POSTメソッド)を送信する。
このリクエストを受け取ると、当該プログラムはGoogleカレンダーの当日の予定の中から服用タイミング(朝・昼・夜・就寝)を含む予定を探し出し、そのタイトルの「(未)」を「(済)」に変更するとともに、色を青色に変更する。
プログラム
/** * IFTTTからのリクエストに応じてGoogleカレンダーを服用済みに更新する * @param {Object} e POSTメソッドで送られてくるデータ * timing: [朝|昼|夕|就寝] * https://script.google.com/macros/s/AKf.........................IbMw/exec */ function doPost(e) { debug(JSON.stringify(e, null, ' ')); //カレンダーのタイトルと色を変える NotifyNotTaking(e); var out = ContentService.createTextOutput(); //Mime TypeをJSONに設定 out.setMimeType(ContentService.MimeType.JSON); //JSONテキストをセットする result = { status: 'OK' }; out.setContent(JSON.stringify(result)); return out; } /** * お薬飲んだよに対して服用済みに変えるファンクション * * */ function NotifyNotTaking(e) { var params = JSON.parse(e.postData.getDataAsString()); // ※ var timing = params.timing; // => "AAA"が取れる //var timing = e.parameter.timing; //「の薬」とつくイベントの取得 //var timing =e.parameter.timing; debug('NotifyNotTaking: timing=' + timing); // 当日の予定の中から timing (朝|昼|夕|就寝)を含む予定を検索 var events = CalendarApp.getDefaultCalendar().getEventsForDay( new Date(), {search: timing} // {search:'夜の食後の薬'} ); // 取得した予定からターゲットの予定を探してタイトルと色を変更 events.forEach(function(event,i,array){ var title = event.getTitle(); debug('NotifyNotTaking: title=' + title); if(title.match(/^.の食.の薬\(.+\)$/) || title.match(/就寝前の薬\(.+\)$/)) { // タイトルの変更 // ”(”の文字の位置を取得する(http://cya.sakura.ne.jp/js/string.htm#indexOf) result = event.getTitle().indexOf("("); debug('NotifyNotTaking: result=' + result); // "("以降の文字を切り取る。 results = event.getTitle().substr(0,result); debug('NotifyNotTaking: results=' + results); // タイトルを○○の薬(済)に変更する。 event.setTitle(results+'(済)'); // 色を青に変更する。 event.setColor(CalendarApp.EventColor.BLUE); //LINEに送るメッセージ LINE_notify(timing+'のお薬を飲みました。'); } }); };
リスト2.WebAPI A2
リスト3は、LINE notifyを使ってLINEへメッセージを送る関数である。
//Lineにメッセージを送るファンクション function LINE_notify(message){ var token = "5EW..............................Dv4"; var options = { "method" : "post", "payload" : "message=" + message, "headers" : {"Authorization" : "Bearer "+ token} }; UrlFetchApp.fetch("https://notify-api.line.me/api/notify",options); }
リスト3..LINEへメッセージを送る関数
LINE Notifyとは、HTTPリクエストを用いてLINEへ通知を送る仕組みである。 LINE Notifyで通知を行うには次のようにする。
- 通知を送りたいトークルームに「LINE Notify」のアカウントを友達として追加する
- LINE Notifyのサイトに自分のLINE IDでログインする
- 右上にあるメニューから「マイページ」を選択する
- 下の方にある「トークンを発行する」をクリックする
- 発行されたアクセストークンをリスト3のtokenに設定する
0 件のコメント:
コメントを投稿