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 件のコメント:
コメントを投稿