initial commit
This commit is contained in:
92
xcoin_api_client.py
Normal file
92
xcoin_api_client.py
Normal file
@@ -0,0 +1,92 @@
|
||||
#
|
||||
# XCoin API-call related functions
|
||||
#
|
||||
# @author btckorea
|
||||
# @date 2017-04-12
|
||||
#
|
||||
# Compatible with python3 version.
|
||||
|
||||
import sys
|
||||
import time
|
||||
import math
|
||||
import base64
|
||||
import hmac, hashlib
|
||||
import urllib.parse
|
||||
import pycurl
|
||||
import json
|
||||
|
||||
|
||||
class XCoinAPI:
|
||||
api_url = "https://api.bithumb.com"
|
||||
api_key = ""
|
||||
api_secret = ""
|
||||
|
||||
def __init__(self, api_key, api_secret):
|
||||
self.api_key = api_key
|
||||
self.api_secret = api_secret
|
||||
self.contents = bytearray()
|
||||
|
||||
def body_callback(self, buf):
|
||||
self.contents.extend(buf)
|
||||
|
||||
def microtime(self, get_as_float=False):
|
||||
if get_as_float:
|
||||
return time.time()
|
||||
else:
|
||||
return '%f %d' % math.modf(time.time())
|
||||
|
||||
def usec_time(self):
|
||||
mt = self.microtime(False)
|
||||
mt_array = mt.split(" ")[:2]
|
||||
return mt_array[1] + mt_array[0][2:5]
|
||||
|
||||
def xcoinApiCall(self, endpoint, rgParams):
|
||||
# 1. Api-Sign and Api-Nonce information generation.
|
||||
# 2. Request related information from the Bithumb API server.
|
||||
#
|
||||
# - nonce: it is an arbitrary number that may only be used once.
|
||||
# - api_sign: API signature information created in various combinations values.
|
||||
|
||||
endpoint_item_array = {
|
||||
"endpoint": endpoint
|
||||
}
|
||||
|
||||
self.contents = bytearray()
|
||||
uri_array = dict(endpoint_item_array, **rgParams) # Concatenate the two arrays.
|
||||
str_data = urllib.parse.urlencode(uri_array)
|
||||
|
||||
nonce = self.usec_time()
|
||||
|
||||
data = endpoint + chr(0) + str_data + chr(0) + nonce
|
||||
utf8_data = data.encode('utf-8')
|
||||
|
||||
key = self.api_secret
|
||||
utf8_key = key.encode('utf-8')
|
||||
|
||||
h = hmac.new(bytes(utf8_key), utf8_data, hashlib.sha512)
|
||||
hex_output = h.hexdigest()
|
||||
utf8_hex_output = hex_output.encode('utf-8')
|
||||
|
||||
api_sign = base64.b64encode(utf8_hex_output)
|
||||
utf8_api_sign = api_sign.decode('utf-8')
|
||||
|
||||
curl_handle = pycurl.Curl()
|
||||
curl_handle.setopt(pycurl.POST, 1)
|
||||
curl_handle.setopt(pycurl.POSTFIELDS, str_data)
|
||||
|
||||
url = self.api_url + endpoint
|
||||
curl_handle.setopt(curl_handle.URL, url)
|
||||
curl_handle.setopt(curl_handle.HTTPHEADER, ['Api-Key: ' + self.api_key, 'Api-Sign: ' + utf8_api_sign, 'Api-Nonce: ' + nonce])
|
||||
curl_handle.setopt(curl_handle.WRITEFUNCTION, self.body_callback)
|
||||
curl_handle.perform()
|
||||
|
||||
# response_code = curl_handle.getinfo(pycurl.RESPONSE_CODE); # Get http response status code.
|
||||
|
||||
curl_handle.close()
|
||||
|
||||
try:
|
||||
result = json.loads(self.contents.decode('utf-8'))
|
||||
except:
|
||||
result = None
|
||||
|
||||
return result
|
||||
Reference in New Issue
Block a user