OKEX api v1 SDK Python实现
# !/usr/bin/python#-*- coding: utf-8 -*-import hashlibimport jsonimport randomimport urllib.requestimport requestsdef get2(url):print(url)try:opener = urllib.request.build_opener()opener.addheaders =
·
# !/usr/bin/python
# -*- coding: utf-8 -*-
import hashlib
import json
import random
import urllib.request
import requests
def get2(url):
print(url)
try:
opener = urllib.request.build_opener()
opener.addheaders = [('User-Agent', 'Mozilla/5.0')]
f = opener.open(url, timeout=10)
lines = f.readlines()
result = ''
for line in lines:
result += str(line, encoding='utf-8')
return result
except Exception as e:
print(e)
def post(url, params, headers):
# resp = requests.post(url, data=params, headers=headers, verify=False)
resp = requests.post(url, data=params, headers=headers)
return resp.text
def buildMySign(params,secretKey):
sign = ''
for key in sorted(params.keys()):
sign += key + '=' + str(params[key]) +'&'
data = sign+'secret_key='+secretKey
return hashlib.md5(data.encode("utf8")).hexdigest().upper()
def httpGet(url,resource,params=''):
return get2(url + resource + '?' + params)
USER_AGENTS = [
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
"Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
"Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
"Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
"Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
"Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
"Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
"Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
]
def httpPost(url,resource,params):
headers = {
'User-Agent': random.choice(USER_AGENTS),
"Content-type": "application/x-www-form-urlencoded",
}
return post(url + resource, params, headers)
class OKCoinFuture:
def __init__(self,url,apikey,secretkey):
self.__url = url
self.__apikey = apikey
self.__secretkey = secretkey
# OKCOIN期货行情信息
def future_ticker(self,symbol,contractType):
FUTURE_TICKER_RESOURCE = "/api/v1/future_ticker.do"
params = ''
if symbol:
params += '&symbol=' + symbol if params else 'symbol=' +symbol
if contractType:
params += '&contract_type=' + contractType if params else 'contract_type=' +symbol
return httpGet(self.__url,FUTURE_TICKER_RESOURCE,params)
# OKCoin期货市场深度信息
def future_depth(self,symbol,contractType,size):
FUTURE_DEPTH_RESOURCE = "/api/v1/future_depth.do"
params = ''
if symbol:
params += '&symbol=' + symbol if params else 'symbol=' +symbol
if contractType:
params += '&contract_type=' + contractType if params else 'contract_type=' +symbol
if size:
params += '&size=' + size if params else 'size=' + size
return httpGet(self.__url,FUTURE_DEPTH_RESOURCE,params)
# OKCoin期货交易记录信息
def future_trades(self,symbol,contractType):
FUTURE_TRADES_RESOURCE = "/api/v1/future_trades.do"
params = ''
if symbol:
params += '&symbol=' + symbol if params else 'symbol=' +symbol
if contractType:
params += '&contract_type=' + contractType if params else 'contract_type=' +symbol
return httpGet(self.__url,FUTURE_TRADES_RESOURCE,params)
# OKCoin期货指数
def future_index(self,symbol):
FUTURE_INDEX = "/api/v1/future_index.do"
params=''
if symbol:
params = 'symbol=' +symbol
return httpGet(self.__url,FUTURE_INDEX,params)
# 获取美元人民币汇率
def exchange_rate(self):
EXCHANGE_RATE = "/api/v1/exchange_rate.do"
return httpGet(self.__url,EXCHANGE_RATE,'')
# 获取预估交割价
def future_estimated_price(self,symbol):
FUTURE_ESTIMATED_PRICE = "/api/v1/future_estimated_price.do"
params=''
if symbol:
params = 'symbol=' +symbol
return httpGet(self.__url,FUTURE_ESTIMATED_PRICE,params)
def future_kline(self, symbol, type, contractType, size, since):
FUTURE_KLINE = "/api/v1/future_kline.do"
params = ''
if symbol:
params += '&symbol=' + symbol if params else 'symbol=' +symbol
if type:
params += '&type=' + type if params else 'type=' + type
if contractType:
params += '&contract_type=' + contractType if params else 'contract_type=' +symbol
if size:
params += '&size=' + size if params else 'size=' +size
if since:
params += '&since=' + since if params else 'since=' +since
return httpGet(self.__url, FUTURE_KLINE, params)
# 期货全仓账户信息
def future_userinfo(self):
FUTURE_USERINFO = "/api/v1/future_userinfo.do?"
params ={}
params['api_key'] = self.__apikey
params['sign'] = buildMySign(params,self.__secretkey)
return httpPost(self.__url,FUTURE_USERINFO,params)
# 期货全仓持仓信息
def future_position(self,symbol,contractType):
FUTURE_POSITION = "/api/v1/future_position.do?"
params = {
'api_key':self.__apikey,
'symbol':symbol,
'contract_type':contractType
}
params['sign'] = buildMySign(params,self.__secretkey)
return httpPost(self.__url,FUTURE_POSITION,params)
# 期货下单
def future_trade(self,symbol,contractType,price='',amount='',tradeType='',matchPrice=''):
FUTURE_TRADE = "/api/v1/future_trade.do?"
params = {
'api_key':self.__apikey,
'symbol':symbol,
'contract_type':contractType,
'amount':amount,
'type':tradeType,
'match_price':matchPrice,
}
if price:
params['price'] = price
params['sign'] = buildMySign(params,self.__secretkey)
return httpPost(self.__url,FUTURE_TRADE,params)
# 期货批量下单
def future_batchTrade(self,symbol,contractType,orders_data,leverRate):
FUTURE_BATCH_TRADE = "/api/v1/future_batch_trade.do?"
params = {
'api_key':self.__apikey,
'symbol':symbol,
'contract_type':contractType,
'orders_data':orders_data,
'lever_rate':leverRate
}
params['sign'] = buildMySign(params,self.__secretkey)
return httpPost(self.__url,FUTURE_BATCH_TRADE,params)
# 期货取消订单
def future_cancel(self,symbol,contractType,orderId):
FUTURE_CANCEL = "/api/v1/future_cancel.do?"
params = {
'api_key':self.__apikey,
'symbol':symbol,
'contract_type':contractType,
'order_id':orderId
}
params['sign'] = buildMySign(params,self.__secretkey)
return httpPost(self.__url,FUTURE_CANCEL,params)
# 期货获取订单信息
def future_orderinfo(self,symbol,contractType,orderId):
FUTURE_ORDERINFO = "/api/v1/future_order_info.do?"
params = {
'api_key':self.__apikey,
'symbol':symbol,
'contract_type':contractType,
'order_id':orderId,
}
params['sign'] = buildMySign(params,self.__secretkey)
return httpPost(self.__url,FUTURE_ORDERINFO,params)
# 期货逐仓账户信息
def future_userinfo_4fix(self):
FUTURE_INFO_4FIX = "/api/v1/future_userinfo_4fix.do?"
params = {'api_key':self.__apikey}
params['sign'] = buildMySign(params,self.__secretkey)
return httpPost(self.__url,FUTURE_INFO_4FIX,params)
# 期货逐仓持仓信息
def future_position_4fix(self,symbol,contractType,type1):
FUTURE_POSITION_4FIX = "/api/v1/future_position_4fix.do?"
params = {
'api_key':self.__apikey,
'symbol':symbol,
'contract_type':contractType,
'type':type1
}
params['sign'] = buildMySign(params,self.__secretkey)
return httpPost(self.__url,FUTURE_POSITION_4FIX,params)
# 用于访问OKCOIN 现货REST API
import hashlib
import json
import urllib.request
import requests
def get2(url):
print(url)
try:
opener = urllib.request.build_opener()
opener.addheaders = [('User-Agent', 'Mozilla/5.0')]
f = opener.open(url, timeout=5)
lines = f.readlines()
result = ''
for line in lines:
result += str(line, encoding='utf-8')
return result
except Exception as e:
print(e)
def post(url, params, headers):
resp = requests.post(url, data=params, headers=headers)
return resp.text
def buildMySign(params,secretKey):
sign = ''
for key in sorted(params.keys()):
sign += key + '=' + str(params[key]) +'&'
data = sign+'secret_key='+secretKey
return hashlib.md5(data.encode("utf8")).hexdigest().upper()
def httpGet(url,resource,params=''):
return get2(url + resource + '?' + params)
def httpPost(url,resource,params):
headers = {
"Content-type" : "application/x-www-form-urlencoded",
}
return post(url + resource, params, headers)
class OKCoinSpot:
def __init__(self, url, apikey, secretkey):
self.__url = url
self.__apikey = apikey
self.__secretkey = secretkey
# 获取OKCOIN现货行情信息
def ticker(self, symbol=''):
TICKER_RESOURCE = "/api/v1/ticker.do"
params = ''
if symbol:
params = 'symbol=%(symbol)s' % {'symbol': symbol}
return httpGet(self.__url, TICKER_RESOURCE, params)
# 获取OKCOIN现货市场深度信息
def depth(self, symbol=''):
DEPTH_RESOURCE = "/api/v1/depth.do"
params = ''
if symbol:
params = 'symbol=%(symbol)s' % {'symbol': symbol}
return httpGet(self.__url, DEPTH_RESOURCE, params)
# 获取OKCOIN现货历史交易信息
def trades(self, symbol=''):
TRADES_RESOURCE = "/api/v1/trades.do"
params = ''
if symbol:
params = 'symbol=%(symbol)s' % {'symbol': symbol}
return httpGet(self.__url, TRADES_RESOURCE, params)
def kline(self, symbol, type, size):
FUTURE_KLINE = "/api/v1/kline.do"
params = ''
if symbol:
params += '&symbol=' + symbol if params else 'symbol=' +symbol
if type:
params += '&type=' + type if params else 'type=' + type
if size:
params += '&size=' + size if params else 'size=' +size
return httpGet(self.__url, FUTURE_KLINE, params)
# 获取用户现货账户信息
def userinfo(self):
USERINFO_RESOURCE = "/api/v1/userinfo.do"
params = {}
params['api_key'] = self.__apikey
params['sign'] = buildMySign(params, self.__secretkey)
return httpPost(self.__url, USERINFO_RESOURCE, params)
# 现货交易
def trade(self, symbol, tradeType, price='', amount=''):
TRADE_RESOURCE = "/api/v1/trade.do"
params = {
'api_key': self.__apikey,
'symbol': symbol,
'type': tradeType
}
if price:
params['price'] = price
if amount:
params['amount'] = amount
params['sign'] = buildMySign(params, self.__secretkey)
return httpPost(self.__url, TRADE_RESOURCE, params)
# 现货批量下单
def batchTrade(self, symbol, tradeType, orders_data):
BATCH_TRADE_RESOURCE = "/api/v1/batch_trade.do"
params = {
'api_key': self.__apikey,
'symbol': symbol,
'type': tradeType,
'orders_data': orders_data
}
params['sign'] = buildMySign(params, self.__secretkey)
return httpPost(self.__url, BATCH_TRADE_RESOURCE, params)
# 现货取消订单
def cancelOrder(self, symbol, orderId):
CANCEL_ORDER_RESOURCE = "/api/v1/cancel_order.do"
params = {
'api_key': self.__apikey,
'symbol': symbol,
'order_id': orderId
}
params['sign'] = buildMySign(params, self.__secretkey)
return httpPost(self.__url, CANCEL_ORDER_RESOURCE, params)
# 现货订单信息查询
def orderinfo(self, symbol, orderId):
ORDER_INFO_RESOURCE = "/api/v1/order_info.do"
params = {
'api_key': self.__apikey,
'symbol': symbol,
'order_id': orderId
}
params['sign'] = buildMySign(params, self.__secretkey)
return httpPost(self.__url, ORDER_INFO_RESOURCE, params)
# 现货批量订单信息查询
def ordersinfo(self, symbol, orderId, tradeType):
ORDERS_INFO_RESOURCE = "/api/v1/orders_info.do"
params = {
'api_key': self.__apikey,
'symbol': symbol,
'order_id': orderId,
'type': tradeType
}
params['sign'] = buildMySign(params, self.__secretkey)
return httpPost(self.__url, ORDERS_INFO_RESOURCE, params)
# 现货获得历史订单信息
def orderHistory(self, symbol, status, currentPage, pageLength):
ORDER_HISTORY_RESOURCE = "/api/v1/order_history.do"
params = {
'api_key': self.__apikey,
'symbol': symbol,
'status': status,
'current_page': currentPage,
'page_length': pageLength
}
params['sign'] = buildMySign(params, self.__secretkey)
return httpPost(self.__url, ORDER_HISTORY_RESOURCE, params)
更多推荐
所有评论(0)