ラインのやり取りでたばこを吸った時間を管理するガジェットです。吸った時間はスプレッドシート上で管理しています。また、その時間をチェックするのがラインです。ラインのトークルームで「たばこ」と送ると女の子が本数に応じて返信をくれると同時にスプレッドシートに時間を書き込みます。女の子の会話内容も本数を重ねるごとに口調が荒くなり禁煙効果もあるかもです。
例えばこんな状況で
今回のガジェットは、こういう声に対応
「1日に何本タバコを吸っているんだろう。一回一回数えるのは大変だし、数えていても虚しくなるし。誰かが代わりに数えてくれないかな」ラインで可愛い女の子が代わりに吸った時間と合わせて数えてくれます!
このガジェットでできることはこちら
- たばこの吸った時間をスプレッドシートで管理。
- ラインのやり取りでその時間を自動計測。
- またラインでは女の子がたばこに行く都度コメントをくれます。
- 日付が変わればまた1から数えなおしてくれます。
- 1日吸った本数が増えるとだんだん女の子の態度も荒れてきますので禁煙効果も出ます。
注意点はこちら
- ラインでのやり取りですが、こちらが使用できる会話は「たばこ」という言葉のみです。
- たばこ以外の言葉を送ると注意されます。
評価(自己)
役立ち度 ★★★★(良し)
効率化 ★★★★(良し)
ミス防止 ★★★(平均)
楽しさ ★★★★★(最高)
操作性 ★★★★(良し)
実行環境
使用環境 Line Messaging API
使用言語 python
使用ライブラリ flask、linebot import 、linebot.exceptions 、linebot.models
os、json、pandas、datetime、random、gspread、oauth2client.service_account
コード
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
import os
import json
import pandas as pd
from datetime import datetime
import random
import gspread
from oauth2client.service_account import ServiceAccountCredentials
def auth():
SP_CREDENTIAL_FILE = 'secret.json'
SP_SCOPE = [
'https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive'
]
SP_SHEET_KEY = '管理用スプレッドシートのID'
SP_SHEET = 'シート名'
credentials = ServiceAccountCredentials.from_json_keyfile_name(SP_CREDENTIAL_FILE, SP_SCOPE)
gc = gspread.authorize(credentials)
sh = gc.open_by_key(SP_SHEET_KEY)
worksheet = sh.worksheet(SP_SHEET)
return worksheet
def set_column():
worksheet = auth()
data = worksheet.get_all_values()
timestamp = datetime.now()
date = timestamp.strftime('%m/%d')
time = timestamp.strftime('%H:%M:%S')
df = pd.DataFrame(data[1:])
df.columns = data[0]
num = len(df[date][df[date].values!=''])
df[date].values[num] = time
worksheet.update([df.columns.values.tolist()] + df.values.tolist())
def reply():
worksheet = auth()
data = worksheet.get_all_values()
date = datetime.now().strftime('%m/%d')
df = pd.DataFrame(data[1:])
df.columns = data[0]
num = len(df[date][df[date].values!=''])
reply_num = str(num)
rand = random.randint(0,3)
reply = reply_dic[reply_num][rand]
return reply
reply_dic = {
'1': ['いってらっしゃい!', '気をつけてね', 'ごゆっくり', '気分転換♪'],
'2': ['2本目だね', '朝はゆっくり~', '楽しんでね', '休憩!休憩!'],
'3': ['おやつ欲しい〜', 'まだ午前中だね', '早くね〜', '私も休憩しようかな'],
'4': ['4本目か', 'ランチ行きたい', 'ランチ食べた?', 'いってらー'],
'5': ['5本目よ!', '吸いすぎじゃない?', 'たばこか。。', 'らー'],
'6': ['6本目。。', 'ちょっと。。。', 'また。。。?', '休憩。。?'],
'7': ['7本!!!', '吸いすぎよ!', 'ほんとに!?', 'やばない!?'],
'8': ['もう8本目!', '体に悪いよ!', '吸いすぎ!!?', 'あ〜あ'],
'9': ['もうすぐ二桁!', 'あーーー寂しいな', 'また行くの!!?', 'あーーーーー'],
'10': ['10本目です!', 'やめなさい!!!', '知らないよー!', 'やばめ'],
'11': ['死んじゃうよ!', 'ストップ!!!', 'だめ!', 'やばいよ!'],
'12': ['癌になるよ!', '肺が真っ黒!!!', 'ほんとにだめ!', '健康X!'],
'13': ['死んじゃえ!', '肺苦しめ!!!', 'たばこくさい!!', '終わりだね'],
'14': ['死ね!', '最悪!!!', 'ばか!', '終了'],
'15': ['死!', '悪!!!', '苦!', '知らない!'],
}
app = Flask(__name__)
with open('info.json') as f:
secret = json.load(f)
YOUR_CHANNEL_ACCESS_TOKEN =secret['YOUR_CHANNEL_ACCESS_TOKEN']
YOUR_CHANNEL_SECRET = secret['YOUR_CHANNEL_SECRET']
line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(YOUR_CHANNEL_SECRET )
@app.route("/callback", methods=['POST'])
def callback():
signature = request.headers['X-Line-Signature']
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
try:
handler.handle(body, signature)
except InvalidSignatureError:
print("Invalid signature. Please check your channel access token/channel secret.")
abort(400)
return 'OK'
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
if event.message.text == 'たばこ':
set_column()
times = 0
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=reply()))
else:
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text='たばこに行くとくは「たばこ」と書いてください'))
if __name__ == "__main__":
port = os.getenv("PORT")
app.run(host="0.0.0.0", port=port)