使用 Python 调用现货价格端点时返回错误的货币信息

Wrong currency info being returned when calling spot price endpoint using Python

我注意到在使用 Python 时获取现货价格的数据端点返回错误的货币信息。我正在使用 currency_pairBTC-USD 但得到的结果是 GBP.

示例:

price = client.get_spot_price(currency_pair = 'BTC-USD')

回复:

{
  "amount": "5578.85", 
  "base": "BTC", 
  "currency": "GBP"
}

对导致此问题的原因有任何想法吗?

虽然不使用官方 Coinbase 客户端,但解决方法如下:

import requests
import json

# Do This to Avoid Warning
headers = {
    'CB-VERSION': '2017-12-08'
}

# Make Request
data = requests.get('https://api.coinbase.com/v2/prices/BTC-USD/sell/', headers=headers).text

# Parse Response, Get Amount
price = json.loads(data)['data']['amount]

显然在处理错误、异常或任何其他类型的断言方面不是很稳健,这些断言是提供实际 buys/sells/transfers 所需的信心所需要的(官方客户端应该有的) .

编辑:更新

显然这是一个已知问题:

阅读此处:

https://github.com/coinbase/coinbase-python/issues/32

据称已在 github master 中修复,但显然尚未反映在 pip 版本中。

引用用户 kflecki:

我通过进入 client.py 文件并将代码修改为如下所示来修复此问题。现在工作得很好,但是对于这样的文件来说会很好。但这是一个您可以自己完成的简单修复。

def get_spot_price(self, **params):
"""https://developers.coinbase.com/api/v2#get-spot-price"""
if 'currency_pair' in params:
currency_pair = params['currency_pair']
else:
currency_pair = 'BTC-USD'
response = self._get('v2', 'prices', currency_pair, 'spot', data=params)
return self._make_api_object(response, APIObject)

现在命令是这样工作的:

eth_price = client.get_spot_price(currency_pair = 'ETH-USD')