Spaces:
Sleeping
Sleeping
| 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 | |