如何向CoinMarketCap API发送逗号分隔资产列表进行价格转换
如何向CoinMarketCap发送逗号分隔的资产列表进行价格转换?
官方API文档说明,price-conversion接口支持传递最多120个逗号分隔的法币或加密货币符号,通过单次API调用即可获取多资产的价格转换结果,且仅消耗1个调用额度。但直接传入资产列表会返回400错误,循环逐个调用又会消耗多个额度,不符合预期。
以下是两种无效的尝试代码:
无效代码1:直接传入资产列表
from requests import Session from requests.exceptions import ConnectionError, Timeout, TooManyRedirects def usdPrice(assets): url = 'https://pro-api.coinmarketcap.com/v2/tools/price-conversion' parameters = { 'amount' : 1, 'symbol': assets, # 直接传列表会导致400错误 'convert' : 'USD' } headers = { 'Accepts': 'application/json', 'X-CMC_PRO_API_KEY': cmcKey, } session = Session() session.headers.update(headers) try: response = session.get(url, params=parameters) print(response) data = response.json().get("data") print(data) except (ConnectionError, Timeout, TooManyRedirects) as e: print(e) assets = ['BTC','XRP','LTC'] usdPrice(assets)
无效代码2:循环逐个调用API
from requests import Session from requests.exceptions import ConnectionError, Timeout, TooManyRedirects def usdPrice(assets): url = 'https://pro-api.coinmarketcap.com/v2/tools/price-conversion' for i in assets: parameters = { 'amount' : 1, 'symbol': i, 'convert' : 'USD' } headers = { 'Accepts': 'application/json', 'X-CMC_PRO_API_KEY': cmcKey, } session = Session() session.headers.update(headers) try: response = session.get(url, params=parameters) print(response) data = response.json().get("data") print(data) except (ConnectionError, Timeout, TooManyRedirects) as e: print(e) assets = ['BTC','XRP','LTC'] usdPrice(assets)
正确解决方案
核心问题是需要将资产列表转换为逗号分隔的字符串传入symbol参数,而不是直接传Python列表。修改后的代码如下:
from requests import Session from requests.exceptions import ConnectionError, Timeout, TooManyRedirects def usdPrice(assets): url = 'https://pro-api.coinmarketcap.com/v2/tools/price-conversion' # 将列表转为逗号分隔的字符串 symbol_str = ','.join(assets) parameters = { 'amount' : 1, 'symbol': symbol_str, # 传入格式化后的字符串 'convert' : 'USD' } headers = { 'Accepts': 'application/json', 'X-CMC_PRO_API_KEY': cmcKey, # 请确保cmcKey已正确定义 } session = Session() session.headers.update(headers) try: response = session.get(url, params=parameters) print(response.status_code) data = response.json().get("data") # 遍历返回的多资产数据 for item in data: symbol = item['symbol'] price = item['quote']['USD']['price'] print(f"{symbol}: ${price:.2f}") except (ConnectionError, Timeout, TooManyRedirects) as e: print(e) assets = ['BTC','XRP','LTC'] usdPrice(assets)
关键修改点:
- 使用
','.join(assets)将资产列表转换为API要求的逗号分隔格式字符串 - 单次调用API即可获取所有资产的转换结果,仅消耗1个额度
- 处理返回数据时,遍历
data数组即可拿到每个资产的价格信息
内容的提问来源于stack exchange,提问作者nodeidea
相关产品推荐
相关产品推荐

