-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathapi.py
More file actions
executable file
·93 lines (71 loc) · 3.84 KB
/
api.py
File metadata and controls
executable file
·93 lines (71 loc) · 3.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/usr/bin/env python2
# coding: utf-8
from collections import OrderedDict
import time
import requests
import hashlib
import hmac
import json
class Zebitex:
def __init__(self, apikey,private_key, is_dev=False):
self.apikey = apikey
self.priv = private_key
self.url = 'https://api-staging.zebitex.com/' if is_dev else 'https://api.zebitex.com/'
def _build_auth_header(self, nonce, signature, query=None):
params = ";".join(query.keys()) if query else ''
header = '''ZEBITEX-HMAC-SHA256 access_key=%s, signature=%s, tonce=%s, signed_params=%s'''%(self.apikey, signature, nonce, params)
return {'Authorization':header}
def _sign_request(self,method, path, nonce, query=None):
args = json.dumps(query) if query else '{}'
payload = "|".join([method, '/' + path, str(nonce), args ]).replace(' ', '')
return hmac.new(self.priv, payload, hashlib.sha256).hexdigest()
def _private_request(self, method, path, query=None):
params ={k: str(v) for k,v in OrderedDict(query).items()} if query else None
nonce = int(time.time()*1000)
signature = self._sign_request(method, path, nonce, params)
header = self._build_auth_header(nonce, signature, params)
url = self.url+path
return requests.request(method,url, params=params, headers=header, json=True)
def _public_request(self, path, query = None):
url = self.url+path
return requests.get(url, params=query, json=True)
def _post_private_request(self, path, query=None):
return self._private_request('POST', path, query)
def _get_private_request(self, path, query=None):
return self._private_request('GET', path, query)
def _delete_private_request(self, path, query=None):
return self._private_request('DELETE', path, query)
def funds(self):
return self._get_private_request('api/v1/funds')
def tickers(self):
return self._public_request('api/v1/orders/tickers')
def ticker(self, market):
return self._public_request('api/v1/orders/ticker_summary/'+market)
def orderbook(self, market):
return self._public_request('api/v1/orders/orderbook', {"market":market})
def public_trade_history(self, market):
return self._public_request('api/v1/orders/trade_history', {"market":market})
def get_withdrawal_addresses(self, asset):
params = { "currency": asset}
return self._get_private_request('api/v1/fund_sources', params)
def new_withdrawal(self,currency, fund_id, amount):
params = {"code":currency, "fund_source_id": fund_id, "sum":amount}
return self._post_private_request('api/v1/withdrawals', params)
def open_orders(self, page=1, per=10):
params = {"page":page, "per":per}
return self._get_private_request('api/v1/orders/current', params)
def trade_history(self, side, start_date, end_date, page, per):
params = {"side":side, "start_date":start_date, "end_date":end_date, "page":page, "per":per}
return self._get_private_request('api/v1/history/trades', params)
def cancel_all_orders(self):
return self._delete_private_request('api/v1/orders/cancel_all')
def cancel_order(self,id_order):
return self._delete_private_request('api/v1/orders/'+str(id_order)+'/cancel', { 'id':str(id_order) })
def new_order(self,bid, ask, side, price, amount, market, ord_type):
params={"bid":bid, "ask":ask, "side":side, "price":price,
"amount":amount, "market":market, "ord_type":ord_type}
return self._post_private_request('api/v1/orders', params)
def new_market_order(self,bid, ask, side, amount, market ):
params={"bid":bid, "ask":ask, "side":side,
"amount":amount, "market":market, "ord_type":'market'}
return self._post_private_request('api/v1/orders', params)