--- title: Exchange Rates Service emoji: 💱 colorFrom: blue colorTo: green sdk: docker pinned: false license: mit --- # 💱 汇率换算服务 基于 Python + FastAPI 开发的实时汇率换算服务,支持多 API Key 轮询、数据缓存、实时换算等功能。 ## ✨ 功能特性 - 🔄 **多 API Key 轮询** - 支持配置多个 API Key,自动轮询切换,防止单个 Key 超限 - 💾 **智能缓存** - 定时任务自动更新汇率数据,避免频繁请求 API - 🌍 **161 种货币** - 支持全球 161 种货币的汇率查询和换算 - 💱 **实时换算** - 前端页面支持实时输入实时计算,用户体验流畅 - 🎨 **美观界面** - 响应式设计,支持搜索过滤,常用货币优先展示 - 📊 **RESTful API** - 提供完整的 API 接口,支持第三方集成 ## 🛠️ 技术栈 - **后端**: Python 3.9+, FastAPI, Uvicorn - **定时任务**: APScheduler - **HTTP 客户端**: httpx - **数据验证**: Pydantic - **日志**: Loguru - **前端**: 原生 HTML/CSS/JavaScript ## 📁 项目结构 ``` exchangeRates/ ├── app/ │ ├── __init__.py │ ├── main.py # FastAPI 应用入口 │ ├── config.py # 配置管理 │ ├── models.py # 数据模型 │ ├── api/ │ │ ├── __init__.py │ │ └── routes.py # API 路由 │ ├── services/ │ │ ├── __init__.py │ │ ├── exchange_service.py # 汇率服务核心 │ │ └── scheduler.py # 定时任务 │ └── utils/ │ ├── __init__.py │ ├── logger.py # 日志工具 │ └── currency_names.py # 货币名称映射 ├── static/ │ ├── css/ │ │ └── style.css # 样式文件 │ └── js/ │ └── app.js # 前端交互 ├── templates/ │ └── index.html # 前端页面 ├── .env # 环境变量配置 ├── .env.example # 环境变量示例 ├── requirements.txt # Python 依赖 ├── run.py # 启动脚本 └── README.md # 项目说明 ``` ## 🚀 快速开始 ### 本地部署 #### 1. 克隆项目 ```bash cd C:\Users\Eleven\Desktop\exchangeRates ``` ### 2. 创建虚拟环境 ```bash python -m venv .venv .venv\Scripts\activate ``` ### 3. 安装依赖 ```bash pip install -r requirements.txt ``` ### 4. 配置环境变量 编辑 `.env` 文件,配置你的 API Key: ```env # 多个 API Key 用逗号分隔 API_KEYS=your_api_key_1,your_api_key_2 # 基准货币 BASE_CURRENCY=CNY # 缓存更新间隔(秒) CACHE_UPDATE_INTERVAL=3600 ``` ### 5. 启动服务 ```bash python run.py ``` 或者使用 uvicorn 直接启动: ```bash uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 ``` ### 6. 访问服务 - 🌐 **首页**: http://localhost:8000 - 📚 **API 文档**: http://localhost:8000/docs - 📖 **ReDoc**: http://localhost:8000/redoc ### Hugging Face Spaces 部署 本项目支持一键部署到 Hugging Face Spaces。 #### 1. 创建 README.md 头部配置 在项目根目录的 README.md 文件顶部添加以下 YAML 配置: ```yaml --- title: Exchange Rates Service emoji: 💱 colorFrom: blue colorTo: green sdk: docker pinned: false license: mit --- ``` #### 2. 创建 Dockerfile 项目需要包含 Dockerfile 用于 Spaces 部署: ```dockerfile FROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 7860 CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "7860"] ``` #### 3. 配置环境变量 在 Hugging Face Spaces 设置中添加 Secrets: - `API_KEYS`: 你的 ExchangeRate-API Keys(逗号分隔) - `BASE_CURRENCY`: 基准货币(默认 CNY) - `CACHE_UPDATE_INTERVAL`: 缓存更新间隔(默认 3600) #### 4. 部署步骤 1. 在 [Hugging Face](https://huggingface.co/) 创建新的 Space 2. 选择 Docker SDK 3. 上传项目文件或连接 Git 仓库 4. 在 Settings 中配置 Secrets 5. Space 将自动构建和部署 #### 5. 访问服务 部署成功后,可通过 `https://huggingface.co/spaces/YOUR_USERNAME/YOUR_SPACE_NAME` 访问服务。 ## 📡 API 接口 ### 获取所有汇率 ```http GET /api/rates ``` 响应示例: ```json { "success": true, "base_currency": "CNY", "rates": { "USD": 0.1413, "EUR": 0.1212, ... }, "last_update": "Fri, 05 Dec 2025 00:00:01 +0000", "cached_at": "2025-12-05T10:30:00", "currencies_count": 161 } ``` ### 获取特定货币汇率 ```http GET /api/rates/{currency} ``` 示例:`GET /api/rates/USD` ### 货币换算 ```http POST /api/convert Content-Type: application/json { "from_currency": "USD", "to_currency": "CNY", "amount": 100 } ``` 或使用 GET 方式: ```http GET /api/convert/USD/CNY?amount=100 ``` ### 批量换算 ```http POST /api/batch-convert Content-Type: application/json { "base_currency": "USD", "amount": 100 } ``` 或使用 GET 方式: ```http GET /api/batch-convert/USD?amount=100 ``` ### 获取货币列表 ```http GET /api/currencies ``` ### 服务状态 ```http GET /api/status ``` ### 强制刷新缓存 ```http POST /api/refresh ``` ## ⚙️ 配置说明 | 配置项 | 说明 | 默认值 | |--------|------|--------| | API_KEYS | API Key 列表(逗号分隔) | - | | BASE_CURRENCY | 基准货币 | CNY | | CACHE_UPDATE_INTERVAL | 缓存更新间隔(秒) | 3600 | | REQUEST_TIMEOUT | 请求超时时间(秒) | 10 | | MAX_RETRIES | 最大重试次数 | 3 | | SERVER_PORT | 服务端口 | 8000 | ### Hugging Face Spaces 配置参数 | 参数 | 说明 | 示例值 | |------|------|--------| | sdk | SDK 类型 | docker | | app_port | 应用端口(Spaces 默认 7860) | 7860 | | title | Space 标题 | Exchange Rates Service | | emoji | Space 图标 | 💱 | | colorFrom | 渐变起始色 | blue | | colorTo | 渐变结束色 | green | | pinned | 是否固定在个人主页 | false | | license | 开源协议 | mit | ## 🔑 API Key 获取 1. 访问 [ExchangeRate-API](https://www.exchangerate-api.com/) 2. 注册账号(免费版每月 1500 次请求) 3. 获取 API Key 4. 配置到 `.env` 文件中 建议配置 3-5 个 API Key 以实现轮询,避免单个 Key 超限。 ## 📝 注意事项 1. **API 限制**: 免费版 API 每月 1500 次请求,请合理设置缓存更新间隔 2. **缓存策略**: 汇率数据每日更新一次(UTC 00:00),建议缓存间隔设为 1 小时 3. **Key 管理**: 系统自动管理 Key 状态,失败的 Key 会进入冷却期 4. **错误处理**: API 请求失败时会自动重试并切换 Key ## 🤝 贡献 欢迎提交 Issue 和 Pull Request! ## 📄 许可证 MIT License