mns-common 1.3.6.7__py3-none-any.whl → 1.3.6.9__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.

Files changed (24) hide show
  1. mns_common/api/em/concept/__init__.py +7 -0
  2. mns_common/api/em/gd/__init__.py +7 -0
  3. mns_common/api/em/{east_money_stock_gdfx_free_top_10_api.py → gd/east_money_stock_gdfx_free_top_10_api.py} +2 -2
  4. mns_common/api/em/real_time/__init__.py +7 -0
  5. mns_common/api/em/{east_money_debt_api.py → real_time/east_money_debt_api.py} +11 -8
  6. mns_common/api/em/{east_money_etf_api.py → real_time/east_money_etf_api.py} +11 -8
  7. mns_common/api/em/{east_money_stock_api_v3.py → real_time/east_money_stock_a_api.py} +70 -3
  8. mns_common/api/em/{east_money_stock_v2_api.py → real_time/east_money_stock_a_v2_api.py} +12 -72
  9. mns_common/api/em/{east_money_stock_hk_api.py → real_time/east_money_stock_hk_api.py} +13 -9
  10. mns_common/api/em/{east_money_stock_us_api.py → real_time/east_money_stock_us_api.py} +11 -8
  11. mns_common/api/ths/zt/ths_stock_zt_pool_api.py +2 -4
  12. mns_common/api/ths/zt/ths_stock_zt_pool_v2_api.py +2 -2
  13. mns_common/component/em/__init__.py +7 -0
  14. mns_common/component/em/em_real_time_quotes_api.py +56 -0
  15. mns_common/component/em/em_stock_info_api.py +37 -0
  16. mns_common/component/proxies/proxy_common_api.py +20 -16
  17. mns_common/constant/db_name_constant.py +15 -0
  18. {mns_common-1.3.6.7.dist-info → mns_common-1.3.6.9.dist-info}/METADATA +1 -1
  19. {mns_common-1.3.6.7.dist-info → mns_common-1.3.6.9.dist-info}/RECORD +22 -18
  20. mns_common/api/em/east_money_stock_api.py +0 -233
  21. mns_common/api/em/east_money_stock_quotes_sync_api.py +0 -250
  22. /mns_common/api/em/{em_concept_index_api.py → concept/em_concept_index_api.py} +0 -0
  23. {mns_common-1.3.6.7.dist-info → mns_common-1.3.6.9.dist-info}/WHEEL +0 -0
  24. {mns_common-1.3.6.7.dist-info → mns_common-1.3.6.9.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,37 @@
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
+ from mns_common.db.MongodbUtil import MongodbUtil
9
+ import mns_common.constant.db_name_constant as db_name_constant
10
+
11
+ mongodb_util = MongodbUtil('27017')
12
+
13
+
14
+ # 获取东方财富A股全部信息
15
+ def get_a_stock_info():
16
+ return mongodb_util.find_all_data(db_name_constant.EM_A_STOCK_INFO)
17
+
18
+
19
+ # 获取东方财富ETF全部信息
20
+ def get_etf_info():
21
+ return mongodb_util.find_all_data(db_name_constant.EM_ETF_INFO)
22
+
23
+
24
+ # 获取东方财富可转债全部信息
25
+ def get_kzz_info():
26
+ return mongodb_util.find_all_data(db_name_constant.EM_KZZ_INFO)
27
+
28
+
29
+ # 获取东方财富美股全部信息
30
+ def get_us_stock_info():
31
+ return mongodb_util.find_all_data(db_name_constant.EM_US_STOCK_INFO)
32
+
33
+
34
+ # 获取东方财富港股全部信息
35
+
36
+ def get_hk_stock_info():
37
+ return mongodb_util.find_all_data(db_name_constant.EM_HK_STOCK_INFO)
@@ -38,27 +38,31 @@ def check_valid(str_now_date, ip_proxy_pool):
38
38
 
39
39
 
40
40
  def generate_proxy_ip(minutes):
41
- query = {"type": "liu_guan_proxy", }
42
- stock_account_info = mongodb_util.find_query_data(db_name_constant.STOCK_ACCOUNT_INFO, query)
43
- order_id = list(stock_account_info['password'])[0]
44
- secret = list(stock_account_info['account'])[0]
41
+ ip_proxy_pool = mongodb_util.find_all_data(db_name_constant.IP_PROXY_POOL)
42
+ if data_frame_util.is_not_empty(ip_proxy_pool):
43
+ return list(ip_proxy_pool['ip'])[0]
44
+ else:
45
+ query = {"type": "liu_guan_proxy", }
46
+ stock_account_info = mongodb_util.find_query_data(db_name_constant.STOCK_ACCOUNT_INFO, query)
47
+ order_id = list(stock_account_info['password'])[0]
48
+ secret = list(stock_account_info['account'])[0]
45
49
 
46
- now_date = datetime.datetime.now()
47
- time_to_add = datetime.timedelta(minutes=minutes - 1, seconds=40)
48
- new_date = now_date + time_to_add
49
- str_now_date = new_date.strftime('%Y-%m-%d %H:%M:%S')
50
+ now_date = datetime.datetime.now()
51
+ time_to_add = datetime.timedelta(minutes=minutes - 1, seconds=40)
52
+ new_date = now_date + time_to_add
53
+ str_now_date = new_date.strftime('%Y-%m-%d %H:%M:%S')
50
54
 
51
- # 获取10分钟动态ip
52
- ip = liu_guan_proxy_api.get_proxy_api(order_id, secret, str(60 * minutes))
55
+ # 获取10分钟动态ip
56
+ ip = liu_guan_proxy_api.get_proxy_api(order_id, secret, str(60 * minutes))
53
57
 
54
- result_dict = {"_id": ip,
55
- 'effect_time': str_now_date,
56
- 'ip': ip}
57
- result_df = pd.DataFrame(result_dict, index=[1])
58
+ result_dict = {"_id": ip,
59
+ 'effect_time': str_now_date,
60
+ 'ip': ip}
61
+ result_df = pd.DataFrame(result_dict, index=[1])
58
62
 
59
- mongodb_util.insert_mongo(result_df, db_name_constant.IP_PROXY_POOL)
63
+ mongodb_util.insert_mongo(result_df, db_name_constant.IP_PROXY_POOL)
60
64
 
61
- return ip
65
+ return ip
62
66
 
63
67
 
64
68
  def get_proxy_ip(str_now_date, minutes):
@@ -6,6 +6,21 @@ end = file_path.index('mns') + 14
6
6
  project_path = file_path[0:end]
7
7
  sys.path.append(project_path)
8
8
 
9
+ # 东方财富a股信息
10
+ EM_A_STOCK_INFO = 'em_a_stock_info'
11
+
12
+ # 东方财富ETF信息
13
+ EM_ETF_INFO = 'em_etf_info'
14
+
15
+ # 东方财富KZZ信息
16
+ EM_KZZ_INFO = 'em_kzz_info'
17
+
18
+ # 东方财富HK股信息
19
+ EM_HK_STOCK_INFO = 'em_hk_stock_info'
20
+
21
+ # 东方财富US股信息
22
+ EM_US_STOCK_INFO = 'em_us_stock_info'
23
+
9
24
  # ip代理池
10
25
  IP_PROXY_POOL = 'ip_proxy_pool'
11
26
 
@@ -1,4 +1,4 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-common
3
- Version: 1.3.6.7
3
+ Version: 1.3.6.9
4
4
 
@@ -8,16 +8,17 @@ 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=yhUghw5Fp61SjBiQJyPnkLXjMOw3-SD8_cDICc7xels,14589
12
- mns_common/api/em/east_money_etf_api.py,sha256=PtVBNArQ5sMjzBVCW-WBnAuqSp8qB4E1HbZ1-TuZpMY,14273
13
- mns_common/api/em/east_money_stock_api.py,sha256=NkV8jmdYOrOpQd00KsMBNoAkPZuWGtw0N1Rryg21RZ0,9892
14
- mns_common/api/em/east_money_stock_api_v3.py,sha256=0BnVUGCiOPcoQyclAXYxIHVwOerNKfITRWQFkeZ1uO8,9873
15
- mns_common/api/em/east_money_stock_gdfx_free_top_10_api.py,sha256=jVy3fNdrkLq3ri7yUwXWt0ItB8LCHzt9CPz91Fj8sPA,9198
16
- mns_common/api/em/east_money_stock_hk_api.py,sha256=C75TfZzRnNVaz_ILEPHcxhgJqV7f4rFrlWjgMWLRu7c,14788
17
- mns_common/api/em/east_money_stock_quotes_sync_api.py,sha256=-me8o6n9XzE3gruKNXHlhvJiVByA6aoXBeORFCnqllc,7568
18
- mns_common/api/em/east_money_stock_us_api.py,sha256=6u0fSkIxZqPVrI1JChhwTrUWRTCDDSBNvU5cehPA1uM,11417
19
- mns_common/api/em/east_money_stock_v2_api.py,sha256=BxLZqIUecy71TkbMelAF8Bg3xEd3tR02r2Nj3NfF8Ts,16326
20
- mns_common/api/em/em_concept_index_api.py,sha256=PP87ES8a_y0o3SKLzBsPrc7DCPI3MBCD-4SmoUUirl0,8285
11
+ mns_common/api/em/concept/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
12
+ mns_common/api/em/concept/em_concept_index_api.py,sha256=PP87ES8a_y0o3SKLzBsPrc7DCPI3MBCD-4SmoUUirl0,8285
13
+ mns_common/api/em/gd/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
14
+ mns_common/api/em/gd/east_money_stock_gdfx_free_top_10_api.py,sha256=hitzJuMwy5I69UIE2Aj8zEtMMPOjeNo0S1A4t7Pm79E,9180
15
+ mns_common/api/em/real_time/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
16
+ mns_common/api/em/real_time/east_money_debt_api.py,sha256=jMvMZtlrDfExl_4jZ1hepHX8rUoeVLoLSOIhRBjkUGk,14753
17
+ mns_common/api/em/real_time/east_money_etf_api.py,sha256=tCyH4fNx-KfVRFuNGkgM8d_xkvR0oAfr8T3e7_XrjTM,14414
18
+ mns_common/api/em/real_time/east_money_stock_a_api.py,sha256=p3_JDsZ3_I3-s4EqD_a0d2VYdPadJYUXLyV1_H1G5N8,12274
19
+ mns_common/api/em/real_time/east_money_stock_a_v2_api.py,sha256=90dMNtYno8ZU-rKzmNvMd6d_xCt2C7xkEvYG_zsim54,14149
20
+ mns_common/api/em/real_time/east_money_stock_hk_api.py,sha256=TEUx20NxUqdfujwT4pVb_hYJN5LCosFdkoQJr4ftZWU,15018
21
+ mns_common/api/em/real_time/east_money_stock_us_api.py,sha256=CYrhbNC-vvbwy43hhByVuA2IeJU_yzwZoxq3aCz1uY0,11597
21
22
  mns_common/api/hk/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
22
23
  mns_common/api/hk/ths_hk_company_info_api.py,sha256=Cxlbuccopa0G1s8o0uTnnyLn2QaxOvbDpJQJOj7J8a8,5360
23
24
  mns_common/api/k_line/__init__.py,sha256=itoGlqKhsx7EVXQoD1vchDKQ5GPB16vDjofTSuQtrXg,161
@@ -65,8 +66,8 @@ mns_common/api/ths/self_choose/ths_self_choose_api.py,sha256=TkV4r8iRkgcm4OaclUT
65
66
  mns_common/api/ths/wen_cai/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
66
67
  mns_common/api/ths/wen_cai/ths_wen_cai_api.py,sha256=TiDbKIB57ARrnGb70vSJ7-c7lodQqivwlC2IWs95xFw,4718
67
68
  mns_common/api/ths/zt/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
- mns_common/api/ths/zt/ths_stock_zt_pool_api.py,sha256=GIYdc5J7ZrV25Elbf0n3bBZOc7x4OrlI0jFrO3du8lY,10756
69
- mns_common/api/ths/zt/ths_stock_zt_pool_v2_api.py,sha256=ohkeXyUSvxie2YqFPxqy9eLAHyFKQ5nx9U0JcR5LKeQ,16349
69
+ mns_common/api/ths/zt/ths_stock_zt_pool_api.py,sha256=NAfyOWWROVpCRlw3jcCxPLQMwR8m0jt9tfIZT7Jr1UE,10690
70
+ mns_common/api/ths/zt/ths_stock_zt_pool_v2_api.py,sha256=cDWup9qEAJsn02tJiHjfMVg6R_j05Yw05olwLqq5rPw,16367
70
71
  mns_common/api/us/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
71
72
  mns_common/api/us/ths_us_company_info_api.py,sha256=qQjv4F-ovQ2uuu-FlBAnxjvVA7qj9y_x5WZtUoyoEW4,241
72
73
  mns_common/api/xueqiu/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
@@ -91,6 +92,9 @@ mns_common/component/data/data_init_api.py,sha256=MydFBrwP61pka9jK7rrMz3HF00meRU
91
92
  mns_common/component/deal/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
92
93
  mns_common/component/deal/deal_service_api.py,sha256=XV_L8qfeTPbojmNXFjnUe-5ZTp3ADT3ett0j-gPuPVI,3806
93
94
  mns_common/component/deal/terminal_enum.py,sha256=JUkSTXLQW1fob05PCCzIBg_VKlGmqaJEa0GOvrQH6e0,275
95
+ mns_common/component/em/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
96
+ mns_common/component/em/em_real_time_quotes_api.py,sha256=9VAwzj_am-Jd4zG57bhrVjXrrsytzymSu8CIs7T7Lc0,2144
97
+ mns_common/component/em/em_stock_info_api.py,sha256=E3i3g4WsauThVJ4JYspk8Uq1IaYGDC4TY32ugbOi-Ak,1016
94
98
  mns_common/component/hk/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
95
99
  mns_common/component/hk/company_hk_service_api.py,sha256=c5z3N2OQ1SOiditHSPkb5Hqh-U67aDlpSKAV3s4U3vs,857
96
100
  mns_common/component/industry/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
@@ -107,7 +111,7 @@ mns_common/component/k_line/patterns/pattern_Enum.py,sha256=bl8cH1H3BWdj_deVO124
107
111
  mns_common/component/price/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
108
112
  mns_common/component/price/trade_price_service_api.py,sha256=0loBjbOt__o-ngc2Q4n5lF8_0x2WINRpL-cH1341Uaw,4396
109
113
  mns_common/component/proxies/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
110
- mns_common/component/proxies/proxy_common_api.py,sha256=iwog6S6GWUw9lkOD6ElJCtAWu94G6LiQFUJRK05jGUc,2529
114
+ mns_common/component/proxies/proxy_common_api.py,sha256=d9MNnsSfMEBp3NQoB1lviGgf24_8l9W57CyVbGd9nto,2782
111
115
  mns_common/component/qmt/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
112
116
  mns_common/component/qmt/qmt_buy_service.py,sha256=tLTgrSxCcxuMhADRBBrW4ZWR_3MdbMZvvMdH5hbwyJU,7190
113
117
  mns_common/component/real_time/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
@@ -127,7 +131,7 @@ mns_common/component/zt/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3Hi
127
131
  mns_common/component/zt/zt_common_service_api.py,sha256=6pHRLLJjKcLLBA-xXkAU8SE6DZ5dgVFBRVjJmhkL0II,11945
128
132
  mns_common/constant/__init__.py,sha256=xu36nA6MJTauswUWPfKIKH0E-lpOAHTw2TL5QI_6TeY,165
129
133
  mns_common/constant/black_list_classify_enum.py,sha256=I8U_DcltzYvlWjgn-TFLImgVgPuO0lxMnEJAQJBljdo,3995
130
- mns_common/constant/db_name_constant.py,sha256=Mdgik6YRQC9xZ23hDzfOy0twFEyrqM6X627N2wnLe_k,4249
134
+ mns_common/constant/db_name_constant.py,sha256=vJugMto2gk9DoLpBDwq9X6ZpymfbhcSwjrS7uqEtKDU,4562
131
135
  mns_common/constant/east_money_stock_api.py,sha256=mW0b8sEgkf8WJtars2frOQYzsWgjIl4FDYEwcCcCSZY,7557
132
136
  mns_common/constant/extra_income_db_name.py,sha256=AsIO1CtcVRq9k7TKtjFA1KzuL_jvAw2hA_Uq44wQL7o,1198
133
137
  mns_common/constant/price_enum.py,sha256=nhcPxk0AFdQAp8IsNr5EP9xURLqqJuSl6ljIzTp7Wyo,1093
@@ -146,7 +150,7 @@ mns_common/utils/date_handle_util.py,sha256=XS-MyA8_7k35LOCFAYOHgVcVkMft_Kc4Wa9U
146
150
  mns_common/utils/db_util.py,sha256=hSmfNAN4vEeEaUva6_cicZEhb2jSnib-Gvk2reke1vc,2590
147
151
  mns_common/utils/file_util.py,sha256=egWu6PenGPRp_ixrNTHKarT4dAnOT6FETR82EHUZJnQ,1042
148
152
  mns_common/utils/ip_util.py,sha256=UTcYfz_uytB__6nlBf7T-izuI7hi4XdB6ET0sJgEel4,969
149
- mns_common-1.3.6.7.dist-info/METADATA,sha256=8aczAilXQ9eekBt3UnPgyXNexhuqtAsBK415LtSVI2w,61
150
- mns_common-1.3.6.7.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
151
- mns_common-1.3.6.7.dist-info/top_level.txt,sha256=ZC58kAR-8Hvc6U2xhYNBNLAh3mb6sZazbdj5nZpvEkQ,11
152
- mns_common-1.3.6.7.dist-info/RECORD,,
153
+ mns_common-1.3.6.9.dist-info/METADATA,sha256=UzxgesI4mCjVM6JVrp52SpYpOFdofYiVlTFohF2Gzys,61
154
+ mns_common-1.3.6.9.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
155
+ mns_common-1.3.6.9.dist-info/top_level.txt,sha256=ZC58kAR-8Hvc6U2xhYNBNLAh3mb6sZazbdj5nZpvEkQ,11
156
+ mns_common-1.3.6.9.dist-info/RECORD,,
@@ -1,233 +0,0 @@
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
- import requests
10
- import json
11
- import pandas as pd
12
- from concurrent.futures import ThreadPoolExecutor
13
- import datetime
14
- from loguru import logger
15
-
16
- # 最大返回条数
17
- max_number = 5800
18
- # 最小返回条数
19
- min_number = 5600
20
- # 分页条数
21
- page_number = 100
22
-
23
-
24
- def get_stock_page_data(pn, fields, fs):
25
- """
26
- 获取单页股票数据
27
- """
28
- # 获取当前日期和时间
29
- current_time = datetime.datetime.now()
30
-
31
- # 将当前时间转换为时间戳(以毫秒为单位)
32
- current_timestamp_ms = int(current_time.timestamp() * 1000)
33
-
34
- url = "https://13.push2.eastmoney.com/api/qt/clist/get"
35
- params = {
36
- "cb": "jQuery1124046660442520420653_" + str(current_timestamp_ms),
37
- "pn": str(pn),
38
- "pz": "10000", # 每页最大200条
39
- "po": "0",
40
- "np": "3",
41
- "ut": "bd1d9ddb04089700cf9c27f6f7426281",
42
- "fltt": "2",
43
- "invt": "2",
44
- "wbp2u": "|0|0|0|web",
45
- "fid": "f12",
46
- "fs": fs,
47
- "fields": fields,
48
- "_": current_timestamp_ms
49
- }
50
- try:
51
- r = requests.get(url, params)
52
- data_text = r.text
53
- if pn == 1:
54
- try:
55
- begin_index_total = data_text.index('"total":')
56
-
57
- end_index_total = data_text.index('"diff"')
58
- global max_number
59
- max_number = int(data_text[begin_index_total + 8:end_index_total - 1])
60
- except Exception as e:
61
- logger.error(f"获取第{pn}页股票列表异常: {e}")
62
- return pd.DataFrame()
63
-
64
- begin_index = data_text.index('[')
65
- end_index = data_text.index(']')
66
- data_json = data_text[begin_index:end_index + 1]
67
- data_json = json.loads(data_json)
68
- if data_json is None:
69
- return pd.DataFrame()
70
- else:
71
- return pd.DataFrame(data_json)
72
- except Exception as e:
73
- logger.error(f"获取第{pn}页股票列表异常: {e}")
74
- return pd.DataFrame()
75
-
76
-
77
- def all_stock_ticker_data_new(fields, fs) -> pd.DataFrame:
78
- """
79
- 使用多线程获取所有股票数据
80
- """
81
-
82
- per_page = page_number
83
- total_pages = (max_number + per_page - 1) // per_page # 向上取整
84
-
85
- # 创建线程池
86
- with ThreadPoolExecutor(max_workers=10) as executor:
87
- # 提交任务,获取每页数据
88
- futures = [executor.submit(get_stock_page_data, pn, fields, fs)
89
- for pn in range(1, total_pages + 1)]
90
-
91
- # 收集结果
92
- results = []
93
- for future in futures:
94
- result = future.result()
95
- if not result.empty:
96
- results.append(result)
97
-
98
- # 合并所有页面的数据
99
- if results:
100
- return pd.concat(results, ignore_index=True)
101
- else:
102
- return pd.DataFrame()
103
-
104
-
105
- def get_real_time_quotes_all_stocks():
106
- 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,f184,f211,f212",
107
- fs = "m:0 t:6,m:0 t:80,m:1 t:2,m:1 t:23,m:0 t:81 s:2048"
108
- # 获取第一页数据
109
- page_one_df = get_stock_page_data(1, fields, fs)
110
- # 数据接口正常返回5600以上的数量
111
- if page_one_df.shape[0] > min_number:
112
- page_one_df = rename_real_time_quotes_df(page_one_df)
113
- page_one_df.drop_duplicates('symbol', keep='last', inplace=True)
114
- return page_one_df
115
- else:
116
- page_df = all_stock_ticker_data_new(fields, fs)
117
- page_df = rename_real_time_quotes_df(page_df)
118
- page_df.drop_duplicates('symbol', keep='last', inplace=True)
119
- return page_df
120
-
121
-
122
- # 获取所有股票实时行情数据 f33,委比
123
- def rename_real_time_quotes_df(temp_df):
124
- temp_df = temp_df.rename(columns={
125
- "f2": "now_price",
126
- "f3": "chg",
127
- "f5": "volume",
128
- "f6": "amount",
129
- "f8": "exchange",
130
- "f10": "quantity_ratio",
131
- "f22": "up_speed",
132
- "f11": "up_speed_05",
133
- "f12": "symbol",
134
- "f14": "name",
135
- "f15": "high",
136
- "f16": "low",
137
- "f17": "open",
138
- "f18": "yesterday_price",
139
- "f20": "total_mv",
140
- "f21": "flow_mv",
141
- "f26": "list_date",
142
- "f33": "wei_bi",
143
- "f34": "outer_disk",
144
- "f35": "inner_disk",
145
- "f62": "today_main_net_inflow",
146
- "f66": "super_large_order_net_inflow",
147
- "f69": "super_large_order_net_inflow_ratio",
148
- "f72": "large_order_net_inflow",
149
- # "f78": "medium_order_net_inflow",
150
- # "f84": "small_order_net_inflow",
151
- "f100": "industry",
152
- # "f103": "concept",
153
- "f184": "today_main_net_inflow_ratio",
154
- "f352": "average_price",
155
- "f211": "buy_1_num",
156
- "f212": "sell_1_num"
157
- })
158
-
159
- temp_df.loc[temp_df['buy_1_num'] == '-', 'buy_1_num'] = 0
160
- temp_df.loc[temp_df['sell_1_num'] == '-', 'sell_1_num'] = 0
161
- temp_df.loc[temp_df['up_speed_05'] == '-', 'up_speed_05'] = 0
162
- temp_df.loc[temp_df['up_speed'] == '-', 'up_speed'] = 0
163
- temp_df.loc[temp_df['average_price'] == '-', 'average_price'] = 0
164
- temp_df.loc[temp_df['wei_bi'] == '-', 'wei_bi'] = 0
165
- temp_df.loc[temp_df['yesterday_price'] == '-', 'yesterday_price'] = 0
166
- temp_df.loc[temp_df['now_price'] == '-', 'now_price'] = 0
167
- temp_df.loc[temp_df['chg'] == '-', 'chg'] = 0
168
- temp_df.loc[temp_df['volume'] == '-', 'volume'] = 0
169
- temp_df.loc[temp_df['amount'] == '-', 'amount'] = 0
170
- temp_df.loc[temp_df['exchange'] == '-', 'exchange'] = 0
171
- temp_df.loc[temp_df['quantity_ratio'] == '-', 'quantity_ratio'] = 0
172
- temp_df.loc[temp_df['high'] == '-', 'high'] = 0
173
- temp_df.loc[temp_df['low'] == '-', 'low'] = 0
174
- temp_df.loc[temp_df['open'] == '-', 'open'] = 0
175
- temp_df.loc[temp_df['total_mv'] == '-', 'total_mv'] = 0
176
- temp_df.loc[temp_df['flow_mv'] == '-', 'flow_mv'] = 0
177
- temp_df.loc[temp_df['inner_disk'] == '-', 'inner_disk'] = 0
178
- temp_df.loc[temp_df['outer_disk'] == '-', 'outer_disk'] = 0
179
- temp_df.loc[temp_df['today_main_net_inflow_ratio'] == '-', 'today_main_net_inflow_ratio'] = 0
180
- temp_df.loc[temp_df['today_main_net_inflow'] == '-', 'today_main_net_inflow'] = 0
181
- temp_df.loc[temp_df['super_large_order_net_inflow'] == '-', 'super_large_order_net_inflow'] = 0
182
- temp_df.loc[temp_df['super_large_order_net_inflow_ratio'] == '-', 'super_large_order_net_inflow_ratio'] = 0
183
- temp_df.loc[temp_df['large_order_net_inflow'] == '-', 'large_order_net_inflow'] = 0
184
- # temp_df.loc[temp_df['medium_order_net_inflow'] == '-', 'medium_order_net_inflow'] = 0
185
- # temp_df.loc[temp_df['small_order_net_inflow'] == '-', 'small_order_net_inflow'] = 0
186
-
187
- temp_df["list_date"] = pd.to_numeric(temp_df["list_date"], errors="coerce")
188
- temp_df["wei_bi"] = pd.to_numeric(temp_df["wei_bi"], errors="coerce")
189
- temp_df["average_price"] = pd.to_numeric(temp_df["average_price"], errors="coerce")
190
- temp_df["yesterday_price"] = pd.to_numeric(temp_df["yesterday_price"], errors="coerce")
191
- temp_df["now_price"] = pd.to_numeric(temp_df["now_price"], errors="coerce")
192
- temp_df["chg"] = pd.to_numeric(temp_df["chg"], errors="coerce")
193
- temp_df["volume"] = pd.to_numeric(temp_df["volume"], errors="coerce")
194
- temp_df["amount"] = pd.to_numeric(temp_df["amount"], errors="coerce")
195
- temp_df["exchange"] = pd.to_numeric(temp_df["exchange"], errors="coerce")
196
- temp_df["quantity_ratio"] = pd.to_numeric(temp_df["quantity_ratio"], errors="coerce")
197
- temp_df["high"] = pd.to_numeric(temp_df["high"], errors="coerce")
198
- temp_df["low"] = pd.to_numeric(temp_df["low"], errors="coerce")
199
- temp_df["open"] = pd.to_numeric(temp_df["open"], errors="coerce")
200
- temp_df["total_mv"] = pd.to_numeric(temp_df["total_mv"], errors="coerce")
201
- temp_df["flow_mv"] = pd.to_numeric(temp_df["flow_mv"], errors="coerce")
202
- temp_df["outer_disk"] = pd.to_numeric(temp_df["outer_disk"], errors="coerce")
203
- temp_df["inner_disk"] = pd.to_numeric(temp_df["inner_disk"], errors="coerce")
204
- temp_df["today_main_net_inflow"] = pd.to_numeric(temp_df["today_main_net_inflow"], errors="coerce")
205
- temp_df["super_large_order_net_inflow"] = pd.to_numeric(temp_df["super_large_order_net_inflow"],
206
- errors="coerce")
207
- temp_df["super_large_order_net_inflow_ratio"] = pd.to_numeric(temp_df["super_large_order_net_inflow_ratio"],
208
- errors="coerce")
209
- temp_df["large_order_net_inflow"] = pd.to_numeric(temp_df["large_order_net_inflow"],
210
- errors="coerce")
211
- # temp_df["medium_order_net_inflow"] = pd.to_numeric(temp_df["medium_order_net_inflow"],
212
- # errors="coerce")
213
- # temp_df["small_order_net_inflow"] = pd.to_numeric(temp_df["small_order_net_inflow"], errors="coerce")
214
-
215
- # 大单比例
216
- temp_df['large_order_net_inflow_ratio'] = round((temp_df['large_order_net_inflow'] / temp_df['amount']) * 100, 2)
217
-
218
- # 外盘是内盘倍数
219
- temp_df['disk_ratio'] = round((temp_df['outer_disk'] - temp_df['inner_disk']) / temp_df['inner_disk'], 2)
220
- # 只有外盘没有内盘
221
- temp_df.loc[temp_df["inner_disk"] == 0, ['disk_ratio']] = 1688
222
- temp_df = temp_df.sort_values(by=['chg'], ascending=False)
223
- return temp_df
224
-
225
-
226
- # 示例调用
227
- if __name__ == "__main__":
228
- while True:
229
- df = get_real_time_quotes_all_stocks()
230
- df = df.loc[df['amount'] != 0]
231
- print(df)
232
- zt_df = df.loc[df['wei_bi'] == 100]
233
- logger.info("涨停数据,{}", zt_df)