"""
|
华鑫 L1数据接口
|
"""
|
import hashlib
|
import json
|
import socket
|
import time
|
# 数据格式:(代码,昨日收盘价,最新价,总成交量,总成交额,[(买1价,买1量),(买2价,买2量),(买3价,买3量),(买4价,买4量),(买5价,买5量)],[(卖1价,(卖1量),((卖2价,(卖2量),((卖3价,(卖3量),((卖4价,(卖4量),((卖5价,(卖5量)],更新时间)
|
|
class SocketUtil:
|
|
@classmethod
|
def md5_encrypt(cls, value):
|
md5 = hashlib.md5()
|
md5.update(value.encode('utf-8'))
|
return md5.hexdigest()
|
|
@classmethod
|
def create_socket(cls, addr, port):
|
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 生成socket,连接server
|
client.connect((addr, port))
|
return client
|
|
@classmethod
|
def load_header(cls, data_bytes):
|
slen = '##%08d' % len(data_bytes)
|
return slen.encode("utf-8") + data_bytes
|
|
@classmethod
|
# 接收数据,去除头
|
def recv_data(cls, sk):
|
data = ""
|
header_size = 10
|
buf = sk.recv(1024)
|
header_str = buf[:header_size]
|
if buf:
|
buf = buf.decode('utf-8')
|
if buf.startswith("##"):
|
content_length = int(buf[2:10])
|
received_size = 0
|
# 加上读取头的数据
|
received_size += len(buf[header_size:])
|
data += buf[header_size:]
|
while not received_size == content_length:
|
r_data = sk.recv(10240)
|
received_size += len(r_data)
|
data += r_data.decode('utf-8')
|
else:
|
data = sk.recv(1024 * 1024)
|
data = buf + data.decode('utf-8')
|
return data, header_str
|
|
|
def get_current_info():
|
"""
|
获取当前L1信息
|
:return: [(代码,昨日收盘价,最新价,总成交量,总成交额,买五档(价格,成交额),卖五档(价格,成交额),更新时间)]
|
"""
|
sk = SocketUtil.create_socket("43.138.167.68", 11008)
|
params_bytes = SocketUtil.load_header(json.dumps({"type": "get_l1_data","sign":''}).encode("utf-8"))
|
sk.send(params_bytes)
|
result_str, header = SocketUtil.recv_data(sk)
|
result_json = json.loads(result_str)
|
if result_json['code'] == 0:
|
return result_json['data']
|
return []
|
|
|
if __name__ == "__main__":
|
while True:
|
print(get_current_info())
|
time.sleep(1.5)
|