forked from extra/bitvc-python
-
Notifications
You must be signed in to change notification settings - Fork 0
/
bitvc.py
113 lines (88 loc) · 3.25 KB
/
bitvc.py
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
"""BitVC api features & whatnot"""
import ConfigParser
import requests
import md5
import time
import pprint
from errors import error_text
CFG = ConfigParser.ConfigParser()
CFG.read('config')
def config_map(section):
"""get us some configs"""
data = {}
try:
for name, _ in CFG.items(section):
try:
data[name] = CFG.get(section, name)
except ConfigParser.Error:
data[name] = None
return data
except ConfigParser.NoSectionError:
return None
def format_check(output):
"""check for errors and print"""
try:
msg = error_text(output['code'])
print "Error {}: {}".format(output['code'], msg)
except KeyError:
ppt = pprint.PrettyPrinter(indent=4)
ppt.pprint(output)
class BitVC(object):
"""make requests, return data, and stuff"""
def __init__(self):
self.cfg = config_map('API')
def sign(self, items):
"""
computes signed key to pass with authenticated request
items: dict of parameters to include in auth request
returns: tuple (md5 auth string, timestamp)
"""
auth = md5.new()
auth.update("access_key="+self.cfg['key']+"&")
timestamp = int(time.time())
items["created"] = timestamp
for key in sorted(items.iterkeys()):
auth.update(key+"="+str(items[key])+"&")
auth.update("secret_key="+self.cfg['secret'])
return (auth.hexdigest(), timestamp)
def assets(self):
"""
get personal assets info
returns: dict of balances
"""
sign = self.sign({})
params = {'access_key': self.cfg['key'], 'created': sign[1], 'sign': sign[0]}
req = requests.post(self.cfg['base']+'accountInfo/get', data=params).json()
return req
def list_orders(self, currency):
"""
get list of orders
currency: int 2 = Wright (fiat), 1 = BTC
returns: list of order dicts
"""
sign = self.sign({'coin_type': currency})
params = {'access_key': self.cfg['key'], 'coin_type': currency, 'created': sign[1], 'sign': sign[0]}
req = requests.post(self.cfg['base']+'order/list', data=params).json()
return req
def order_info(self, currency, order_id):
"""
get info on a specific order
currency: int 2 = Wright (fiat), 1 = BTC
order_id: int order id
returns: dict with order info
"""
sign = self.sign({'coin_type': currency, 'id': order_id})
params = {'access_key': self.cfg['key'], 'coin_type': currency, 'created': sign[1], 'sign': sign[0]}
req = requests.post(self.cfg['base']+'order/'+str(order_id), data=params).json()
return req
def order_cancel(self, currency, order_id):
"""
cancel order
currency: int 2 = Wright (fiat), 1 = BTC
order_id: int order id
returns: dict, check 'Result' key
"""
sign = self.sign({'coin_type': currency, 'id': order_id})
params = {'access_key': self.cfg['key'], 'coin_type': currency, 'created': sign[1], 'sign': sign[0]}
req = requests.post(self.cfg['base']+'cancel/'+str(order_id), data=params).json()
return req