如何一键抓取区块链历史币价:完整 API 请求与返回解析指南

·

在加密市场瞬息万变的环境下,秒级更新的 历史币价 成为投资者、策略研究者与 DApp 开发者的硬需求。本篇聚焦能覆盖主流与铭文资产的开放 API,手把手演示如何用 链上信息查询 接口获取不同时间粒度的币价数据,实现高速调用的同时降低服务器压力。


支持币种与链:从主链到热门铭文

该接口立足“多链合一”的设计,不仅可用于 ETH、BTC 主链币,还原生支持

一句话总结:只要 token 对应的 chainIndex 与格则达成书写规则,就能查询其历史币价。


请求路径与环境准备

GET https://web3.okx.com/api/v5/wallet/token/historical-price

调用方式极其轻量:仅需 chainIndex 作为必填参数即可发起首次查询。所有参数使用 query string 而不是 JSON body,方便 curl、Postman 及浏览器直调。


6 大关键参数与业务含义

参数必填示例值场景化解释
chainIndex1 (Ethereum)用链的唯一标识锁定资产源头,避免重名放大风险。
tokenAddress"0xa0b…" / "btc-brc20-ordi"主链币留空字符串;铭文代币用合约地址或规定格式。
limit200一次性拉到最大 200 条,适合批量回测。
cursorMTY5…分页游标,自由续传,避免 429 限制。
begin / end1717200000000Unix 毫秒时间戳,用 1d 可快速抓整月数据。
period1h / 5m从高精度到日线,可自由配策略粒度。

锚文本激发点击

👉 想直接跑完整示例?点击准备你的第一条查询命令。

💡 注意:铭文 ID 书写格式必须密合官方规则,否则返回空数组;为此本指南在下方准备常见错误对照表,节省时间。


实战:三种典型调用 Case

  1. 查询 BTC 主币 7 日日线数据

    GET https://web3.okx.com/api/v5/wallet/token/historical-price
        ?chainIndex=0
        &tokenAddress=
        &period=1d
        &limit=7
  2. 抓取 ORDI (BRC-20) 最近 24h 15min 粒度

    GET …tokenAddress=btc-brc20-ordi&period=30m&limit=48
  3. 回测某 ERC-20 代币过去 3 个月走势

    • begin=1719792000000 (2024-07-01 00:00:00)
    • end=1722470399000 (2024-08-01 00:00:00)

      GET …tokenAddress=0xTokenAddr&period=1h&limit=200&cursor=分页

      由于 1h * 200 条仅 8 天,可配合 cursor 做循环抓取,十行 Python 即可。


响应格式详解与字段征信

一次成功 Response 结构:

{
  "code": 0,
  "msg": "",
  "data": [
    {
      "prices": [
        { "time": "1717276800000", "price": "26451.132100000000000000" },
        { "time": "1717363200000", "price": "26890.550500000000000000" }
      ],
      "cursor": "eyJ..."
    }
  ]
}

字段拆解:


疑难杂症 FAQ

Q1:limit 设置 200 条就超时 504?
A:高峰期链路拥堵,把 period 从 1m 调至 5m 或 1h 即轻松缓解。

Q2:返回 prices 列表为空但参数都写好?
A:90% 情况是 tokenAddress 拼写缺层级。例如 btc-runesMain-840000:2 不能错写成 btc-runes-840000:2

Q3:如何获取 GMT 标准时区下的日开盘、收盘?
A:使用 period=1d 可自动对齐 UTC 0 点和币价快照,仅需再 GROUP BY DATE()


SEO 关键词总结(已在正文自然融入)


Python 批量下载脚本示范

import requests, time

url = "https://web3.okx.com/api/v5/wallet/token/historical-price"
params = {
    "chainIndex": "0",
    "tokenAddress": "btc-brc20-ordi",
    "period": "1h",
    "limit": 200,
    "cursor": None,
}
all_prices = []

while True:
    r = requests.get(url, params=params).json()
    data = r["data"][0]
    all_prices.extend(data["prices"])
    if not data["cursor"]:
        break
    params["cursor"] = data["cursor"]
    time.sleep(0.1)  # 礼貌节流

八行即可落地一个可扩展的历史币价 ETL 线性脚本,后续可存 Mongo、DuckDB 或直接 Pandas 做因子归因。


如果数据量大到抓狂?

👉 教你用极低成本横向扩展开源脚本,一键跑 B 级 K 线数据入库。