用 Python 10 分钟打造实时汇率换算器

·

外汇实时价格跳动频繁,无论是跨境购物、跨国报表,还是数字货币交易,都离不开一款高效、可共享的货币换算工具。本文将以“Streamlit + 免费 API”为核心,手把手带你完成一款可在网页即刻使用的 Python 货币换算器,无需前端基础,也不会超出 50 行代码,读完即可上线分享。

核心关键词


什么是货币换算器?

货币换算器(Currency Converter)是一款将一种货币金额按实时或定期更新的汇率转换为另一种货币金额的小工具。与传统桌面软件相比,网页端换算器有以下优势:

什么是 Streamlit?为什么选它?

Streamlit 是专门为数据科学家设计的开源 Python 库,一句话概括:把脚本秒变 Web 应用。它免去繁琐的 HTML / JS,图表、交互控件可像写函数一样快速加入。
推荐阅读:30 秒生成可视化报告,这套库让老板惊艳

特点速览

  1. 纯 Python 语法;
  2. 部署简单(一条命令 streamlit run);
  3. 内置分享链接,可设置密码权限。

开始动手前,准备三样东西

工具说明
Python 3.8+官网下载安装
免费汇率 API KEY注册即送额度,不写卡
Streamlitpip install streamlit 一行搞定

完整代码结构与逻辑

1. 安装依赖

pip install streamlit requests

2. 项目结构

currency_converter/
├── app.py
└── README.md

3. 核心函数拆解

3.1 获取支持的币种

@st.cache_data(ttl=3600)
def fetch_supported_currencies(api_key: str):
    url = f"https://marketdata.tradermade.com/api/v1/live_currencies_list?api_key={api_key}"
    resp = requests.get(url, timeout=10)
    if resp.status_code != 200:
        st.error("币种列表获取失败,请检查网络或 API Key")
        return []
    return list(resp.json()["available_currencies"].keys())

3.2 实时计算汇率

def convert_currency(amount, from_cur, to_cur, api_key):
    url = (f"https://marketdata.tradermade.com/api/v1/convert"
           f"?api_key={api_key}&from={from_cur}&to={to_cur}&amount={amount}")
    resp = requests.get(url, timeout=10)
    if resp.status_code == 200:
        data = resp.json()
        return data["quote"], data["total"]
    return None, None

3.3 Streamlit 交互界面

st.set_page_config(page_title="Python 货币换算器", layout="centered")
api_key = st.secrets.get("api_key", "输入你的免费API_KEY")
currencies = fetch_supported_currencies(api_key)

st.title("💱 实时 Python 汇率换算器")

left, right = st.columns(2)
with left:
    amount = st.number_input("金额:", min_value=0.01, value=100.0, step=1.0)
with right:
    from_cur = st.selectbox("从 (From):", currencies, index=currencies.index("CNY") if "CNY" in currencies else 0)

targets = st.multiselect(
    "转换到 (To):",
    currencies,
    default=["USD", "EUR", "JPY"]
)

if st.button("⏳ 立即换算"):
    for cur in targets:
        rate, total = convert_currency(amount, from_cur, cur, api_key)
        if rate:
            st.write(f"{amount:.2f} {from_cur} = **{total:.4f} {cur}** *(1 {from_cur} = {rate} {cur})*")
        else:
            st.warning(f"{from_cur} → {cur} 汇率暂不可用")

本地调试 & 一键部署

  1. 本地运行

    streamlit run app.py

    浏览器自动跳转 http://localhost:8501

  2. 共享给他人
    方案 A(零成本):Streamlit Community Cloud

    • 把代码 push 到 GitHub
    • 一键选 repo → deploy,10 秒即生成 HTTPS 链接
      方案 B(服务器):租台 1 核 1G 的轻量云即可承载每日万次请求

点击查看完整部署教程:👉 零运维上线实操手册


常见问题(FAQ)

Q1:免费 API 有调用频率限制吗?
A:多数平台日限 1,000 次请求,足够个人试用。若要扩展,可升级套餐或轮换备用 API。

Q2:如何缓存汇率,降低 API 配额?
A:在 convert_currency 外加一层 functools.lru_cache,或把汇率按小时写进本地 JSON,减少重复请求。

Q3:响应慢怎么办?
A:1. 开启 requests 连接池;2. 使用 CDN 加速域名;3. 对于历史趋势图,先把数据批量拉取再可视化。

Q4:Streamlit 能做深色主题吗?
A:可以,在设置菜单切到 Dark Mode,或自定义 CSS。

Q5:移动端适配效果怎样?
A:Streamlit 会自动响应式布局,300px 屏宽也能完整显示按钮与图表。

Q6:如何添加反向汇率?
A:在输出结果处再调用一次 convert_currency(1, cur, from_cur) 即可。


结语与下一步

至此,我们已经完成一款可共享、可扩展的 Python 货币换算器。你可继续加入:

拷贝代码,改两行配置,即刻上线属于你的外汇工具。祝编码愉快!