我尝试从其他API中提取数据。问题是密钥具有相同的名称。我写了一个循环来将数据拉入列表,但我知道我有错误
def getsellorders(coin):
url = "https://bittrex.com/api/v1/public/getorderbook?market=BTC-"+coin+"LTC&type=sell&depth=15"
response = requests.get(url)
response.raise_for_status()
jdata = response.json()
sells = [0]
i = 0
for i in range(15):
sells[i] = jdata['result']['Quantity']
sells.append(i)
return sells
答案 0 :(得分:0)
使用list.append()
自行添加条目;直接在jdata['results']
列表上循环:
sells = []
for res in jdata['result']:
sells.append(res['Quantity'])
您的代码尝试直接分配到sells
中的索引,附加您生成的i
整数。但是,密钥jdata['result']['Quantity']
不存在,因为jdata['result']
是一个列表。这一切只能首先导致KeyError
s,然后导致不正确的数据(i
)被添加,然后可能IndexErrors
,因为您假设总共有15个条目。
您可以使用列表理解进一步简化此操作,并一次性获取所有条目:
def getsellorders(coin):
url = "https://bittrex.com/api/v1/public/getorderbook"
params = {'market': "BTC-{}".format(coin), 'type': 'sell', 'depth': '15'}
response = requests.get(url, params=params)
response.raise_for_status()
jdata = response.json()
return [res['Quantity'] for res in jdata['result']]
我还在params
使用requests.get()
参数将URL查询编码到库中。
我已将market
参数更改为实际的interpet coin
作为市场名称的第二部分;只有当coin
为空字符串时,您的代码才有效。
演示:
>>> import requests
>>> def getsellorders(coin):
... url = "https://bittrex.com/api/v1/public/getorderbook"
... params = {'market': "BTC-{}".format(coin), 'type': 'sell', 'depth': '15'}
... response = requests.get(url, params=params)
... response.raise_for_status()
... jdata = response.json()
... return [res['Quantity'] for res in jdata['result']]
...
>>> getsellorders('LTC')
[10.0, 1.10799625, 1.4716218, 0.03364621, 0.21046474, 7.05, 0.25586034, 20.0, 22.15658669, 0.19841088, 1.34172574, 0.01096613, 0.399365, 0.205, 0.10813746]