##「おつかいアプリ」#
今回は色々と頼まれごとの多いパパのためのアプリを作ってみました!
その名も、「おつかいアプリ」!(パシリアプリ!)
これでもう、しょうもない買い損ねは発生しない!はず!
上記の動画だと「みかん」攻めにあってますが、品目部分は可変です。
LINEで入力された内容がスプレッドシートに格納されますが、入力にはちょっとしたルールがあります。
<使い方/ルール>
ママ:ふと気づいたとき、LINEに**「+」を付けて**買ってきてほしいものを投稿。(するとスプレッドシートに自動的に行が追加されていきます)
パパ:仕事帰りや週末にスプレッドシートをみながら購入。購入したらチェック。その場で買えないものは「近日中に買います」でも選択しておきましょう。
※「+」を付けずにテキトーな文字を送信すればスプレッドシートのリンクが返ってくるので、そちらで最新のおつかいリストを確認できます。
図にすると、こんな感じです。↓
##企画の背景##
僕はよく妻の書いたメモを片手にイ〇ンやマツ〇ヨに買い出しにいくわけですが、まぁまぁよく買い損ねます。
そもそも、メモする時点で書き損ねるってこともありますよね。お互い人間なので致し方ないことです。
そこで、買わないといけないものを日常的に(気づいたときに)LINEに放り込んでおいて、勝手にスプレッドシートでチェックリスト化されるツールがあれば、双方のミスを減らせるのではないかと考えました。
僕は一覧を観ながら買い物できるので、これでもう漏れ安心です
今回はGASとLINEmessagingAPIを使ってみました。
##ベース##
LINEのメッセージをスプレッドシートに自動追加する方法はすでにありましたので参考にさせていただきました。リスペクト
##修正手順##
①「$」で始まる場合は処理を行うというものだったので「+」に変更しました。
②「$」で始まる場合は処理を終了してしまう仕様だったので、スプレッドシートのURLを返す仕様に変更しました。
③スプレッドシート側にチェック欄を設けました。チェックボックスを30行分とかあらかじめ用意しておくと、GASの「最終行に追加」を邪魔してしまうので、プルダウンにしています。
##ソースコード(GAS)##
var ACCESS_TOKEN = "★★★アクセストークン★★★"
var URL = 'https://api.line.me/v2/bot/message/reply'; // 応答メッセージ用のAPI URL
function doPost(e) {
// 投稿されたメッセージを取得
var userMessage = JSON.parse(e.postData.contents).events[0].message.text;
var post_message = "";
var json = JSON.parse(e.postData.contents);
var reply_token = json.events[0].replyToken;
if (typeof reply_token === 'undefined') {
return;
}
if(userMessage.match(/^\+/)) {
// +から始まるメッセージの場合、+を除いた文字列を再代入
userMessage = userMessage.substr(1);
} else {
// +から始まらない場合はURLを返却する
{
post_message = 'https://docs.google.com/spreadsheets/d/★★★スプレッドシートのID★★★/edit#gid=0';
}
UrlFetchApp.fetch(URL, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + ACCESS_TOKEN,
},
'method': 'post',
'payload': JSON.stringify({
'replyToken': reply_token,
'messages': [{
'type': 'text',
'text': post_message,
}],
}),
});
return ContentService.createTextOutput(JSON.stringify({ 'content': 'post ok' })).setMimeType(ContentService.MimeType.JSON);
}
// スプレッドシートへ保存=======================================
var response = e.postData.getDataAsString();
var spreadsheetId = "";
var sheetName = "log";
var spreadsheet = SpreadsheetApp.openById('★★★スプレッドシートのID★★★');
var sheet = spreadsheet.getSheetByName('★★★シートの名前★★★');
// 空白・タブ・改行で区切り配列に変換
var arr = userMessage.split(/\s/);
// 配列の先頭に日時を代入
arr.unshift(new Date());
// セルの最下部に配列を転記
sheet.appendRow(arr);
// =======================================
return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}
##使用感##
実際に使用してみて、(僕側に)欠点が見つかったので、改善のための追加機能をつけました。
別記事にしていますので、よろしければご覧ください。