前幾天已經完成 SubWise 的第一階段基礎建設:
目前 SubWise 已經具備:
使用者 → LINE Bot → Flask Backend → 回覆訊息
但是一個真正的記帳管理工具,不能只會聊天。下一步需要解決的重要問題是:
使用者輸入的消費紀錄,要儲存在哪裡?
因此今天開始進入 SubWise 的資料層建置,目標是:建立 Google Cloud 環境,讓 Python Backend 能安全連線 Google Sheets,為後續 AI 記帳功能建立資料基礎。
首先建立專屬於 SubWise 的 Google Cloud 專案。Google Cloud Project 是後續管理各種雲端服務的基礎,未來包含 Google Sheets API、Google Drive API、Gemini API 等其他雲端服務,都會透過這個專案統一管理。完成後,SubWise 正式擁有自己的雲端開發環境。
在 Google Cloud Console 中啟用了兩個 API:
接著建立 SubWise 專用的 Service Account。Service Account 可以理解為「給程式使用的 Google 帳號」,與一般使用 Gmail 登入不同,後端程式會透過 Service Account 進行驗證:
Python → Service Account → Google Sheets
這種方式更符合正式專案開發流程,也避免直接使用個人帳號,是業界常見的服務對服務驗證做法。
建立 Service Account 後下載 credentials.json,這份檔案包含 Service Account 身份資訊、私密金鑰、Google API 驗證資訊,Python 後續會用它完成身份驗證。
由於
credentials.json包含重要資訊,因此不能提交到公開 GitHub。修改.gitignore加入credentials.json,並確認git status沒有顯示這個檔案,代表「程式可以使用憑證,但 GitHub 不會上傳敏感資訊」,完成基本安全設定。
建立 Google Sheet「SubWise Database」,並開始設計未來資料結構,今天先建立三個工作表:
1.Expenses(一般消費紀錄)
| Date | Category | Amount | Note |
|---|
未來使用者輸入「午餐120」,AI 分析後會寫入這張表。
2.Subscriptions(訂閱服務管理)
| Service | Price | Billing Cycle | Next Billing Date | Status |
|---|
未來可以管理 Netflix、Spotify、ChatGPT Plus 等定期扣款服務。
3.Settings(系統設定)
| Key | Value |
|---|
未來可以保存使用者偏好、Bot 設定、AI Prompt 設定。
在開始寫入資料前,先設計 SubWise 第一版資料結構,將消費紀錄、訂閱管理與系統設定分開管理,讓後續 AI 記帳功能有清楚的資料基礎:
Google Sheet 建立完成後,需要分享給 Service Account,權限設定為 Editor,讓後端程式未來可以讀取資料、新增資料、更新資料。至此,Python 已具備操作 SubWise Database 的完整權限。
在虛擬環境中安裝:
pip install gspread google-auth
今天沒有直接修改主程式 app.py,而是新增獨立的 test_google.py,原因是先確認外部服務連線正常,再整合進 LINE Bot,避免同時除錯兩件事。測試流程:
credentials.json → Google Authentication → gspread → SubWise Database
執行 python test_google.py,成功得到:
🎉 Google Sheets 連線成功!
📄 試算表名稱:SubWise Database
📚 工作表數量:3
目前工作表:
✅ Expenses
✅ Subscriptions
✅ Settings
🎯 Day06 驗證完成!
這代表五件事同時成立:Python 成功讀取 credentials.json、Google Cloud 驗證成功、Service Account 權限正確、Google Sheets API 正常運作、成功取得 SubWise Database 結構。
透過 Python 撰寫測試程式,成功使用 Service Account 驗證 Google Sheets,代表 SubWise Backend 已經可以與雲端資料庫溝通:
1.credentials.json 不應該上傳 GitHub
建立 Service Account 後,Google Cloud 會提供 credentials.json,這份檔案包含完整驗證資訊。一開始才意識到,這不是普通設定檔,而是具有 API 存取權限的敏感憑證——如果直接提交到 GitHub,其他人可能取得 Google API 權限,可能造成資料外洩,甚至產生額外 API 費用。因此把 credentials.json 加入 .gitignore,並確認 Git 狀態沒有追蹤這個檔案。這也是第一次在開發過程中實際處理程式碼安全性與敏感資訊管理。
2.Service Account 建立完成,不代表可以存取 Google Sheet
剛開始以為建立 Service Account 後,Python 應該就可以直接連上 Google Sheet,但實際測試時才發現:Service Account 是一個「新的 Google 身份」,並不是我的個人帳號。因此還需要額外一步,把 Google Sheet 分享給 Service Account 的 Email,並設定 Editor 權限。這個觀念很重要——Python → Service Account → Google Sheet 權限,三者缺一不可。
今天 SubWise 完成了第一版資料層架構,從原本:
LINE Bot → Flask Backend → 回覆訊息
進化成:
LINE Bot → Flask Backend → Google Sheets Database
今天完成:
目前 SubWise 已經具備儲存使用者資料的基礎能力,下一步就可以開始讓「LINE 使用者輸入 → AI 分析內容 → 寫入 Google Sheets」,真正開始實現 AI 記帳。
Day 07 正式進入 Google Sheets API + Python 寫入資料,目標是讓程式完成第一次真正的「存資料」動作——從 Python 主動新增第一筆資料到 Google Sheets,讓 SubWise 的記帳功能不再只是測試連線,而是真的能保存資料:
| Date | Category | Amount | Note |
|---|---|---|---|
| 2026/08/06 | Food | 120 | Lunch |