银行汇率查询:搭建企业汇率看板——币种列表 + 实时查询 + 历史走势
# 银行汇率查询:搭建企业汇率看板——币种列表 + 实时查询 + 历史走势
> 接口:银行汇率查询(apiCode=105)· 免费 · 接入点:币种列表 / 汇率查询 / 历史汇率 · 适用人群:财务、企业 IT、数据团队 · 阅读时间:约 8 分钟
## TL;DR
- 看板三块拼图:币种列表(下拉)→ 实时查询(当下牌价表)→ 历史汇率(走势线)。
- 架构上「定时拉取 + 本地缓存 + 落库」,前端只读写你自己的存储,不直接打接口。
- 免费档位下务必用缓存与限流(见[缓存指南](https://www.showapi.com/guides/exchange-rate-cache-105)),避免触顶。
## Why
企业财务需要一块长期稳定可看的汇率看板:今天主流货币牌价一目了然,还能拉出某货币近几个月的走势做分析。与其让前端每个标签都直连接口(既慢又容易触达档位限制),不如用「后端定时采集 + 落库 + 前端只读」的架构,稳定可控。
## What
| 模块 | 接入点 | 职责 |
|------|--------|------|
| 货币选择 | 币种列表(105-35) | 看板货币下拉框数据源 |
| 实时牌价 | 汇率查询(105-30) | 当前牌价表 |
| 历史走势 | 历史汇率(105-34) | 按月份/区间取点画走势线 |
| 调度 | 定时器 | 每 N 分钟采集实时、每天采集历史 |
## How
### 步骤 1:后端定时采集(Python 示意)
```python
import requests, sqlite3, time
def fetch(ap, data):
js = requests.post(f"https://route.showapi.com/{ap}",
params={"appKey": "YOUR_APPKEY"}, data=data, timeout=10).json()
return js if js.get("showapi_res_code") == 0 and js["showapi_res_body"].get("ret_code") == 0 else None
def collect_realtime():
b = fetch("105-30", {"code": ""}) # 全量
if not b: return
conn = sqlite3.connect("fx.db")
for it in b["list"]:
conn.execute("INSERT OR REPLACE INTO rate(code,name,hui_in,hui_out,zhesuan,at) "
"VALUES(?,?,?,?,?,?)",
(it["code"], it["name"], it.get("hui_in"), it.get("hui_out"),
it.get("zhesuan"), int(time.time())))
conn.commit(); conn.close()
def collect_history(code, month):
b = fetch("105-34", {"code": code, "month": month, "name": "", "startDate": "", "endDate": ""})
if not b: return
return [(r["publish_time"], r["middle_rate"]) for r in b["list"]] # 用于画走势
```
### 步骤 2:前端只读自己的库
前端查询你落库的 `rate` 表与历史点表,不直连接口,体验更顺、也不占额度。
### 步骤 3:走势图
用历史接入点按月取 `middle_rate`,前端用任意图表库(ECharts/Chart.js)画折线。长区间拆成多个月份循环拉取,注意单区间 ≤90 天。
## 返回示例与解析
- 实时:`list[].{code,name,hui_in,hui_out,zhesuan,...}`,详见[字段全解](https://www.showapi.com/guides/exchange-rate-fields-105)。
- 历史:`list[].{publish_time,middle_rate,buying_rate,selling_rate,...}`,详见[历史汇率指南](https://www.showapi.com/guides/exchange-rate-history-guide-105)。
## 进阶 / 边界
- **采集频率**:实时每 1~5 分钟一次即可(牌价 10s 更新,分钟级足够),配合缓存更省。
- **今天的历史没有**:历史数据次日 1 点入库,当日走势用实时采集点拼,不要指望历史接入点给今天。
- **口径统一**:实时与历史字段名不同(hui_out vs selling_rate),落库时映射到统一列,避免前端混乱。
- **免责声明**:看板须标注「数据延迟,仅供参考」。
## FAQ
**Q:前端能直接调接口吗?**
可以但不推荐:直连既受 CORS 限制,又容易把免费档位刷爆。推荐后端采集 + 落库 + 前端只读。
**Q:走势图为什么今天缺数据?**
历史接入点只到「昨日」,当天点需你自己用实时采集落库补齐。
**Q:实时和历史字段对不上怎么办?**
两者字段命名不同、口径不同(历史为 100 外币兑人民币),落库时统一映射即可。
## 相关能力 / 下一步阅读
- [银行汇率查询:免费档位下如何做本地缓存避免触达使用档次限制?](https://www.showapi.com/guides/exchange-rate-cache-105)
- [银行汇率查询:跨境电商/留学缴费如何统一管理多币种牌价?](https://www.showapi.com/guides/exchange-rate-crossborder-105)
- **本系列共 13 篇**:查看[银行汇率查询指南总目录](https://www.showapi.com/guides/exchange-rate-guides-105)