當你把零散的技術組合起來,就成了印鈔機
在前面的章節,我們學會了三項獨立的神奇技術:
- Python 爬蟲:能夠去競爭對手的網站,把商品價格全部抓下來。
- Pandas 數據分析:能夠在幾秒鐘內,計算出平均價格與最高/最低價。
- 資料視覺化:能夠把這些冷冰冰的數字,變成一張老闆看得懂的精美長條圖。
如果你的老闆要你「現在」做一份報告,你可以花 5 分鐘把這三個程式跑一遍交差。 但如果老闆說:「這個報表很棒!從今天開始,你每天早上 8 點都要把最新一天的報表放到我的辦公桌上!」
你難道要設定鬧鐘,每天早上 7 點 50 分起床去點擊執行程式嗎? 當然不要。一個真正的 Vibe Coder,會把這些腳本組裝成一個「全自動的超級機器人」,讓它在雲端伺服器上 24 小時為你工作。
終極大會串:寫一個「會自己寄 Email」的綜合腳本
今天我們要請 AI 幫我們寫一份「大融合」的 Python 腳本。 這份腳本在啟動後,會依序執行以下動作:爬資料 -> 算平均 -> 畫圖表 -> 最後把這張圖表當作附件,自動發送一封 Email 到老闆的信箱!
這牽涉到了 Python 發送信件的核心套件:smtplib 與 email 模組。
要在 Python 中發信,最推薦的做法是使用 Gmail 的 SMTP 伺服器,但你必須先去 Google 帳號設定裡開啟「應用程式密碼 (App Password)」,絕對不要把你自己真實的 Gmail 登入密碼寫在程式碼裡!
【全自動發信報表 Prompt】 我目前已經寫好了
scrape_laptops()(爬蟲函式) 與draw_price_chart()(畫圖函式,會產出price_compare.png)。 請幫我寫一個名為send_report_email的函式。 需求如下:
- 請使用 Python 的
smtplib與- 信件主旨請設定為:「📊 每日市場動態:電競筆電競品價格分析報表」。
- 信件內文 (Body) 請寫上一段專業的報告開場白。
- 最重要的一步:請將剛剛畫好的
price_compare.png圖片檔案,作為附件 (Attachment) 夾帶在這封 Email 裡面。- 寄送完成後,請印出「✅ 報表已成功發送至老闆信箱!」。
- 請將完整的寄信邏輯包裝好,並加上中文註解。
AI 產出的自動發信腳本:
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
import os
def send_report_email():
# 你的 Gmail 帳號與剛申請的「應用程式專用密碼」
# (在實戰中,這些機密資訊應該放在 .env 檔案裡,這裡為了教學先直接寫上)
sender_email = "your_email@gmail.com"
sender_password = "你的_APP_密碼"
receiver_email = "boss@company.com"
# 1. 建立信件的基底 (包含主旨、收件人)
msg = MIMEMultipart()
msg['Subject'] = "📊 每日市場動態:電競筆電競品價格分析報表"
msg['From'] = sender_email
msg['To'] = receiver_email
# 2. 撰寫信件內文並塞入信封
body_text = """
老闆早安:
這是今日 (2024年) 最新的電競筆電競品市場價格分析報表。
我們已經爬取了三大電商平台的最新報價,並針對各品牌繪製了平均價格長條圖。
詳細圖表請見本信件的附件 (price_compare.png)。
祝 順心
Vibe 資料分析團隊
"""
msg.attach(MIMEText(body_text, 'plain', 'utf-8'))
# 3. 把圖片當作附件夾帶進去
file_path = 'price_compare.png'
if os.path.exists(file_path):
with open(file_path, 'rb') as file:
attachment = MIMEApplication(file.read(), _subtype="png")
attachment.add_header('Content-Disposition', 'attachment', filename=file_path)
msg.attach(attachment)
else:
print("🚨 找不到圖片檔案,無法加入附件!")
return
# 4. 登入 Google 的郵局 (SMTP),並把信件寄出去!
try:
# 使用 Google 的 SMTP 伺服器 (Port 587 代表使用安全加密通道)
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls() # 啟動加密
server.login(sender_email, sender_password)
server.send_message(msg)
server.quit() # 寄完信後關閉連線
print(f"✅ 報表已成功發送至老闆信箱 ({receiver_email})!")
except Exception as e:
print(f"🚨 寄信失敗:{e}")
# ==========================================
# 終極大會串:一鍵執行所有任務
# ==========================================
if __name__ == "__main__":
print("🤖 啟動每日報表機器人...")
# scrape_laptops() # 執行爬蟲
# draw_price_chart() # 執行畫圖
send_report_email() # 寄出信件!
把它變成真正的「自動化」:Crontab 與 Github Actions
現在這支程式已經完美運作了,但我們還差最後一哩路:「如何讓它每天早上 8 點自己跑起來?」
你有兩種主流的做法:
- 老派工程師的浪漫 (Crontab):如果你家裡有一台不關機的舊筆電,或是你租了一台 AWS 的 Linux 伺服器。你可以設定系統內建的
crontab指令:0 8 * * * python3 /path/to/your/script.py這行神奇的密碼代表:每天的 08:00,系統會自動去幫你按兩下這個 Python 腳本。 - 現代雲端霸主 (GitHub Actions):這是不花半毛錢、也不用開著電腦的最強神技。
你可以把這支 Python 腳本推送到 GitHub 上。然後在 GitHub 倉庫裡面寫一個名為
.github/workflows/schedule.yml的設定檔。 你可以告訴 GitHub:「請每天早上 8 點,開啟一台免費的虛擬機,幫我下載 Python、幫我安裝套件、最後幫我執行這支寄信程式!」
恭喜你!透過這 5 堂課的洗禮,你已經從一個不懂資料的麻瓜,進化成了能夠獨立開發出「全自動商業情報系統」的頂級資料工程師! 未來的世界是數據的天下,而現在,這把開啟數據寶庫的鑰匙,已經穩穩地握在你的手裡了。向著下一個 AI 專案前進吧!