1
0

More than 3 years have passed since last update.

Alexa連携の共用買いものリストアプリをGlideAppで作ってみる

Last updated at Posted at 2021-01-21

背景

  • 毎週土日にお買い物をする
  • 買いものリストはAlexaから入れている
  • Alexaは私のアカウント、買い物は夫がする

課題

  • 夫がチェックリストとしてAlexaアプリを使えない
    • Alexa(Amazon)アカウントを供用したくない(買い物ばれる)
    • 現在は、私がLINEで「Alexaのリストをシェア」して、テキストで夫に届く
    • 買ったものをチェックできず、買い忘れが発生する※いい頭の体操になるようで、忘れられたことは今のところない
  • 買い物時のチェックがリアルタイムでない。
    • 夫が買ってきてくれたものを確認しつつ、私がAlexaの買い物リストにチェックを入れる(ラグがある)
    • 時々忘れて次の週もリストとして残る

使うもの

  • Alexa
    • デフォルトの買い物リストを使う
  • IFTTT
    • Alexa shopping list to GoogleSpreadsheet
  • GAS
    • Alexaから追加の買い物が通知されたら、GlideApp用のシートに転記する(5分おきの定期実行)
    • GlideApp用の買い物リストでチェックがついたものをクリアする(1日1回)
  • GlideApp(https://www.glideapps.com/)
    • SpreadSheetのリストを表示、チェックを入れる機能

できたもの

SpreadSheet

  • AlexaShoppingList
    スクリーンショット 2021-01-21 22.35.47.png

  • ShoppingList(Glideから参照)
    スクリーンショット 2021-01-21 22.36.09.png

  • Setting
    スクリーンショット 2021-01-21 22.36.02.png

GAS

  • 行インデックスと列インデックスが1からなのが面倒臭い、、、ヘッダ行もあるし
var spreadsheets = SpreadsheetApp.openById(spreadSheetId);
//A2にAlexaの行数(次に差し込まれる場所)、B2にGlideApp用リスト行数(次に差し込まれる場所)
var settings_spreadsheet = spreadsheets.getSheetByName("Setting");
var alexa_spreadsheet = spreadsheets.getSheetByName("AlexaShoppingList");
var shopppinglist_spreadsheet = spreadsheets.getSheetByName("ShoppingList");

//Alexaから追加の買い物が通知されたら、GlideApp用のシートに転記する(5分おきの定期実行)
function copyAlexa2List(){

  //二次元配列に
  var alexa_data = alexa_spreadsheet.getRange(1,1,alexa_spreadsheet.getLastRow(),3).getValues();

  alexa_start_cell = settings_spreadsheet.getRange(2,1).getValue()
  shoppinglist_start_cell = settings_spreadsheet.getRange(2,2).getValue()
  var i = -1
  for (var j = alexa_start_cell; j<=alexa_spreadsheet.getLastRow() ; j++){
    shopppinglist_spreadsheet.getRange(shoppinglist_start_cell + i + 1,1).setValue(alexa_data[alexa_start_cell + i][2])
    i++;
  }
  settings_spreadsheet.getRange(2,1).setValue(alexa_start_cell + i + 1)
  settings_spreadsheet.getRange(2,2).setValue(shoppinglist_start_cell + i + 1)
}

//GlideApp用の買い物リストでチェックがついたものをクリアする(1日1回)
function delShoppingList(){
  var data = []
  for (var j = 2; j<=shopppinglist_spreadsheet.getLastRow() ; j++){
    if (!shopppinglist_spreadsheet.getRange(j,2).getValue()){
      data.push(shopppinglist_spreadsheet.getRange(j,1).getValue());
    }
    shopppinglist_spreadsheet.getRange(j,1).setValue("")
    shopppinglist_spreadsheet.getRange(j,2).setValue("")
  }
  for (var i = 0; i<data.length; i++){
    shopppinglist_spreadsheet.getRange(i+2,1).setValue(data[i]);
  }
  settings_spreadsheet.getRange(2,2).setValue(data.length + 2)
}

GlideApp

  • リストの表示画面を「チェック」にする
  • Detailを出すアクションをNoneにする

最後に

  • SpreadSheetの方をマスタにすることになったので、Alexaの買い物リストがメンテされずにゴミだらけになるのが目に見える
  • GlideAppべんりすぎる
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0