※この投稿は、
初学者のオタクが、推しの出演情報を管理するLINEbotを作ってみた。【Python+LINEMessagingAPI+スプレッドシート】
のその3です。
やったこと
その2で登録した推しの出演情報の中から、本日放送予定のものをメッセージとして送信する処理を追加しました。
仕様
①本日の出演情報を知りたい場合、「本日」と入力し送信する。
②今日の日付を取得し、Str型に変換。
③スプレッドシートの"日付"列が今日の日付になっているものを抽出し、リスト化する。
④取得したリストをループ処理で回し、送信用文言に加工して文字列として戻す。
⑤該当データがなかった場合、「今日の出演情報はありません。」メッセージを返す。
該当データがある場合、「今日は
(名前)さんが(番組名)に出演予定です。」メッセージを返す。
※複数データの場合は複数行になる。
⑥「本日」以外の文字が入力された場合は、情報登録処理に移る。
実装
下記の通り、登録処理を定義しました。
import numpy as np
import pandas as pd
# 今日の出演確認
def check_today():
worksheet = auth()
#スプレッドシートから全データを取得
df = pd.DataFrame(worksheet.get_all_records())
#今日の日付をStr型に変換
timestamp = datetime.now()
today = timestamp.strftime('%Y/%m/%d')
#1列目が今日の日付となるレコードを抽出し、numpy配列に変換→リストに変換
today_data = df[df['日付'] == today].to_numpy().tolist()
#ループ処理で出力メッセージをリストに格納
messages = []
for date, name, info in today_data:
messages.append(name + 'さんが' + info + 'に出演予定です。')
#1つに結合
message = '\n'.join(messages[:])
#戻り値
return message
その2の時と同じく、メッセージの受信・送信に関わる部分を修正。
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
if event.message.text == '今日':
message = check_today()
if message == '':
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text='今日の出演情報はありません。'))
else:
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text='今日は\n' + message))
else:
registration(event.message.text)
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text='登録完了しました!'))
変数messageにcheck_today()の戻り値を格納し、空文字かそうでないかに応じて条件分岐する。
動作確認
②今日(2023/07/26)が放送日のデータがなかった場合、「今日の出演情報はありません。」のメッセージが返ってくる。