-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbitcointoyou.py
135 lines (108 loc) · 3.9 KB
/
bitcointoyou.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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/bin/python3
'''Uma interface simples para a Trade API da corretora Bitcointoyou.
Para utilizar, basta instanciar a classe API com os parâmetros:
chave da api e senha da api.
Exemplo: btc = API(chave_api, senha_api)
Todas as funções retornam dicionários, resultado do processamento do
json enviado pelo servidor.
OBS: Não sou responsável por qualquer problema em sua conta.
Use por sua própria conta e risco.
'''
import urllib.request
import urllib.parse
import time
import base64
import hmac
import json
class API:
def __init__(self, api_key, api_pass):
self.api_key = api_key
self.api_pass = api_pass
def _signature(self):
nonce = time.strftime('%s')
signature = base64.b64encode(
hmac.new(
self.api_pass.encode(),
'{}{}'.format(nonce, self.api_key).encode(),
digestmod='sha256').digest()
)
return nonce, signature
def _baseReq(self, method):
base_url = 'https://www.bitcointoyou.com/API'
nonce, signature = self._signature()
headers = {'key' : self.api_key,
'nonce' : nonce,
'signature' : signature}
req = urllib.request.Request('{}{}'.format(base_url, method),
headers=headers)
resp = urllib.request.urlopen(req)
page = resp.read()
try:
page_json = json.loads(page)
return page_json
except:
return None
def Ticker(self):
'''Retorna valores atuais do Bitcoin.
Parâmetros: Nenhum
Exemplo:
btc.Ticker()'''
method = '/ticker.aspx'
return self._baseReq(method)
def Balance(self):
'''Retorna o saldo disponível para cada moeda (BTC e REAL).
Parâmetros: Nenhum
Exemplo:
btc.Balance()'''
method = '/balance.aspx'
return self._baseReq(method)
def Orders(self, status=None):
'''Retorna as ordens executadas.
Parâmetros:
'OPEN' - Ordens abertas,
'CANCELED' - Ordens canceladas,
'EXECUTED' - Ordens executadas.
Caso nenhum parâmetro seja informado, retorna todas as ordens
Exemplo:
btc.Orders('OPEN')'''
method = '/getorders.aspx?{}'.format(
urllib.parse.urlencode(
{'status' : status})
)
return self._baseReq(method)
def DeleteOrder(self, order_id):
'''Remove uma ordem agendada.
Parâmetros:
order_id - Id da ordem à cancelar.
É possível verificar as id's das ordens abertas com o método Orders
Exemplo:
btc.DeleteOrder(1055)'''
method = '/deleteorders.aspx?{}'.format(
urllib.parse.urlencode(
{'id' : order_id})
)
return self._baseReq(method)
def CreateOrder(self, action, amount, price):
'''Cria uma ordem (instantânea ou agendada).
Vale lembrar que no caso de compra, se o valor
informado for maior que o praticado, a compra é
efetuada instantâneamente, caso contrário, é
agendada.
No caso da venda, se o valor informado for menor
que o praticado, a venda é efetuada instantâneamente,
caso contrário, é agendado.
Parâmetros:
action - 'buy' (comprar) ou 'sell' (vender),
amount - Quantidade de compra ou venda (BTC),
price - Valor de compra ou venda (BTC).
Exemplos:
Compra: btc.CreateOrder('buy', '0.00522', '52000')
Venda: Compra: btc.CreateOrder('sell', '0.0782', '55700')'''
method = '/createorder.aspx?{}'.format(
urllib.parse.urlencode(
{'asset' : 'BTC',
'action' : action,
'amount' : amount,
'price' : price})
)
return self._baseReq(method)