今日對話:如何把 API 與防護網結合起來?
我的 Prompt(提示詞):
「我想要寫一個能查詢『台北即時天氣』的 Python 小程式。請幫我找一個不需要註冊、免 API Key 就能直接抓取 JSON 資料的免費天氣 API。另外,請結合昨天學的 try-except 機制,示範如果今天我的電腦剛好沒連上網路,程式該如何攔截錯誤並給出優雅的提示,而不是直接當機?」
AI 導師非常欣賞這個實戰點子,並幫我挑選了一個對新手極度友善的 API:
台北的緯度 (latitude) 約 25.04,經度 (longitude) 約 121.53。
我在 VS Code 建立了 day24.py檔案,把 requests 套件和 try-except 組合在一起,打造我的天氣小助理:
python
import requests
print("🌤️ 歡迎使用即時天氣小助理!")
print("📡 正在為您連線至氣象衛星...")
print("-" * 40)
#1. Open-Meteo API 網址 (設定為台北市的經緯度,並要求回傳 current_weather)
url = "https://api.open-meteo.com/v1/forecast?latitude=25.04&longitude=121.53¤t_weather=true"
#2. 佈下安全防護網
try:
# 嘗試發送網路請求 (timeout=5 代表如果連線超過 5 秒沒反應就放棄)
response = requests.get(url, timeout=5)
#檢查伺服器是否正常回應 (狀態碼 200)
#如果不是 200,主動拋出錯誤讓 except 接住
response.raise_for_status()
#3. 解析 JSON 資料
data = response.json()
current = data["current_weather"]
#4. 完美印出結果
print(f"📍 查詢地點:台灣 台北市")
print(f"🌡️ 目前溫度:{current['temperature']} °C")
print(f"💨 目前風速:{current['windspeed']} km/h")
print(f"🕒 資料更新時間:{current['time'].replace('T', ' ')}")
#5. 專門攔截「網路連線」相關的錯誤!
except requests.exceptions.RequestException as e:
print("❌ [連線失敗] 哎呀!無法連上氣象局。")
print("👉 請檢查您的網路是否有開啟,或者稍後再試。")
#print(f"詳細錯誤訊息:{e}") # 工程師除錯用,可以先隱藏
#6. 攔截其他未知錯誤
except Exception as e:
print(f"❌ 發生未知錯誤:{e}")
print("-" * 40)
print("🤖 助理服務結束,祝您有美好的一天!")
今天不僅從真實世界的伺服器抓取了即時資料,還預判了使用者的網路狀況並做了完美防護。