※この投稿は、
初学者のオタクが、推しの出演情報を管理するLINEbotを作ってみた。【Python+LINEMessagingAPI+スプレッドシート】
のその2です。
やったこと
その1で写経して作成した勤怠管理LINEbotの処理を修正し、TV出演情報を登録するLINEbotにリメイクしました。
仕様
①放送日、出演者、番組名のデータをカンマ区切り1行で記載する。
②Pythonのsplit関数を用いてデータをカンマごとに分割後、1レコードとしてテーブルに保存。
③登録が成功したら、「登録完了しました!」メッセージを返す。
実装
下記の通り、登録処理を定義しました。
app.py
import numpy as np
import pandas as pd
# 登録
def registration(data):
    #カンマ区切りでNumpyの配列にした後、np.newaxisで次元追加(DataFrameに変換した際に1行になるように)
    #array([['日付', '出演者', '番組情報']])
    new_record = np.array(data.split(','))[np.newaxis, :]
    
    worksheet = auth()
    #スプレッドシートから全データを取得
    df1 = pd.DataFrame(worksheet.get_all_records())
    #new_recordをDataFrameに変換
    df2 = pd.DataFrame(new_record)
    df2.columns = ['日付', '出演者', '番組情報']
    #元データと新データの結合
    df = pd.concat([df1, df2], ignore_index=True)
    
    worksheet.update([df.columns.values.tolist()] + df.values.tolist())
    print('登録完了しました')
Flaskを用いて書かれている下記の箇所(メッセージの受信・送信に関わる部分)を、推しTV出演情報bot用に修正。
app.py
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    registration(event.message.text)
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text='登録完了しました!'))
event.message.textには、「ユーザがLINEで送信してきた文字列」が格納されている。
登録処理の為の関数に、送信されてきた文字を渡している。

