使用krakenex调用Kraken API获取历史资金收支记录时遭遇404错误的问题求助
krakenex调用Kraken API获取历史资金收支记录时遭遇404错误的问题求助
嘿,我一眼就瞅出问题出在哪啦!你的代码里犯了两个关键小错误,才导致了404和数据解析的问题,我帮你梳理并修正下:
核心问题分析
- API端点名称写错:Kraken私有API中,获取账本记录的正确端点是**
Ledgers(复数形式)**,而你代码里用的是单数Ledger——这直接导致请求的URL路径错误,触发了404。 - 返回结果解析错误:Kraken的
Ledgers接口返回的账本数据,是嵌套在result['ledger']字段下的,你原来直接遍历result['result']是拿不到正确数据的。
修正后的完整代码
import krakenex import pandas as pd import datetime k = krakenex.API(API_KEY, API_SECRET) def get_funding_rates(start_time=None, end_time=None): """Retrieves funding rate history from Kraken. Args: start_time: Optional start time (datetime object or timestamp). Defaults to 7 days ago. end_time: Optional end time (datetime object or timestamp). Defaults to now. Returns: pandas.DataFrame: DataFrame containing funding rate history, or None if error. """ if end_time is None: end_time = datetime.datetime.utcnow() # 当前UTC时间 if start_time is None: start_time = end_time - datetime.timedelta(days=7) # 默认取7天内数据 # 转换时间为时间戳格式 if isinstance(start_time, datetime.datetime): start_time = int(start_time.timestamp()) if isinstance(end_time, datetime.datetime): end_time = int(end_time.timestamp()) try: params = {"start": start_time, "end": end_time} # 修正:使用正确的复数端点名Ledgers result = k.query_private('Ledgers', params) if result['error']: print(f"Kraken API调用出错: {result['error']}") return None # 修正:从正确的嵌套字段获取账本条目 ledger_entries = result['result']['ledger'] funding_entries = [] for entry in ledger_entries.values(): if entry['type'] == 'funding': # 筛选资金类收支记录 funding_entries.append(entry) df = pd.DataFrame(funding_entries) if not df.empty: # 转换时间戳为可读日期格式 df['time'] = pd.to_datetime(df['time'], unit='s') df = df.set_index('time') # 设置时间为索引 df = df.sort_index() # 按时间排序 return df else: print("指定时间段内没有找到资金收支数据。") return pd.DataFrame() # 返回空DataFrame except Exception as e: print(f"程序运行出错: {e}") return None
补充说明
Kraken的API文档里其实是有明确说明Ledgers接口的,可能你之前看的时候漏看了~这个接口就是专门用来获取用户账本(包含资金收支、交易手续费等各类记录)的,只要筛选type为funding的条目,就能拿到你要的历史资金收支数据啦。
备注:内容来源于stack exchange,提问作者sems
相关产品推荐
相关产品推荐

