2019年7月19日金曜日

役割に別れて作業8

・機能一覧作成 担当

飲み忘れ通知がくるようにGASを使い元あるテンプレートを変えながら操作してみたがえエラーが起きてしまいLINEに通知が来ない。日付のフォーマットに問題があるとわかったため、IFTTTのスプレッドシートの所を変更してみたがまだエラーが出ている状態。


・google home notifier 

IFTTTを使い天気の情報を取得しその情報を元にAIスピーカーか
自発的に喋らそうとしたがそのためにng〇〇〇でURLを取得しなければならなかったのでそのインストール作業を行った。


・google home スキル開発 担当

AndroidStudioからAndroidにapkファイルのインストールに成功した。
次回は機能をもっと充実させる予定。



次回はオープンキャンパスの話し合い&リハーサルを行う。
なんとしてでもデモの際に5分間持たせるように、また高校生に興味を持ってもらえるためには何をするのかみんなで考える。


【補足】

IFTTTとGoogleスプレッドシートと連携して、指定の時刻が来たらLINEにメッセージを送る処理でエラーが発生した。ここではそのエラーの原因とその対処法について説明する。

原因


Google Homeに薬を飲んだことを伝えると、スプレッドシートにそのときの時刻が書き込まれる。その時刻のフォーマットは「June 28, 2019 at 03:13PM」のような形式になっている。
ところが、この日付フォーマットはスプレッドシートに埋め込まれたJavaScriptで書かれた下記のスクリプトではエラーになる。
//日付フォーマット
function formatDate(date, format) {
  date = new Date(date);
  return Utilities.formatDate(date, 'JST', format)
}
図1. 日付フォーマット関数

これは、JavaScriptでは「June 28, 2019 at 03:13PM」というフォーマットの日時をサポートしていない(解釈できない)ためである。

対策


この問題を解決するために、IFTTTの設定でスプレッドシートに書き込む日時データのフォーマットを変更しようとしたが、そのようなオプションはなかった。
そこで、このフォーマットの日時データを通常のJavaScriptで扱える形式に変換する下記の関数を作成してこの問題を回避した。

// 日付のチェック(June 28, 2019 at 03:14PM → Fri Jun 28 2019 15:22:00 GMT+0900(日本標準時))
// Modified at 2019-7-17
function check_date(target_date) {
  var pattern = /^(\w+)\s(\d+),\s(\d{4})\sat\s(\d{2}):(\d{2})(AM|PM)$/i;
  var regexp = new RegExp(pattern);
  var result = regexp.test(target_date);
  if(result) {
    var matched = target_date.match(regexp);
    var str = matched[0].replace('at ','');
    var str = str.replace(matched[6],'') + ':00';
    var new_date = new Date(str);
    if(matched[6] == 'PM') {
      new_date.setHours(new_date.getHours() + 12);
    }
    return(new Date(new_date));
  }
  return(new Date(target_date));
}
図2. 日時データのフォーマット変換関数

 これを使って図1の日付フォーマット関数を以下のように修正した。
//日付フォーマット
function formatDate(date, format) {
  date = check_date(date);
  return Utilities.formatDate(date, 'JST', format)
}

0 件のコメント:

コメントを投稿