mns-scheduler 1.1.8.4__py3-none-any.whl → 1.4.5.7__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.
- mns_scheduler/__init__.py +1 -3
- mns_scheduler/auto_da_ban/auto_da_ban_service.py +89 -0
- mns_scheduler/company_info/clean/__init__.py +1 -1
- mns_scheduler/company_info/clean/company_info_clean_api.py +62 -21
- mns_scheduler/company_info/common/company_common_query_service.py +45 -0
- mns_scheduler/company_info/constant/__init__.py +1 -1
- mns_scheduler/company_info/constant/company_constant_data.py +335 -224
- mns_scheduler/company_info/de_list_stock/__init__.py +1 -1
- mns_scheduler/company_info/de_list_stock/de_list_stock_service.py +1 -1
- mns_scheduler/company_info/em_stock_info/sync_em_stock_info_sync.py +134 -0
- mns_scheduler/company_info/sync/company_info_set_service.py +208 -0
- mns_scheduler/company_info/sync/sync_company_info_task.py +203 -0
- mns_scheduler/company_info/task/company_announce_info_task.py +77 -0
- mns_scheduler/company_info/task/company_base_info_task.py +64 -0
- mns_scheduler/company_info/task/company_business_info_task.py +177 -0
- mns_scheduler/company_info/task/company_hold_info_task.py +66 -0
- mns_scheduler/company_info/task/company_industry_info_task.py +167 -0
- mns_scheduler/company_info/task/company_total_task.py +69 -0
- mns_scheduler/concept/clean/kpl_concept_clean_api.py +1 -1
- mns_scheduler/concept/clean/ths_concept_clean_api.py +20 -4
- mns_scheduler/concept/ths/common/ths_concept_sync_common_api.py +23 -18
- mns_scheduler/concept/ths/common/ths_concept_update_common_api.py +4 -1
- mns_scheduler/concept/ths/detaill/ths_concept_detail_api.py +7 -7
- mns_scheduler/concept/ths/sync_new_index/sync_ths_concept_new_index_api.py +9 -4
- mns_scheduler/concept/ths/update_concept_info/sync_one_symbol_all_concepts_api.py +2 -2
- mns_scheduler/db/col_move_service.py +3 -3
- mns_scheduler/db/script/__init__.py +1 -1
- mns_scheduler/db/script/col_move_script.py +1 -1
- mns_scheduler/db/script/db_move/__init__.py +7 -0
- mns_scheduler/db/script/db_move/col_move_one_service.py +34 -0
- mns_scheduler/db/script/sync/__init__.py +1 -1
- mns_scheduler/db/script/sync/remote_data_sync_to_local.py +65 -4
- mns_scheduler/db/script/sync/sync_hui_ce_test_data.py +80 -0
- mns_scheduler/db/script/sync/sync_hui_ce_test_data_01.py +69 -0
- mns_scheduler/db/script/update/__init__.py +7 -0
- mns_scheduler/db/script/update/update_col_field.py +36 -0
- mns_scheduler/finance/__init__.py +1 -1
- mns_scheduler/finance/em/__init__.py +7 -0
- mns_scheduler/finance/{em_financial_asset_liability_sync_service_api.py → em/em_financial_asset_liability_sync_service_api.py} +2 -2
- mns_scheduler/finance/{em_financial_profit_sync_service_api.py → em/em_financial_profit_sync_service_api.py} +27 -26
- mns_scheduler/finance/{finance_common_api.py → em/finance_common_api.py} +3 -3
- mns_scheduler/finance/{sync_financial_report_service_api.py → sync_financial_report_service_task.py} +80 -27
- mns_scheduler/finance/xue_qiu/__init__.py +7 -0
- mns_scheduler/finance/xue_qiu/down_load_xueqiu_report_api.py +77 -0
- mns_scheduler/finance/xue_qiu/sync_xue_qiu_fiance_data.py +161 -0
- mns_scheduler/hk/__init__.py +1 -1
- mns_scheduler/hk/hk_company_info_sync_service_api.py +4 -4
- mns_scheduler/hk/hk_industry_info_sync_service_api.py +3 -5
- mns_scheduler/industry/__init__.py +7 -0
- mns_scheduler/industry/ths/__init__.py +7 -0
- mns_scheduler/industry/ths/ths_industry_index_service.py +58 -0
- mns_scheduler/industry/ths/ths_industry_sync_service.py +68 -0
- mns_scheduler/irm/__init__.py +1 -1
- mns_scheduler/irm/api/__init__.py +1 -1
- mns_scheduler/irm/api/sh_stock_sns_sse_info_api.py +8 -58
- mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py +15 -26
- mns_scheduler/irm/stock_irm_cninfo_service.py +43 -31
- mns_scheduler/irm/stock_question_id_service.py +169 -0
- mns_scheduler/k_line/clean/daily/__init__.py +1 -1
- mns_scheduler/k_line/clean/daily/daily_k_line_clean_common_service.py +52 -6
- mns_scheduler/k_line/clean/daily/daily_k_line_service.py +7 -2
- mns_scheduler/k_line/clean/k_line_info_clean_impl.py +3 -2
- mns_scheduler/k_line/clean/k_line_info_clean_task.py +42 -15
- mns_scheduler/k_line/clean/week_month/__init__.py +1 -1
- mns_scheduler/k_line/clean/week_month/normal_week_month_k_line_service.py +124 -26
- mns_scheduler/k_line/clean/week_month/sub_new_week_month_k_line_service.py +2 -2
- mns_scheduler/k_line/common/__init__.py +7 -0
- mns_scheduler/k_line/common/k_line_common_api.py +188 -0
- mns_scheduler/k_line/hot_stocks/__init__.py +1 -1
- mns_scheduler/k_line/hot_stocks/recent_hot_stocks_clean_service.py +1 -1
- mns_scheduler/k_line/{sync → month_week_daily}/bfq_k_line_sync.py +14 -29
- mns_scheduler/k_line/{sync → month_week_daily}/daily_week_month_line_sync.py +11 -12
- mns_scheduler/k_line/sync_status/__init__.py +7 -0
- mns_scheduler/k_line/sync_status/k_line_sync_status_check.py +54 -0
- mns_scheduler/k_line/test/__init__.py +1 -1
- mns_scheduler/k_line/test/k_line_info_clean_his_data.py +14 -3
- mns_scheduler/k_line/year_quarter/__init__.py +7 -0
- mns_scheduler/k_line/year_quarter/year_quarter_line_sync.py +76 -0
- mns_scheduler/kpl/selection/symbol/sync_best_choose_symbol.py +1 -2
- mns_scheduler/kpl/selection/symbol/sync_kpl_concept_symbol_choose_reason_api.py +108 -0
- mns_scheduler/kpl/selection/total/sync_kpl_best_total_sync_api.py +5 -0
- mns_scheduler/lhb/__init__.py +1 -1
- mns_scheduler/lhb/stock_lhb_sync_service.py +1 -1
- mns_scheduler/open/__init__.py +1 -1
- mns_scheduler/open/sync_one_day_open_data_to_db_service.py +2 -3
- mns_scheduler/risk/__init__.py +1 -1
- mns_scheduler/risk/compliance/undisclosed_annual_report_api.py +8 -2
- mns_scheduler/risk/financial/annual_report_audit_check_api.py +13 -3
- mns_scheduler/risk/financial/net_assets_check_api.py +21 -18
- mns_scheduler/risk/financial/profit_income_check_api.py +7 -2
- mns_scheduler/risk/financial_report_risk_check_api.py +1 -1
- mns_scheduler/risk/major_violations/register_and_investigate_stock_sync_api.py +1 -1
- mns_scheduler/risk/self/wei_pan_stock_api.py +1 -1
- mns_scheduler/risk/test/__init__.py +1 -1
- mns_scheduler/risk/test/fix_blask_list.py +4 -6
- mns_scheduler/risk/transactions/transactions_check_api.py +22 -4
- mns_scheduler/self_choose/__init__.py +1 -1
- mns_scheduler/self_choose/ths_self_choose_service.py +99 -43
- mns_scheduler/trade/auto_login/trader_auto_service.py +7 -4
- mns_scheduler/trade/auto_sell_service_api.py +4 -4
- mns_scheduler/trade/balance/__init__.py +7 -0
- mns_scheduler/trade/balance/ths_account_balance_service.py +7 -0
- mns_scheduler/trade/sync_position_api.py +39 -6
- mns_scheduler/trade/task/trader_task_service.py +38 -10
- mns_scheduler/trade/tfp/__init__.py +7 -0
- mns_scheduler/trade/tfp/stock_tfp_info_sync.py +56 -0
- mns_scheduler/zb/stock_zb_pool_sync.py +1 -16
- mns_scheduler/zt/high_chg/sync_high_chg_pool_service.py +2 -2
- mns_scheduler/zt/high_chg/sync_high_chg_real_time_quotes_service.py +1 -1
- mns_scheduler/zt/script/__init__.py +1 -1
- mns_scheduler/zt/script/fix_error_deal_day.py +41 -0
- mns_scheduler/zt/script/kcx_high_chg_open_his_data_handle.py +2 -2
- mns_scheduler/zt/script/sync_high_chg_pool_his_data.py +2 -2
- mns_scheduler/zt/script/sync_now_higt_chg_zt.py +8 -7
- mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py +260 -83
- mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py +33 -90
- mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py +27 -13
- mns_scheduler/zz_task/compensation/__init__.py +0 -0
- mns_scheduler/zz_task/compensation/compensate_task.py +161 -0
- mns_scheduler/zz_task/compensation/compensate_task_one_day.py +142 -0
- mns_scheduler/zz_task/data_sync_task.py +197 -103
- {mns_scheduler-1.1.8.4.dist-info → mns_scheduler-1.4.5.7.dist-info}/METADATA +1 -1
- mns_scheduler-1.4.5.7.dist-info/RECORD +176 -0
- {mns_scheduler-1.1.8.4.dist-info → mns_scheduler-1.4.5.7.dist-info}/WHEEL +1 -1
- mns_scheduler/2014-2015-test/2014_2015_chg_statistics.py +0 -87
- mns_scheduler/big_deal/ths_big_deal_sync.py +0 -98
- mns_scheduler/company_info/base/sync_company_base_info_api.py +0 -439
- mns_scheduler/company_info/base/sync_company_hold_info_api.py +0 -40
- mns_scheduler/company_info/remark/company_remark_info_sync.py +0 -46
- mns_scheduler/db/real_time_task_check.py +0 -84
- mns_scheduler/debt/kzz_bond_info_sync.py +0 -33
- mns_scheduler-1.1.8.4.dist-info/RECORD +0 -142
- /mns_scheduler/{2014-2015-test → auto_da_ban}/__init__.py +0 -0
- /mns_scheduler/company_info/{base → common}/__init__.py +0 -0
- /mns_scheduler/{big_deal → company_info/em_stock_info}/__init__.py +0 -0
- /mns_scheduler/company_info/{remark → sync}/__init__.py +0 -0
- /mns_scheduler/{debt → company_info/task}/__init__.py +0 -0
- /mns_scheduler/k_line/{sync → month_week_daily}/__init__.py +0 -0
- {mns_scheduler-1.1.8.4.dist-info → mns_scheduler-1.4.5.7.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,58 @@
|
|
|
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.concept.app.ths_concept_index_app as ths_concept_index_app
|
|
9
|
+
from datetime import datetime
|
|
10
|
+
import mns_common.component.trade_date.trade_date_common_service_api as trade_date_common_service_api
|
|
11
|
+
import mns_common.utils.date_handle_util as date_handle_util
|
|
12
|
+
import mns_common.utils.data_frame_util as data_frame_util
|
|
13
|
+
import pandas as pd
|
|
14
|
+
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# 通过api 获取ths行业和指数
|
|
18
|
+
def get_ths_index_by_api(query_type):
|
|
19
|
+
now_date = datetime.now()
|
|
20
|
+
hour = now_date.hour
|
|
21
|
+
minute = now_date.minute
|
|
22
|
+
now_str_day = now_date.strftime('%Y-%m-%d')
|
|
23
|
+
|
|
24
|
+
is_trade_day = trade_date_common_service_api.is_trade_day(now_str_day)
|
|
25
|
+
|
|
26
|
+
if bool(1 - is_trade_day):
|
|
27
|
+
last_trade_day = trade_date_common_service_api.get_before_trade_date(now_str_day, 1)
|
|
28
|
+
begin_time = date_handle_util.no_slash_date(last_trade_day) + '093000'
|
|
29
|
+
end_time = date_handle_util.no_slash_date(last_trade_day) + '150000'
|
|
30
|
+
else:
|
|
31
|
+
if hour < 9 or (hour == 9 and minute <= 25):
|
|
32
|
+
last_trade_day = trade_date_common_service_api.get_before_trade_date(now_str_day, 2)
|
|
33
|
+
begin_time = date_handle_util.no_slash_date(last_trade_day) + '093000'
|
|
34
|
+
end_time = date_handle_util.no_slash_date(last_trade_day) + '150000'
|
|
35
|
+
else:
|
|
36
|
+
begin_time = date_handle_util.no_slash_date(now_str_day) + '093000'
|
|
37
|
+
if hour == 9:
|
|
38
|
+
hour = '0' + str(hour)
|
|
39
|
+
end_time = date_handle_util.no_slash_date(now_str_day) + str(hour) + str(minute) + '00'
|
|
40
|
+
elif (hour == 11 and minute >= 30) or (hour == 12):
|
|
41
|
+
end_time = date_handle_util.no_slash_date(now_str_day) + '113000'
|
|
42
|
+
elif hour >= 15:
|
|
43
|
+
end_time = date_handle_util.no_slash_date(now_str_day) + '150000'
|
|
44
|
+
else:
|
|
45
|
+
end_time = date_handle_util.no_slash_date(now_str_day) + str(hour) + str(minute) + '00'
|
|
46
|
+
|
|
47
|
+
df = ths_concept_index_app.get_ths_concept_his_info(begin_time, end_time, 500, query_type)
|
|
48
|
+
if data_frame_util.is_empty(df):
|
|
49
|
+
return pd.DataFrame()
|
|
50
|
+
df['turnover'] = round(df['turnover'] / common_service_fun_api.HUNDRED_MILLION, 1)
|
|
51
|
+
df['net_inflow_of_main_force'] = round(df['net_inflow_of_main_force'] / common_service_fun_api.TEN_THOUSAND, 1)
|
|
52
|
+
df.fillna('', inplace=True)
|
|
53
|
+
return df
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
if __name__ == '__main__':
|
|
57
|
+
df_industry = get_ths_index_by_api(1)
|
|
58
|
+
print(df_industry)
|
|
@@ -0,0 +1,68 @@
|
|
|
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_scheduler.industry.ths.ths_industry_index_service as ths_industry_index_service
|
|
9
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
10
|
+
import time
|
|
11
|
+
from datetime import datetime
|
|
12
|
+
from loguru import logger
|
|
13
|
+
import mns_common.utils.data_frame_util as data_frame_util
|
|
14
|
+
import mns_common.api.ths.concept.app.ths_concept_detail_app as ths_concept_detail_app
|
|
15
|
+
|
|
16
|
+
mongodb_util = MongodbUtil('27017')
|
|
17
|
+
import mns_common.constant.db_name_constant as db_name_constant
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# 同步同花顺行业指数
|
|
21
|
+
def sync_ths_industry_index():
|
|
22
|
+
ths_industry_index_df = ths_industry_index_service.get_ths_index_by_api(1)
|
|
23
|
+
if data_frame_util.is_empty(ths_industry_index_df):
|
|
24
|
+
return None
|
|
25
|
+
ths_industry_index_df['_id'] = ths_industry_index_df['block_code']
|
|
26
|
+
ths_industry_index_df = ths_industry_index_df[[
|
|
27
|
+
'_id',
|
|
28
|
+
'turnover',
|
|
29
|
+
'block_market',
|
|
30
|
+
'block_code',
|
|
31
|
+
'block_name',
|
|
32
|
+
'net_inflow_of_main_force',
|
|
33
|
+
'chg'
|
|
34
|
+
]]
|
|
35
|
+
now_date = datetime.now()
|
|
36
|
+
str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
37
|
+
ths_industry_index_df['str_now_date'] = str_now_date
|
|
38
|
+
mongodb_util.save_mongo(ths_industry_index_df, db_name_constant.THS_INDUSTRY_LIST)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def sync_ths_industry_detail():
|
|
42
|
+
ths_industry_list_df = mongodb_util.find_all_data(db_name_constant.THS_INDUSTRY_LIST)
|
|
43
|
+
for industry_one in ths_industry_list_df.itertuples():
|
|
44
|
+
try:
|
|
45
|
+
time.sleep(1)
|
|
46
|
+
now_date = datetime.now()
|
|
47
|
+
str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
48
|
+
|
|
49
|
+
ths_industry_symbol_detail_df = ths_concept_detail_app.get_ths_concept_detail_by_app(
|
|
50
|
+
industry_one.block_code)
|
|
51
|
+
ths_industry_symbol_detail_df = ths_industry_symbol_detail_df.rename(
|
|
52
|
+
columns={"concept_code": 'ths_industry_code',
|
|
53
|
+
"concept_name": 'ths_industry_name',
|
|
54
|
+
})
|
|
55
|
+
if data_frame_util.is_empty(ths_industry_symbol_detail_df):
|
|
56
|
+
continue
|
|
57
|
+
ths_industry_symbol_detail_df['str_now_date'] = str_now_date
|
|
58
|
+
ths_industry_symbol_detail_df['_id'] = ths_industry_symbol_detail_df['symbol']
|
|
59
|
+
mongodb_util.save_mongo(ths_industry_symbol_detail_df, db_name_constant.THS_STOCK_INDUSTRY_DETAIL)
|
|
60
|
+
logger.info("同步ths行业股票详情:{}", industry_one.block_name)
|
|
61
|
+
|
|
62
|
+
except BaseException as e:
|
|
63
|
+
logger.error("同步ths行业股票详情异常:{}", e)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
if __name__ == '__main__':
|
|
67
|
+
sync_ths_industry_index()
|
|
68
|
+
sync_ths_industry_detail()
|
mns_scheduler/irm/__init__.py
CHANGED
|
@@ -2,7 +2,7 @@ import sys
|
|
|
2
2
|
import os
|
|
3
3
|
|
|
4
4
|
file_path = os.path.abspath(__file__)
|
|
5
|
-
end = file_path.index('mns') +
|
|
5
|
+
end = file_path.index('mns') + 17
|
|
6
6
|
project_path = file_path[0:end]
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
# !/usr/bin/env python
|
|
@@ -13,64 +13,17 @@ Desc: 上证e互动-提问与回答
|
|
|
13
13
|
https://sns.sseinfo.com/
|
|
14
14
|
"""
|
|
15
15
|
import warnings
|
|
16
|
-
from functools import lru_cache
|
|
17
|
-
|
|
18
16
|
import pandas as pd
|
|
19
17
|
import requests
|
|
20
18
|
from bs4 import BeautifulSoup
|
|
21
|
-
|
|
22
19
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
23
|
-
import mns_common.constant.db_name_constant as db_name_constant
|
|
24
20
|
|
|
25
21
|
mongodb_util = MongodbUtil('27017')
|
|
26
|
-
from tqdm import tqdm
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
@lru_cache()
|
|
30
|
-
def sync_stock_uid() -> pd.DataFrame:
|
|
31
|
-
"""
|
|
32
|
-
上证e互动-代码ID映射
|
|
33
|
-
https://sns.sseinfo.com/list/company.do
|
|
34
|
-
:return: 代码ID映射
|
|
35
|
-
:rtype: str
|
|
36
|
-
"""
|
|
37
|
-
url = "https://sns.sseinfo.com/allcompany.do"
|
|
38
|
-
data = {
|
|
39
|
-
"code": "0",
|
|
40
|
-
"order": "2",
|
|
41
|
-
"areaId": "0",
|
|
42
|
-
"page": "1",
|
|
43
|
-
}
|
|
44
|
-
uid_list = list()
|
|
45
|
-
code_list = list()
|
|
46
|
-
for page in tqdm(range(1, 74), leave=False):
|
|
47
|
-
data.update({"page": page})
|
|
48
|
-
r = requests.post(url, data=data)
|
|
49
|
-
data_json = r.json()
|
|
50
|
-
soup = BeautifulSoup(data_json["content"], "lxml")
|
|
51
|
-
soup.find_all("a", attrs={"rel": "tag"})
|
|
52
|
-
uid_list.extend(
|
|
53
|
-
[item["uid"] for item in soup.find_all("a", attrs={"rel": "tag"})]
|
|
54
|
-
)
|
|
55
|
-
code_list.extend(
|
|
56
|
-
[
|
|
57
|
-
item.find("img")["src"].split("?")[0].split("/")[-1].split(".")[0]
|
|
58
|
-
for item in soup.find_all("a", attrs={"rel": "tag"})
|
|
59
|
-
]
|
|
60
|
-
)
|
|
61
|
-
code_uid_df = pd.DataFrame()
|
|
62
|
-
code_uid_df['symbol'] = code_list
|
|
63
|
-
code_uid_df['uid'] = uid_list
|
|
64
|
-
code_uid_df['_id'] = uid_list
|
|
65
|
-
return code_uid_df
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
@lru_cache()
|
|
69
|
-
def get_stock_uid() -> pd.DataFrame:
|
|
70
|
-
return mongodb_util.find_all_data(db_name_constant.SSE_INFO_UID)
|
|
71
22
|
|
|
72
23
|
|
|
73
|
-
def stock_sns_sse_info(
|
|
24
|
+
def stock_sns_sse_info(org_ask_id,
|
|
25
|
+
page,
|
|
26
|
+
page_size) -> pd.DataFrame:
|
|
74
27
|
"""
|
|
75
28
|
上证e互动-提问与回答
|
|
76
29
|
https://sns.sseinfo.com/company.do?uid=65
|
|
@@ -80,16 +33,13 @@ def stock_sns_sse_info(symbol: str = "603119") -> pd.DataFrame:
|
|
|
80
33
|
:rtype: str
|
|
81
34
|
"""
|
|
82
35
|
|
|
83
|
-
stock_uid_df = get_stock_uid()
|
|
84
|
-
stock_uid_df = stock_uid_df.loc[stock_uid_df['symbol'] == symbol]
|
|
85
|
-
uid = list(stock_uid_df['uid'])[0]
|
|
86
36
|
url = "https://sns.sseinfo.com/ajax/userfeeds.do"
|
|
87
37
|
params = {
|
|
88
38
|
"typeCode": "company",
|
|
89
39
|
"type": "11",
|
|
90
|
-
"pageSize":
|
|
91
|
-
"uid":
|
|
92
|
-
"page":
|
|
40
|
+
"pageSize": str(page_size),
|
|
41
|
+
"uid": org_ask_id,
|
|
42
|
+
"page": str(page),
|
|
93
43
|
}
|
|
94
44
|
big_df = pd.DataFrame()
|
|
95
45
|
page = 1
|
|
@@ -164,5 +114,5 @@ def stock_sns_sse_info(symbol: str = "603119") -> pd.DataFrame:
|
|
|
164
114
|
|
|
165
115
|
|
|
166
116
|
if __name__ == "__main__":
|
|
167
|
-
stock_sns_sse_info_df = stock_sns_sse_info(
|
|
117
|
+
stock_sns_sse_info_df = stock_sns_sse_info('308', '2', '100')
|
|
168
118
|
print(stock_sns_sse_info_df)
|
|
@@ -2,7 +2,7 @@ import sys
|
|
|
2
2
|
import os
|
|
3
3
|
|
|
4
4
|
file_path = os.path.abspath(__file__)
|
|
5
|
-
end = file_path.index('mns') +
|
|
5
|
+
end = file_path.index('mns') + 17
|
|
6
6
|
project_path = file_path[0:end]
|
|
7
7
|
sys.path.append(project_path)
|
|
8
8
|
# !/usr/bin/env python
|
|
@@ -15,27 +15,18 @@ https://irm.cninfo.com.cn/
|
|
|
15
15
|
|
|
16
16
|
import pandas as pd
|
|
17
17
|
import requests
|
|
18
|
+
import time
|
|
18
19
|
|
|
19
20
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
params = {"_t": "1691144074"}
|
|
29
|
-
data = {"keyWord": symbol}
|
|
30
|
-
r = requests.post(url, params=params, data=data)
|
|
31
|
-
data_json = r.json()
|
|
32
|
-
org_id = data_json["data"][0]["secid"]
|
|
33
|
-
return org_id
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
# 获取股票所有问题
|
|
21
|
+
# 获取单个股票所有问题
|
|
22
|
+
# todo https://irm.cninfo.com.cn/ircs/company/companyDetail?stockcode=000002&orgId=gssz0000002
|
|
23
|
+
def stock_irm_cninfo(symbol,
|
|
24
|
+
org_ask_id,
|
|
25
|
+
page,
|
|
26
|
+
page_size) -> pd.DataFrame:
|
|
27
|
+
# 毫秒级时间戳字符串
|
|
28
|
+
current_ms_timestamp_str = str(int(time.time() * 1000))
|
|
37
29
|
|
|
38
|
-
def stock_irm_cninfo(symbol: str = "002594") -> pd.DataFrame:
|
|
39
30
|
"""
|
|
40
31
|
互动易-提问
|
|
41
32
|
https://irm.cninfo.com.cn/ircs/question/questionDetail?questionId=1515236357817618432
|
|
@@ -46,19 +37,17 @@ def stock_irm_cninfo(symbol: str = "002594") -> pd.DataFrame:
|
|
|
46
37
|
"""
|
|
47
38
|
url = "https://irm.cninfo.com.cn/newircs/company/question"
|
|
48
39
|
params = {
|
|
49
|
-
"_t":
|
|
40
|
+
"_t": current_ms_timestamp_str,
|
|
50
41
|
"stockcode": symbol,
|
|
51
|
-
"orgId":
|
|
52
|
-
"pageSize":
|
|
53
|
-
"pageNum":
|
|
42
|
+
"orgId": org_ask_id,
|
|
43
|
+
"pageSize": page_size,
|
|
44
|
+
"pageNum": page,
|
|
54
45
|
"keyWord": "",
|
|
55
46
|
"startDay": "",
|
|
56
47
|
"endDay": "",
|
|
57
48
|
}
|
|
58
49
|
|
|
59
50
|
big_df = pd.DataFrame()
|
|
60
|
-
page = 1
|
|
61
|
-
params.update({"pageNum": page})
|
|
62
51
|
r = requests.post(url, params=params)
|
|
63
52
|
data_json = r.json()
|
|
64
53
|
temp_df = pd.DataFrame(data_json["rows"])
|
|
@@ -195,7 +184,7 @@ def stock_irm_ans_cninfo(symbol: str = "1513586704097333248") -> pd.DataFrame:
|
|
|
195
184
|
|
|
196
185
|
|
|
197
186
|
if __name__ == "__main__":
|
|
198
|
-
stock_irm_cninfo_df = stock_irm_cninfo(symbol="
|
|
187
|
+
stock_irm_cninfo_df = stock_irm_cninfo(symbol="000002", org_ask_id='gssz0000002', page=2, pageSize=100)
|
|
199
188
|
print(stock_irm_cninfo_df)
|
|
200
189
|
|
|
201
190
|
stock_irm_ans_cninfo_df = stock_irm_ans_cninfo(symbol="1495108801386602496")
|
|
@@ -2,34 +2,37 @@ import sys
|
|
|
2
2
|
import os
|
|
3
3
|
|
|
4
4
|
file_path = os.path.abspath(__file__)
|
|
5
|
-
end = file_path.index('mns') +
|
|
5
|
+
end = file_path.index('mns') + 17
|
|
6
6
|
project_path = file_path[0:end]
|
|
7
7
|
sys.path.append(project_path)
|
|
8
|
-
|
|
8
|
+
|
|
9
9
|
import mns_common.utils.data_frame_util as data_frame_util
|
|
10
10
|
import pandas as pd
|
|
11
|
-
import mns_common.
|
|
11
|
+
import mns_common.component.em.em_stock_info_api as em_stock_info_api
|
|
12
12
|
import mns_common.component.company.company_common_service_api as company_common_service_api
|
|
13
13
|
from loguru import logger
|
|
14
14
|
from datetime import datetime
|
|
15
15
|
import time
|
|
16
16
|
import mns_common.utils.date_handle_util as date_handle_util
|
|
17
|
-
|
|
18
17
|
import mns_common.constant.db_name_constant as db_name_constant
|
|
19
18
|
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
20
19
|
import mns_scheduler.irm.api.sh_stock_sns_sse_info_api as sh_stock_sns_sse_info_api
|
|
21
20
|
import mns_scheduler.irm.api.sz_stock_sns_sse_info_api as sz_stock_sns_sse_info_api
|
|
22
|
-
|
|
23
21
|
from mns_common.db.MongodbUtil import MongodbUtil
|
|
22
|
+
import mns_scheduler.irm.stock_question_id_service as stock_question_id_service
|
|
24
23
|
|
|
25
24
|
mongodb_util = MongodbUtil('27017')
|
|
26
25
|
|
|
27
26
|
|
|
28
|
-
# 获取股票提问 互动易-提问 深交所
|
|
27
|
+
# 获取股票提问 互动易-提问 todo 深交所 可以拉取未回答的,但是最拉到最近三个月
|
|
29
28
|
def get_stock_irm_cninfo_sz_api(symbol):
|
|
30
29
|
try:
|
|
30
|
+
org_ask_id = stock_question_id_service.get_one_sz_symbol_org_id(symbol)
|
|
31
31
|
# 获取一页
|
|
32
|
-
stock_irm_cninfo_df = sz_stock_sns_sse_info_api.stock_irm_cninfo(symbol
|
|
32
|
+
stock_irm_cninfo_df = sz_stock_sns_sse_info_api.stock_irm_cninfo(symbol,
|
|
33
|
+
org_ask_id,
|
|
34
|
+
1,
|
|
35
|
+
100)
|
|
33
36
|
# 获取全页
|
|
34
37
|
# stock_irm_cninfo_df = ak.stock_irm_cninfo(symbol)
|
|
35
38
|
except Exception as e:
|
|
@@ -66,11 +69,15 @@ def get_stock_irm_cninfo_sz_api(symbol):
|
|
|
66
69
|
return stock_irm_cninfo_df
|
|
67
70
|
|
|
68
71
|
|
|
69
|
-
# 获取股票提问 互动易-提问 上交所
|
|
72
|
+
# 获取股票提问 互动易-提问 todo 上交所
|
|
70
73
|
def get_stock_irm_cninfo_sh_api(symbol):
|
|
71
74
|
try:
|
|
72
75
|
# 获取一页
|
|
73
|
-
|
|
76
|
+
org_ask_id = stock_question_id_service.get_one_sh_symbol_org_id(symbol)
|
|
77
|
+
|
|
78
|
+
stock_sns_sse_info_df = sh_stock_sns_sse_info_api.stock_sns_sse_info(org_ask_id,
|
|
79
|
+
1,
|
|
80
|
+
100)
|
|
74
81
|
# 获取全页
|
|
75
82
|
# stock_sns_sse_info_df = ak.stock_sns_sseinfo(symbol)
|
|
76
83
|
except Exception as e:
|
|
@@ -101,10 +108,21 @@ def get_stock_irm_cninfo_sh_api(symbol):
|
|
|
101
108
|
"answer_time",
|
|
102
109
|
"questioner",
|
|
103
110
|
"source"]]
|
|
111
|
+
now_date = datetime.now()
|
|
112
|
+
str_now_date = now_date.strftime('%Y-%m-%d %H:%M:%S')
|
|
113
|
+
stock_sns_sse_info_df.loc[
|
|
114
|
+
stock_sns_sse_info_df['answer_time'].str.contains('小时前', na=False), 'answer_time'] = str_now_date
|
|
115
|
+
stock_sns_sse_info_df.loc[
|
|
116
|
+
stock_sns_sse_info_df['answer_time'].str.contains('分钟前', na=False), 'answer_time'] = str_now_date
|
|
117
|
+
stock_sns_sse_info_df.loc[
|
|
118
|
+
stock_sns_sse_info_df['question_time'].str.contains('小时前', na=False), 'question_time'] = str_now_date
|
|
119
|
+
stock_sns_sse_info_df.loc[
|
|
120
|
+
stock_sns_sse_info_df['question_time'].str.contains('分钟前', na=False), 'answer_time'] = str_now_date
|
|
104
121
|
|
|
105
122
|
return stock_sns_sse_info_df
|
|
106
123
|
|
|
107
124
|
|
|
125
|
+
# 格式化 时间
|
|
108
126
|
def replace_date_format(date_str):
|
|
109
127
|
now_date = datetime.now()
|
|
110
128
|
str_day = now_date.strftime('%Y-%m-%d')
|
|
@@ -113,26 +131,20 @@ def replace_date_format(date_str):
|
|
|
113
131
|
return date_str.replace('年', '-').replace('月', '-').replace('日', '').replace('昨天', last_day)
|
|
114
132
|
|
|
115
133
|
|
|
116
|
-
def save_sh_stock_uid():
|
|
117
|
-
code_uid_df = sh_stock_sns_sse_info_api.sync_stock_uid()
|
|
118
|
-
mongodb_util.save_mongo(code_uid_df, db_name_constant.SSE_INFO_UID)
|
|
119
|
-
|
|
120
|
-
|
|
121
134
|
# 同步所有互动问题
|
|
122
|
-
def
|
|
123
|
-
|
|
124
|
-
save_sh_stock_uid()
|
|
125
|
-
|
|
126
|
-
real_time_quotes_all_stocks = east_money_stock_api.get_real_time_quotes_all_stocks()
|
|
135
|
+
def sync_symbols_interactive_questions(symbol_list):
|
|
136
|
+
real_time_quotes_all_stocks = em_stock_info_api.get_a_stock_info()
|
|
127
137
|
de_list_company_symbols = company_common_service_api.get_de_list_company()
|
|
128
138
|
real_time_quotes_all_stocks = real_time_quotes_all_stocks.loc[
|
|
129
139
|
~(real_time_quotes_all_stocks['symbol'].isin(de_list_company_symbols))]
|
|
130
140
|
real_time_quotes_all_stocks = common_service_fun_api.classify_symbol(real_time_quotes_all_stocks)
|
|
131
|
-
real_time_quotes_all_stocks = real_time_quotes_all_stocks.sort_values(by=['
|
|
141
|
+
real_time_quotes_all_stocks = real_time_quotes_all_stocks.sort_values(by=['amount'], ascending=False)
|
|
132
142
|
fail_symbol_list = []
|
|
133
|
-
if symbol_list
|
|
143
|
+
if len(symbol_list) != 0:
|
|
134
144
|
real_time_quotes_all_stocks = real_time_quotes_all_stocks.loc[
|
|
135
145
|
real_time_quotes_all_stocks['symbol'].isin(symbol_list)]
|
|
146
|
+
|
|
147
|
+
real_time_quotes_all_stocks = real_time_quotes_all_stocks.reset_index(drop=True)
|
|
136
148
|
for stock_one in real_time_quotes_all_stocks.itertuples():
|
|
137
149
|
try:
|
|
138
150
|
now_date = datetime.now()
|
|
@@ -149,18 +161,13 @@ def sync_all_interactive_questions(symbol_list):
|
|
|
149
161
|
|
|
150
162
|
else:
|
|
151
163
|
continue
|
|
164
|
+
if data_frame_util.is_empty(stock_irm_cninfo_df):
|
|
165
|
+
continue
|
|
152
166
|
stock_irm_cninfo_df['sync_time'] = str_now_date
|
|
153
167
|
stock_irm_cninfo_df['str_day'] = str_day
|
|
154
168
|
stock_irm_cninfo_df.drop_duplicates('_id', keep='last', inplace=True)
|
|
155
169
|
stock_irm_cninfo_df.fillna("", inplace=True)
|
|
156
|
-
|
|
157
|
-
stock_irm_cninfo_df['answer_time'].str.contains('小时前', na=False), 'answer_time'] = str_now_date
|
|
158
|
-
stock_irm_cninfo_df.loc[
|
|
159
|
-
stock_irm_cninfo_df['answer_time'].str.contains('分钟前', na=False), 'answer_time'] = str_now_date
|
|
160
|
-
stock_irm_cninfo_df.loc[
|
|
161
|
-
stock_irm_cninfo_df['question_time'].str.contains('小时前', na=False), 'question_time'] = str_now_date
|
|
162
|
-
stock_irm_cninfo_df.loc[
|
|
163
|
-
stock_irm_cninfo_df['question_time'].str.contains('分钟前', na=False), 'answer_time'] = str_now_date
|
|
170
|
+
|
|
164
171
|
stock_irm_cninfo_df['valid'] = True
|
|
165
172
|
stock_irm_cninfo_df['answer_content'].fillna('')
|
|
166
173
|
# 保存新增数据
|
|
@@ -172,6 +179,7 @@ def sync_all_interactive_questions(symbol_list):
|
|
|
172
179
|
logger.error("同步互动问题出现异常:{},{}", stock_one.symbol, e)
|
|
173
180
|
|
|
174
181
|
|
|
182
|
+
# 保存新增回答数据
|
|
175
183
|
def save_new_data(stock_irm_cninfo_df):
|
|
176
184
|
if data_frame_util.is_empty(stock_irm_cninfo_df):
|
|
177
185
|
return None
|
|
@@ -191,6 +199,10 @@ def save_new_data(stock_irm_cninfo_df):
|
|
|
191
199
|
|
|
192
200
|
|
|
193
201
|
if __name__ == '__main__':
|
|
194
|
-
|
|
202
|
+
get_stock_irm_cninfo_sz_api('000002')
|
|
203
|
+
sync_symbols_interactive_questions([])
|
|
204
|
+
# sync_symbols_interactive_questions([])
|
|
205
|
+
# get_stock_irm_cninfo_sh_api('688778')
|
|
206
|
+
# fail_symbol_list_01 = ['000638', '002886', '688778', '688766', '688733', '688778', '688793', '688787']
|
|
195
207
|
# get_stock_irm_cninfo_sh_api('603633')
|
|
196
|
-
|
|
208
|
+
# sync_symbols_interactive_questions(None)
|
|
@@ -0,0 +1,169 @@
|
|
|
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
|
+
"""
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from functools import lru_cache
|
|
13
|
+
import pandas as pd
|
|
14
|
+
import requests
|
|
15
|
+
from bs4 import BeautifulSoup
|
|
16
|
+
from mns_common.db.MongodbUtil import MongodbUtil
|
|
17
|
+
import mns_common.constant.db_name_constant as db_name_constant
|
|
18
|
+
import mns_common.component.common_service_fun_api as common_service_fun_api
|
|
19
|
+
import mns_common.component.em.em_stock_info_api as em_stock_info_api
|
|
20
|
+
import mns_common.component.company.company_common_service_api as company_common_service_api
|
|
21
|
+
from loguru import logger
|
|
22
|
+
import mns_common.utils.data_frame_util as data_frame_util
|
|
23
|
+
from datetime import datetime, timedelta
|
|
24
|
+
|
|
25
|
+
mongodb_util = MongodbUtil('27017')
|
|
26
|
+
from tqdm import tqdm
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# 同步所有映射表
|
|
30
|
+
@lru_cache()
|
|
31
|
+
def sync_stock_uid() -> pd.DataFrame:
|
|
32
|
+
"""
|
|
33
|
+
上证e互动-代码ID映射
|
|
34
|
+
https://sns.sseinfo.com/list/company.do
|
|
35
|
+
:return: 代码ID映射
|
|
36
|
+
:rtype: str
|
|
37
|
+
"""
|
|
38
|
+
url = "https://sns.sseinfo.com/allcompany.do"
|
|
39
|
+
data = {
|
|
40
|
+
"code": "0",
|
|
41
|
+
"order": "2",
|
|
42
|
+
"areaId": "0",
|
|
43
|
+
"page": "1",
|
|
44
|
+
}
|
|
45
|
+
uid_list = list()
|
|
46
|
+
code_list = list()
|
|
47
|
+
for page in tqdm(range(1, 74), leave=False):
|
|
48
|
+
data.update({"page": page})
|
|
49
|
+
r = requests.post(url, data=data)
|
|
50
|
+
data_json = r.json()
|
|
51
|
+
soup = BeautifulSoup(data_json["content"], "lxml")
|
|
52
|
+
soup.find_all("a", attrs={"rel": "tag"})
|
|
53
|
+
uid_list.extend(
|
|
54
|
+
[item["uid"] for item in soup.find_all("a", attrs={"rel": "tag"})]
|
|
55
|
+
)
|
|
56
|
+
code_list.extend(
|
|
57
|
+
[
|
|
58
|
+
item.find("img")["src"].split("?")[0].split("/")[-1].split(".")[0]
|
|
59
|
+
for item in soup.find_all("a", attrs={"rel": "tag"})
|
|
60
|
+
]
|
|
61
|
+
)
|
|
62
|
+
code_uid_df = pd.DataFrame()
|
|
63
|
+
code_uid_df['symbol'] = code_list
|
|
64
|
+
code_uid_df['uid'] = uid_list
|
|
65
|
+
code_uid_df['_id'] = uid_list
|
|
66
|
+
return code_uid_df
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
# 获取上海问答id
|
|
70
|
+
@lru_cache()
|
|
71
|
+
def get_sh_stock_all_uid() -> pd.DataFrame:
|
|
72
|
+
return mongodb_util.find_all_data(db_name_constant.SH_INFO_UID)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
# 获取深圳问答id
|
|
76
|
+
@lru_cache()
|
|
77
|
+
def get_sz_stock_all_uid() -> pd.DataFrame:
|
|
78
|
+
return mongodb_util.find_all_data(db_name_constant.SZ_INFO_UID)
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
# 获取深圳互动回答单个ID
|
|
82
|
+
def get_one_sz_symbol_org_id(symbol):
|
|
83
|
+
sz_info_uid_df = get_sz_stock_all_uid()
|
|
84
|
+
sz_info_uid_one_df = sz_info_uid_df.loc[sz_info_uid_df['symbol'] == symbol]
|
|
85
|
+
if data_frame_util.is_not_empty(sz_info_uid_one_df):
|
|
86
|
+
return list(sz_info_uid_one_df['uid'])[0]
|
|
87
|
+
else:
|
|
88
|
+
try:
|
|
89
|
+
return fetch_sz_org_id(symbol)
|
|
90
|
+
except BaseException as e:
|
|
91
|
+
logger.error("获取组织代码异常:{},{}", symbol, e)
|
|
92
|
+
return '0'
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
# 获取上海互动回答单个ID
|
|
96
|
+
def get_one_sh_symbol_org_id(symbol):
|
|
97
|
+
sh_info_uid_df = get_sh_stock_all_uid()
|
|
98
|
+
sh_info_uid_one_df = sh_info_uid_df.loc[sh_info_uid_df['symbol'] == symbol]
|
|
99
|
+
if data_frame_util.is_not_empty(sh_info_uid_one_df):
|
|
100
|
+
return list(sh_info_uid_one_df['uid'])[0]
|
|
101
|
+
else:
|
|
102
|
+
return '0'
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
# 深圳股票-互动易-组织代码 单个获取
|
|
106
|
+
def fetch_sz_org_id(symbol: str = "000001") -> str:
|
|
107
|
+
"""
|
|
108
|
+
股票-互动易-组织代码
|
|
109
|
+
https://irm.cninfo.com.cn/
|
|
110
|
+
:return: 组织代码
|
|
111
|
+
:rtype: str
|
|
112
|
+
"""
|
|
113
|
+
url = "https://irm.cninfo.com.cn/newircs/index/queryKeyboardInfo"
|
|
114
|
+
params = {"_t": "1691144074"}
|
|
115
|
+
data = {"keyWord": symbol}
|
|
116
|
+
r = requests.post(url, params=params, data=data)
|
|
117
|
+
data_json = r.json()
|
|
118
|
+
org_id = data_json["data"][0]["secid"]
|
|
119
|
+
return org_id
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
# 同步上证互动uid
|
|
123
|
+
def sync_sh_stock_uid():
|
|
124
|
+
code_uid_df = sync_stock_uid()
|
|
125
|
+
mongodb_util.save_mongo(code_uid_df, db_name_constant.SH_INFO_UID)
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
# 同步深圳互动uid
|
|
129
|
+
def sync_sz_stock_uid(symbol_list):
|
|
130
|
+
real_time_quotes_all_stocks = em_stock_info_api.get_a_stock_info()
|
|
131
|
+
de_list_company_symbols = company_common_service_api.get_de_list_company()
|
|
132
|
+
real_time_quotes_all_stocks = real_time_quotes_all_stocks.loc[
|
|
133
|
+
~(real_time_quotes_all_stocks['symbol'].isin(de_list_company_symbols))]
|
|
134
|
+
real_time_quotes_all_stocks = common_service_fun_api.classify_symbol(real_time_quotes_all_stocks)
|
|
135
|
+
|
|
136
|
+
real_time_quotes_all_stocks = real_time_quotes_all_stocks.loc[
|
|
137
|
+
real_time_quotes_all_stocks['classification'].isin(['S', 'C'])]
|
|
138
|
+
if len(symbol_list) != 0:
|
|
139
|
+
real_time_quotes_all_stocks = real_time_quotes_all_stocks.loc[
|
|
140
|
+
real_time_quotes_all_stocks['symbol'].isin(symbol_list)]
|
|
141
|
+
else:
|
|
142
|
+
# 获取当前时间
|
|
143
|
+
now_date = datetime.now()
|
|
144
|
+
# 计算前7天的时间(timedelta 用于表示时间间隔)
|
|
145
|
+
seven_days_ago = now_date - timedelta(days=30)
|
|
146
|
+
str_day_number = int(seven_days_ago.strftime('%Y%m%d'))
|
|
147
|
+
real_time_quotes_all_stocks = real_time_quotes_all_stocks.loc[
|
|
148
|
+
(real_time_quotes_all_stocks['list_date'] >= str_day_number) | (
|
|
149
|
+
real_time_quotes_all_stocks['list_date'] == 19890604)]
|
|
150
|
+
for stock_one in real_time_quotes_all_stocks.itertuples():
|
|
151
|
+
try:
|
|
152
|
+
symbol = stock_one.symbol
|
|
153
|
+
uid = fetch_sz_org_id(symbol)
|
|
154
|
+
result_dict = {'_id': symbol, 'symbol': symbol, 'uid': uid}
|
|
155
|
+
result_dict_df = pd.DataFrame(result_dict, index=[1])
|
|
156
|
+
mongodb_util.save_mongo(result_dict_df, db_name_constant.SZ_INFO_UID)
|
|
157
|
+
logger.info("同步SZ互动ID:{}", stock_one.symbol)
|
|
158
|
+
except Exception as e:
|
|
159
|
+
logger.error("同步SZ互动ID异常:{},{}", stock_one.symbol, e)
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
if __name__ == '__main__':
|
|
163
|
+
sz_symbol_org_id = get_one_sz_symbol_org_id('300085')
|
|
164
|
+
sh_symbol_org_id = get_one_sh_symbol_org_id('600000')
|
|
165
|
+
print(sz_symbol_org_id)
|
|
166
|
+
print(sh_symbol_org_id)
|
|
167
|
+
sync_sz_stock_uid([])
|
|
168
|
+
# sync_sz_stock_uid([])
|
|
169
|
+
# sync_sh_stock_uid([])
|