#DONATION 16RdQZ86NUWQbE6rM86JbxnnaCDcAKqa9 ####HASHNET API HELPER#### #ver:1.2 # delete_all_orders funtion is wrong #reply bad request! #still missing error checking from urllib import urlencode import urllib2 import time import hashlib import hmac import base64 import json import os class hashnest_connector: BASEURL='https://www.hashnest.com/api/' APIVERSION='v1' URL=BASEURL+APIVERSION+'/' CONNECTION_RETRY=3 SELL='sale' BUY='purchase' logfile='/storage/emulated/0/logs/hashnestapilog.txt' def __init__(self,username,key,secret): self.username=username self.key=key self.secret=secret def printlog(self, nonce,url,r,data): try: f = open(self.logfile, 'a') f.write('['+str(nonce)+',"'+str(url)+'",'+str(r)+',"'+data+'"]'+"\n") f.close() except Exception,e: print "ERROR: can't write log file :" + str(Exception) + '---' + str(e) def get_nonce(self): return int(time.time()*100000); def check_result(self,result): pass def perform_private(self,url,req={}): nonce= self.get_nonce() message = str(nonce) + self.username + self.key req['access_key']=self.key req['nonce']=nonce req['signature']= hmac.new( self.secret, msg=message, digestmod=hashlib.sha256).hexdigest() data = urlencode(req) headers = {'User-Agent':'ApeGoxApi'} url=self.URL+url for i in range(0,self.CONNECTION_RETRY): try: req = urllib2.Request(url, data, headers) res = urllib2.urlopen(req,data) r=res.read() self.printlog(nonce,url,r,data) return json.loads(r) except Exception,e: self.printlog(nonce,url,str(e),data) print 'ERROR:' +str(i+1)+'/'+str(self.CONNECTION_RETRY)+':' + str(Exception) + '---' + str(e)+"\n"+url+"\n"+data time.sleep(1) def get_account_info(self): return self.perform_private('account'); def get_account_balance(self): return self.perform_private('currency_accounts') def get_account_hashrate(self): return self.perform_private('hash_accounts') def get_orders(self,cmi): param={'currency_market_id':cmi} return self.perform_private('orders/active',param) def get_history(self,cmi,page=None,page_amount=None): param={'currency_market_id':cmi} if page is not None:param['page']=page if page_amount is not None:param['page_per_amount']=page_amount return self.perform_private('orders/history',param) def create_order(self,cmi,amount,ppc,category): param={'currency_market_id':cmi} param['amount']=amount param['ppc']=ppc param['category']=category return self.perform_private('orders',param) def delete_order(self,order_id): param={'order_id':order_id} return self.perform_private('orders/revoke',param) def delete_all_orders(self,cmi): param={'currency_market_id':cmi} return self.perform_private('orders/quick_revoke',param) def get_opened_markets(self): return self.perform_private('currency_markets') def get_currency_orders(self,cmi,category='sale'): param={'currency_market_id':cmi} param['category']=category return self.perform_private('currency_markets/orders',param) def get_currency_trades(self,cmi): param={'currency_market_id':cmi} return self.perform_private('currency_markets/order_history',param)