mns-scheduler 1.0.9.7__py3-none-any.whl → 1.1.0.1__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-scheduler might be problematic. Click here for more details.
- mns_scheduler/big_deal/ths_big_deal_sync.py +1 -1
- mns_scheduler/company_info/company_info_sync_api.py +5 -9
- mns_scheduler/concept/clean/ths_concept_clean_api.py +2 -2
- mns_scheduler/concept/common/__init__.py +0 -0
- mns_scheduler/concept/common/detaill/__init__.py +0 -0
- mns_scheduler/concept/common/detaill/ths_concept_detail_api.py +196 -0
- mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py +2 -2
- mns_scheduler/concept/ths/common/ths_concept_update_common_api.py +2 -3
- mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_by_ak_api.py +3 -3
- mns_scheduler/concept/ths/sync_new_index/sync_ths_new_concept_by_web_api.py +4 -5
- mns_scheduler/concept/ths/update_concept_info/sync_one_symbol_all_concepts_api.py +3 -4
- mns_scheduler/risk/major_violations/register_and_investigate_stock_sync_api.py +2 -2
- mns_scheduler/risk/self/wei_pan_stock_api.py +2 -2
- mns_scheduler/zt/zt_pool/zt_pool_sync_api.py +1 -1
- mns_scheduler/zz_task/data_sync_task.py +4 -4
- {mns_scheduler-1.0.9.7.dist-info → mns_scheduler-1.1.0.1.dist-info}/METADATA +1 -1
- {mns_scheduler-1.0.9.7.dist-info → mns_scheduler-1.1.0.1.dist-info}/RECORD +19 -20
- mns_scheduler/backup/app/__init__.py +0 -7
- mns_scheduler/backup/app/ths_new_concept_sync_app.py +0 -122
- mns_scheduler/backup/wen_cai/__init__.py +0 -7
- mns_scheduler/backup/wen_cai/wen_cai_concept_sync.py +0 -51
- {mns_scheduler-1.0.9.7.dist-info → mns_scheduler-1.1.0.1.dist-info}/WHEEL +0 -0
- {mns_scheduler-1.0.9.7.dist-info → mns_scheduler-1.1.0.1.dist-info}/top_level.txt +0 -0
|
@@ -10,7 +10,7 @@ from datetime import datetime, time, timedelta
|
|
|
10
10
|
from loguru import logger
|
|
11
11
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
12
12
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
13
|
-
import mns_common.api.ths.ths_big_deal_api as ths_big_deal_api
|
|
13
|
+
import mns_common.api.ths.big_deal.ths_big_deal_api as ths_big_deal_api
|
|
14
14
|
import time as sleep_time
|
|
15
15
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
16
16
|
|
|
@@ -9,7 +9,7 @@ sys.path.append(project_path)
|
|
|
9
9
|
from datetime import datetime
|
|
10
10
|
import pandas as pd
|
|
11
11
|
from loguru import logger
|
|
12
|
-
import mns_common.api.ths.
|
|
12
|
+
import mns_common.api.ths.concept.web.ths_company_info_web as ths_company_info_web
|
|
13
13
|
import mns_common.api.em.east_money_stock_v2_api as east_money_stock_v2_api
|
|
14
14
|
import mns_scheduler.company_info.company_constant_data as company_constant_data_api
|
|
15
15
|
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
@@ -21,6 +21,7 @@ import mns_common.api.kpl.constant.kpl_constant as kpl_constant
|
|
|
21
21
|
import mns_common.component.company.company_common_service_api as company_common_service_api
|
|
22
22
|
import mns_common.component.k_line.common.k_line_common_service_api as k_line_common_service_api
|
|
23
23
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
24
|
+
import mns_scheduler.concept.common.detaill.ths_concept_detail_api as ths_concept_detail_api
|
|
24
25
|
|
|
25
26
|
mongodb_util = MongodbUtil('27017')
|
|
26
27
|
# 分页大小
|
|
@@ -187,7 +188,7 @@ def fix_company_industry(symbol):
|
|
|
187
188
|
|
|
188
189
|
try:
|
|
189
190
|
# 次新股
|
|
190
|
-
sub_stock =
|
|
191
|
+
sub_stock = ths_concept_detail_api.get_ths_concept_detail('885598', None)
|
|
191
192
|
sub_stock_symbol_list = list(sub_stock['symbol'])
|
|
192
193
|
except BaseException as e:
|
|
193
194
|
logger.error("出现异常:{},{}", symbol, e)
|
|
@@ -272,7 +273,7 @@ def single_thread_sync_company_info(east_money_stock_info,
|
|
|
272
273
|
fail_list = []
|
|
273
274
|
for company_one in east_money_stock_info.itertuples():
|
|
274
275
|
try:
|
|
275
|
-
company_info_type =
|
|
276
|
+
company_info_type = ths_company_info_web.get_company_info_detail(company_one.symbol)
|
|
276
277
|
company_info_type['first_industry_code'] = company_info_type['hycode'].apply(
|
|
277
278
|
lambda x: x[1:3] + '0000')
|
|
278
279
|
company_info_type['second_industry_code'] = company_info_type['hy2code'].apply(
|
|
@@ -502,11 +503,6 @@ def get_recent_year_income(symbol, company_info_type):
|
|
|
502
503
|
|
|
503
504
|
|
|
504
505
|
if __name__ == '__main__':
|
|
505
|
-
# while True:
|
|
506
|
-
# df = ths_stock_api.get_company_info_detail('000001')
|
|
507
|
-
# print(df)
|
|
508
|
-
# company_info_update()
|
|
509
|
-
# company_info_type = ths_stock_api.get_company_info_detail('836699')
|
|
510
506
|
# sync_company_base_info()
|
|
511
507
|
# fix_company_industry()
|
|
512
508
|
# calculate_circu_ratio("601069")
|
|
@@ -514,6 +510,6 @@ if __name__ == '__main__':
|
|
|
514
510
|
# 300293
|
|
515
511
|
# sync_company_base_info(None)
|
|
516
512
|
# new_company_info_update()
|
|
517
|
-
sync_company_base_info(
|
|
513
|
+
sync_company_base_info(None)
|
|
518
514
|
fix_company_industry(None)
|
|
519
515
|
# group_by_industry()
|
|
@@ -7,7 +7,7 @@ project_path = file_path[0:end]
|
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
9
9
|
import pandas as pd
|
|
10
|
-
import
|
|
10
|
+
import mns_scheduler.concept.common.detaill.ths_concept_detail_api as ths_concept_detail_api
|
|
11
11
|
import time
|
|
12
12
|
from loguru import logger
|
|
13
13
|
import mns_common.component.company.company_common_service_api as company_common_service_api
|
|
@@ -86,7 +86,7 @@ def update_null_name():
|
|
|
86
86
|
exist_url = concept_one.url
|
|
87
87
|
|
|
88
88
|
if name == '':
|
|
89
|
-
concept_name =
|
|
89
|
+
concept_name = ths_concept_detail_api.get_ths_concept_detail(concept_code, None)
|
|
90
90
|
query_concept = {"symbol": concept_code}
|
|
91
91
|
new_values = {'$set': {"name": concept_name}}
|
|
92
92
|
mongodb_util.update_one_query(query_concept, new_values, 'ths_concept_list')
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
file_path = os.path.abspath(__file__)
|
|
5
|
+
end = file_path.index('mns') + 17
|
|
6
|
+
project_path = file_path[0:end]
|
|
7
|
+
sys.path.append(project_path)
|
|
8
|
+
import mns_common.component.concept.ths_concept_common_service_api as ths_concept_common_service_api
|
|
9
|
+
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
10
|
+
import mns_common.api.ths.concept.app.ths_concept_detail_app as ths_concept_detail_app
|
|
11
|
+
import mns_common.api.ths.wen_cai.ths_wen_cai_api as ths_wen_cai_api
|
|
12
|
+
import mns_common.api.em.east_money_stock_api as east_money_stock_api
|
|
13
|
+
import mns_common.component.company.company_common_service_new_api as company_common_service_new_api
|
|
14
|
+
import mns_common.api.ths.concept.web.ths_concept_detail_web as ths_concept_detail_web
|
|
15
|
+
import math
|
|
16
|
+
from loguru import logger
|
|
17
|
+
import pandas as pd
|
|
18
|
+
import mns_common.utils.data_frame_util as data_frame_util
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def get_ths_concept_detail(concept_code, concept_name):
|
|
22
|
+
real_time_quotes_all_stocks = east_money_stock_api.get_real_time_quotes_all_stocks()
|
|
23
|
+
# 1 通过入选理获取概念组成股票详情
|
|
24
|
+
ths_concept_detail_by_explain = get_ths_concept_detail_by_explain(concept_code, real_time_quotes_all_stocks)
|
|
25
|
+
# 2 app 分享链接获取概念组成详情
|
|
26
|
+
ths_concept_detail_from_app = get_ths_concept_detail_from_app(concept_code, real_time_quotes_all_stocks)
|
|
27
|
+
# 3 通过问财
|
|
28
|
+
if concept_name is None or data_frame_util.is_string_empty(concept_name):
|
|
29
|
+
ths_concept_list = ths_concept_common_service_api.get_all_ths_concept()
|
|
30
|
+
ths_concept_one_df = ths_concept_list.loc[
|
|
31
|
+
(ths_concept_list['symbol'] == int(concept_code))
|
|
32
|
+
| (ths_concept_list['web_concept_code'] == int(concept_code))]
|
|
33
|
+
if data_frame_util.is_not_empty(ths_concept_one_df):
|
|
34
|
+
concept_name = list(ths_concept_one_df['name'])[0]
|
|
35
|
+
if data_frame_util.is_string_not_empty(concept_name) and concept_name is not None:
|
|
36
|
+
concept_detail_by_wen_cai_df = get_ths_concept_detail_by_wen_cai(concept_name, real_time_quotes_all_stocks)
|
|
37
|
+
else:
|
|
38
|
+
concept_detail_by_wen_cai_df = None
|
|
39
|
+
# 4 通过web端
|
|
40
|
+
ths_concept_detail_from_web_df = get_ths_concept_detail_from_web(concept_code, real_time_quotes_all_stocks)
|
|
41
|
+
# 判断是否都为空
|
|
42
|
+
all_are_none = all(
|
|
43
|
+
df is None for df in [ths_concept_detail_by_explain, ths_concept_detail_from_app,
|
|
44
|
+
concept_detail_by_wen_cai_df, ths_concept_detail_from_web_df])
|
|
45
|
+
if all_are_none:
|
|
46
|
+
return None
|
|
47
|
+
result_df = pd.concat([ths_concept_detail_by_explain, ths_concept_detail_from_app,
|
|
48
|
+
concept_detail_by_wen_cai_df, ths_concept_detail_from_web_df])
|
|
49
|
+
|
|
50
|
+
result_df.drop_duplicates('symbol', keep='last', inplace=True)
|
|
51
|
+
if data_frame_util.is_not_empty(ths_concept_detail_by_explain):
|
|
52
|
+
ths_concept_detail_by_explain_new = ths_concept_detail_by_explain.loc[
|
|
53
|
+
ths_concept_detail_by_explain['symbol'].isin(result_df['symbol'])]
|
|
54
|
+
|
|
55
|
+
not_in_ths_concept_detail_by_explain = result_df.loc[~(
|
|
56
|
+
result_df['symbol'].isin(ths_concept_detail_by_explain['symbol']))]
|
|
57
|
+
result_df = pd.concat([ths_concept_detail_by_explain_new, not_in_ths_concept_detail_by_explain])
|
|
58
|
+
return result_df
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
# 通过入选理获取概念组成股票详情
|
|
62
|
+
def get_ths_concept_detail_by_explain(concept_code, real_time_quotes_all_stocks):
|
|
63
|
+
page_size = 800
|
|
64
|
+
|
|
65
|
+
de_list_symbols = company_common_service_new_api.get_de_list_company()
|
|
66
|
+
real_time_quotes_all_stocks = real_time_quotes_all_stocks.loc[
|
|
67
|
+
~(real_time_quotes_all_stocks['symbol'].isin(de_list_symbols))]
|
|
68
|
+
|
|
69
|
+
max_page_number = math.ceil(real_time_quotes_all_stocks.shape[0] / page_size)
|
|
70
|
+
page = 0
|
|
71
|
+
|
|
72
|
+
result_df = None
|
|
73
|
+
|
|
74
|
+
while page < max_page_number:
|
|
75
|
+
try:
|
|
76
|
+
|
|
77
|
+
begin_index = page * page_size
|
|
78
|
+
end_index = (page + 1) * page_size
|
|
79
|
+
page_df = real_time_quotes_all_stocks.iloc[begin_index: end_index]
|
|
80
|
+
code_list = ','.join(page_df['symbol'].astype(str))
|
|
81
|
+
all_ths_concept_detail = ths_concept_detail_app.get_concept_explain(concept_code, code_list)
|
|
82
|
+
if data_frame_util.is_empty(result_df) and data_frame_util.is_not_empty(all_ths_concept_detail):
|
|
83
|
+
result_df = all_ths_concept_detail
|
|
84
|
+
elif data_frame_util.is_not_empty(result_df) and data_frame_util.is_not_empty(all_ths_concept_detail):
|
|
85
|
+
result_df = pd.concat([all_ths_concept_detail, result_df])
|
|
86
|
+
except BaseException as e:
|
|
87
|
+
logger.error("通过ths概念入选理由列表获取详情异常:{},{}", concept_code, e)
|
|
88
|
+
page = page + 1
|
|
89
|
+
if data_frame_util.is_not_empty(result_df):
|
|
90
|
+
result_df = result_df[result_df['explain'].astype(str).str.len() > 0]
|
|
91
|
+
if data_frame_util.is_not_empty(result_df):
|
|
92
|
+
result_df = result_df.rename(columns={
|
|
93
|
+
"stockCode": "symbol",
|
|
94
|
+
"explain": "long"})
|
|
95
|
+
result_df = merge_data_common_fun(result_df, real_time_quotes_all_stocks)
|
|
96
|
+
return result_df
|
|
97
|
+
else:
|
|
98
|
+
return None
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
# 通过分享链接获取
|
|
102
|
+
def get_ths_concept_detail_from_app(concept_code, real_time_quotes_all_stocks):
|
|
103
|
+
ths_concept_detail_from_app = ths_concept_detail_app.get_ths_concept_detail_by_app(concept_code)
|
|
104
|
+
if data_frame_util.is_not_empty(ths_concept_detail_from_app):
|
|
105
|
+
ths_concept_detail_from_app['long'] = ''
|
|
106
|
+
ths_concept_detail_from_app = ths_concept_detail_from_app[[
|
|
107
|
+
'symbol',
|
|
108
|
+
'long'
|
|
109
|
+
]]
|
|
110
|
+
ths_concept_detail_from_app = merge_data_common_fun(ths_concept_detail_from_app,
|
|
111
|
+
real_time_quotes_all_stocks)
|
|
112
|
+
return ths_concept_detail_from_app
|
|
113
|
+
|
|
114
|
+
else:
|
|
115
|
+
return None
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
# 3 通过问财
|
|
119
|
+
def get_ths_concept_detail_by_wen_cai(concept_name, real_time_quotes_all_stocks):
|
|
120
|
+
concept_detail_by_wen_cai_df = ths_wen_cai_api.get_concept_detail_by_wen_cai(concept_name)
|
|
121
|
+
if data_frame_util.is_not_empty(concept_detail_by_wen_cai_df):
|
|
122
|
+
concept_detail_by_wen_cai_df = concept_detail_by_wen_cai_df[[
|
|
123
|
+
'symbol',
|
|
124
|
+
'explain'
|
|
125
|
+
]]
|
|
126
|
+
|
|
127
|
+
concept_detail_by_wen_cai_df = concept_detail_by_wen_cai_df.rename(columns={
|
|
128
|
+
"explain": "long"})
|
|
129
|
+
concept_detail_by_wen_cai_df = merge_data_common_fun(concept_detail_by_wen_cai_df,
|
|
130
|
+
real_time_quotes_all_stocks)
|
|
131
|
+
|
|
132
|
+
return concept_detail_by_wen_cai_df
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
# 通过web端 最近不可用
|
|
136
|
+
def get_ths_concept_detail_from_web(concept_code, real_time_quotes_all_stocks):
|
|
137
|
+
ths_concept_detail_from_web_df = ths_concept_detail_web.stock_board_cons_ths(concept_code)
|
|
138
|
+
if data_frame_util.is_not_empty(ths_concept_detail_from_web_df):
|
|
139
|
+
ths_concept_detail_from_web_df = ths_concept_detail_from_web_df[[
|
|
140
|
+
'symbol'
|
|
141
|
+
]]
|
|
142
|
+
ths_concept_detail_from_web_df['long'] = ''
|
|
143
|
+
|
|
144
|
+
ths_concept_detail_from_web_df = merge_data_common_fun(ths_concept_detail_from_web_df,
|
|
145
|
+
real_time_quotes_all_stocks)
|
|
146
|
+
|
|
147
|
+
return ths_concept_detail_from_web_df
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def merge_data_common_fun(result_df, real_time_quotes_all_stocks):
|
|
151
|
+
real_time_quotes_ths_detail = real_time_quotes_all_stocks.loc[
|
|
152
|
+
real_time_quotes_all_stocks['symbol'].isin(result_df['symbol'])]
|
|
153
|
+
real_time_quotes_ths_detail = common_service_fun_api.total_mv_classification(real_time_quotes_ths_detail)
|
|
154
|
+
real_time_quotes_ths_detail = real_time_quotes_ths_detail[[
|
|
155
|
+
"symbol",
|
|
156
|
+
"name",
|
|
157
|
+
"now_price",
|
|
158
|
+
"chg",
|
|
159
|
+
"exchange",
|
|
160
|
+
"amount",
|
|
161
|
+
"flow_mv_sp",
|
|
162
|
+
"total_mv_sp"]]
|
|
163
|
+
|
|
164
|
+
query_field = {
|
|
165
|
+
"concept_name": 1,
|
|
166
|
+
"concept_code": 1,
|
|
167
|
+
"company_type": 1,
|
|
168
|
+
"concept_create_day": 1,
|
|
169
|
+
"first_relevance_industry": 1,
|
|
170
|
+
"second_relevance_industry": 1,
|
|
171
|
+
"industry": 1
|
|
172
|
+
}
|
|
173
|
+
query_field_key = str(query_field)
|
|
174
|
+
query_key = str({})
|
|
175
|
+
company_df = company_common_service_new_api.get_company_info_by_field(query_key, query_field_key)
|
|
176
|
+
company_ths_df = company_df.loc[company_df['_id'].isin(result_df['symbol'])]
|
|
177
|
+
|
|
178
|
+
result_df['short'] = result_df['long']
|
|
179
|
+
result_df = result_df.set_index(['symbol'], drop=True)
|
|
180
|
+
company_ths_df = company_ths_df.set_index(['_id'], drop=True)
|
|
181
|
+
real_time_quotes_ths_detail = real_time_quotes_ths_detail.set_index(['symbol'], drop=False)
|
|
182
|
+
result_df = pd.merge(real_time_quotes_ths_detail, result_df,
|
|
183
|
+
how='outer',
|
|
184
|
+
left_index=True, right_index=True)
|
|
185
|
+
result_df = pd.merge(result_df, company_ths_df,
|
|
186
|
+
how='outer',
|
|
187
|
+
left_index=True, right_index=True)
|
|
188
|
+
return result_df
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
if __name__ == '__main__':
|
|
192
|
+
get_ths_concept_detail('886073', '铜缆高速连接')
|
|
193
|
+
real_time_quotes_all_stocks_df = east_money_stock_api.get_real_time_quotes_all_stocks()
|
|
194
|
+
get_ths_concept_detail_from_web('886072', real_time_quotes_all_stocks_df)
|
|
195
|
+
get_ths_concept_detail_by_explain('886078', real_time_quotes_all_stocks_df)
|
|
196
|
+
get_ths_concept_detail_by_wen_cai('PCB概念', real_time_quotes_all_stocks_df)
|
|
@@ -2,7 +2,6 @@ import sys
|
|
|
2
2
|
import os
|
|
3
3
|
|
|
4
4
|
import pandas as pd
|
|
5
|
-
import mns_common.api.ths.ths_stock_api as ths_stock_api
|
|
6
5
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
7
6
|
import mns_common.component.company.company_common_service_api as company_common_service_api
|
|
8
7
|
|
|
@@ -13,6 +12,7 @@ sys.path.append(project_path)
|
|
|
13
12
|
mongodb_util = MongodbUtil('27017')
|
|
14
13
|
import mns_common.api.msg.push_msg_api as push_msg_api
|
|
15
14
|
import mns_scheduler.company_info.company_info_sync_api as company_info_sync_api
|
|
15
|
+
import mns_scheduler.concept.common.detaill.ths_concept_detail_api as ths_concept_detail_api
|
|
16
16
|
|
|
17
17
|
max_concept_code = 886110
|
|
18
18
|
|
|
@@ -155,7 +155,7 @@ def update_company_info(new_concept_symbol_df):
|
|
|
155
155
|
|
|
156
156
|
|
|
157
157
|
def get_concept_detail_info_web(concept_code):
|
|
158
|
-
new_concept_symbol_list =
|
|
158
|
+
new_concept_symbol_list = ths_concept_detail_api.get_ths_concept_detail(concept_code, None)
|
|
159
159
|
if new_concept_symbol_list is None or new_concept_symbol_list.shape[0] == 0:
|
|
160
160
|
return None
|
|
161
161
|
new_concept_symbol_list['_id'] = str(concept_code) + '-' + new_concept_symbol_list['symbol']
|
|
@@ -13,7 +13,7 @@ import mns_common.utils.data_frame_util as data_frame_util
|
|
|
13
13
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
14
14
|
import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
|
|
15
15
|
from datetime import datetime
|
|
16
|
-
import mns_common.api.ths.
|
|
16
|
+
import mns_common.api.ths.concept.web.ths_concept_detail_web as ths_concept_detail_web
|
|
17
17
|
import pandas as pd
|
|
18
18
|
|
|
19
19
|
mongodb_util = MongodbUtil('27017')
|
|
@@ -69,8 +69,7 @@ def update_null_reason(nan_reason_df):
|
|
|
69
69
|
continue
|
|
70
70
|
web_concept_code = list(ths_concept_one_df['web_concept_code'])[0]
|
|
71
71
|
|
|
72
|
-
|
|
73
|
-
symbol_ths_concept_all_df = pd.DataFrame(ths_concept_json)
|
|
72
|
+
symbol_ths_concept_all_df = ths_concept_detail_web.get_one_symbol_all_ths_concepts(nan_one.symbol)
|
|
74
73
|
|
|
75
74
|
symbol_ths_concept_one_df = symbol_ths_concept_all_df[
|
|
76
75
|
symbol_ths_concept_all_df['cid'] == web_concept_code]
|
|
@@ -13,9 +13,9 @@ import pandas as pd
|
|
|
13
13
|
from datetime import datetime
|
|
14
14
|
import akshare as ak
|
|
15
15
|
import mns_scheduler.concept.ths.common.ths_concept_sync_common_api as ths_concept_sync_common_api
|
|
16
|
-
import mns_common.api.ths.ths_stock_api as ths_stock_api
|
|
17
|
-
import mns_scheduler.concept.clean.ths_concept_clean_api as ths_concept_clean_api
|
|
18
16
|
|
|
17
|
+
import mns_scheduler.concept.clean.ths_concept_clean_api as ths_concept_clean_api
|
|
18
|
+
import mns_scheduler.concept.common.detaill.ths_concept_detail_api as ths_concept_detail_api
|
|
19
19
|
mongodb_util = MongodbUtil('27017')
|
|
20
20
|
|
|
21
21
|
|
|
@@ -90,7 +90,7 @@ def handle_new_concept_msg(concept_code, concept_name, url):
|
|
|
90
90
|
|
|
91
91
|
# 获取web端 新增概念详情
|
|
92
92
|
def get_concept_detail_info_web(concept_code):
|
|
93
|
-
new_concept_symbol_list =
|
|
93
|
+
new_concept_symbol_list = ths_concept_detail_api.get_ths_concept_detail(concept_code, None)
|
|
94
94
|
if new_concept_symbol_list is None or new_concept_symbol_list.shape[0] == 0:
|
|
95
95
|
return None
|
|
96
96
|
new_concept_symbol_list = new_concept_symbol_list[ths_concept_sync_common_api.order_fields]
|
|
@@ -5,8 +5,8 @@ file_path = os.path.abspath(__file__)
|
|
|
5
5
|
end = file_path.index('mns') + 17
|
|
6
6
|
project_path = file_path[0:end]
|
|
7
7
|
sys.path.append(project_path)
|
|
8
|
-
import
|
|
9
|
-
|
|
8
|
+
import mns_scheduler.concept.common.detaill.ths_concept_detail_api as ths_concept_detail_api
|
|
9
|
+
import mns_common.api.ths.concept.web.ths_concept_index_web as ths_concept_index_web
|
|
10
10
|
import datetime
|
|
11
11
|
import time
|
|
12
12
|
import mns_common.api.msg.push_msg_api as push_msg_api
|
|
@@ -20,7 +20,7 @@ mongodb_util = MongodbUtil('27017')
|
|
|
20
20
|
|
|
21
21
|
# 获取web端 新增概念详情
|
|
22
22
|
def get_concept_detail_info_web(concept_code):
|
|
23
|
-
new_concept_symbol_list =
|
|
23
|
+
new_concept_symbol_list = ths_concept_detail_api.get_ths_concept_detail(concept_code, None)
|
|
24
24
|
if new_concept_symbol_list is None or new_concept_symbol_list.shape[0] == 0:
|
|
25
25
|
return None
|
|
26
26
|
new_concept_symbol_list = new_concept_symbol_list[ths_concept_sync_common_api.order_fields]
|
|
@@ -52,7 +52,7 @@ def sync_new_concept_data_by_web():
|
|
|
52
52
|
time.sleep(1)
|
|
53
53
|
continue
|
|
54
54
|
time.sleep(2)
|
|
55
|
-
concept_name =
|
|
55
|
+
concept_name = ths_concept_index_web.get_concept_name(concept_code)
|
|
56
56
|
concept_name = concept_name.replace('(', '(')
|
|
57
57
|
concept_name = concept_name.replace(')', ')')
|
|
58
58
|
|
|
@@ -82,7 +82,6 @@ def handle_new_concept_msg(concept_code, concept_name, url):
|
|
|
82
82
|
|
|
83
83
|
if __name__ == '__main__':
|
|
84
84
|
# code = 886025
|
|
85
|
-
# name = ths_stock_api.get_concept_name(code)
|
|
86
85
|
# push_msg_to_we_chat_web(code, name)
|
|
87
86
|
# get_concept_detail_info_web(886026)
|
|
88
87
|
# get_concept_detail_info_web(886035)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import sys
|
|
3
3
|
import pandas as pd
|
|
4
|
-
import mns_common.api.ths.
|
|
4
|
+
import mns_common.api.ths.concept.web.ths_concept_detail_web as ths_concept_detail_web
|
|
5
5
|
import mns_common.api.em.east_money_stock_api as east_money_stock_api
|
|
6
6
|
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
7
7
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
@@ -86,9 +86,8 @@ def choose_type_new_concept(ths_concept_df):
|
|
|
86
86
|
def update_symbol_new_concept(symbol_df, page_number):
|
|
87
87
|
for stock_one in symbol_df.itertuples():
|
|
88
88
|
try:
|
|
89
|
-
|
|
89
|
+
symbol_ths_concept_all_df = ths_concept_detail_web.get_symbol_add_new_concept(stock_one.symbol)
|
|
90
90
|
logger.info("同步symbol概念信息:{}", stock_one.symbol)
|
|
91
|
-
symbol_ths_concept_all_df = pd.DataFrame(ths_concept_json)
|
|
92
91
|
if data_frame_util.is_empty(symbol_ths_concept_all_df):
|
|
93
92
|
continue
|
|
94
93
|
|
|
@@ -179,4 +178,4 @@ def sync_symbol_all_concept(symbol):
|
|
|
179
178
|
|
|
180
179
|
|
|
181
180
|
if __name__ == '__main__':
|
|
182
|
-
sync_symbol_all_concept(
|
|
181
|
+
sync_symbol_all_concept('300085')
|
|
@@ -63,7 +63,7 @@ def sync_all_investigate_stocks(page_size, search_key, begin_day, end_day):
|
|
|
63
63
|
|
|
64
64
|
|
|
65
65
|
# 立案调查的股票
|
|
66
|
-
def
|
|
66
|
+
def sync_register_and_investigate_stocks():
|
|
67
67
|
before_days = 60
|
|
68
68
|
const_num = 30
|
|
69
69
|
init_date = datetime.now()
|
|
@@ -124,7 +124,7 @@ def sync_new_high_risk_stocks():
|
|
|
124
124
|
|
|
125
125
|
|
|
126
126
|
if __name__ == '__main__':
|
|
127
|
-
|
|
127
|
+
sync_register_and_investigate_stocks()
|
|
128
128
|
# result_df = sync_all_investigate_stocks(30, '立案', '2023-01-01', '2024-06-15')
|
|
129
129
|
# result_df = result_df.sort_values(by=['announcementTime'], ascending=False)
|
|
130
130
|
# print(result_df)
|
|
@@ -6,7 +6,7 @@ end = file_path.index('mns') + 16
|
|
|
6
6
|
project_path = file_path[0:end]
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
|
|
9
|
-
import
|
|
9
|
+
import mns_scheduler.concept.common.detaill.ths_concept_detail_api as ths_concept_detail_api
|
|
10
10
|
import mns_common.component.self_choose.black_list_service_api as black_list_service_api
|
|
11
11
|
from datetime import datetime
|
|
12
12
|
from loguru import logger
|
|
@@ -15,7 +15,7 @@ from mns_common.constant.black_list_classify_enum import BlackClassify
|
|
|
15
15
|
|
|
16
16
|
|
|
17
17
|
def add_concept_to_lack_list(concept_code, reason):
|
|
18
|
-
new_concept_symbol_list =
|
|
18
|
+
new_concept_symbol_list = ths_concept_detail_api.get_ths_concept_detail(concept_code, None)
|
|
19
19
|
if data_frame_util.is_empty(new_concept_symbol_list):
|
|
20
20
|
return None
|
|
21
21
|
|
|
@@ -7,7 +7,7 @@ project_path = file_path[0:end]
|
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
import pandas as pd
|
|
9
9
|
import mns_common.api.akshare.stock_zt_pool_api as stock_zt_pool_api
|
|
10
|
-
import mns_common.api.ths.ths_stock_zt_pool_api as ths_stock_zt_pool_api
|
|
10
|
+
import mns_common.api.ths.zt.ths_stock_zt_pool_api as ths_stock_zt_pool_api
|
|
11
11
|
import mns_common.utils.date_handle_util as date_handle_util
|
|
12
12
|
import mns_common.component.concept.ths_concept_common_service_api as ths_concept_common_service_api
|
|
13
13
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
@@ -325,9 +325,9 @@ def sync_kpl_best_his_quotes():
|
|
|
325
325
|
|
|
326
326
|
|
|
327
327
|
# 同步高风险的股票
|
|
328
|
-
def
|
|
328
|
+
def sync_high_risk_stocks():
|
|
329
329
|
logger.info('同步被立案调查的股票')
|
|
330
|
-
register_and_investigate_stock_sync_api.
|
|
330
|
+
register_and_investigate_stock_sync_api.sync_register_and_investigate_stocks()
|
|
331
331
|
reason_detail = '微盘股拉黑'
|
|
332
332
|
concept_code_wei_pan = '883418'
|
|
333
333
|
wei_pan_stock_api.add_concept_to_lack_list(concept_code_wei_pan, reason_detail)
|
|
@@ -418,8 +418,8 @@ blockingScheduler.add_job(sync_kpl_best_his_quotes, 'cron', hour='18,22', minute
|
|
|
418
418
|
# 更新开盘啦指数关系
|
|
419
419
|
blockingScheduler.add_job(sync_position, 'cron', hour='0,08', minute='10')
|
|
420
420
|
|
|
421
|
-
#
|
|
422
|
-
blockingScheduler.add_job(
|
|
421
|
+
# 同步高风险股票
|
|
422
|
+
blockingScheduler.add_job(sync_high_risk_stocks, 'cron', hour='0,09,12,16', minute='20')
|
|
423
423
|
|
|
424
424
|
# 同步互动回答
|
|
425
425
|
blockingScheduler.add_job(sync_all_interactive_questions, 'cron', hour='08,12,17', minute='05')
|
|
@@ -1,33 +1,32 @@
|
|
|
1
1
|
mns_scheduler/__init__.py,sha256=Tyvi_iQlv3jz59EdH67Mycnt9CSixcWPQoJwu55bOq0,165
|
|
2
2
|
mns_scheduler/backup/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
3
|
-
mns_scheduler/backup/app/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
4
|
-
mns_scheduler/backup/app/ths_new_concept_sync_app.py,sha256=kQShkBRWOs6Q5n-MuPDuuteuKpFZotvFDoc8RiftesQ,5223
|
|
5
3
|
mns_scheduler/backup/em/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
6
4
|
mns_scheduler/backup/em/em_new_concept_his_sync.py,sha256=Yqbuz9VE9433o0Z6BvDo5adhj3lK4vmN66XNQBIdC1k,4992
|
|
7
5
|
mns_scheduler/backup/em/em_new_concept_sync_common_api.py,sha256=KnNCf0KXy31GFwF1-wbbkfDM-H7-cEtcVoCwl4QmoVs,7083
|
|
8
6
|
mns_scheduler/backup/em/em_new_concept_sync_web.py,sha256=wVS0yLyPYzpcxfWAuUqmqbYkjw9wjpo48CvLSZFckzw,2334
|
|
9
|
-
mns_scheduler/backup/wen_cai/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
10
|
-
mns_scheduler/backup/wen_cai/wen_cai_concept_sync.py,sha256=boKtgOIXIsRny5n1keZm4luDFCiooudbPDsEFIGImIw,1747
|
|
11
7
|
mns_scheduler/big_deal/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
12
|
-
mns_scheduler/big_deal/ths_big_deal_sync.py,sha256=
|
|
8
|
+
mns_scheduler/big_deal/ths_big_deal_sync.py,sha256=aMFj-_pLprh4vGjSSzmr_tlYoPA0L4Lm0SkLRkQwIiw,4564
|
|
13
9
|
mns_scheduler/company_info/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
14
10
|
mns_scheduler/company_info/company_constant_data.py,sha256=_JUan2ds_o4dMUwiPyKnF6oUQd8Nf2UqkHYhSv1FW08,14531
|
|
15
|
-
mns_scheduler/company_info/company_info_sync_api.py,sha256=
|
|
11
|
+
mns_scheduler/company_info/company_info_sync_api.py,sha256=fCRHXGBx4ugJI3KydqhtjYAHXEmyTPIgr-NBhYPCOXM,22576
|
|
16
12
|
mns_scheduler/company_info/de_list_stock_service.py,sha256=GCp6hlvO-SuH1oIpEsYZwEnGUOa6fXb2D7CqAUYXKQA,1993
|
|
17
13
|
mns_scheduler/concept/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
18
14
|
mns_scheduler/concept/clean/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
19
15
|
mns_scheduler/concept/clean/kpl_concept_clean_api.py,sha256=xxIIgrXLI6xLf10t4unJa7aMB_QeKeki1HJVeXsntkY,4512
|
|
20
|
-
mns_scheduler/concept/clean/ths_concept_clean_api.py,sha256=
|
|
16
|
+
mns_scheduler/concept/clean/ths_concept_clean_api.py,sha256=42sbd8VqJeOKxJuxLVsU9YFK_YUSePTGrK2AWbabhA0,5964
|
|
17
|
+
mns_scheduler/concept/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
+
mns_scheduler/concept/common/detaill/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
|
+
mns_scheduler/concept/common/detaill/ths_concept_detail_api.py,sha256=tRuSkET-lw1M7rHDImrIM_1X-uMhxq_zF_d3FX1DoUc,9378
|
|
21
20
|
mns_scheduler/concept/ths/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
22
21
|
mns_scheduler/concept/ths/common/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
23
|
-
mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py,sha256=
|
|
24
|
-
mns_scheduler/concept/ths/common/ths_concept_update_common_api.py,sha256=
|
|
22
|
+
mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py,sha256=W-Bu2PVFOTh5h2h_27_RcszXLRLq6TU1hCg9y_FGVyw,6780
|
|
23
|
+
mns_scheduler/concept/ths/common/ths_concept_update_common_api.py,sha256=D695eQsB8oFCu0ev9yzUtXN8Apw9Uorec96HR4vgxbI,4441
|
|
25
24
|
mns_scheduler/concept/ths/sync_new_index/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
26
|
-
mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_by_ak_api.py,sha256=
|
|
27
|
-
mns_scheduler/concept/ths/sync_new_index/sync_ths_new_concept_by_web_api.py,sha256=
|
|
25
|
+
mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_by_ak_api.py,sha256=8QBiRKc0Q3ez-kBwvz7G8HrFDD_ANd8smOpQtGyvKIs,5371
|
|
26
|
+
mns_scheduler/concept/ths/sync_new_index/sync_ths_new_concept_by_web_api.py,sha256=dLd2V67AFnE9xf5H8YGyaJ0j7z8FhtTemFVGOuOeHJ4,4087
|
|
28
27
|
mns_scheduler/concept/ths/update_concept_info/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
29
28
|
mns_scheduler/concept/ths/update_concept_info/sync_one_concept_all_symbols_api.py,sha256=ipRtiihpHlbxuces7YpHfvBtCDxgzrVXjcCKZiFBPaw,1928
|
|
30
|
-
mns_scheduler/concept/ths/update_concept_info/sync_one_symbol_all_concepts_api.py,sha256=
|
|
29
|
+
mns_scheduler/concept/ths/update_concept_info/sync_one_symbol_all_concepts_api.py,sha256=oPDi3h4BZWBUPnj3QeIvXhlqhL80_U6oiTuOEblSu54,8832
|
|
31
30
|
mns_scheduler/db/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
32
31
|
mns_scheduler/db/col_move_service.py,sha256=1XMuC9E9eif8eeLWqnby_c9uhuoZO0ZaMa5xssWe4Wg,4090
|
|
33
32
|
mns_scheduler/db/db_status.py,sha256=K1jtYIGZzDV6knpoJLLnXEhN3tyziJp_zY2gSfguHCA,747
|
|
@@ -87,9 +86,9 @@ mns_scheduler/risk/financial/net_assets_check_api.py,sha256=TPiTDMlX8X7-rkx97M8b
|
|
|
87
86
|
mns_scheduler/risk/financial/profit_income_check_api.py,sha256=4iGZEIveq5SIOBziyMH72oxSKbQJ3WfyjUMhDJfxUEU,4358
|
|
88
87
|
mns_scheduler/risk/financial/stock_equity_mortgage_check_api.py,sha256=SQ7dieSCOf1z42Wi1zDEii3poAT5wfyBrV43dXkAaaw,22
|
|
89
88
|
mns_scheduler/risk/major_violations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
90
|
-
mns_scheduler/risk/major_violations/register_and_investigate_stock_sync_api.py,sha256=
|
|
89
|
+
mns_scheduler/risk/major_violations/register_and_investigate_stock_sync_api.py,sha256=_xPQxT6OS7J7_PtA7hbfCmMS7VzpZTWoZUOXzwoesUs,5672
|
|
91
90
|
mns_scheduler/risk/self/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
92
|
-
mns_scheduler/risk/self/wei_pan_stock_api.py,sha256=
|
|
91
|
+
mns_scheduler/risk/self/wei_pan_stock_api.py,sha256=osU3XrPZXDzPdtVCq601ZlSTZUqIhGxoXsowWgPAM4w,1902
|
|
93
92
|
mns_scheduler/risk/test/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda1tqLeg,163
|
|
94
93
|
mns_scheduler/risk/test/fix_blask_list.py,sha256=jjLhhIWH1L4CgNp2jQ_HAHbC3wVgeX1TzhqC--_D2MI,1249
|
|
95
94
|
mns_scheduler/risk/transactions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -114,11 +113,11 @@ mns_scheduler/zt/script/__init__.py,sha256=wEg73KlZo-dU0yKGwpA1C2y6LZm4IBb94tNda
|
|
|
114
113
|
mns_scheduler/zt/script/kcx_high_chg_open_his_data_handle.py,sha256=qSlcd4dq1A9MjV-5ikyrtGEzxOwXKpWCD9FSzGpatTo,6118
|
|
115
114
|
mns_scheduler/zt/script/sync_high_chg_pool_his_data.py,sha256=R0syG5gcXRlLxswbBlE6hpKUK1mjERgUJ3dX0X7bXjE,1691
|
|
116
115
|
mns_scheduler/zt/zt_pool/__init__.py,sha256=Tyvi_iQlv3jz59EdH67Mycnt9CSixcWPQoJwu55bOq0,165
|
|
117
|
-
mns_scheduler/zt/zt_pool/zt_pool_sync_api.py,sha256=
|
|
116
|
+
mns_scheduler/zt/zt_pool/zt_pool_sync_api.py,sha256=YusilleacIhhks1m7qkYHdBS16yvjai2avCSfrDpWAg,7607
|
|
118
117
|
mns_scheduler/zz_task/__init__.py,sha256=QWBdZwBCvQw8aS4hnL9_pg3U3ZiNLUXzlImyy9WhUcI,163
|
|
119
|
-
mns_scheduler/zz_task/data_sync_task.py,sha256=
|
|
118
|
+
mns_scheduler/zz_task/data_sync_task.py,sha256=TNlAE4zLHN8Hszj6sbTKgevIs_63qiPpuhDx3ftF7YU,17717
|
|
120
119
|
mns_scheduler/zz_task/sync_realtime_quotes_task.py,sha256=DN3bq2XCDZC-PHlbD2NTog48bR44EruIEc2QVGKg7Tk,932
|
|
121
|
-
mns_scheduler-1.0.
|
|
122
|
-
mns_scheduler-1.0.
|
|
123
|
-
mns_scheduler-1.0.
|
|
124
|
-
mns_scheduler-1.0.
|
|
120
|
+
mns_scheduler-1.1.0.1.dist-info/METADATA,sha256=GNgxX5CmUCdyZakn-bjjW4Ky1dFAa9NafOkm-v9pL1U,64
|
|
121
|
+
mns_scheduler-1.1.0.1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
|
122
|
+
mns_scheduler-1.1.0.1.dist-info/top_level.txt,sha256=PXQDFBGR1pWmsUbH5yiLAh71P5HZODTRED0zJ8CCgOc,14
|
|
123
|
+
mns_scheduler-1.1.0.1.dist-info/RECORD,,
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import sys
|
|
2
|
-
import os
|
|
3
|
-
|
|
4
|
-
file_path = os.path.abspath(__file__)
|
|
5
|
-
end = file_path.index('mns') + 17
|
|
6
|
-
project_path = file_path[0:end]
|
|
7
|
-
sys.path.append(project_path)
|
|
8
|
-
import mns_common.api.ths.ths_stock_api as ths_stock_api
|
|
9
|
-
import datetime
|
|
10
|
-
import time
|
|
11
|
-
import mns_common.api.msg.push_msg_api as push_msg_api
|
|
12
|
-
from loguru import logger
|
|
13
|
-
import mns_scheduler.concept.ths.common.ths_concept_sync_common_api as ths_concept_sync_common_api
|
|
14
|
-
import pandas as pd
|
|
15
|
-
from mns_common.db.MongodbUtil import MongodbUtil
|
|
16
|
-
|
|
17
|
-
mongodb_util = MongodbUtil('27017')
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
# app 端获取新增概念信息 接口不稳定
|
|
21
|
-
|
|
22
|
-
# 获取最大概念代码
|
|
23
|
-
def get_max_concept_name():
|
|
24
|
-
query = {"symbol": {'$ne': 'null'}, "success": True}
|
|
25
|
-
return mongodb_util.descend_query(query, 'ths_concept_list', 'symbol', 1)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
# 获取app端新概念名称
|
|
29
|
-
def get_concept_detail_info_app(concept_code):
|
|
30
|
-
return ths_stock_api.get_new_concept_code_app(concept_code)
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
# 获取app端新概念详细列表
|
|
34
|
-
def get_new_concept_detail_list_app(concept_code):
|
|
35
|
-
new_concept_symbol_list = ths_stock_api.get_new_concept_list_app(concept_code)
|
|
36
|
-
if new_concept_symbol_list is None or new_concept_symbol_list.shape == 0:
|
|
37
|
-
return None
|
|
38
|
-
new_concept_symbol_list = new_concept_symbol_list[ths_concept_sync_common_api.order_fields]
|
|
39
|
-
new_concept_symbol_list['_id'] = str(concept_code) + '-' + new_concept_symbol_list['symbol']
|
|
40
|
-
return new_concept_symbol_list
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
# 推送新概念信息到微信
|
|
44
|
-
def push_msg_to_we_chat_app(concept_code, concept_name):
|
|
45
|
-
url = f'https://m.10jqka.com.cn/hq/industry.html#code={concept_code}&refCountId=R_55ba2964_186'
|
|
46
|
-
msg = "概念代码:" + str(concept_code) + "," + "概念名称:" + concept_name + "," + "url: " + url
|
|
47
|
-
title = "新增概念:" + str(concept_code) + "-" + concept_name
|
|
48
|
-
push_msg_api.push_msg_to_wechat(title, msg)
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
# 保存新概念信息到数据库
|
|
52
|
-
def save_ths_concept_list_app(concept_code, concept_name, str_day, str_now_time, success):
|
|
53
|
-
concept_code = int(concept_code)
|
|
54
|
-
url = 'https://m.10jqka.com.cn/hq/industry.html#code=' + str(concept_code) + '&refCountId=R_55ba2964_186'
|
|
55
|
-
ths_concept_list = pd.DataFrame([
|
|
56
|
-
[concept_code, concept_code, concept_name, str_day, url, str_now_time, success],
|
|
57
|
-
], columns=['_id', 'symbol', 'name', 'str_day', 'url', 'str_now_time', 'success'])
|
|
58
|
-
|
|
59
|
-
mongodb_util.save_mongo(ths_concept_list, 'ths_concept_list')
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
# 同步新概念信息 从app爬取
|
|
63
|
-
def sync_new_concept_data():
|
|
64
|
-
max_concept_name = get_max_concept_name()
|
|
65
|
-
try:
|
|
66
|
-
now_date = datetime.datetime.now()
|
|
67
|
-
str_day = now_date.strftime('%Y-%m-%d')
|
|
68
|
-
str_now_time = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
69
|
-
concept_code = list(max_concept_name['symbol'])[0]
|
|
70
|
-
success = list(max_concept_name['success'])[0]
|
|
71
|
-
if success:
|
|
72
|
-
concept_code = concept_code + 1
|
|
73
|
-
|
|
74
|
-
new_concept_df = get_concept_detail_info_app(concept_code)
|
|
75
|
-
if new_concept_df is None or new_concept_df.shape[0] == 0:
|
|
76
|
-
time.sleep(1)
|
|
77
|
-
return None
|
|
78
|
-
|
|
79
|
-
concept_name = list(new_concept_df['concept_name'])[0]
|
|
80
|
-
concept_code = list(new_concept_df['concept_code'])[0]
|
|
81
|
-
if success:
|
|
82
|
-
# 推送新概念信息到微信
|
|
83
|
-
push_msg_to_we_chat_app(concept_code, concept_name)
|
|
84
|
-
# 获取新概念详细信息
|
|
85
|
-
new_concept_symbol_list = get_new_concept_detail_list_app(concept_code)
|
|
86
|
-
|
|
87
|
-
if new_concept_symbol_list is None or new_concept_symbol_list.shape[0] == 0:
|
|
88
|
-
# 保存新概念信息到数据库
|
|
89
|
-
query = {"symbol": int(concept_code), "success": True}
|
|
90
|
-
exist_success = mongodb_util.exist_data_query('ths_concept_list', query)
|
|
91
|
-
if bool(1 - exist_success):
|
|
92
|
-
save_ths_concept_list_app(concept_code, concept_name, str_day, str_now_time, False)
|
|
93
|
-
time.sleep(1)
|
|
94
|
-
|
|
95
|
-
else:
|
|
96
|
-
# 保存新概念信息到数据库
|
|
97
|
-
save_ths_concept_list_app(concept_code, concept_name, str_day, str_now_time, True)
|
|
98
|
-
new_concept_symbol_list.loc[:, 'way'] = 'index_sync'
|
|
99
|
-
# 保存新概念详细信息到数据库
|
|
100
|
-
ths_concept_sync_common_api.save_ths_concept_detail(new_concept_symbol_list, concept_name, str_day,
|
|
101
|
-
str_now_time, concept_code)
|
|
102
|
-
time.sleep(1)
|
|
103
|
-
|
|
104
|
-
except BaseException as e:
|
|
105
|
-
logger.error("同步新概念异常:{},concept_code:{}", e, concept_code)
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
if __name__ == '__main__':
|
|
109
|
-
# myquery1 = {"symbol": {"$ne": 'null'}}
|
|
110
|
-
# newvalues1 = {"$set": {"success": True}}
|
|
111
|
-
#
|
|
112
|
-
# mongodb_util_remote.update_many(myquery1, newvalues1, 'ths_concept_list')
|
|
113
|
-
# concept_df = get_concept_detail_info_app('886033')
|
|
114
|
-
df = get_new_concept_detail_list_app('883418')
|
|
115
|
-
print(df)
|
|
116
|
-
# sync_new_concept_data()
|
|
117
|
-
# code = 886026
|
|
118
|
-
# while True:
|
|
119
|
-
# symbol_new_concept = get_concept_detail_info_app(code)
|
|
120
|
-
# logger.info(symbol_new_concept)
|
|
121
|
-
# new_concept_symbols = ths_stock_api.get_new_concept_list_app(code)
|
|
122
|
-
# logger.info(new_concept_symbols)
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import sys
|
|
2
|
-
import os
|
|
3
|
-
|
|
4
|
-
file_path = os.path.abspath(__file__)
|
|
5
|
-
end = file_path.index('mns') + 17
|
|
6
|
-
project_path = file_path[0:end]
|
|
7
|
-
sys.path.append(project_path)
|
|
8
|
-
from datetime import datetime
|
|
9
|
-
import mns_common.api.ths.ths_stock_api as ths_stock_api
|
|
10
|
-
import mns_common.utils.date_handle_util as date_handle_util
|
|
11
|
-
import mns_common.utils.data_frame_util as data_frame_util
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
def sync_wei_concept_data():
|
|
15
|
-
now_date = datetime.now()
|
|
16
|
-
str_day = now_date.strftime('%Y-%m-%d')
|
|
17
|
-
number = 1
|
|
18
|
-
result = None
|
|
19
|
-
while True:
|
|
20
|
-
wen_cai_concept_df = ths_stock_api.ths_concept_wen_cai(date_handle_util.no_slash_date(str_day),
|
|
21
|
-
str(number))
|
|
22
|
-
result = data_frame_util.merge_choose_data_no_drop(result, wen_cai_concept_df)
|
|
23
|
-
if wen_cai_concept_df.shape[0] < 50:
|
|
24
|
-
break
|
|
25
|
-
number = number + 1
|
|
26
|
-
result = result.rename(columns={"股票代码": "symbol",
|
|
27
|
-
"股票简称": "name",
|
|
28
|
-
"最新价": "price",
|
|
29
|
-
"最新涨跌幅": "chg",
|
|
30
|
-
"所属概念": "concepts",
|
|
31
|
-
"所属概念数量": "concept_num"
|
|
32
|
-
})
|
|
33
|
-
result = result[[
|
|
34
|
-
'symbol',
|
|
35
|
-
'name',
|
|
36
|
-
'price',
|
|
37
|
-
'chg',
|
|
38
|
-
'concepts',
|
|
39
|
-
'concept_num',
|
|
40
|
-
'market_code',
|
|
41
|
-
'code',
|
|
42
|
-
]]
|
|
43
|
-
result['chg'].fillna(0, inplace=True)
|
|
44
|
-
result['price'].fillna(0, inplace=True)
|
|
45
|
-
result['concepts'].fillna(0, inplace=True)
|
|
46
|
-
return result
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
if __name__ == '__main__':
|
|
50
|
-
df = sync_wei_concept_data()
|
|
51
|
-
print(df)
|
|
File without changes
|
|
File without changes
|