WebAPI A2

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で通知を行うには次のようにする
  1. 通知を送りたいトークルームに「LINE Notify」のアカウントを友達として追加する
  2. LINE Notifyのサイトに自分のLINE IDでログインする
  3. 右上にあるメニューから「マイページ」を選択する
  4. 下の方にある「トークンを発行する」をクリックする
  5. 発行されたアクセストークンをリスト3のtokenに設定する
これで準備は完了。リスト3を呼び出すとLINEの指定したトークルームにLINE Notifyからメッセージが通知される(決してアクセストークンを作るときに使ったLINE IDからではない)。

0 件のコメント:

コメントを投稿