运行币安API脚本报错code=-1100 symbol参数含非法字符如何解决?
APIError(code=-1100): Illegal characters found in parameter 'symbol'; legal range is '^[A-Z0-9-_.]{1,20}$'
错误原因
- 传参错误:调用
get_symbol_ticker时你写的是symbol=(['moedas']),实际传入的是字符串'moedas',不是你前面定义的交易对列表变量moedas,这个字符串包含不符合规则的字符,直接触发报错。 - 参数误用:
get_symbol_ticker的symbol参数仅支持传入单个交易对的字符串,如果你要查询多个交易对,需要使用symbols参数传入列表,你同时用错了参数名和传参格式。 - 后续逻辑漏洞:即使修好了传参问题,你后续直接把
tickers['symbol']传入get_historical_klines也会报错,批量查询返回的tickers是列表格式,每个元素才是对应单个交易对的信息,无法直接取symbol字段。
修复方案
如果你需要拉取列表中所有交易对的5分钟K线,修正后的完整代码如下:
import binancekeys from binance.client import Client import pandas as pd client = Client(binancekeys.api_key, binancekeys.api_secret, tld='com') moedas = ['ETCUSDT', 'ADAUSDT', 'USDTBRL', 'BTCUSDT'] all_kline_data = [] # 逐个遍历交易对拉取K线 for trade_symbol in moedas: kline = client.get_historical_klines(trade_symbol, Client.KLINE_INTERVAL_5MINUTE, "5 minute ago UTC") # 给K线添加交易对标识,方便后续区分不同币种的数据 for item in kline: item.insert(0, trade_symbol) all_kline_data.extend(kline) # 生成DataFrame并设置表头 df = pd.DataFrame(all_kline_data) tabela = df.set_axis(['Symbol','Time', 'Open', 'High','Low','Close','Volume','Close Time','Asset Volume','Number Of Trades','Buy Base','Buy Quote','Ignore'], axis=1) print(tabela)
核心修改点
- 去掉了
moedas变量的引号,如果需要批量查ticker可使用正确的参数名symbols,也可以直接循环遍历交易对列表拉取K线,省去多余的ticker查询步骤。 - 新增循环逻辑逐个拉取单个交易对的K线,符合
get_historical_klines的传参要求。 - 修正了原表头的拼写错误,把
Buy Bae,改为Buy Base,删除多余逗号。
如果你只需要查询单个交易对的K线,直接指定单个交易对字符串即可,不需要循环:
# 示例:仅拉取BTCUSDT的5分钟K线 histo = client.get_historical_klines('BTCUSDT', Client.KLINE_INTERVAL_5MINUTE, "5 minute ago UTC")
内容的提问来源于stack exchange,提问作者Carlos Eduardo
相关产品推荐
相关产品推荐

