You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用CoinAPI时time_start参数格式错误求助

问题排查与修复

核心问题:URL参数拼接错误

你的代码构造URL时,time_start与limit参数之间缺少&分隔符,导致两个参数被合并成一个错误字符串。原URL代码中time_start={time_start}后直接接limit={limit},最终生成的time_start值变成2022-11-20T17:00:00limit=100000000,完全不符合API要求的时间格式,因此返回400错误。

修复步骤

  1. 修正URL参数分隔:在time_start={time_start}后添加&,正确分隔参数:
url = 'https://rest.coinapi.io/v1/orderbooks/{symbol_id}/history?time_start={time_start}&limit={limit}&limit_levels={limit_levels}'
  1. 规范时间格式:CoinAPI要求时间遵循ISO 8601格式,建议在时间末尾加Z表示UTC时区(若你的时间为UTC),示例:
time_start = '2022-11-20T17:00:00Z'
time_end = '2022-11-21T05:00:00Z'

如果是本地时区,需添加偏移量,比如东八区写成2022-11-20T17:00:00+08:00。

  1. 优化参数传递(更安全):避免手动拼接URL,用requests.get的params参数自动处理编码和分隔,减少出错概率:
params = {
    'time_start': time_start,
    'limit': limit,
    'limit_levels': limit_levels
}
url = f'https://rest.coinapi.io/v1/orderbooks/{symbol_id}/history'
response = requests.get(url, headers=headers, params=params)

修复后完整代码

import requests
import json

symbol_id = 'COINBASE_SPOT_BTC_USDT'
time_start = '2022-11-20T17:00:00Z'
time_end = '2022-11-21T05:00:00Z'
limit_levels = 100000000
limit = 100000000

headers = {'X-CoinAPI-Key': 'XXXXXXXXXXXXXXXXXXXXXXX'}

params = {
    'time_start': time_start,
    'limit': limit,
    'limit_levels': limit_levels
}
url = f'https://rest.coinapi.io/v1/orderbooks/{symbol_id}/history'
response = requests.get(url, headers=headers, params=params)

print(response)

# 先判断状态码再处理响应,避免解析错误数据
if response.status_code == 200:
    with open('coinbase_ob_history.json', 'w') as coinbase_ob: 
        json.dump(response.json(), coinbase_ob, indent=4)
else:
    print(f"请求失败:{response.json()}")

额外建议

  • 调用API后优先检查响应状态码,再进行JSON解析,避免异常;
  • 不要设置过大的limit和limit_levels值,可能触发API速率限制或导致数据量过载,建议参考文档设置合理数值。

内容的提问来源于stack exchange,提问作者J K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:31:08