在第 27 天,我們將專注於為 Line Bot 增加資料存儲的功能,通過將用戶交互資料保存到資料庫,為未來的資料分析和個性化互動做準備。
選擇資料庫類型:
本次使用 SQLite(適合測試和開發環境):
安裝 SQLite 驅動:
pip install sqlite3
創建資料庫和表:
line_bot.db 的資料庫,並建立一個 user_messages 表來存儲用戶的聊天資料。import sqlite3
# 連接到資料庫(如果不存在則會創建)
conn = sqlite3.connect('line_bot.db')
cursor = conn.cursor()
# 創建 user_messages 表
cursor.execute('''
    CREATE TABLE IF NOT EXISTS user_messages (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        user_id TEXT NOT NULL,
        message TEXT NOT NULL,
        timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
    )
''')
conn.commit()
conn.close()
在接收用戶消息時保存到資料庫:
from linebot import LineBotApi, WebhookHandler
from linebot.models import MessageEvent, TextMessage
import sqlite3
line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')
handler = WebhookHandler('YOUR_CHANNEL_SECRET')
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    user_id = event.source.user_id
    user_message = event.message.text
    # 將用戶消息存入資料庫
    conn = sqlite3.connect('line_bot.db')
    cursor = conn.cursor()
    cursor.execute('''
        INSERT INTO user_messages (user_id, message)
        VALUES (?, ?)
    ''', (user_id, user_message))
    conn.commit()
    conn.close()
    # 回覆用戶
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text="您的消息已收到!")
    )
查看存儲的資料:
sqlite3 line_bot.db
user_messages 表中的資料:SELECT * FROM user_messages;
錯誤處理:
try:
    conn = sqlite3.connect('line_bot.db')
    cursor = conn.cursor()
    cursor.execute('''
        INSERT INTO user_messages (user_id, message)
        VALUES (?, ?)
    ''', (user_id, user_message))
    conn.commit()
except sqlite3.Error as e:
    print(f"An error occurred: {e}")
finally:
    conn.close()
優化資料庫連接: