輸入「股號」或「股名」(台股 / 美股皆可),回覆該股的即時股價 + 近月走勢圖 + 最新新聞 + 分析展望,並可加入自選股、設定到價提醒。
- 股價:直接呼叫 Yahoo Finance chart API(query1/query2 雙主機重試),失敗時以 Gemini grounding 抓價備援
- 走勢圖:QuickChart(近月 sparkline,漲紅 / 跌綠)
- 新聞 / 展望:Gemini + Google 搜尋 grounding
- 回覆樣式:Flex Message 圖卡(發送失敗自動退回純文字)
- 平台:LINE Messaging API
範例輸入:2330、台積電、AAPL、輝達
先前用 yfinance 抓價,它在 Render / Replit 等雲端主機的 IP 很常被 Yahoo 擋掉或限流,所以連 AAPL 這種正確代號也會回「查不到」。這版已改成直接打 Yahoo 的 chart JSON API(帶瀏覽器 User-Agent + 雙主機重試),並加上 Gemini 抓價備援,穩定很多。
另外,中文股名(如「上詮」)查不到、以及沒有新聞/展望,通常是因為 GEMINI_API_KEY 沒設定或設錯。請務必在部署平台把這個環境變數設好。
👉 部署後打開首頁網址(https://你的網址/)會回傳一段 JSON,可直接確認金鑰有沒有吃到:
{"ok": true, "line_secret": true, "line_token": true, "gemini": true, "model": "gemini-2.5-flash"}只要哪一項是 false,就是那個環境變數沒設好。
| 檔案 | 說明 |
|---|---|
app.py |
LINE webhook、按鈕、到價提醒排程端點 |
services.py |
代號解析、抓股價、走勢圖、Flex 圖卡、指令 |
store.py |
自選股 / 到價提醒的儲存(有 DATABASE_URL→Postgres,否則→JSON) |
test_bot.py |
單元測試(python test_bot.py 或 pytest,共 19 項) |
DEPLOY_CHECKLIST.md |
一頁式部署檢查清單(含每步驗證方式) |
requirements.txt |
相依套件 |
.env.example |
環境變數範本 |
| 變數 | 必填 | 說明 |
|---|---|---|
LINE_CHANNEL_SECRET |
✅ | LINE Developers → Channel → Basic settings |
LINE_CHANNEL_ACCESS_TOKEN |
✅ | Channel → Messaging API → 發行 token |
GEMINI_API_KEY |
✅ | Google AI Studio(沒設就沒有新聞/展望與中文股名解析) |
DATABASE_URL |
🟡 | Postgres 連線字串。設了自選/提醒才不會在重新部署後消失;沒設則存本機 JSON |
GEMINI_MODEL |
⬜ | 預設 gemini-2.5-flash |
CRON_SECRET |
⬜ | 保護到價提醒端點(見下方) |
DATA_DIR |
⬜ | 沒有 DATABASE_URL 時,JSON 存放資料夾,預設 ./data |
需要一個公開 HTTPS 網址給 LINE 當 webhook。
- 把這個資料夾推上 GitHub。
- Render → New → Web Service → 連 repo。
- 設定:
- Build Command:
pip install -r requirements.txt - Start Command:
gunicorn app:app --bind 0.0.0.0:$PORT
- Build Command:
- Environment 加入上面必填的 3 個變數(+選填)。
- 部署後 webhook URL =
https://xxx.onrender.com/callback
- 上傳這些檔案,Secrets 加入環境變數。
- Run 指令:
gunicorn app:app --bind 0.0.0.0:$PORT - Deploy 後 webhook URL =
https://xxx.replit.app/callback
免費方案閒置會休眠,第一則訊息可能較慢。
- LINE Developers → Channel → Messaging API
- Webhook URL 填
.../callback,按 Verify(回 Success)。 - 打開 Use webhook。
- 關閉自動回應訊息(LINE Official Account Manager → 回應設定),否則會蓋掉機器人。
- 加好友,輸入
2330測試 🎉
| 輸入 | 功能 |
|---|---|
2330 / 台積電 / AAPL / 輝達 |
查即時股價 + 走勢圖 + 新聞 + 展望 |
| 點圖卡 ⭐ 加入自選 | 加入自選股 |
| 點圖卡 🔔 到價提醒 | 依提示設定提醒 |
自選 |
查看自選股(含即時報價) |
提醒 2330 1100 |
設定到價提醒(漲到 / 跌到自動判斷) |
提醒清單 |
查看所有提醒 |
移除 2330 |
從自選 / 提醒移除 |
到價提醒需要「定時檢查現價 → 觸發時推播」。程式已備好端點:
POST https://你的網址/tasks/check-alerts
Header: X-Cron-Secret: <你的 CRON_SECRET>
用任一免費排程服務定時打它即可(例如 cron-job.org、Render Cron Job):
- 頻率建議 5~15 分鐘一次
- 若有設
CRON_SECRET,記得帶上同名 Header(沒設則不驗證,但建議設)
觸發後機器人會主動推播給該使用者,並自動移除該筆提醒。
只要設定 DATABASE_URL,store.py 就會自動改用 PostgreSQL,重新部署也不會掉資料;沒設則退回本機 JSON(Render / Replit 免費方案的檔案系統是暫時性的,重新部署或休眠重啟會清空)。程式碼不用改,資料表會自動建立。
取得免費連線字串(擇一):
Neon(純 Postgres,最簡單)
- 到 neon.tech 註冊 → 建立 Project。
- 複製 Connection string(長得像
postgresql://user:pass@ep-xxx.neon.tech/neondb?sslmode=require)。 - 貼到部署平台的
DATABASE_URL。
Supabase
- supabase.com 建立 Project。
- Project Settings → Database → Connection string(URI)。
- 把裡面的
[YOUR-PASSWORD]換成你的資料庫密碼,整段貼到DATABASE_URL。
已在真正的 PostgreSQL 上做過整合測試:自選/提醒的新增、去重、刪除、跨程序(重新部署)讀取、到價觸發推播全部正常。
- 收訊息 → 先判斷是不是指令(自選 / 提醒 / 移除)。
- 否則當股號/股名:純數字→台股試
.TW/.TWO;英文→美股;中文→Gemini 轉代號。 - Yahoo chart API 抓報價與近月收盤序列(失敗→Gemini 抓價備援)。
- QuickChart 產走勢縮圖;Gemini+Google 搜尋抓新聞與展望。
- 組成 Flex 圖卡回覆,末端固定加「非投資建議」聲明。
- 每次查詢會做 1~2 次 Gemini 呼叫,消耗 API 額度。
- 回覆最快數秒、慢則十幾秒(等 Gemini 搜網),已加「輸入中…」動畫。
- 股價 / 展望僅供參考,非投資建議。