※この投稿は、
初学者のオタクが、推しの出演情報を管理する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)が放送日のデータがなかった場合、「今日の出演情報はありません。」のメッセージが返ってくる。





