我试图从以下API中检索价格数据,但在执行代码时我不断收到此错误消息。
def upbitask_xrp_krw_get():
result = requests.get("https://crix-api-endpoint.upbit.com/v1/crix/candles/minutes/1?code=CRIX.UPBIT.KRW-XRP&count=1").json()
return result["highPrice"]
我得到的错误信息是
Traceback (most recent call last):
File "test.py", line 194, in <module>
main()
File "test.py", line 130, in main
upbitask_xrp_krw = Decimal(upbitask_xrp_krw_get())
File "test.py", line 10, in upbitask_xrp_krw_get
"https://crix-api-endpoint.upbit.com/v1/crix/candles/minutes/1?code=CRIX.UPBIT.KRW-XRP&count=1").json()
File "/usr/lib/python3/dist-packages/requests/models.py", line 793, in json
return json.loads(self.text, **kwargs)
File "/usr/lib/python3.4/json/__init__.py", line 318, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3.4/json/decoder.py", line 343, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python3.4/json/decoder.py", line 361, in raw_decode
raise ValueError(errmsg("Expecting value", s, err.value)) from None
ValueError: Expecting value: line 1 column 1 (char 0)
我已成功访问其他只有{}括号的API的数据,而这个有[]括号,我认为这是问题吗?
答案 0 :(得分:0)
我不确定你为什么会收到这个错误,但你可以通过在请求文本上调用json.loads()
来绕过它:
result = requests.get("https://crix-api-endpoint.upbit.com/v1/crix/candles/minutes/1?code=CRIX.UPBIT.KRW-XRP&count=1")
result_text = result.text
json_data = json.loads(result_text)
return json_data[0]["highPrice"]
但是,您需要import json
。此外,您需要从列表中取出字典(因此[0]
)。
编辑:这实际上很奇怪:有时它会打印出结果,有时会产生错误。这可能与请求在很短的时间内不同有关。
答案 1 :(得分:0)
要使用requests
模块,您需要先在脚本中导入它。对于您希望使用的任何Python模块都是如此。
API端点返回的对象似乎是一个JSON列表,而不仅仅是一个JSON对象。试试这个:
import requests
def upbitask_xrp_krw_get():
result = requests.get("https://crix-api-endpoint.upbit.com/v1/crix/candles/minutes/1?code=CRIX.UPBIT.KRW-XRP&count=1").json()
return result[0]["highPrice"]
[0]
表示返回列表的第一项。
结果如下:
<强>更新强>
似乎有一个速率限制阻止经常查询API。达到限制后,您将获得403响应代码。以下是如何管理它的示例:
import requests
def upbitask_xrp_krw_get():
result = requests.get("https://crix-api-endpoint.upbit.com/v1/crix/candles/minutes/1?code=CRIX.UPBIT.KRW-XRP&count=1")
if result.status_code == 200: # Http code 200 means success
json = result.json()
high_price = json[0]["highPrice"]
else:
high_price = None
return high_price
答案 2 :(得分:0)
我相信这可能会更好:
Child
您的结果是json数据列表。只需要在返回值中选择所需的索引。
编辑:哦,整洁,后续请求后有不同的结果。必须有某种速率限制,第一次点击API我得到列表,下次我点击它我只得到403响应
答案 3 :(得分:0)