1
+ import os
1
2
import re
2
3
from random import SystemRandom
3
4
from typing import Any
12
13
from .const import _base_headers
13
14
from .const import _urls
14
15
from .utils import emt_trade_encrypt
16
+ from .utils import get_float
15
17
from .utils import get_logger
16
18
17
19
logger = get_logger (__name__ )
20
22
_em_validate_key = ""
21
23
22
24
25
+ def _query_snapshot (symbol_code : str , market : str ) -> Optional [dict ]:
26
+ url = "https://emhsmarketwg.eastmoneysec.com/api/SHSZQuoteSnapshot"
27
+ params = {"id" : symbol_code .strip (), "market" : market }
28
+ headers = _base_headers .copy ()
29
+ resp = session .get (url , params = params , headers = headers )
30
+ _check_resp (resp )
31
+ return resp .json ()
32
+
33
+
34
+ def get_last_price (symbol_code : str , market : str ) -> float :
35
+ ret = _query_snapshot (symbol_code , market )
36
+ if ret is None or "status" not in ret or ret ["status" ] != 0 :
37
+ return float ("nan" )
38
+
39
+ return get_float (ret ["realtimequote" ], "currentPrice" )
40
+
41
+
23
42
def _check_resp (resp : Response ):
24
43
if resp .status_code != 200 :
25
44
logger .error (f"request { resp .url } fail, code={ resp .status_code } , response={ resp .text } " )
@@ -33,9 +52,13 @@ def _query_something(tag: str, req_data: Optional[dict] = None) -> Optional[Dict
33
52
:param req_data: 请求提交数据,可选
34
53
:return:
35
54
"""
36
- assert _em_validate_key , "em_validatekey is empty"
55
+ if not _em_validate_key :
56
+ validate_key = login ()
57
+ else :
58
+ validate_key = _em_validate_key
59
+ logger .info (validate_key )
37
60
assert tag in _urls , f"{ tag } not in url list"
38
- url = _urls [tag ] + _em_validate_key
61
+ url = _urls [tag ] + validate_key
39
62
if req_data is None :
40
63
req_data = {
41
64
"qqhs" : 100 ,
@@ -46,6 +69,7 @@ def _query_something(tag: str, req_data: Optional[dict] = None) -> Optional[Dict
46
69
logger .debug (f"(tag={ tag } ), (data={ req_data } ), (url={ url } )" )
47
70
resp = session .post (url , headers = headers , data = req_data )
48
71
_check_resp (resp )
72
+ logger .info (resp .text )
49
73
return resp .json ()
50
74
51
75
@@ -79,7 +103,7 @@ def _get_em_validate_key():
79
103
return _em_validatekey
80
104
81
105
82
- def login (username : str , password : str , duration : int = 30 ) -> Optional [str ]:
106
+ def login (username : str = "" , password : str = "" , duration : int = 30 ) -> Optional [str ]:
83
107
"""登录接口.
84
108
85
109
:param str username: 用户名
@@ -88,6 +112,10 @@ def login(username: str, password: str, duration: int = 30) -> Optional[str]:
88
112
:type duration: int, optional
89
113
:return:
90
114
"""
115
+ if not username :
116
+ username = os .getenv ("EM_USERNAME" , "" )
117
+ if not password :
118
+ password = os .getenv ("EM_PASSWORD" , "" )
91
119
random_num , code = _get_captcha_code ()
92
120
headers = _base_headers .copy ()
93
121
headers ["X-Requested-With" ] = "XMLHttpRequest"
@@ -199,5 +227,6 @@ def insert_order(stock_code, trade_type, market: str, price: float, amount: int)
199
227
def cancel_order (code : str ):
200
228
data = {"revokes" : code .strip ()}
201
229
resp = _query_something ("cancel_order" , req_data = data )
230
+ logger .info (resp )
202
231
if resp :
203
232
return resp
0 commit comments