5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LINE botを使って体重管理してみた!?(Google App Script)

Posted at

目次

  • なぜこのシステムを作ったのか
  • 使用するツール・環境
  • ソースコードの解説等
  • スプレッドシートの中身
  • 使用してみた結果
  • 最後に

1. なぜこのシステムを作ったのか

正月太りしてしまった...ダイエットせねば..
まず体重管理からしてみよう!
でも体重管理のアプリ入れても絶対入力怠るなあ...

じゃあLINEで体重管理bot作っちゃおう!

LINEで毎日記録すれば、怠らないよね...(多分)

それじゃあササッと作ってみよう!

2. 使用するツール・環境

今回はGoogle App Scriptを使用します。(以下GAS)
データはスプレッドシートに保存します。

3. ソースコードの解説等

const CHANNEL_ACCESS_TOKEN = ''; 
const url = 'https://api.line.me/v2/bot/message/push';
const groupID = '';

function doPost(e) {
  const json = JSON.parse(e.postData.contents);
  const userId = json.events[0].source.userId;
  const today = new Date();
  const kanri_sheet = SpreadsheetApp.openById('').getSheetByName((today.getMonth()+1)+''); //今月のシート取得

//ユーザ一1の場合
  if(userId == ''){
    day_cell = 'A'
    weight_cell = 'B'
  }
//ユーザ一2の場合
    if(userId == ''){
    day_cell = 'D'
    weight_cell = 'E'
  }

  //返信するためのトークン取得
  var reply_token= json.events[0].replyToken;
  if (typeof reply_token === 'undefined') {
    return;
  }
  let message=json.events[0].message.text; //送られたメッセージ内容を取得
  

  if(message == '管理表見して'){
    send_message('https://docs.google.com/spreadsheets/???')
    return
  }

  if(isFinite(message) == false){
    send_message('半角数値で入力してください。')
    return
  }
  
//本日入力済みかどうか
  check_cell = kanri_sheet.getRange(day_cell +(today.getDate()+2)).getValue()
  if(check_cell.length > 1){
    send_message('本日の体重は入力済みです。')
    return
  }
  kanri_sheet.getRange(day_cell +(today.getDate()+2)).setValue(today.getDate()+'')
  kanri_sheet.getRange(weight_cell +(today.getDate()+2)).setValue(message+'kg')


//スプレッドシートに書き込み
  send_message('登録が完了しました。')
  max_weight = kanri_sheet.getRange(weight_cell + '35').getValue()
  min_weight = kanri_sheet.getRange(weight_cell + '34').getValue()

//今月初めての書き込みの場合
  if(max_weight.length == 0){
    kanri_sheet.getRange(weight_cell + '35').setValue(message + 'kg')
    kanri_sheet.getRange(weight_cell + '34').setValue(message + 'kg')
    return
  }

//今月の最高と最低の体重を取得
  max_weight = Number(max_weight.replace('kg',""))
  min_weight = Number(min_weight.replace('kg',""))

  if(Number(message) > max_weight){ //最高の体重を更新した時
    kanri_sheet.getRange(weight_cell + '35').setValue(message + 'kg')
    send_message('今月一番重たい体重更新しちゃったよ、、、頑張ろう、、')
  }
  if(Number(message) < min_weight){ //最低の体重を更新した時
    kanri_sheet.getRange(weight_cell + '34').setValue(message + 'kg')
    send_message('今月一番体重軽いよ!!!えらい!!!!!!')
  }

//昨日の体重入力があった場合、機能との体重を比較
  if(today.getDate() != 1 & (kanri_sheet.getRange(day_cell + (today.getDate() + 1)).getValue()).length != 0){
    yester_taizyu = kanri_sheet.getRange(weight_cell + (today.getDate() + 1)).getValue()
    yester_taizyu = yester_taizyu.replace('kg',"")

    diff = Number(message) - Number(yester_taizyu)
    send_message('昨日との体重差は' + diff + 'kgです。')
    if(diff > 0){
      send_message("食べ過ぎちゃったかな!?!?!")
    }
    else{
      send_message("いいじゃんその調子!!!")
    }
  }
}

//送信部分
function send_message(message){
var response = UrlFetchApp.fetch(url, {
    'headers': {
      'Content-Type': 'application/json; charset=UTF-8',
      'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
    },
    'method': 'POST',
    'payload': JSON.stringify({
      'to': groupID,
      'messages':[{
        'type': 'text',
        "text" : message,
      }]
     })
   })
   Logger.log(response.getResponseCode());
}

4. スプレッドシートの中身

以下にスプレッドシートで管理しているデータを示します。

一番下のセルに、"今月一番重い体重"と"今月一番軽い体重"を記録しています。
空白のセルは体重を入力していなかった場合となります。
また、今回は2人のデータを登録しています。

5. 使用してみた結果

実際に使用してみました。
友人と自分のLINEグループを作成し、botをグループに入れます。
そして、数字を送信し、体重を記録していきます。
botが個人のLINEIDを識別し、2人の体重管理を実現しています。

以下は、前日より増えた体重を入力した場合です。(チューリップがbot)

botは無慈悲ですね...

以下は、
月で一番軽い体重を更新した時の場合です。(惑星がbot)

褒められたら嬉しいですね(^ ^)

6. 最後に

今回はLINEbotで体重管理を行いました。
コピペでもできるので、是非作ってみてくださいね〜

5
2
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
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?