我正在尝试玩双子座的交易API。我已经为自己颁发了一个API密钥和一个密钥,在配置我的环境之后,我通过pip设置和安装请求时遇到了很多问题,我使用他们的示例代码创建了一个简单的脚本来读取我最近的交易。以下是脚本,去掉了我的API密钥:
#!/usr/bin/env/ python
import requests
import json
import base64
import hmac
import hashlib
import datetime, time
url = "https://api.sandbox.gemini.com"
gemini_api_key = "master-xxx"
gemini_api_secret = "xxx".encode()
t = datetime.datetime.now()
payload_nonce = str(int(time.mktime(t.timetuple())*1000))
payload = {"request": "/v1/mytrades", "nonce": payload_nonce}
encoded_payload = json.dumps(payload).encode()
b64 = base64.b64encode(encoded_payload)
signature = hmac.new(gemini_api_secret, b64, hashlib.sha384).hexdigest()
request_headers = {
'Content-Type': "text/plain",
'Content-Length': "0",
'X-GEMINI-APIKEY': gemini_api_key,
'X-GEMINI-PAYLOAD': b64,
'X-GEMINI-SIGNATURE': signature,
'Cache-Control': "no-cache"
}
response = requests.post(url, headers=request_headers)
my_trades = response.json()
print(my_trades)
一开始,它会运行,但会给我一个错误,告诉我没有指定帐户。然后,在没有任何改变的情况下,它突然完全停止了工作。因此,尽管我仍然在访问API时遇到了一些问题,但我甚至不能再找到错误来试图找出原因。现在我得到的是一个JSON解码错误,如下所示:
Traceback (most recent call last):
File "c:\Users\david\Desktop\Code Projects\GeminiTrader\GeminiTrader-v0.1.py",
line 33, in <module>
my_trades = response.json()
File "C:\Users\david\AppData\Local\Programs\Python\Python39\lib\site-packages\requests-2.25.1-py3.9.egg\requests\models.py", line 900, in json
return complexjson.loads(self.text, **kwargs)
File "C:\Users\david\AppData\Local\Programs\Python\Python39\lib\json\__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "C:\Users\david\AppData\Local\Programs\Python\Python39\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\david\AppData\Local\Programs\Python\Python39\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
是什么导致了这个json解码问题?当API由于帐户参数错误而简单地拒绝我的请求时,为什么它以前没有出现?为什么在我没有修改代码的情况下,它突然变成了这个错误?我怎么才能修复它?我一直在安装请求并让它正常工作时遇到问题,也许我在这个过程中搞砸了什么?
当然,在修复这个问题之后,我将有一系列新的问题需要修复,因为关于这个API的文档非常糟糕。任何在这个项目进展中的帮助都将非常感谢!谢谢!
发布于 2021-01-12 00:10:46
当您调用API时,您的API调用可能会失败,并且只返回字符串或空响应。我建议您首先检查响应的状态代码,如下所示,然后处理json数据。
data = requests.post()
if data.status_code != 200:
raise Exception("Error", data.reason)
json_data = data.json()
https://stackoverflow.com/questions/65670364
复制相似问题