zb_api_python3.py
__author__ = 'Ziyang'
import json, hashlib,struct,time,sys
import urllib.request
class zb_api:
def __init__(self, mykey, mysecret):
self.mykey = mykey
self.mysecret = mysecret
self.jm = ''
def __fill(self, value, lenght, fillByte):
if len(value) >= lenght:
return value
else:
fillSize = lenght - len(value)
return value + chr(fillByte) * fillSize
def __doXOr(self, s, value):
slist = list(s.decode('utf-8'))
for index in range(len(slist)):
slist[index] = chr(ord(slist[index]) ^ value)
return "".join(slist)
def __hmacSign(self, aValue, aKey):
keyb = struct.pack("%ds" % len(aKey), aKey.encode('utf-8'))
value = struct.pack("%ds" % len(aValue), aValue.encode('utf-8'))
k_ipad = self.__doXOr(keyb, 0x36)
k_opad = self.__doXOr(keyb, 0x5c)
k_ipad = self.__fill(k_ipad, 64, 54)
k_opad = self.__fill(k_opad, 64, 92)
m = hashlib.md5()
m.update(k_ipad.encode('utf-8'))
m.update(value)
dg = m.digest()
m = hashlib.md5()
m.update(k_opad.encode('utf-8'))
subStr = dg[0:16]
m.update(subStr)
dg = m.hexdigest()
return dg
def __digest(self, aValue):
value = struct.pack("%ds" % len(aValue), aValue.encode('utf-8'))
print(value)
h = hashlib.sha1()
h.update(value)
dg = h.hexdigest()
return dg
def __api_call(self, path, params = ''):
try:
SHA_secret = self.__digest(self.mysecret)
sign = self.__hmacSign(params, SHA_secret)
self.jm = sign
reqTime = (int)(time.time()*1000)
params += '&sign=%s&reqTime=%d'%(sign, reqTime)
url = 'https://trade.zb.com/api/' + path + '?' + params
req = urllib.request.Request(url)
res = urllib.request.urlopen(req, timeout=2)
doc = json.loads(res.read())
return doc
except Exception as ex:
print(sys.stderr, 'zb request ex: ', ex)
return None
def query_account(self):
try:
params = "accesskey="+self.mykey+"&method=getAccountInfo"
path = 'getAccountInfo'
obj = self.__api_call(path, params)
#print obj
return obj
except Exception as ex:
print(sys.stderr, 'zb query_account exception,',ex)
return None
if __name__ == '__main__':
access_key = 'access_key'
access_secret = 'access_secret'
api = zb_api(access_key, access_secret)
print(api.query_account())
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/913371
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!