Python 自動化:用 API 攞即時天氣同匯率,砌成每日簡報

「今日個匯率幾多?」「聽日會唔會落雨?」呢啲問題,其實好多人日日都要上網 check 幾次。但其實你唔使日日襟——寫一個好短嘅 Python 程式,就可以自動幫你攞到最新天氣、匯率,甚至砌埋做每日朝早一封「智能簡報」,開機就有得睇。呢篇就由零開始,教你點用 API 攞即時資料。

乜嘢係 API?

API(Application Programming Interface)簡單嚟講,就係一個「俾程式去問嘢」嘅入口。你想攞天氣,就 send 一個網址出去,對方會回返一堆結構化資料(通常係 JSON 格式)俾你。同你喺瀏覽器襟入去睇唔同,程式可以直接讀到資料,仲可以自動化——呢個先係重點。

順帶一提,JSON 係一種好常用嘅資料格式,睇落似 Python 嘅 dict:用大括號包住,入面係「key : value」一對對。API 回返嚟嘅嘢絕大多數都係 JSON,所以你先要學識 r.json() 呢一步——佢會自動幫你將 JSON 變成 Python dict,之後你想攞邊個 value 就攞邊個。

第一步:安裝 requests

Python 有個內置庫叫 urllib,但好少人直接用,因為 requests 好用十倍。開 terminal 安裝:

pip install requests

第二步:攞香港天氣(Open-Meteo,免費、唔使 key)

Open-Meteo 係一個免費天氣 API,唔使註冊、唔使申請 API key,一 call 就有。我哋攞香港嘅即時溫度、濕度同風速:

import requests url = "https://api.open-meteo.com/v1/forecast" params = { "latitude": 22.3193, # 香港緯度 "longitude": 114.1694, # 香港經度 "current": "temperature_2m,relative_humidity_2m,wind_speed_10m,weather_code", "timezone": "Asia/Hong_Kong", } r = requests.get(url, params=params) data = r.json()["current"] print("溫度:", data["temperature_2m"], "°C") print("濕度:", data["relative_humidity_2m"], "%") print("風速:", data["wind_speed_10m"], "km/h")

三個重點:params 係把查詢參數分開寫,requests 會自動幫你砌落條 URL 度,仲識處理特殊字元;r.json() 直接將回傳嘅 JSON 變成 Python dict;data["current"] 就係即時天氣嗰一組。

第三步:攞匯率(Frankfurter,免費、唔使 key)

匯率我用 Frankfurter,一樣免費唔使 key。例如攞美金兌港紙:

import requests url = "https://api.frankfurter.dev/v1/latest" params = {"from": "USD", "to": "HKD"} r = requests.get(url, params=params) rate = r.json()["rates"]["HKD"] print("1 美金 =", rate, "港紙")

from 係基準貨幣,to 係目標貨幣,Frankfurter 仲支援一次過攞多種(例如 to=HKD,CNY,JPY)。回傳嘅 rates 係一個 dict,直接攞 ["HKD"] 就係匯率。

第四步:合併做「早晨簡報」

學完兩招,可以砌埋一個一 run 就睇晒天氣+匯率嘅小工具:

import requests def get_weather(): url = "https://api.open-meteo.com/v1/forecast" p = {"latitude": 22.3193, "longitude": 114.1694, "current": "temperature_2m,relative_humidity_2m,weather_code", "timezone": "Asia/Hong_Kong"} c = requests.get(url, params=p).json()["current"] return c["temperature_2m"], c["relative_humidity_2m"] def get_rate(): url = "https://api.frankfurter.dev/v1/latest" r = requests.get(url, params={"from": "USD", "to": "HKD"}).json() return r["rates"]["HKD"] t, h = get_weather() rate = get_rate() print("=== 今日簡報 ===") print(f"香港氣溫: {t}°C,濕度 {h}%") print(f"美金兌港紙: {rate}")

兩個 function 各自攞一種資料,之後喺主程式合併輸出。f"..." 係 f-string,可以喺字串入面直接放入變數,慳好多打字。

出錯點算?加 timeout 同 try/except

真實世界入面,API 唔係永遠咁順——可能網絡慢、server 忙,甚至個網址暫時死咗。所以正式用嗰陣,記得加 timeout 同 try/except,避免個程式 hang 死或者一嘢 crash:

try: r = requests.get(url, params=params, timeout=10) r.raise_for_status() # 唔係 200 就即刻彈 error data = r.json() except requests.exceptions.Timeout: print("等太耐,稍後再試") except requests.exceptions.RequestException as e: print("連線出錯:", e)

timeout=10 意思係最多等 10 秒;raise_for_status() 會喺 HTTP 唔係 200 嗰陣自動彈錯,等你唔使去估有冇事。

小貼士:幾時要 API key?

免費 API 一般都有限制,例如一分鐘只准 call 幾次,或者免費版只包基本資料。Open-Meteo 同 Frankfurter 呢啲就完全唔使 key;但好多商業 API(例如 Google、OpenAI、天文台授權數據)就要你註冊、攞條 key,再放喺 header 度先 call 到。呢個留返之後有需要再講。

最後一步:定時自動 run

想佢日日朝早自動 run?Windows 用「工作排程器」(Task Scheduler)揀「每日 08:00」指向你個 script 就搞掂;Mac 用 launchd 都係差唔多。最簡單仲可以用 Python 個 schedule 庫加個無限循環,幾行 code 就做到。呢啲留返下一篇再詳細講。

總結

今篇Python 教學總結: 用 API 攞即時資料,其實一啲都唔難。掌握咗 requests 呢個基本動作,天氣、匯率、股價、交通、新聞……基本上所有「網上有得查」嘅嘢,你都可以寫個程式自動攞返嚟,慳返日日人手襟嘅時間。仲有一個好處:攞返嚟嘅係結構化資料,你可以直接計數、做圖,甚至自動 send 去 WhatsApp 或者 email。下次你想搵咩資料,先諗一諗:「有冇 API 可以攞?」