2026 年 9 月 30 日,1 美元可兑换 17,891.1 印度尼西亚盾。向 observations 端点传入基础货币、报价货币和日期,然后从当天那一行读取汇率。
用 API 获取指定日期的汇率
- 选择货币和日期 将基础货币放在 observations 路径中,将报价货币放在
currencies中;USD 兑 IDR 时,路径用USD,参数用IDR。把start_date和end_date都设为2026-09-30,即可请求 2026 年 9 月 30 日的观测值,范围两端使用同一个日期。 - 设置你的 API 密钥 获取免费密钥,并保存在环境变量
NARWHAL_API_KEY中。脚本会读取该变量作为Authorization: Bearer YOUR_KEY请求头,所以发出请求之前,请先把密钥放进环境。 - 请求观测值 使用此处所示的日期参数和授权请求头调用 observations 端点。脚本读取响应中的
observations数组,并把返回的每一天的日期与rates数组一起打印出来,报价货币及其汇率就在rates数组中成对出现。import os import requests r = requests.get( "https://api.narwhalapi.com/v1/fx/rates/USD/observations", params={"currencies": "IDR", "start_date": "2026-09-30", "end_date": "2026-09-30"}, headers={"Authorization": f"Bearer {os.environ['NARWHAL_API_KEY']}"}, timeout=10, ) r.raise_for_status() for day in r.json()["observations"]: print(day["date"], day["rates"]) - 读取返回的日期和汇率 2026 年 9 月 30 日的输出是
2026-09-30 [{'currency': 'IDR', 'rate': '17891.1'}];在自己的记录中把汇率对应到日期时,请使用返回行上的日期。如果需要一系列日期,请求一个起始日期和一个结束日期,再用limit和next_cursor对观测值分页,因为一页可能包含很多天。
查询过去的日期请使用 GET /v1/fx/rates/{base}/observations。获取当前汇率的端点是 GET /v1/fx/rates/{base}?currencies=...;带日期的请求应发到 observations 路径,并带上起止参数。
响应包含 base、observations 和 next_cursor。observations 中的每一行都有 date 和 rates 数组,每个汇率都有 currency 和 rate 字段。为表格提取数值时,从观测值中取日期,从 IDR 条目中取数值,保持所请求的报价货币与返回汇率之间的对应关系。
如果请求返回错误,响应体采用 application/problem+json,包含 status、code、detail 和 request_id。在把响应当作观测值之前,先读取错误的 code 和 detail。错误响应体带有这些错误字段;带日期的汇率在成功响应的 observations 数组中。
不用代码查找历史汇率
想手动查某个日期,可以使用显示历史汇率的 Narwhal 货币页面。找到所需的货币和日期,复制到表格时把日期和汇率一起保留。带日期的数值,能让你日后追溯换算所用的那条观测值。
如果是一批日期,把脚本写出的日期和汇率粘贴到表格里,日期放在查找列,汇率放在后面一列。公式中用 date 表示要查的日期,用 table 表示这些列,并把这两个占位符换成你表格中的日期引用和查找范围。末尾的 FALSE 表示精确匹配日期,2 表示取汇率那一列。请把货币对与表格放在一起,这样就知道粘贴的数值属于哪个基础货币和报价货币,并用返回的观测日期作为查找列中的日期。
=VLOOKUP(date, table, 2, FALSE)不同情况应选哪种方法
| 情况 | 最合适的方法 | 原因 |
|---|---|---|
| 单个日期,手动查询 | 货币页面 | 货币页面显示历史汇率 |
| 日期列表 | observations 端点 | 请求起止日期,再逐个查找日期 |
所有账户都能读取完整历史。系列的起点可能晚于你请求的起始日期,所以请查看返回的第一个日期。
如果该日期是周末或节假日怎么办?
如果所请求的日期没有汇率,就取在此之前最近一个有数据行的日期。汇率是每日观测值,周末等没有汇率的日子没有数据行,因此请求某个周六时,不会返回该日期的观测值。
记录是哪条观测值提供了该汇率时,请使用较早那一行的日期。没有观测值的日期如何回退,请参阅发票日期的做法。
汇率是什么意思?
汇率是基础货币每一单位对应的报价货币单位数。在 2026 年 9 月 30 日的 USD/IDR 观测值中,USD 是基础货币、IDR 是报价货币,所以 17,891.1 表示每 1 美元兑多少印度尼西亚盾。把美元金额乘以该日期的汇率,就得到对应的 IDR 金额。
应如何处理带小数的汇率?
做金额运算时,请把返回的汇率保留为小数或字符串。API 返回的是十进制字符串,2026 年 9 月 30 日输出中带引号的 '17891.1' 就是例子。计算中的乘法请使用十进制表示,不要把汇率转换成二进制浮点数。
实例:2026 年 9 月 30 日的 USD/IDR
要用 2026 年 9 月 30 日的观测值换算 1,000 USD,先从该日期的 USD 行中读取 IDR 汇率,再把美元金额乘以每美元 17,891.1 IDR。让日期跟着结果一起保留,这样该金额就能对应到计算时用的历史观测值。在表格里,先在粘贴的日期中查找 2026 年 9 月 30 日,取出其汇率,再把它作为 USD 金额的乘数。
| 步骤 | 数值 |
|---|---|
| 观测日期 | 2026 年 9 月 30 日 |
| 基础货币金额 | 1,000 USD |
| 2026年9月30日的汇率 | 每 1 美元 17,891.1 IDR |
| 乘以 | 1,000 USD × 每美元 17,891.1 IDR |
| 报价货币金额 | 17,891,100 IDR |
发布于。