mns-common 1.3.1.8__py3-none-any.whl → 1.3.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mns-common might be problematic. Click here for more details.

@@ -36,7 +36,7 @@ def all_debt_ticker_data(fields) -> pd.DataFrame:
36
36
  params = {
37
37
  "cb": "jQuery34103608466964799838_" + current_timestamp,
38
38
  "pn": 1,
39
- "np": 1,
39
+ "np": 3,
40
40
  "ut": "8a086bfc3570bdde64a6a1c585cccb35",
41
41
  "fltt": 1,
42
42
  "invt": 1,
@@ -23,7 +23,7 @@ def fund_etf_spot_em() -> pd.DataFrame:
23
23
  "pn": "1",
24
24
  "pz": "5000",
25
25
  "po": "1",
26
- "np": "1",
26
+ "np": "3",
27
27
  "ut": "bd1d9ddb04089700cf9c27f6f7426281",
28
28
  "fltt": "2",
29
29
  "invt": "2",
@@ -26,7 +26,7 @@ def all_stock_ticker_data_new(fields, fs) -> pd.DataFrame:
26
26
  "pn": "1",
27
27
  "pz": "10000",
28
28
  "po": "1",
29
- "np": "1",
29
+ "np": "3",
30
30
  "ut": " bd1d9ddb04089700cf9c27f6f7426281",
31
31
  "fltt": "2",
32
32
  "invt": "2",
@@ -0,0 +1,217 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 14
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+ import mns_common.utils.data_frame_util as data_frame_util
9
+ import requests
10
+
11
+
12
+ import pandas as pd
13
+ from loguru import logger
14
+ import json
15
+ import threading
16
+
17
+ # 定义一个全局锁,用于保护 result 变量的访问
18
+ result_lock = threading.Lock()
19
+ # 初始化 result 变量为一个空的 Pandas DataFrame
20
+ result = pd.DataFrame()
21
+
22
+ MAX_PAGE_NUMBER = 200
23
+ # A股股票数量 todo暂定
24
+ STOCK_NUMBER = 5600
25
+
26
+
27
+ def sync_real_time_quotes():
28
+ global result
29
+ result = pd.DataFrame() # 重新初始化 result 变量
30
+ threads = []
31
+ page_number = round(STOCK_NUMBER / MAX_PAGE_NUMBER, 0) + 1
32
+ page_number = int(page_number)
33
+ # 创建多个线程来获取数据
34
+ for page in range(page_number): # 0到100页
35
+ thread = threading.Thread(target=all_stock_ticker_data_new, args=(page,))
36
+ threads.append(thread)
37
+ thread.start()
38
+
39
+ # 等待所有线程完成
40
+ for thread in threads:
41
+ thread.join()
42
+
43
+ return result
44
+
45
+
46
+ def all_stock_ticker_data_new(page) -> pd.DataFrame:
47
+ global result
48
+ fields = ("f352,f2,f3,f5,f6,f8,f10,f11,f22,f12,f14,f15,f16,f17,f18,f20,f21,f26,f33,f34,f35,f62,f66,f69,f72,f100,"
49
+ "f184,f211,f212"),
50
+ fs = "m:0 t:6,m:0 t:80,m:1 t:2,m:1 t:23,m:0 t:81 s:2048"
51
+
52
+ url = "https://13.push2.eastmoney.com/api/qt/clist/get"
53
+ # url = "https://push2.eastmoney.com/api/qt/clist/get?cb=jQuery112303212778189608789_1645434416300&fid=f62&po=1&pz=6000&pn=1&np=1&fltt=2&invt=2&ut=b2884a393a59ad64002292a3e90d46a5&fs=m%3A0%2Bt%3A6%2Bf%3A!2%2Cm%3A0%2Bt%3A13%2Bf%3A!2%2Cm%3A0%2Bt%3A80%2Bf%3A!2%2Cm%3A1%2Bt%3A2%2Bf%3A!2%2Cm%3A1%2Bt%3A23%2Bf%3A!2%2Cm%3A0%2Bt%3A7%2Bf%3A!2%2Cm%3A1%2Bt%3A3%2Bf%3A!2&fields=f12%2Cf14%2Cf2%2Cf3%2Cf62%2Cf184%2Cf66%2Cf69%2Cf72%2Cf75%2Cf78%2Cf81%2Cf84%2Cf87%2Cf204%2Cf205%2Cf124%2Cf1%2Cf13"
54
+ params = {
55
+ "cb": "jQuery1124046660442520420653_1660036672477",
56
+ "pn": "1",
57
+ "pz": "10000",
58
+ "po": "1",
59
+ "np": str(page),
60
+ "ut": " bd1d9ddb04089700cf9c27f6f7426281",
61
+ "fltt": "2",
62
+ "invt": "2",
63
+ "wbp2u": "|0|0|0|web",
64
+ "fid": "f3",
65
+ "fs": fs,
66
+ "fields": fields,
67
+ "_": 1660036672518
68
+ }
69
+ try:
70
+ r = requests.get(url, params)
71
+ data_text = r.text
72
+ begin_index = data_text.index('[')
73
+ end_index = data_text.index(']')
74
+ data_json = data_text[begin_index:end_index + 1]
75
+ data_json = json.loads(data_json)
76
+ logger.info("页码:{}",page)
77
+ if data_json is None:
78
+ data_df = pd.DataFrame()
79
+ else:
80
+ data_df = pd.DataFrame(data_json)
81
+ with result_lock:
82
+ # 使用锁来保护 result 变量的访问,将每页的数据添加到结果中
83
+ try:
84
+ if data_frame_util.is_not_empty(data_df):
85
+ result = pd.concat([result, data_df], ignore_index=True)
86
+ except BaseException as e:
87
+ logger.error("同步东财实时数据异常:{}", e)
88
+ result = pd.DataFrame()
89
+ except Exception as e:
90
+ logger.error("获取股票列表,实时行情异常:{},{}", e,page)
91
+ return pd.DataFrame()
92
+
93
+
94
+ # f212 卖1
95
+ # f211 买1
96
+ # f31 买1价格
97
+ # "f32" : 卖1价格
98
+
99
+
100
+ # 获取所有股票实时行情数据 f33,委比
101
+ def get_real_time_quotes_all_stocks():
102
+ # todo old version
103
+ # stock_ticker_data = all_stock_ticker_data(
104
+ # "f352,f2,f3,f5,f6,f8,f10,f11,f12,f14,f15,f16,f17,f18,f20,f21,f26,"
105
+ # "f33,f34,f35,f62,f66,f69,f72,f100,f184",
106
+ # "m:0+t:6+f:!2,m:0+t:13+f:!2,m:0+t:80+f:!2,m:1+t:2+f:!2,m:1+t:23+f:!2,m:0+t:7+f:!2,m:1+t:3+f:!2")
107
+
108
+ # todo new version
109
+ stock_ticker_data = all_stock_ticker_data_new(
110
+ "f352,f2,f3,f5,f6,f8,f10,f11,f22,f12,f14,f15,f16,f17,f18,f20,f21,f26,"
111
+ "f33,f34,f35,f62,f66,f69,f72,f100,f184,f211,f212",
112
+ "m:0 t:6,m:0 t:80,m:1 t:2,m:1 t:23,m:0 t:81 s:2048")
113
+
114
+ temp_df = stock_ticker_data.rename(columns={
115
+ "f2": "now_price",
116
+ "f3": "chg",
117
+ "f5": "volume",
118
+ "f6": "amount",
119
+ "f8": "exchange",
120
+ "f10": "quantity_ratio",
121
+ "f22": "up_speed",
122
+ "f11": "up_speed_05",
123
+ "f12": "symbol",
124
+ "f14": "name",
125
+ "f15": "high",
126
+ "f16": "low",
127
+ "f17": "open",
128
+ "f18": "yesterday_price",
129
+ "f20": "total_mv",
130
+ "f21": "flow_mv",
131
+ "f26": "list_date",
132
+ "f33": "wei_bi",
133
+ "f34": "outer_disk",
134
+ "f35": "inner_disk",
135
+ "f62": "today_main_net_inflow",
136
+ "f66": "super_large_order_net_inflow",
137
+ "f69": "super_large_order_net_inflow_ratio",
138
+ "f72": "large_order_net_inflow",
139
+ # "f78": "medium_order_net_inflow",
140
+ # "f84": "small_order_net_inflow",
141
+ "f100": "industry",
142
+ # "f103": "concept",
143
+ "f184": "today_main_net_inflow_ratio",
144
+ "f352": "average_price",
145
+ "f211": "buy_1_num",
146
+ "f212": "sell_1_num"
147
+ })
148
+ temp_df.loc[temp_df['buy_1_num'] == '-', 'buy_1_num'] = 0
149
+ temp_df.loc[temp_df['sell_1_num'] == '-', 'sell_1_num'] = 0
150
+ temp_df.loc[temp_df['up_speed_05'] == '-', 'up_speed_05'] = 0
151
+ temp_df.loc[temp_df['up_speed'] == '-', 'up_speed'] = 0
152
+ temp_df.loc[temp_df['average_price'] == '-', 'average_price'] = 0
153
+ temp_df.loc[temp_df['wei_bi'] == '-', 'wei_bi'] = 0
154
+ temp_df.loc[temp_df['yesterday_price'] == '-', 'yesterday_price'] = 0
155
+ temp_df.loc[temp_df['now_price'] == '-', 'now_price'] = 0
156
+ temp_df.loc[temp_df['chg'] == '-', 'chg'] = 0
157
+ temp_df.loc[temp_df['volume'] == '-', 'volume'] = 0
158
+ temp_df.loc[temp_df['amount'] == '-', 'amount'] = 0
159
+ temp_df.loc[temp_df['exchange'] == '-', 'exchange'] = 0
160
+ temp_df.loc[temp_df['quantity_ratio'] == '-', 'quantity_ratio'] = 0
161
+ temp_df.loc[temp_df['high'] == '-', 'high'] = 0
162
+ temp_df.loc[temp_df['low'] == '-', 'low'] = 0
163
+ temp_df.loc[temp_df['open'] == '-', 'open'] = 0
164
+ temp_df.loc[temp_df['total_mv'] == '-', 'total_mv'] = 0
165
+ temp_df.loc[temp_df['flow_mv'] == '-', 'flow_mv'] = 0
166
+ temp_df.loc[temp_df['inner_disk'] == '-', 'inner_disk'] = 0
167
+ temp_df.loc[temp_df['outer_disk'] == '-', 'outer_disk'] = 0
168
+ temp_df.loc[temp_df['today_main_net_inflow_ratio'] == '-', 'today_main_net_inflow_ratio'] = 0
169
+ temp_df.loc[temp_df['today_main_net_inflow'] == '-', 'today_main_net_inflow'] = 0
170
+ temp_df.loc[temp_df['super_large_order_net_inflow'] == '-', 'super_large_order_net_inflow'] = 0
171
+ temp_df.loc[temp_df['super_large_order_net_inflow_ratio'] == '-', 'super_large_order_net_inflow_ratio'] = 0
172
+ temp_df.loc[temp_df['large_order_net_inflow'] == '-', 'large_order_net_inflow'] = 0
173
+ # temp_df.loc[temp_df['medium_order_net_inflow'] == '-', 'medium_order_net_inflow'] = 0
174
+ # temp_df.loc[temp_df['small_order_net_inflow'] == '-', 'small_order_net_inflow'] = 0
175
+
176
+ temp_df["list_date"] = pd.to_numeric(temp_df["list_date"], errors="coerce")
177
+ temp_df["wei_bi"] = pd.to_numeric(temp_df["wei_bi"], errors="coerce")
178
+ temp_df["average_price"] = pd.to_numeric(temp_df["average_price"], errors="coerce")
179
+ temp_df["yesterday_price"] = pd.to_numeric(temp_df["yesterday_price"], errors="coerce")
180
+ temp_df["now_price"] = pd.to_numeric(temp_df["now_price"], errors="coerce")
181
+ temp_df["chg"] = pd.to_numeric(temp_df["chg"], errors="coerce")
182
+ temp_df["volume"] = pd.to_numeric(temp_df["volume"], errors="coerce")
183
+ temp_df["amount"] = pd.to_numeric(temp_df["amount"], errors="coerce")
184
+ temp_df["exchange"] = pd.to_numeric(temp_df["exchange"], errors="coerce")
185
+ temp_df["quantity_ratio"] = pd.to_numeric(temp_df["quantity_ratio"], errors="coerce")
186
+ temp_df["high"] = pd.to_numeric(temp_df["high"], errors="coerce")
187
+ temp_df["low"] = pd.to_numeric(temp_df["low"], errors="coerce")
188
+ temp_df["open"] = pd.to_numeric(temp_df["open"], errors="coerce")
189
+ temp_df["total_mv"] = pd.to_numeric(temp_df["total_mv"], errors="coerce")
190
+ temp_df["flow_mv"] = pd.to_numeric(temp_df["flow_mv"], errors="coerce")
191
+ temp_df["outer_disk"] = pd.to_numeric(temp_df["outer_disk"], errors="coerce")
192
+ temp_df["inner_disk"] = pd.to_numeric(temp_df["inner_disk"], errors="coerce")
193
+ temp_df["today_main_net_inflow"] = pd.to_numeric(temp_df["today_main_net_inflow"], errors="coerce")
194
+ temp_df["super_large_order_net_inflow"] = pd.to_numeric(temp_df["super_large_order_net_inflow"],
195
+ errors="coerce")
196
+ temp_df["super_large_order_net_inflow_ratio"] = pd.to_numeric(temp_df["super_large_order_net_inflow_ratio"],
197
+ errors="coerce")
198
+ temp_df["large_order_net_inflow"] = pd.to_numeric(temp_df["large_order_net_inflow"],
199
+ errors="coerce")
200
+ # temp_df["medium_order_net_inflow"] = pd.to_numeric(temp_df["medium_order_net_inflow"],
201
+ # errors="coerce")
202
+ # temp_df["small_order_net_inflow"] = pd.to_numeric(temp_df["small_order_net_inflow"], errors="coerce")
203
+
204
+ # 大单比例
205
+ temp_df['large_order_net_inflow_ratio'] = round((temp_df['large_order_net_inflow'] / temp_df['amount']) * 100, 2)
206
+
207
+ # 外盘是内盘倍数
208
+ temp_df['disk_ratio'] = round((temp_df['outer_disk'] - temp_df['inner_disk']) / temp_df['inner_disk'], 2)
209
+ # 只有外盘没有内盘
210
+ temp_df.loc[temp_df["inner_disk"] == 0, ['disk_ratio']] = 1688
211
+
212
+ return temp_df
213
+
214
+
215
+ if __name__ == '__main__':
216
+ df = all_stock_ticker_data_new(1)
217
+ print(df)
@@ -22,7 +22,7 @@ def hk_real_time_quotes(cookie):
22
22
  '&pn=1'
23
23
  '&pz=50000'
24
24
  '&po=1'
25
- '&np=1'
25
+ '&np=3'
26
26
  '&ut=bd1d9ddb04089700cf9c27f6f7426281'
27
27
  '&fltt=2'
28
28
  '&invt=2'
@@ -21,7 +21,7 @@ def all_stock_ticker_data(fields, fs) -> pd.DataFrame:
21
21
  "pn": "1",
22
22
  "pz": "10000",
23
23
  "po": "1",
24
- "np": "1",
24
+ "np": "3",
25
25
  "ut": " bd1d9ddb04089700cf9c27f6f7426281",
26
26
  "fltt": "2",
27
27
  "invt": "2",
@@ -0,0 +1,7 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
@@ -0,0 +1,9 @@
1
+ import sys
2
+ import os
3
+
4
+ file_path = os.path.abspath(__file__)
5
+ end = file_path.index('mns') + 16
6
+ project_path = file_path[0:end]
7
+ sys.path.append(project_path)
8
+
9
+ # 同花顺 美股地址:https://basic.10jqka.com.cn/168/PINS/company.html
@@ -1,4 +1,4 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns_common
3
- Version: 1.3.1.8
3
+ Version: 1.3.2.0
4
4
 
@@ -8,12 +8,13 @@ mns_common/api/akshare/stock_zb_pool.py,sha256=ylcVgZTzsD3qz9WaItLtoqTf4t-Ex49MD
8
8
  mns_common/api/akshare/stock_zt_pool_api.py,sha256=_4PG_Wd88S4zweKNwZprwxaMMHBF4OQSB77DGW1l9UQ,1929
9
9
  mns_common/api/akshare/yjyg_sync_api.py,sha256=cvk50_XhJWUqduOiC15SYvQTCQqECt6td_L2Hvnl7Jg,4108
10
10
  mns_common/api/em/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
11
- mns_common/api/em/east_money_debt_api.py,sha256=MT82oI3CjVw3Mk8Uh6M0vOHdB4yMz5krLWTj_goBla4,12429
12
- mns_common/api/em/east_money_etf_api.py,sha256=88-PinW8EhiNg6CSfhF4Ea154PlaQomOYyWd7BVv2Fk,11578
13
- mns_common/api/em/east_money_stock_api.py,sha256=hCHZ1uLOLw4AOZ1KEhTMZZYExo-BmfwodO0sjt9yYhE,8392
11
+ mns_common/api/em/east_money_debt_api.py,sha256=lToffwPlS0S05FxZp6QHhLxCJDFAnvorgqjYXDW5p8I,12429
12
+ mns_common/api/em/east_money_etf_api.py,sha256=AvfmOZKTOq01kgh59EJbsrD0xdBQDhKT_k38z1k0VYA,11578
13
+ mns_common/api/em/east_money_stock_api.py,sha256=kG4a_xcnQMYPkUec74f_7TtpmNb6GPVS23Xgr4Cq2og,8392
14
+ mns_common/api/em/east_money_stock_api_develop.py,sha256=IijcfCwqzuwd7okAjOnFoWiWSvlRttSg1vGzkDXljeM,9888
14
15
  mns_common/api/em/east_money_stock_gdfx_free_top_10_api.py,sha256=jVy3fNdrkLq3ri7yUwXWt0ItB8LCHzt9CPz91Fj8sPA,9198
15
- mns_common/api/em/east_money_stock_hk_api.py,sha256=JBMonPLMsz2YwsocCZtwEwtjqQ1fSzfFxKGTdm1fnsQ,9074
16
- mns_common/api/em/east_money_stock_v2_api.py,sha256=HrvvQiKbIqhhiSBKSZV_hGlWHWFaUfzsHyfYb3oK8yk,14780
16
+ mns_common/api/em/east_money_stock_hk_api.py,sha256=DfadhyUEs5tsAjnW7p6FnxBX9BglIB37FQ-7Z3wcVow,9074
17
+ mns_common/api/em/east_money_stock_v2_api.py,sha256=Ux9-rW4vY429598_mOcbyupaEJG0gR_AZnqT7mlbL5w,14780
17
18
  mns_common/api/em/em_concept_index_api.py,sha256=lbW0emuCSlJ54Sj8o07AuTEfLmNfOPo3Cz4lwWiv4c8,8285
18
19
  mns_common/api/em/self_choose/__init__.py,sha256=vAy9qYgUgZL9Y0w3BBbqmZ9zES46pPnlJjO2hdtotp0,2673
19
20
  mns_common/api/hk/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
@@ -58,6 +59,8 @@ mns_common/api/ths/wen_cai/ths_wen_cai_api.py,sha256=TiDbKIB57ARrnGb70vSJ7-c7lod
58
59
  mns_common/api/ths/zt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
59
60
  mns_common/api/ths/zt/ths_stock_zt_pool_api.py,sha256=GIYdc5J7ZrV25Elbf0n3bBZOc7x4OrlI0jFrO3du8lY,10756
60
61
  mns_common/api/ths/zt/ths_stock_zt_pool_v2_api.py,sha256=ohkeXyUSvxie2YqFPxqy9eLAHyFKQ5nx9U0JcR5LKeQ,16349
62
+ mns_common/api/us/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
63
+ mns_common/api/us/ths_us_company_info_api.py,sha256=qQjv4F-ovQ2uuu-FlBAnxjvVA7qj9y_x5WZtUoyoEW4,241
61
64
  mns_common/component/__init__.py,sha256=8b2PuXJM5fLoq71cWPXp695czQuaRtyR6OVHajGjDPc,161
62
65
  mns_common/component/common_service_fun_api.py,sha256=3wlD3FlZ8W5X6indKZIX-ol48xNZX_UmeLnDxP10vvA,5221
63
66
  mns_common/component/cache/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
@@ -125,7 +128,7 @@ mns_common/utils/date_handle_util.py,sha256=P4WJUmoDpo4IoCrt2z4keyr7pqXHKmCZBVod
125
128
  mns_common/utils/db_util.py,sha256=hSmfNAN4vEeEaUva6_cicZEhb2jSnib-Gvk2reke1vc,2590
126
129
  mns_common/utils/file_util.py,sha256=egWu6PenGPRp_ixrNTHKarT4dAnOT6FETR82EHUZJnQ,1042
127
130
  mns_common/utils/ip_util.py,sha256=UTcYfz_uytB__6nlBf7T-izuI7hi4XdB6ET0sJgEel4,969
128
- mns_common-1.3.1.8.dist-info/METADATA,sha256=InfaHBfA0sFfwjxm_Pxt_auu6ciGdKKGjESwo6qgySE,61
129
- mns_common-1.3.1.8.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
130
- mns_common-1.3.1.8.dist-info/top_level.txt,sha256=ZC58kAR-8Hvc6U2xhYNBNLAh3mb6sZazbdj5nZpvEkQ,11
131
- mns_common-1.3.1.8.dist-info/RECORD,,
131
+ mns_common-1.3.2.0.dist-info/METADATA,sha256=sildChlnIKV5b2RBzT8PP4p4gNKDxDZHRukTivS6QLA,61
132
+ mns_common-1.3.2.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
133
+ mns_common-1.3.2.0.dist-info/top_level.txt,sha256=ZC58kAR-8Hvc6U2xhYNBNLAh3mb6sZazbdj5nZpvEkQ,11
134
+ mns_common-1.3.2.0.dist-info/RECORD,,