Navigation
next
Bottom
Hashnest Client Python
DOWNLOAD
A simple Hashnest client
""" DONATION 16RdQZ86NUWQbE6rM86JbxnnaCDcAKqa9 AUTHOR http://steal1982.altervista.org/hashnest.php """ fileversion='2' ####HASHNEST API HELPER#### """ simple hashnest api client usage example: from hashnest import hashnest_connector username=raw_input("username:"); key=raw_input("key:"); secret=raw_input("secret:"); connector=hashnest_connector(username,key,secret) print connector.get_opened_markets() """ #still missing error checking from urllib import urlencode import urllib2,json import time import hashlib,hmac,base64 class hashnest_connector(object): version=fileversion #BASEURL='https://54.178.214.189/api/' BASEURL='https://www.hashnest.com/api/' APIVERSION='v1' URL=BASEURL+APIVERSION+'/' URL_ACCOUNT='account' URL_BALANCE='currency_accounts' URL_HASHRATE='hash_accounts' URL_CREATE_ORDER='orders' URL_ORDERS='orders/active' URL_HISTORY='orders/history' URL_DELETE_ORDER='orders/revoke' URL_DELETE_ALL_ORDERS='orders/quick_revoke' URL_OPENED_MARKETS='currency_markets' URL_CURRENCY_ORDERS='currency_markets/orders' URL_CURRENCY_TRADES='currency_markets/order_history' SELL='sale' BUY='purchase' def __init__(self,username,key,secret): self.username=username self.key=key self.secret=secret def get_nonce(self): return int(time.time()*1000) def sign(self,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() return urlencode(req) def perform_private(self,url,req={}): url=baseurl=self.URL+url data=self.sign(req) request= urllib2.Request(url, data) request.add_header('User-Agent', 'ApeGoxApi-'+self.version) resp = urllib2.urlopen(request) r=resp.read() try: return json.loads(r) except: return r def get_account_info(self): return self.perform_private(self.URL_ACCOUNT) def get_account_balance(self): return self.perform_private(self.URL_BALANCE) def get_account_hashrate(self): return self.perform_private(self.URL_HASHRATE) def get_orders(self,cmi): param={'currency_market_id':cmi} return self.perform_private(self.URL_ORDERS,param) def get_history(self,cmi,page=1,page_amount=20): param={'currency_market_id':cmi} param['page']=page param['page_per_amount']=page_amount return self.perform_private(self.URL_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(self.URL_CREATE_ORDER,param) def delete_order(self,order_id): param={'order_id':order_id} return self.perform_private(self.URL_DELETE_ORDER,param) def delete_all_orders(self,cmi,category): param={'currency_market_id':cmi} param['category']=category return self.perform_private(self.URL_DELETE_ALL_ORDERS,param) def get_opened_markets(self): return self.perform_private(self.URL_OPENED_MARKETS) def get_currency_orders(self,cmi): param={'currency_market_id':cmi} return self.perform_private(self.URL_CURRENCY_ORDERS,param) def get_currency_trades(self,cmi): param={'currency_market_id':cmi} return self.perform_private(self.URL_CURRENCY_TRADES,param) if __name__=='__main__': import auth_test profile=0 a=hashnest_connector(auth_test.user[profile]['username'], auth_test.user[profile]['key'], auth_test.user[profile]['secret']) print a.get_opened_markets()
previous
Bottom
Hashnest Client Plus
DOWNLOAD
Require:
hashnest
This class implement Delta Nonce feature and response log.
""" DONATION 16RdQZ86NUWQbE6rM86JbxnnaCDcAKqa9 AUTHOR http://steal1982.altervista.org/hashnest.php """ fileversion='1' ####HASHNEST API HELPER PLUS#### """ hashnest client plus. this client extend hashnest simple client to provide: api call logs connection retry delta and optionally deltahack(To enable deltahack please set hashnest_connector.DELTAHACK=True (row:44)) """ #still missing error checking from urllib import urlencode import urllib2,json import time,datetime import hashlib,hmac,base64 import os,gzip,sys from hashnest_simple import hashnest_connector class hashnest_connector(hashnest_connector): version=fileversion BASEDIR=os.path.dirname(os.path.abspath(__file__))+'/' LOGDIR=BASEDIR+'logs/' TEMPDIR=BASEDIR+'temp/' LOGFILE='hashnestapilog.txt' DELTAFILE='delta.dat' DELTAHACK=False def catch_exc(self): print 'EXCEPTION ERROR' exc_type, exc_obj, exc_tb = sys.exc_info() while exc_tb is not None: fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] print(fname, exc_tb.tb_lineno) exc_tb=exc_tb.tb_next print exc_type,exc_obj delta=0 def load_delta(self): try: with open(self.TEMPDIR+self.DELTAFILE, 'r') as f: delta=f.read().split('|') self.delta=int(delta[0]) self.deltahack=int(delta[1]) except Exception,e: if not os.path.isdir(self.TEMPDIR): os.makedirs(self.TEMPDIR) self.save_delta(self.delta,self.deltahack) return self.delta,self.deltahack def save_delta(self,delta,deltahack): try: with open(self.TEMPDIR+self.DELTAFILE, 'w') as f: f.write(str(int(delta))+'|'+str(int(self.deltahack))) except Exception,e: print e def checkdir(self,dirname): if not os.path.isdir(dirname): os.makedirs(dirname) def __init__(self,username,key,secret): self.deltahack=0 self.checkdir(self.LOGDIR) self.checkdir(self.TEMPDIR) super(hashnest_connector,self).__init__(username, key, secret) def printlog(self, nonce,url,r,data): try: f = open(self.LOGDIR+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(e) def get_nonce(self): self.utcnow=a=datetime.datetime.utcnow() b=datetime.datetime(1970,1,1,0,0,0,0) delta,deltahack=self.load_delta() if not self.DELTAHACK: deltahack=0 self.last=a=a- datetime.timedelta(seconds=delta+deltahack) self.nonce= int((a-b).total_seconds()*1000) return self.nonce def check_result(self,result): pass def sync_delta(self,e,i): h=e.headers['date'] d=datetime.datetime.strptime(h,'%a, %d %b %Y %H:%M:%S %Z') self.delta=(self.utcnow-d).total_seconds() if i>3:self.deltahack=i*5*(-1**i) self.save_delta(self.delta,self.deltahack) def perform_private(self,url,req={}): time.sleep(1) url=baseurl=self.URL+url for i in range(0,self.CONNECTION_RETRY): data=self.sign(req) try: request= urllib2.Request(url, data) request.add_header('User-Agent', 'ApeGoxApi-'+self.version) resp = urllib2.urlopen(request) r=resp.read() self.printlog(self.nonce,url,r,data) try: return json.loads(r) except: return r except Exception,e: if isinstance(e, urllib2.HTTPError): try: if e.code==401: h=e.headers['date'] d=datetime.datetime.strptime(h,'%a, %d %b %Y %H:%M:%S %Z') print 'AUTH-ERROR:SERVER UTC:' ,d print 'AUTH-ERROR:LOCAL UTC:' ,self.utcnow print 'AUTH-ERROR:LAST TIME SENT:', self.last print 'AUTH-ERROR:LAST DELTASECONDS:', self.delta,self.deltahack self.sync_delta(e,i) print 'AUTH-ERROR:NEW DELTA SECONDS:' ,self.delta,self.deltahack except: pass try: msg=str(e.read()) except: msg='' self.printlog(self.nonce,url,str((e,msg)),data) print 'ERROR:' +str(i+1)+'/'+str(self.CONNECTION_RETRY)+':' + str(e) + '---' ,msg,"\n"+url+"\n"+data time.sleep(10) if __name__=='__main__': import auth_test profile=0 a=hashnest_connector(auth_test.user[profile]['username'], auth_test.user[profile]['key'], auth_test.user[profile]['secret']) print a.get_opened_markets()
Top