admin
5 天以前 8c4b2afcaf79032aa22169efa36ef71fab324882
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
"""
华鑫 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)