Tutorial/Python 快速入門

用 Python 攞匯率嘅方法

幾行代碼就喺 Python 讀到即時同歷史外匯匯率。起步唔使 key,註冊後每月 10,000 次呼叫,而且每個回應都話你知匯率有幾新。

MMexchangerate.dev·Jun 19, 2026·5 分鐘閱讀

喺 Python 攞匯率最短嘅路徑係向 /v1/latest/USD 發一個 GET 請求。返嚟嘅 JSON 有 31 種貨幣嘅匯率,加兩個新鮮度欄位:sourcemarket_session第一次呼叫唔使 API key。

Key points
一次 GET /v1/latest/{base} 就以 JSON 返回 31 種貨幣嘅匯率。
每個回應都帶住 sourcemarket_session,每個匯率有幾新一目了然。
免費計劃每月 10,000 次呼叫、每分鐘 12 次請求,唔使信用卡。
匯率係指示性,為參考同分析而發佈 — 唔係交易報價。

第一次呼叫,零依賴

標準庫以外咩都唔使。一次呼叫用 urllib.request 就搞掂:

python · standard librarycopy
import json
import urllib.request

url = "https://api.exchangerate.dev/v1/latest/USD"
with urllib.request.urlopen(url) as resp:
    data = json.load(resp)

print(data["rates"]["EUR"])     # 0.87531
print(data["source"])            # ecb_daily
print(data["market_session"])    # open

呢段代碼唔使 key 都行到。匿名呼叫按 IP 地址設上限,所以超過簡單測試就應該攞個免費 key。

用 requests 加 API key

大部分項目本身已經用緊 requests。將 key 以 bearer token 傳送:

python · requestscopy
import requests

API = "https://api.exchangerate.dev/v1"
KEY = "exr_live_..."   # free key at https://exchangerate.dev/signup

resp = requests.get(
    f"{API}/latest/USD",
    headers={"Authorization": f"Bearer {KEY}"},
    timeout=10,
)
resp.raise_for_status()
data = resp.json()

print(data["rates"]["GBP"], data["market_session"])

免費 key 將上限提升到每月 10,000 次呼叫、每分鐘 12 次請求。設定唔到 Authorization 嘅平台可以用 X-API-Key 標頭。

換算一個金額

如果要嘅係換算而唔係成個匯率表,就呼叫 /v1/convert。匯率同換算結果一齊返回:

python · convert 100 USD to EURcopy
r = requests.get(
    f"{API}/convert/USD/EUR/100",
    headers={"Authorization": f"Bearer {KEY}"},
).json()

print(r["rate"])         # 0.87572
print(r["converted"])    # 87.57

知道匯率有幾新

每個回應嘅兩個欄位話你知眼前係咩數據。source 係數據類別:綜合現貨嘅 live、歐洲央行參考定盤價嘅 ecb_daily、聯儲局每日系列嘅 fred_dailymarket_sessionopenweekend,或者代表已知非週末休市嘅 interbank_closed

欄位值意思幾時郁
source: live綜合現貨共識值交易週日內(約 60 秒一次)
source: ecb_daily官方參考定盤價每個工作日一次
market_session: weekend星期六或者星期日(銀行同業休市)參考定盤價維持星期五數值;即時數據暫停更新
指示性,唔可以用嚟結算
匯率係為參考、分析同顯示而發佈,唔係交易報價,唔應該用嚟結算交易。每個回應嘅 notice 欄位都帶住呢句話。

讀過去某一日

將日期放入路徑,就可以查詢遠至 1999 年嘅任何一日。回應會多一個 is_forward_filled 欄位,如果嗰日冇發佈匯率(例如週末或者假期)就係 true

python · rate on a past datecopy
r = requests.get(
    f"{API}/2026-03-14/USD",
    headers={"Authorization": f"Bearer {KEY}"},
).json()

print(r["rates"]["JPY"], r["is_forward_filled"])

想一次呼叫攞成個日期範圍嘅序列,就用 /v1/rangestart_dateend_date。另有一篇指南詳細講。

MM
exchangerate.dev
為開發者提供嘅整合指南。

Keep reading

Tutorial用 JavaScript 同 Node.js 做貨幣換算Read Guide一次呼叫攞歷史匯率同時間序列Read Reference點樣讀 source 同 market_sessionRead
更多比較exchangerate.dev vs Fixerexchangerate.dev vs Open Exchange Ratesexchangerate.dev vs Currencylayer
學習Reading source and market_session in your pipelineIndicative vs executable FX rates: what a rates API actually gives youECB reference rates, explained
即時匯率EUR/USDGBP/USDUSD/JPY