""" 华鑫 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)