如何将json字符串文本更改为整数,可以将其提取以进行数据收集?

时间:2018-07-02 07:45:59

标签: python api

*已解决

我正在关注Sentdex Python GUI教程,我们想连接API,提取数据,然后在图表上显示。视频有点过时了,他正在使用的网站已经消失了,所以我不得不使用另一个(Bitfinex),但是原理保持不变。我陷入了以下问题:

https://youtu.be/uK7wAvS8C0U?t=15m33s

https://docs.bitfinex.com/v1/reference#rest-public-trades(公共API)

def animate(i):
    dataLink = "https://api.bitfinex.com/v1/trades/BTCUSD"

    response = requests.request("GET", dataLink)

    print(response.text)

    data = urllib.request.urlopen(dataLink) #this is in bytes, we have to decode
    data = data.readline().decode("utf-8")
    data = json.loads(data)
    data = data["BTCUSD"]
    data = pd.DataFrame(data) #now data is pandas data set

我遇到以下问题:

  File "C:/Users/kleme/PycharmProjects/GUIs with Tkinter/GUI.py", line 46, in animate
data = data["BTCUSD"]
TypeError: list indices must be integers or slices, not str

我已经用Google搜索并尝试了几种不同的方法,但是我仍然做不到。我也不确定,如果我使用的API错误或其他原因,但是如果我理解正确并查看python,它会向我们返回一个字符串列表,例如

[{"timestamp":1530514714,"tid":264164749,"price":"6312.1","amount":"0.025","exchange":"bitfinex","type":"sell"}, etc..

但是现在我只需要将其放入整数类型。我知道您可以使用int()进行数据类型转换,并且我已经尝试过使用它进行一些操作,但是仍然无法如前所述,使该操作正确运行并显示实时图形。

本来应该提取数据并将其显示在图上,但图只是空白,因为它无法从返回字符串类型数据的response.text中提取int。

谢谢。

1 个答案:

答案 0 :(得分:0)

此行:

data = data["BTCUSD"]

实际上完全没有用。在文档的JS代码段中,它是用于构建url的客户端的参数,但是您不必担心,因为它已经是您的url的一部分:

dataLink = "https://api.bitfinex.com/v1/trades/BTCUSD"

因此,在json.loads()通话之后,您已经有了可以使用的词典列表。

作为旁注,

data = data.readline().decode("utf-8")

充其量是脆的-您不应该假设所有内容都挤在一行上,它可能包含换行符。但是实际上,由于您已经安装了requests,因此应该完全摆脱urllib部分,而只需使用response.json()

dataLink = "https://api.bitfinex.com/v1/trades/BTCUSD"

response = requests.request("GET", dataLink)
data = response.json()
# now `data` is a list of dicts, you can pass it to panda or do whatever with it.