LoginSignup
1
2

本日の出演予定をお知らせする機能を追加してみる。[Python+スプシでLINEbot作成その③]

Last updated at Posted at 2023-07-25

※この投稿は、
初学者のオタクが、推しの出演情報を管理するLINEbotを作ってみた。【Python+LINEMessagingAPI+スプレッドシート】
のその3です。

その1はこちら
その2はこちら

やったこと

その2で登録した推しの出演情報の中から、本日放送予定のものをメッセージとして送信する処理を追加しました。

仕様

①本日の出演情報を知りたい場合、「本日」と入力し送信する。
②今日の日付を取得し、Str型に変換。
③スプレッドシートの"日付"列が今日の日付になっているものを抽出し、リスト化する。
④取得したリストをループ処理で回し、送信用文言に加工して文字列として戻す。
⑤該当データがなかった場合、「今日の出演情報はありません。」メッセージを返す。
 該当データがある場合、「今日は
             (名前)さんが(番組名)に出演予定です。」メッセージを返す。
 ※複数データの場合は複数行になる。
⑥「本日」以外の文字が入力された場合は、情報登録処理に移る。

実装

下記の通り、登録処理を定義しました。

app.py
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の時と同じく、メッセージの受信・送信に関わる部分を修正。

app.py
@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 034831.png

②今日(2023/07/26)が放送日のデータがなかった場合、「今日の出演情報はありません。」のメッセージが返ってくる。
スクリーンショット 2023-07-26 035022.png

③その2で実装した登録処理も問題なく使える。
スクリーンショット 2023-07-26 035601.png

④該当データがある場合は、「今日は
             (名前)さんが(番組名)に出演予定です。」のメッセージが返ってくる。
スクリーンショット 2023-07-26 035741.png

⑤該当データが複数ある場合も、全てのデータが返信に記載されている。
スクリーンショット 2023-07-26 040054.png
スクリーンショット 2023-07-26 040233.png

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