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

@@ -10,6 +10,13 @@ import requests
10
10
  import time
11
11
  import hashlib
12
12
  import json
13
+ from mns_common.db.MongodbUtil import MongodbUtil
14
+ from functools import lru_cache
15
+ import mns_common.constant.db_name_constant as db_name_constant
16
+
17
+ mongodb_util = MongodbUtil('27017')
18
+
19
+ import random
13
20
 
14
21
  # 提取订单
15
22
  """
@@ -26,10 +33,19 @@ import json
26
33
  """
27
34
 
28
35
 
36
+ @lru_cache(maxsize=None)
37
+ def query_province_and_city_info():
38
+ return mongodb_util.find_all_data(db_name_constant.IP_PROXY_CITY_PROVINCE)
39
+
40
+
29
41
  def get_proxy_api(order_id, secret, unbind_time):
42
+ province_and_city_info_df = query_province_and_city_info()
43
+ random_row = province_and_city_info_df.sample(n=1)
44
+ cid = str(list(random_row['cid'])[0])
45
+ pid = str(list(random_row['pid'])[0])
46
+
30
47
  num = "1"
31
- pid = "-1"
32
- cid = ""
48
+
33
49
  noDuplicate = "1"
34
50
  lineSeparator = "0"
35
51
  singleIp = "0"
@@ -91,9 +107,6 @@ def get_proxy_pool_api(order_id, secret, unbind_time, ip_num):
91
107
  return ip_pool_list
92
108
 
93
109
 
94
-
95
-
96
-
97
110
  if __name__ == '__main__':
98
111
  order_id_test = ''
99
112
  secret_test = ''
@@ -27,7 +27,7 @@ query_pool = {'ip_type': IP_POOL}
27
27
 
28
28
 
29
29
  def query_liu_guan_proxy_ip():
30
- ip_proxy_pool = mongodb_util.find_one_query(db_name_constant.IP_PROXY_POOL, query_one)
30
+ ip_proxy_pool = mongodb_util.find_query_data(db_name_constant.IP_PROXY_POOL, query_one)
31
31
  return ip_proxy_pool
32
32
 
33
33
 
@@ -53,12 +53,19 @@ def get_account_cache():
53
53
 
54
54
 
55
55
  def generate_proxy_ip_api(minutes):
56
- stock_account_info = get_account_cache()
57
- order_id = list(stock_account_info['password'])[0]
58
- secret = list(stock_account_info['account'])[0]
59
- # 获取10分钟动态ip
60
- ip = liu_guan_proxy_api.get_proxy_api(order_id, secret, str(60 * minutes))
61
- return ip
56
+ try_numer = 3
57
+ while try_numer > 0:
58
+ try:
59
+ stock_account_info = get_account_cache()
60
+ order_id = list(stock_account_info['password'])[0]
61
+ secret = list(stock_account_info['account'])[0]
62
+ # 获取10分钟动态ip
63
+ ip = liu_guan_proxy_api.get_proxy_api(order_id, secret, str(60 * minutes))
64
+ try_numer = try_numer - 1
65
+ return ip
66
+ except BaseException as e:
67
+ time.sleep(1)
68
+ continue
62
69
 
63
70
 
64
71
  def generate_proxy_ip(minutes):
@@ -221,5 +228,21 @@ def call_with_timeout(func, *args, timeout=2, **kwargs):
221
228
  return result
222
229
 
223
230
 
231
+ @lru_cache(maxsize=None)
232
+ def query_province_and_city_info():
233
+ return mongodb_util.find_all_data(db_name_constant.IP_PROXY_CITY_PROVINCE)
234
+
235
+
236
+ def import_province_and_city():
237
+ # 设置文件夹路径
238
+ folder_path = r'E:\province-and-city.xlsx'
239
+ df = pd.read_excel(folder_path)
240
+ df['_id'] = df['cid']
241
+
242
+ mongodb_util.save_mongo(df, db_name_constant.IP_PROXY_CITY_PROVINCE)
243
+ return df
244
+
245
+
224
246
  if __name__ == "__main__":
225
- get_proxy_ip_pool(1, 50, 2)
247
+ import_province_and_city()
248
+ # get_proxy_ip_pool(1, 50, 2)
@@ -24,6 +24,9 @@ EM_US_STOCK_INFO = 'em_us_stock_info'
24
24
  # ip代理池
25
25
  IP_PROXY_POOL = 'ip_proxy_pool'
26
26
 
27
+ # ip代理城市信息
28
+ IP_PROXY_CITY_PROVINCE = 'ip_proxy_city_province'
29
+
27
30
  # 大单同步表
28
31
  BIG_DEAL_NAME = "ths_big_deal_fund"
29
32
  # 大单选择表
@@ -151,7 +154,6 @@ COMPANY_HOLDING_INFO = 'company_holding_info'
151
154
  # 公司业务组成
152
155
  COMPANY_BUSINESS_INFO = 'company_business_info'
153
156
 
154
-
155
157
  # 公司公告信息
156
158
  COMPANY_ANNOUNCE_INFO = 'company_announce_info'
157
159
 
@@ -1,4 +1,4 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mns-common
3
- Version: 1.5.1.6
3
+ Version: 1.5.1.8
4
4
 
@@ -1,24 +1,6 @@
1
1
  mns_common/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
2
2
  mns_common/api/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
3
- mns_common/api/akshare/__init__.py,sha256=xu36nA6MJTauswUWPfKIKH0E-lpOAHTw2TL5QI_6TeY,165
4
- mns_common/api/akshare/k_line_api.py,sha256=IfqJDG2e-_Ry1f_MqjIff6jad9IIC3TjnpmaJ9H_pbk,4290
5
- mns_common/api/akshare/stock_bid_ask_api.py,sha256=Af9t6Pv_-p7PJJ_7rF_JVaGBomkvePMMqALwuBh2Gfw,4139
6
- mns_common/api/akshare/stock_dt_pool.py,sha256=sKedOTzqsBZprJHJEr2sRYa8xbeSK7tRenqBE3wOdUc,2245
7
- mns_common/api/akshare/stock_zb_pool.py,sha256=ylcVgZTzsD3qz9WaItLtoqTf4t-Ex49MDtZUk0xaB5Q,2126
8
- mns_common/api/akshare/stock_zt_pool_api.py,sha256=-j_GZI3TTPV8XWnczgGjct5XZAHZdlptBcECv7Rfyzw,1929
9
- mns_common/api/akshare/yjyg_sync_api.py,sha256=cvk50_XhJWUqduOiC15SYvQTCQqECt6td_L2Hvnl7Jg,4108
10
3
  mns_common/api/em/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
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=I2-JjFjTjvOxjNAPzuJ1GK7ynvwJcZa_EbmRB2_pmm0,11813
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=e_hPYJnNhjDOecTW5myorxEaDvuPku4pssuP9JIghG4,15621
19
- mns_common/api/em/real_time/east_money_stock_a_v2_api.py,sha256=mL4uuL6sVsC2Vnl09826AUnzxePGAUhlZ7I5BBFw8Ks,14530
20
- mns_common/api/em/real_time/east_money_stock_hk_api.py,sha256=KFIYUZ3N4ULrataeCIXwZPo775O7joKgMF466uwVDdY,15154
21
- mns_common/api/em/real_time/east_money_stock_us_api.py,sha256=RiTrdZDuDgTOtiMSD1Ba9aQAx4vghM66pEp_LicH3Ps,11632
22
4
  mns_common/api/hk/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
23
5
  mns_common/api/hk/ths_hk_company_info_api.py,sha256=Cxlbuccopa0G1s8o0uTnnyLn2QaxOvbDpJQJOj7J8a8,5360
24
6
  mns_common/api/k_line/__init__.py,sha256=itoGlqKhsx7EVXQoD1vchDKQ5GPB16vDjofTSuQtrXg,161
@@ -43,7 +25,7 @@ mns_common/api/kpl/symbol/symbol_his_quotes_api.py,sha256=5F9L8V2UI_YUYe2dO6FbVK
43
25
  mns_common/api/msg/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
44
26
  mns_common/api/msg/push_msg_api.py,sha256=z8jDqFWygfxnCFFfQp4K-llgg27nRLv7Mx72lOddBH0,1390
45
27
  mns_common/api/proxies/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
46
- mns_common/api/proxies/liu_guan_proxy_api.py,sha256=CheM7j_028uofZBn4wN1bNkDuyK7pNg1PzAaSf8lYAc,3204
28
+ mns_common/api/proxies/liu_guan_proxy_api.py,sha256=lULS2ejxmVuM6t6PHBczvH-HjMJxiCYEDrCUAtci-t4,3730
47
29
  mns_common/api/qmt/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
48
30
  mns_common/api/qmt/qmt_minunte_tick_data.py,sha256=uwSw_AkA9RaD3pXPKzxqi4TKEkpglmFUwtYl9r5E6G8,3019
49
31
  mns_common/api/ths/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
@@ -116,7 +98,7 @@ mns_common/component/k_line/patterns/pattern_Enum.py,sha256=bl8cH1H3BWdj_deVO124
116
98
  mns_common/component/price/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
117
99
  mns_common/component/price/trade_price_service_api.py,sha256=0loBjbOt__o-ngc2Q4n5lF8_0x2WINRpL-cH1341Uaw,4396
118
100
  mns_common/component/proxies/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
119
- mns_common/component/proxies/proxy_common_api.py,sha256=GuMGK7kAOLqGv_NbRbdQlq_vhVjF3iT58pYkJoFOmCY,7302
101
+ mns_common/component/proxies/proxy_common_api.py,sha256=knTYLnVhBg1UIXVrqzyFhb7BH9UKhQlyOzY8BmKRwAY,7984
120
102
  mns_common/component/qmt/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
121
103
  mns_common/component/qmt/qmt_buy_service.py,sha256=tLTgrSxCcxuMhADRBBrW4ZWR_3MdbMZvvMdH5hbwyJU,7190
122
104
  mns_common/component/real_time/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3HiJNIZE0,163
@@ -138,7 +120,7 @@ mns_common/component/zt/__init__.py,sha256=2U9DiKslxsWwLLEcZKjS8UiQPN1QgALvnK3Hi
138
120
  mns_common/component/zt/zt_common_service_api.py,sha256=6pHRLLJjKcLLBA-xXkAU8SE6DZ5dgVFBRVjJmhkL0II,11945
139
121
  mns_common/constant/__init__.py,sha256=xu36nA6MJTauswUWPfKIKH0E-lpOAHTw2TL5QI_6TeY,165
140
122
  mns_common/constant/black_list_classify_enum.py,sha256=I8U_DcltzYvlWjgn-TFLImgVgPuO0lxMnEJAQJBljdo,3995
141
- mns_common/constant/db_name_constant.py,sha256=RkSnmESDHf2yNrrwoa7Ox7SVVa2roq_RDwn1Lx0kP_k,4958
123
+ mns_common/constant/db_name_constant.py,sha256=lDb4WD7ZsoMofLuzZU2R-B-6pjU185_9pBKeeQH_-78,5033
142
124
  mns_common/constant/east_money_stock_api.py,sha256=mW0b8sEgkf8WJtars2frOQYzsWgjIl4FDYEwcCcCSZY,7557
143
125
  mns_common/constant/extra_income_db_name.py,sha256=aXPuJSEgX7F3zpf4zal6wxejkxPbVmou_LMVlfms1SY,2701
144
126
  mns_common/constant/price_enum.py,sha256=nhcPxk0AFdQAp8IsNr5EP9xURLqqJuSl6ljIzTp7Wyo,1093
@@ -158,7 +140,7 @@ mns_common/utils/date_handle_util.py,sha256=XS-MyA8_7k35LOCFAYOHgVcVkMft_Kc4Wa9U
158
140
  mns_common/utils/db_util.py,sha256=hSmfNAN4vEeEaUva6_cicZEhb2jSnib-Gvk2reke1vc,2590
159
141
  mns_common/utils/file_util.py,sha256=egWu6PenGPRp_ixrNTHKarT4dAnOT6FETR82EHUZJnQ,1042
160
142
  mns_common/utils/ip_util.py,sha256=UTcYfz_uytB__6nlBf7T-izuI7hi4XdB6ET0sJgEel4,969
161
- mns_common-1.5.1.6.dist-info/METADATA,sha256=PNkBebLDEDMZuxItxFxMN8Gg-Zsl0HEphR7KNuKLf1I,61
162
- mns_common-1.5.1.6.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
163
- mns_common-1.5.1.6.dist-info/top_level.txt,sha256=ZC58kAR-8Hvc6U2xhYNBNLAh3mb6sZazbdj5nZpvEkQ,11
164
- mns_common-1.5.1.6.dist-info/RECORD,,
143
+ mns_common-1.5.1.8.dist-info/METADATA,sha256=El6F612yVfiS14dd3hLUp27Xh47cFo-79NvGYlR88dQ,61
144
+ mns_common-1.5.1.8.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
145
+ mns_common-1.5.1.8.dist-info/top_level.txt,sha256=ZC58kAR-8Hvc6U2xhYNBNLAh3mb6sZazbdj5nZpvEkQ,11
146
+ mns_common-1.5.1.8.dist-info/RECORD,,
@@ -1,8 +0,0 @@
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
-
@@ -1,123 +0,0 @@
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 requests
9
- import pandas as pd
10
- import mns_common.component.common_service_fun_api as common_service_fun_api
11
- from datetime import datetime
12
- import numpy as np
13
-
14
-
15
- def stock_zh_a_hist(
16
- symbol: str = "0.000001",
17
- period: str = 'daily',
18
- start_date: str = "19700101",
19
- end_date: str = "22220101",
20
- adjust: str = "",
21
- proxies: str = None
22
- ) -> pd.DataFrame:
23
- """
24
- 东方财富网-行情首页-沪深京 A 股-每日行情
25
- http://quote.eastmoney.com/concept/sh603777.html?from=classic
26
- :param symbol: 股票代码
27
- :type symbol: str
28
- :param period: choice of {'daily', 'weekly', 'monthly'}
29
- :type period: str
30
- :param start_date: 开始日期
31
- :type start_date: str
32
- :param end_date: 结束日期
33
- :type end_date: str
34
- :param adjust: choice of {"qfq": "前复权", "hfq": "后复权", "": "不复权"}
35
- :type adjust: str
36
- :param proxies: 代理ip
37
- :type proxies: str
38
-
39
- :return: 每日行情
40
- :rtype: pandas.DataFrame
41
- """
42
- adjust_dict = {"qfq": "1", "hfq": "2", "": "0"}
43
- period_dict = {'daily': '101', 'weekly': '102', 'monthly': '103'}
44
- url = "http://push2his.eastmoney.com/api/qt/stock/kline/get"
45
- now_date = datetime.now()
46
- now_time = int(now_date.timestamp() * 1000)
47
- now_time = str(now_time)
48
-
49
- params = {
50
- "fields1": "f1,f2,f3,f4,f5,f6",
51
- "fields2": "f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f116",
52
- "ut": "7eea3edcaed734bea9cbfc24409ed989",
53
- "klt": period_dict[period],
54
- "fqt": adjust_dict[adjust],
55
- "secid": symbol,
56
- "beg": "0",
57
- "end": "20500000",
58
- "_": now_time,
59
- }
60
-
61
- if proxies is None:
62
- r = requests.get(url, params=params)
63
- else:
64
- r = requests.get(url, params=params, proxies=proxies)
65
-
66
- data_json = r.json()
67
- temp_df = pd.DataFrame([item.split(",") for item in data_json["data"]["klines"]])
68
- temp_df.columns = [
69
- "date",
70
- "open",
71
- "close",
72
- "high",
73
- "low",
74
- "volume",
75
- "amount",
76
- "pct_chg",
77
- "chg",
78
- "change",
79
- "exchange",
80
- ]
81
-
82
- temp_df['date'] = temp_df['date'].apply(
83
- lambda x: x.replace("-", ""))
84
- temp_df.index = temp_df["date"]
85
- temp_df = temp_df[start_date:end_date]
86
- temp_df.reset_index(inplace=True, drop=True)
87
- temp_df['open'] = pd.to_numeric(temp_df['open'])
88
- temp_df['close'] = pd.to_numeric(temp_df['close'])
89
- temp_df['high'] = pd.to_numeric(temp_df['high'])
90
- temp_df['low'] = pd.to_numeric(temp_df['low'])
91
- temp_df['volume'] = pd.to_numeric(temp_df['volume'])
92
- temp_df['amount'] = pd.to_numeric(temp_df['amount'])
93
- temp_df['pct_chg'] = pd.to_numeric(temp_df['pct_chg'])
94
- temp_df['chg'] = pd.to_numeric(temp_df['chg'])
95
- temp_df['change'] = pd.to_numeric(temp_df['change'])
96
- temp_df['exchange'] = pd.to_numeric(temp_df['exchange'])
97
-
98
- temp_df['symbol'] = symbol
99
- temp_df['_id'] = temp_df['symbol'] + '-' + temp_df['date']
100
- temp_df['last_price'] = round(((temp_df['close']) / (1 + temp_df['chg'] / 100)), 2)
101
- temp_df['max_chg'] = round(
102
- ((temp_df['high'] - temp_df['last_price']) / temp_df['last_price']) * 100, 2)
103
- temp_df['amount_level'] = round((temp_df['amount'] / common_service_fun_api.HUNDRED_MILLION), 2)
104
- temp_df['flow_mv'] = round(temp_df['amount'] * 100 / temp_df['exchange'], 2)
105
- temp_df['flow_mv_sp'] = round(temp_df['flow_mv'] / common_service_fun_api.HUNDRED_MILLION, 2)
106
-
107
- temp_df.replace([np.inf, -np.inf], 0, inplace=True)
108
- temp_df.fillna(0, inplace=True)
109
- return temp_df
110
-
111
-
112
- import mns_common.component.proxies.proxy_common_api as proxy_common_api
113
-
114
- if __name__ == '__main__':
115
- while True:
116
- proxy_ip = proxy_common_api.get_proxy_ip(5)
117
- df = stock_zh_a_hist("0.000001",
118
- 'daily',
119
- "19700101",
120
- "22220101",
121
- "",
122
- proxy_ip)
123
- print(df)
@@ -1,94 +0,0 @@
1
- import sys
2
- import os
3
-
4
- file_path = os.path.abspath(__file__)
5
- end = file_path.index('mns') + 7
6
- project_path = file_path[0:end]
7
- sys.path.append(project_path)
8
- import pandas as pd
9
- import requests
10
-
11
-
12
- def stock_bid_ask_em(symbol: str = "000001") -> pd.DataFrame:
13
- """
14
- 东方财富-行情报价
15
- https://quote.eastmoney.com/sz000001.html
16
- :param symbol: 股票代码
17
- :type symbol: str
18
- :return: 行情报价
19
- :rtype: pandas.DataFrame
20
- """
21
- url = "https://push2.eastmoney.com/api/qt/stock/get"
22
- params = {
23
- "fltt": "2",
24
- "invt": "2",
25
- "fields": "f120,f121,f122,f174,f175,f59,f163,f43,f57,f58,f169,f170,f46,f44,f51,"
26
- "f168,f47,f164,f116,f60,f45,f52,f50,f48,f167,f117,f71,f161,f49,f530,"
27
- "f135,f136,f137,f138,f139,f141,f142,f144,f145,f147,f148,f140,f143,f146,"
28
- "f149,f55,f62,f162,f92,f173,f104,f105,f84,f85,f183,f184,f185,f186,f187,"
29
- "f188,f189,f190,f191,f192,f107,f111,f86,f177,f78,f110,f262,f263,f264,f267,"
30
- "f268,f255,f256,f257,f258,f127,f199,f128,f198,f259,f260,f261,f171,f277,f278,"
31
- "f279,f288,f152,f250,f251,f252,f253,f254,f269,f270,f271,f272,f273,f274,f275,"
32
- "f276,f265,f266,f289,f290,f286,f285,f292,f293,f294,f295",
33
-
34
- "secid": symbol,
35
- }
36
- r = requests.get(url, params=params)
37
- data_json = r.json()
38
- tick_dict = {
39
- "now_price": data_json["data"]["f43"],
40
- "dt_price": data_json["data"]["f52"],
41
- "zt_price": data_json["data"]["f51"],
42
- "wei_bi": data_json["data"]["f191"],
43
- "sell_5": data_json["data"]["f31"],
44
- "sell_5_vol": data_json["data"]["f32"] * 100,
45
- "sell_4": data_json["data"]["f33"],
46
- "sell_4_vol": data_json["data"]["f34"] * 100,
47
- "sell_3": data_json["data"]["f35"],
48
- "sell_3_vol": data_json["data"]["f36"] * 100,
49
- "sell_2": data_json["data"]["f37"],
50
- "sell_2_vol": data_json["data"]["f38"] * 100,
51
- "sell_1": data_json["data"]["f39"],
52
- "sell_1_vol": data_json["data"]["f40"] * 100,
53
- "buy_1": data_json["data"]["f19"],
54
- "buy_1_vol": data_json["data"]["f20"] * 100,
55
- "buy_2": data_json["data"]["f17"],
56
- "buy_2_vol": data_json["data"]["f18"] * 100,
57
- "buy_3": data_json["data"]["f15"],
58
- "buy_3_vol": data_json["data"]["f16"] * 100,
59
- "buy_4": data_json["data"]["f13"],
60
- "buy_4_vol": data_json["data"]["f14"] * 100,
61
- "buy_5": data_json["data"]["f11"],
62
- "buy_5_vol": data_json["data"]["f12"] * 100,
63
- }
64
- temp_df = pd.DataFrame(tick_dict, index=[1])
65
- temp_df.reset_index(inplace=True)
66
- temp_df.loc[temp_df['wei_bi'] == '-', 'wei_bi'] = 0
67
- temp_df.loc[temp_df['sell_5_vol'] == '-', 'sell_5_vol'] = 0
68
- temp_df.loc[temp_df['sell_5'] == '-', 'sell_5'] = 0
69
- temp_df.loc[temp_df['sell_4_vol'] == '-', 'sell_4_vol'] = 0
70
- temp_df.loc[temp_df['sell_4'] == '-', 'sell_4'] = 0
71
- temp_df.loc[temp_df['sell_3_vol'] == '-', 'sell_3_vol'] = 0
72
- temp_df.loc[temp_df['sell_3'] == '-', 'sell_3'] = 0
73
- temp_df.loc[temp_df['sell_2_vol'] == '-', 'sell_2_vol'] = 0
74
- temp_df.loc[temp_df['sell_2'] == '-', 'sell_2'] = 0
75
- temp_df.loc[temp_df['sell_1_vol'] == '-', 'sell_1_vol'] = 0
76
- temp_df.loc[temp_df['sell_1'] == '-', 'sell_1'] = 0
77
- temp_df.loc[temp_df['buy_1_vol'] == '-', 'buy_1_vol'] = 0
78
- temp_df.loc[temp_df['buy_1'] == '-', 'buy_1'] = 0
79
- temp_df.loc[temp_df['buy_2_vol'] == '-', 'buy_2_vol'] = 0
80
- temp_df.loc[temp_df['buy_2'] == '-', 'buy_2'] = 0
81
- temp_df.loc[temp_df['buy_3_vol'] == '-', 'buy_3_vol'] = 0
82
- temp_df.loc[temp_df['buy_3'] == '-', 'buy_3'] = 0
83
- temp_df.loc[temp_df['buy_4_vol'] == '-', 'buy_4_vol'] = 0
84
- temp_df.loc[temp_df['buy_4'] == '-', 'buy_4'] = 0
85
- temp_df.loc[temp_df['buy_5_vol'] == '-', 'buy_5_vol'] = 0
86
- temp_df.loc[temp_df['buy_5'] == '-', 'buy_5'] = 0
87
- temp_df['symbol'] = symbol
88
- return temp_df
89
-
90
-
91
- if __name__ == '__main__':
92
- while True:
93
- df = stock_bid_ask_em('0.000001')
94
- print(df)
@@ -1,47 +0,0 @@
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 akshare as ak
9
- from loguru import logger
10
- import mns_common.utils.data_frame_util as data_frame_util
11
- import mns_common.utils.date_handle_util as date_handle_util
12
-
13
-
14
- def stock_em_dt_pool_df(date):
15
- try:
16
- date = date_handle_util.no_slash_date(date)
17
- stock_dt_pool_df = ak.stock_zt_pool_dtgc_em(date)
18
- if data_frame_util.is_empty(stock_dt_pool_df):
19
- return None
20
- stock_dt_pool_df.rename(columns={"序号": "index",
21
- "代码": "symbol",
22
- "名称": "name",
23
- "涨跌幅": "chg",
24
- "最新价": "now_price",
25
- "成交额": "amount",
26
- "流通市值": "flow_mv",
27
- "总市值": "total_mv",
28
- "动态市盈率": "ttm_pe",
29
- "换手率": "exchange",
30
- "封单资金": "closure_funds",
31
- "最后封板时间": "last_closure_time",
32
- "板上成交额": "plates_deal",
33
- "连续跌停": "connected_boards_numbers",
34
- "开板次数": "frying_plates_numbers",
35
- "所属行业": "industry"
36
- }, inplace=True)
37
- stock_dt_pool_df.loc[stock_dt_pool_df['amount'] == '-', 'amount'] = 0
38
- stock_dt_pool_df.loc[stock_dt_pool_df['exchange'] == '-', 'exchange'] = 0
39
- stock_dt_pool_df.loc[stock_dt_pool_df['closure_funds'] == '-', 'closure_funds'] = 0
40
- return stock_dt_pool_df
41
- except BaseException as e:
42
- logger.error("同步股票跌停数据出现异常:{},{}", date, e)
43
- return None
44
-
45
-
46
- if __name__ == '__main__':
47
- stock_em_dt_pool_df('20231215')
@@ -1,48 +0,0 @@
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 akshare as ak
9
- from loguru import logger
10
- import mns_common.utils.data_frame_util as data_frame_util
11
- import mns_common.utils.date_handle_util as date_handle_util
12
-
13
-
14
- def stock_zb_pool_df(date):
15
- try:
16
- date = date_handle_util.no_slash_date(date)
17
- stock_zb_pool = ak.stock_zt_pool_zbgc_em(date)
18
- if data_frame_util.is_empty(stock_zb_pool):
19
- return None
20
- stock_zb_pool.rename(columns={"序号": "index",
21
- "代码": "symbol",
22
- "名称": "name",
23
- "涨跌幅": "chg",
24
- "最新价": "now_price",
25
- "炸板股价": "zt_price",
26
- "成交额": "amount",
27
- "流通市值": "flow_mv",
28
- "总市值": "total_mv",
29
- "动态市盈率": "ttm_pe",
30
- "换手率": "exchange",
31
- "涨速": "speed",
32
- "首次封板时间": "first_closure_time",
33
- "炸板次数": "frying_plates_numbers",
34
- "炸板股统计": "statistics",
35
- "振幅": "pct_chg",
36
- "所属行业": "industry"
37
- }, inplace=True)
38
- stock_zb_pool.loc[stock_zb_pool['amount'] == '-', 'amount'] = 0
39
- stock_zb_pool.loc[stock_zb_pool['exchange'] == '-', 'exchange'] = 0
40
- return stock_zb_pool
41
- except BaseException as e:
42
- logger.error("同步股票炸板数据出现异常:{},{}", date, e)
43
- return None
44
-
45
-
46
- if __name__ == '__main__':
47
- df = stock_zb_pool_df('2024-09-04')
48
- print(df)
@@ -1,47 +0,0 @@
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 akshare as ak
9
- from loguru import logger
10
- import mns_common.utils.date_handle_util as date_handle_util
11
-
12
-
13
- def stock_em_zt_pool_df(date):
14
- try:
15
- date = date_handle_util.no_slash_date(date)
16
- zt_df = ak.stock_zt_pool_em(date)
17
- if zt_df is None or zt_df.shape[0] == 0:
18
- return None
19
- zt_df.rename(columns={"序号": "index",
20
- "代码": "symbol",
21
- "名称": "name",
22
- "最新价": "now_price",
23
- "涨跌幅": "chg",
24
- "成交额": "amount",
25
- "流通市值": "flow_mv",
26
- "总市值": "total_mv",
27
- "换手率": "exchange",
28
- "封板资金": "closure_funds",
29
- "首次封板时间": "first_closure_time",
30
- "最后封板时间": "last_closure_time",
31
- "炸板次数": "frying_plates_numbers",
32
- "涨停统计": "statistics",
33
- "连板数": "connected_boards_numbers",
34
- "所属行业": "industry"
35
- }, inplace=True)
36
- zt_df.loc[zt_df['amount'] == '-', 'amount'] = 0
37
- zt_df.loc[zt_df['exchange'] == '-', 'exchange'] = 0
38
- zt_df.loc[zt_df['closure_funds'] == '-', 'closure_funds'] = 0
39
- return zt_df
40
- except BaseException as e:
41
- logger.error("同步股票涨停数据出现异常:{},{}", date, e)
42
- return None
43
-
44
-
45
- if __name__ == '__main__':
46
- df = stock_em_zt_pool_df('2025-10-24')
47
- print(df)
@@ -1,98 +0,0 @@
1
- import sys
2
- import os
3
- import akshare as ak
4
- from mns_common.db.MongodbUtil import MongodbUtil
5
- import mns_common.utils.data_frame_util as data_frame_util
6
- import pandas as pd
7
- from datetime import datetime
8
-
9
- file_path = os.path.abspath(__file__)
10
- end = file_path.index('mns') + 14
11
- project_path = file_path[0:end]
12
- sys.path.append(project_path)
13
- mongodb_util = MongodbUtil('27017')
14
-
15
- predictor_translation_map = {
16
- "主营业务收入": "main_operating_revenue",
17
- "净利润": "net_profit",
18
- "归属于上市公司股东的净利润": "net_profit_attributable_to_shareholders",
19
- "扣除后营业收入": "operating_revenue_deducted",
20
- "扣除非经常性损益后的净利润": "net_profit_excluding_non_recurring_items",
21
- "扣非后每股收益": "earnings_per_share_excluding_non_recurring_items",
22
- "每股收益": "earnings_per_share",
23
- "营业收入": "operating_revenue",
24
- "非经常性损益": "non_recurring_items"
25
- }
26
- # ['net_profit', 'net_profit_attributable_to_shareholders', 'net_profit_excluding_non_recurring_items',
27
- # 'earnings_per_share_excluding_non_recurring_items', 'earnings_per_share']
28
- predict_type_translation_map = {
29
- "不确定": "uncertain",
30
- "减亏": "loss_reduction",
31
- "增亏": "increased_loss",
32
- "扭亏": "turnaround",
33
- "略减": "slight_decrease",
34
- "略增": "slight_increase",
35
- "续亏": "continued_loss",
36
- "续盈": "continued_profit",
37
- "预减": "pre_loss",
38
- "预增": "pre_increase",
39
- "首亏": "first_loss"
40
- }
41
-
42
-
43
- # ['turnaround', 'slight_increase', 'continued_profit', 'pre_increase']
44
-
45
-
46
- def sync_yjyg_data(period):
47
- stock_yjyg_em_df = ak.stock_yjyg_em(date=period)
48
- if data_frame_util.is_empty(stock_yjyg_em_df):
49
- return None
50
- now_date = datetime.now()
51
- str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
52
- sync_day = now_date.strftime('%Y-%m-%d')
53
- stock_yjyg_em_df.rename(columns={"序号": "index",
54
- "股票代码": "symbol",
55
- "股票简称": "name",
56
- "预测指标": "predictor",
57
- "业绩变动": "perform_change_detail",
58
- "预测数值": "predicted_value",
59
- "业绩变动幅度": "perform_chg",
60
- "业绩变动原因": "perform_change_reason",
61
- "预告类型": "predict_type",
62
- "上年同期值": "last_year_period",
63
- "公告日期": "release_day"}, inplace=True)
64
-
65
- stock_yjyg_em_df['predictor_en'] = stock_yjyg_em_df['predictor'].map(lambda x: predictor_translation_map.get(x, x))
66
- stock_yjyg_em_df['predict_type_en'] = stock_yjyg_em_df['predict_type'].map(
67
- lambda x: predict_type_translation_map.get(x, x))
68
-
69
- stock_yjyg_em_df.loc[:, 'period'] = period
70
- stock_yjyg_em_df.loc[:, 'sync_day'] = sync_day
71
- stock_yjyg_em_df.loc[:, 'str_now_date'] = str_now_date
72
- stock_yjyg_em_df['release_day'] = pd.to_datetime(stock_yjyg_em_df['release_day'])
73
- stock_yjyg_em_df['release_day'] = stock_yjyg_em_df['release_day'].dt.strftime('%Y-%m-%d')
74
-
75
- stock_yjyg_em_df['perform_chg'].fillna(0, inplace=True)
76
- stock_yjyg_em_df['_id'] = stock_yjyg_em_df['symbol'] + '_' + period + '_' + stock_yjyg_em_df[
77
- 'predictor_en'] + '_' + stock_yjyg_em_df['predict_type_en']
78
- stock_yjyg_em_df = stock_yjyg_em_df[
79
- ['_id', 'symbol', 'name', 'predictor',
80
- 'predictor_en',
81
- 'perform_change_detail',
82
- 'predicted_value',
83
- 'perform_chg',
84
- 'perform_change_reason',
85
- 'predict_type',
86
- 'predict_type_en',
87
- 'last_year_period',
88
- 'release_day',
89
- 'period',
90
- 'sync_day',
91
- 'str_now_date',
92
- 'index']]
93
-
94
- mongodb_util.save_mongo(stock_yjyg_em_df, 'stock_yjyg_em_df')
95
-
96
-
97
- if __name__ == '__main__':
98
- sync_yjyg_data('20230630')