mns-scheduler 1.2.9.6__py3-none-any.whl → 1.4.2.5__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.

Files changed (135) hide show
  1. mns_scheduler/company_info/announce/__init__.py +1 -1
  2. mns_scheduler/company_info/announce/company_announce_sync_service.py +11 -6
  3. mns_scheduler/company_info/base/__init__.py +1 -1
  4. mns_scheduler/company_info/base/sync_company_base_info_api.py +164 -74
  5. mns_scheduler/company_info/base/sync_company_hold_info_api.py +3 -6
  6. mns_scheduler/company_info/base/sync_company_product_area_industry.py +161 -0
  7. mns_scheduler/company_info/clean/__init__.py +1 -1
  8. mns_scheduler/company_info/clean/company_info_clean_api.py +2 -2
  9. mns_scheduler/company_info/constant/__init__.py +1 -1
  10. mns_scheduler/company_info/constant/company_constant_data.py +4 -0
  11. mns_scheduler/company_info/de_list_stock/__init__.py +1 -1
  12. mns_scheduler/company_info/de_list_stock/de_list_stock_service.py +1 -1
  13. mns_scheduler/company_info/em_stock_info/__init__.py +1 -1
  14. mns_scheduler/company_info/em_stock_info/sync_em_stock_info_sync.py +44 -33
  15. mns_scheduler/company_info/remark/__init__.py +1 -1
  16. mns_scheduler/company_info/remark/company_remark_info_sync.py +1 -1
  17. mns_scheduler/concept/clean/kpl_concept_clean_api.py +1 -1
  18. mns_scheduler/concept/clean/ths_concept_clean_api.py +3 -6
  19. mns_scheduler/db/script/__init__.py +1 -1
  20. mns_scheduler/db/script/col_move_script.py +1 -1
  21. mns_scheduler/db/script/db_move/__init__.py +1 -1
  22. mns_scheduler/db/script/db_move/col_move_one_service.py +1 -1
  23. mns_scheduler/db/script/sync/__init__.py +1 -1
  24. mns_scheduler/db/script/sync/remote_data_sync_to_local.py +39 -9
  25. mns_scheduler/db/script/sync/sync_hui_ce_test_data.py +35 -24
  26. mns_scheduler/db/script/sync/sync_hui_ce_test_data_01.py +23 -23
  27. mns_scheduler/db/script/update/__init__.py +1 -1
  28. mns_scheduler/db/script/update/update_col_field.py +1 -1
  29. mns_scheduler/finance/__init__.py +1 -1
  30. mns_scheduler/finance/{em_financial_asset_liability_sync_service_api.py → em/em_financial_asset_liability_sync_service_api.py} +2 -2
  31. mns_scheduler/finance/{em_financial_profit_sync_service_api.py → em/em_financial_profit_sync_service_api.py} +6 -4
  32. mns_scheduler/finance/{finance_common_api.py → em/finance_common_api.py} +1 -1
  33. mns_scheduler/finance/{sync_financial_report_service_api.py → sync_financial_report_service_task.py} +80 -27
  34. mns_scheduler/finance/xue_qiu/down_load_xueqiu_report_api.py +77 -0
  35. mns_scheduler/finance/xue_qiu/sync_xue_qiu_fiance_data.py +161 -0
  36. mns_scheduler/hk/__init__.py +1 -1
  37. mns_scheduler/hk/hk_company_info_sync_service_api.py +2 -1
  38. mns_scheduler/hk/hk_industry_info_sync_service_api.py +1 -1
  39. mns_scheduler/industry/__init__.py +1 -1
  40. mns_scheduler/industry/ths/__init__.py +1 -1
  41. mns_scheduler/industry/ths/ths_industry_index_service.py +1 -1
  42. mns_scheduler/industry/ths/ths_industry_sync_service.py +1 -1
  43. mns_scheduler/irm/__init__.py +1 -1
  44. mns_scheduler/irm/api/__init__.py +1 -1
  45. mns_scheduler/irm/api/sh_stock_sns_sse_info_api.py +1 -1
  46. mns_scheduler/irm/api/sz_stock_sns_sse_info_api.py +1 -1
  47. mns_scheduler/irm/stock_irm_cninfo_service.py +10 -6
  48. mns_scheduler/k_line/clean/daily/__init__.py +1 -1
  49. mns_scheduler/k_line/clean/daily/daily_k_line_clean_common_service.py +1 -1
  50. mns_scheduler/k_line/clean/daily/daily_k_line_service.py +1 -1
  51. mns_scheduler/k_line/clean/k_line_info_clean_task.py +7 -2
  52. mns_scheduler/k_line/clean/week_month/__init__.py +1 -1
  53. mns_scheduler/k_line/clean/week_month/normal_week_month_k_line_service.py +1 -1
  54. mns_scheduler/k_line/clean/week_month/sub_new_week_month_k_line_service.py +1 -1
  55. mns_scheduler/{extraIncome/one_minute → k_line}/common/__init__.py +1 -1
  56. mns_scheduler/k_line/common/k_line_common_api.py +188 -0
  57. mns_scheduler/k_line/hot_stocks/__init__.py +1 -1
  58. mns_scheduler/k_line/hot_stocks/recent_hot_stocks_clean_service.py +1 -1
  59. mns_scheduler/k_line/month_week_daily/bfq_k_line_sync.py +12 -32
  60. mns_scheduler/k_line/month_week_daily/daily_week_month_line_sync.py +6 -13
  61. mns_scheduler/k_line/sync_status/k_line_sync_status_check.py +54 -0
  62. mns_scheduler/k_line/test/__init__.py +1 -1
  63. mns_scheduler/k_line/test/k_line_info_clean_his_data.py +1 -1
  64. mns_scheduler/k_line/year_quarter/__init__.py +1 -1
  65. mns_scheduler/k_line/year_quarter/year_quarter_line_sync.py +17 -10
  66. mns_scheduler/kpl/selection/symbol/sync_best_choose_symbol.py +1 -2
  67. mns_scheduler/kpl/selection/symbol/sync_kpl_concept_symbol_choose_reason_api.py +108 -0
  68. mns_scheduler/kpl/selection/total/sync_kpl_best_total_sync_api.py +5 -0
  69. mns_scheduler/lhb/__init__.py +1 -1
  70. mns_scheduler/lhb/stock_lhb_sync_service.py +1 -1
  71. mns_scheduler/open/__init__.py +1 -1
  72. mns_scheduler/open/sync_one_day_open_data_to_db_service.py +1 -1
  73. mns_scheduler/risk/__init__.py +1 -1
  74. mns_scheduler/risk/compliance/undisclosed_annual_report_api.py +4 -2
  75. mns_scheduler/risk/financial/annual_report_audit_check_api.py +1 -1
  76. mns_scheduler/risk/financial/profit_income_check_api.py +1 -2
  77. mns_scheduler/risk/financial_report_risk_check_api.py +1 -1
  78. mns_scheduler/risk/major_violations/register_and_investigate_stock_sync_api.py +1 -1
  79. mns_scheduler/risk/self/wei_pan_stock_api.py +1 -1
  80. mns_scheduler/risk/test/__init__.py +1 -1
  81. mns_scheduler/risk/test/fix_blask_list.py +2 -2
  82. mns_scheduler/risk/transactions/transactions_check_api.py +2 -2
  83. mns_scheduler/self_choose/__init__.py +1 -1
  84. mns_scheduler/self_choose/ths_self_choose_service.py +37 -28
  85. mns_scheduler/trade/auto_login/trader_auto_service.py +6 -4
  86. mns_scheduler/trade/auto_sell_service_api.py +2 -2
  87. mns_scheduler/trade/balance/__init__.py +1 -1
  88. mns_scheduler/trade/balance/ths_account_balance_service.py +1 -1
  89. mns_scheduler/trade/sync_position_api.py +1 -1
  90. mns_scheduler/trade/task/trader_task_service.py +26 -9
  91. mns_scheduler/trade/tfp/__init__.py +1 -1
  92. mns_scheduler/trade/tfp/stock_tfp_info_sync.py +5 -2
  93. mns_scheduler/zt/script/__init__.py +1 -1
  94. mns_scheduler/zt/script/fix_error_deal_day.py +1 -1
  95. mns_scheduler/zt/script/kcx_high_chg_open_his_data_handle.py +2 -2
  96. mns_scheduler/zt/script/sync_high_chg_pool_his_data.py +2 -2
  97. mns_scheduler/zt/script/sync_now_higt_chg_zt.py +5 -4
  98. mns_scheduler/zt/zt_pool/em_zt_pool_sync_api.py +44 -17
  99. mns_scheduler/zt/zt_pool/ths_zt_pool_sync_api.py +33 -80
  100. mns_scheduler/zt/zt_pool/update_null_zt_reason_api.py +18 -5
  101. mns_scheduler/zz_task/compensation/__init__.py +0 -0
  102. mns_scheduler/zz_task/compensation/compensate_task.py +161 -0
  103. mns_scheduler/zz_task/compensation/compensate_task_one_day.py +142 -0
  104. mns_scheduler/zz_task/data_sync_task.py +64 -60
  105. {mns_scheduler-1.2.9.6.dist-info → mns_scheduler-1.4.2.5.dist-info}/METADATA +1 -1
  106. mns_scheduler-1.4.2.5.dist-info/RECORD +169 -0
  107. mns_scheduler/big_deal/__init__.py +0 -7
  108. mns_scheduler/big_deal/ths_big_deal_sync.py +0 -98
  109. mns_scheduler/debt/kzz_bond_info_sync.py +0 -33
  110. mns_scheduler/extraIncome/one_minute/common/db_create_index.py +0 -9
  111. mns_scheduler/extraIncome/one_minute/common/symbol_handle_util.py +0 -41
  112. mns_scheduler/extraIncome/one_minute/etf/__init__.py +0 -7
  113. mns_scheduler/extraIncome/one_minute/etf/etf_one_minute_sync_task.py +0 -87
  114. mns_scheduler/extraIncome/one_minute/index/__init__.py +0 -7
  115. mns_scheduler/extraIncome/one_minute/index/main_index_sync_task.py +0 -74
  116. mns_scheduler/extraIncome/one_minute/kzz/__init__.py +0 -7
  117. mns_scheduler/extraIncome/one_minute/kzz/kzz_one_minute_sync_task.py +0 -87
  118. mns_scheduler/extraIncome/one_minute/one_minute_sync_task.py +0 -34
  119. mns_scheduler/extraIncome/one_minute/stock/__init__.py +0 -7
  120. mns_scheduler/extraIncome/one_minute/stock/stock_one_minute_sync_task.py +0 -89
  121. mns_scheduler/extraIncome/temp/__init__.py +0 -7
  122. mns_scheduler/extraIncome/temp/tu_share_data_etf_sync.py +0 -103
  123. mns_scheduler/extraIncome/temp/tu_share_data_kzz_sync.py +0 -113
  124. mns_scheduler/extraIncome/temp/tu_share_data_stock_sync.py +0 -137
  125. mns_scheduler/extraIncome/temp/tu_share_zhi_shu_sync_api.py +0 -107
  126. mns_scheduler/us/__init__.py +0 -7
  127. mns_scheduler/us/baidu_yun_pan_handle_service.py +0 -131
  128. mns_scheduler/us/k_line.py +0 -91
  129. mns_scheduler/us/us_company_info_sync_service_api.py +0 -39
  130. mns_scheduler-1.2.9.6.dist-info/RECORD +0 -183
  131. /mns_scheduler/{debt → finance/em}/__init__.py +0 -0
  132. /mns_scheduler/{extraIncome → finance/xue_qiu}/__init__.py +0 -0
  133. /mns_scheduler/{extraIncome/one_minute → k_line/sync_status}/__init__.py +0 -0
  134. {mns_scheduler-1.2.9.6.dist-info → mns_scheduler-1.4.2.5.dist-info}/WHEEL +0 -0
  135. {mns_scheduler-1.2.9.6.dist-info → mns_scheduler-1.4.2.5.dist-info}/top_level.txt +0 -0
@@ -1,137 +0,0 @@
1
- import sys
2
- import os
3
-
4
- file_path = os.path.abspath(__file__)
5
- end = file_path.index('mns') + 16
6
- project_path = file_path[0:end]
7
- sys.path.append(project_path)
8
-
9
- import tushare as ts
10
- from mns_common.db.v2.MongodbUtilV2 import MongodbUtilV2
11
- from mns_common.db.MongodbUtil import MongodbUtil
12
- import mns_common.component.common_service_fun_api as common_service_fun_api
13
-
14
- import pandas as pd
15
- from loguru import logger
16
- import mns_common.utils.data_frame_util as data_frame_util
17
- import mns_common.component.em.em_stock_info_api as em_stock_info_api
18
- import time
19
-
20
- mongodb_util_27017 = MongodbUtil('27017')
21
- mongodbUtilV2 = MongodbUtilV2('27019', 'extraIncome')
22
-
23
- pro = ts.pro_api('782213d20640249f1dbae50a7f56b22684b8e915a61e435e015579a1')
24
-
25
-
26
- def get_minute_data(symbol, freq, start_date, end_date):
27
- # 获取浦发银行60000.SH的历史分钟数据
28
- df = pro.stk_mins(ts_code=symbol, freq=freq, start_date=start_date, end_date=end_date)
29
- return df
30
-
31
-
32
- def sync_all_stock(trade_date_list_df):
33
- de_list_stock_df = mongodb_util_27017.find_all_data('de_list_stock')
34
- de_list_stock_df = common_service_fun_api.classify_symbol(de_list_stock_df)
35
- de_list_stock_df = de_list_stock_df.loc[
36
- de_list_stock_df['classification'].isin(['K', 'C', 'S', 'H', 'X'])]
37
- # 对 classification 为 S 或 K 的数据,symbol 列加上 '.SH',其他加上 '.SZ'
38
-
39
- de_list_stock_df['symbol'] = de_list_stock_df.apply(
40
- lambda row: row['symbol'] + '.SZ' if row['classification'] in ['S', 'C']
41
- else row['symbol'] + '.BJ' if row['classification'] in ['X']
42
- else row['symbol'] + '.SH',
43
- axis=1
44
- )
45
-
46
- real_time_quotes_all_stocks_df = em_stock_info_api.get_a_stock_info()
47
-
48
- # 假设数字格式为 YYYYMMDD
49
- real_time_quotes_all_stocks_df['list_date'] = pd.to_datetime(real_time_quotes_all_stocks_df['list_date'],
50
- format='%Y%m%d')
51
-
52
- # 将日期格式化为字符串(YYYY-MM-DD)
53
- real_time_quotes_all_stocks_df['list_date'] = real_time_quotes_all_stocks_df['list_date'].dt.strftime('%Y-%m-%d')
54
- real_time_quotes_all_stocks_df = common_service_fun_api.classify_symbol(real_time_quotes_all_stocks_df)
55
-
56
- # 对 classification 为 S 或 K 的数据,symbol 列加上 '.SH',其他加上 '.SZ'
57
- real_time_quotes_all_stocks_df['symbol'] = real_time_quotes_all_stocks_df.apply(
58
- lambda row: row['symbol'] + '.SZ' if row['classification'] in ['S', 'C']
59
- else row['symbol'] + '.BJ' if row['classification'] in ['X']
60
- else row['symbol'] + '.SH',
61
- axis=1
62
- )
63
-
64
- real_time_quotes_all_stocks_df['number'] = real_time_quotes_all_stocks_df['chg'].rank(method='first').astype(int)
65
-
66
- for stock_one in real_time_quotes_all_stocks_df.itertuples():
67
- classification = stock_one.classification
68
- if classification == 'X':
69
- db_name = 'one_minute_k_line_bfq_bj'
70
- elif classification == 'S':
71
- db_name = 'one_minute_k_line_bfq_s'
72
-
73
- elif classification == 'H':
74
- db_name = 'one_minute_k_line_bfq_h'
75
- elif classification == 'K':
76
- db_name = 'one_minute_k_line_bfq_k'
77
- elif classification == 'C':
78
- db_name = 'one_minute_k_line_bfq_c'
79
-
80
- trade_date_list_df_copy = trade_date_list_df.copy()
81
-
82
- list_date = stock_one.list_date
83
- trade_date_list_df_copy = trade_date_list_df_copy.loc[trade_date_list_df_copy['_id'] >= list_date]
84
-
85
- symbol = stock_one.symbol
86
-
87
- de_list_stock_df_one = de_list_stock_df.loc[de_list_stock_df['symbol'] == symbol]
88
-
89
- if data_frame_util.is_not_empty(de_list_stock_df_one):
90
- de_list_date = list(de_list_stock_df_one['de_list_date'])[0]
91
- trade_date_list_df_copy = trade_date_list_df_copy.loc[trade_date_list_df_copy['_id'] <= de_list_date]
92
-
93
- for i in range(0, len(trade_date_list_df_copy), 28):
94
- try:
95
- new_df = trade_date_list_df_copy.iloc[i:i + 28]
96
- first_df = new_df.iloc[0] # 第一个 DataFrame
97
- last_df = new_df.iloc[-1] # 最后一个 DataFrame
98
- begin_date = first_df.trade_date + ' 09:20:00'
99
- end_date = last_df.trade_date + ' 15:00:00'
100
-
101
- df = get_minute_data(symbol, '1min', begin_date, end_date)
102
- if data_frame_util.is_not_empty(df):
103
- df = df.rename(columns={
104
- "trade_time": "time",
105
- "ts_code": "symbol",
106
- "vol": "volume",
107
- })
108
- df['time_tick'] = df['time'].str[11:19]
109
- df = df.loc[df['time_tick'] <= '15:00:00']
110
- del df['time_tick']
111
- df['_id'] = df['symbol'] + '_' + df['time']
112
- mongodbUtilV2.insert_mongo(df, db_name)
113
- except BaseException as e:
114
- time.sleep(2)
115
- first_df = new_df.iloc[0] # 第一个 DataFrame
116
- last_df = new_df.iloc[-1] # 最后一个 DataFrame
117
- begin_date = first_df.trade_date + ' 09:20:00'
118
- end_date = last_df.trade_date + ' 15:00:00'
119
- fail_dict = {'begin_date': begin_date,
120
- 'end_date': end_date,
121
- 'symbol': symbol,
122
- 'db_name': db_name
123
- }
124
- fail_df = pd.DataFrame(fail_dict, index=[1])
125
- mongodbUtilV2.insert_mongo(fail_df, 'one_minute_k_line_bfq_fail')
126
-
127
- logger.error("同步数据出现异常:{},{},{},{}", e, symbol, begin_date, end_date)
128
- logger.info("同步完数据:{},{}", stock_one.symbol, stock_one.name)
129
-
130
-
131
- if __name__ == '__main__':
132
- # get_minute_data('833284.BJ', '1min', '2025-02-28 09:30:00', '2025-02-28 15:00:00')
133
-
134
- query_trade = {"$and": [{"trade_date": {"$gte": "2025-03-08"}}, {"trade_date": {"$lte": "2025-03-18"}}]}
135
- trade_date_list_df_all = mongodb_util_27017.find_query_data('trade_date_list', query_trade)
136
-
137
- sync_all_stock(trade_date_list_df_all)
@@ -1,107 +0,0 @@
1
- import sys
2
- import os
3
-
4
- file_path = os.path.abspath(__file__)
5
- end = file_path.index('mns') + 16
6
- project_path = file_path[0:end]
7
- sys.path.append(project_path)
8
-
9
- import sys
10
- import os
11
-
12
- file_path = os.path.abspath(__file__)
13
- end = file_path.index('mns') + 16
14
- project_path = file_path[0:end]
15
- sys.path.append(project_path)
16
- import pandas as pd
17
- from loguru import logger
18
- import time
19
- import mns_common.utils.data_frame_util as data_frame_util
20
- from mns_common.db.MongodbUtil import MongodbUtil
21
- import tushare as ts
22
- from mns_common.db.v2.MongodbUtilV2 import MongodbUtilV2
23
- import mns_scheduler.extraIncome.one_minute.common.db_create_index as db_create_index
24
-
25
- mongodb_util_27017 = MongodbUtil('27017')
26
- mongodbUtilV2_27019 = MongodbUtilV2('27019', 'extraIncome')
27
-
28
- pro = ts.pro_api('782213d20640249f1dbae50a7f56b22684b8e915a61e435e015579a1')
29
-
30
-
31
- def get_minute_data(symbol, freq, start_date, end_date):
32
- # 获取浦发银行60000.SH的历史分钟数据
33
- df = pro.stk_mins(ts_code=symbol, freq=freq, start_date=start_date, end_date=end_date)
34
- return df
35
-
36
-
37
- def sync_zhi_shu_one_minute(symbol_list_param, trade_date_list_df):
38
- db_name = 'one_minute_k_line_bfq_main_index'
39
- db_create_index.create_index(mongodbUtilV2_27019, db_name)
40
- for symbol in symbol_list_param:
41
-
42
- trade_date_list_df_copy = trade_date_list_df.copy()
43
-
44
- for i in range(0, len(trade_date_list_df_copy), 28):
45
- try:
46
- new_df = trade_date_list_df_copy.iloc[i:i + 28]
47
- first_df = new_df.iloc[0] # 第一个 DataFrame
48
- last_df = new_df.iloc[-1] # 最后一个 DataFrame
49
- begin_date = first_df.trade_date + ' 09:20:00'
50
- end_date = last_df.trade_date + ' 15:00:00'
51
-
52
- df = get_minute_data(symbol, '1min', begin_date, end_date)
53
- if data_frame_util.is_not_empty(df):
54
- df = df.rename(columns={
55
- "trade_time": "time",
56
- "ts_code": "symbol",
57
- "vol": "volume",
58
- })
59
- df['time_tick'] = df['time'].str[11:19]
60
- df = df.loc[df['time_tick'] <= '15:00:00']
61
- del df['time_tick']
62
- df['_id'] = df['symbol'] + '_' + df['time']
63
- mongodbUtilV2_27019.insert_mongo(df, db_name)
64
- except BaseException as e:
65
- time.sleep(2)
66
- first_df = new_df.iloc[0] # 第一个 DataFrame
67
- last_df = new_df.iloc[-1] # 最后一个 DataFrame
68
- begin_date = first_df.trade_date + ' 09:20:00'
69
- end_date = last_df.trade_date + ' 15:00:00'
70
- fail_dict = {'begin_date': begin_date,
71
- 'end_date': end_date,
72
- 'symbol': symbol,
73
- 'db_name': db_name
74
- }
75
- fail_df = pd.DataFrame(fail_dict, index=[1])
76
- mongodbUtilV2_27019.insert_mongo(fail_df, db_name + '_fail')
77
-
78
- logger.error("同步数据出现异常:{},{},{},{}", e, symbol, begin_date, end_date)
79
- logger.info("同步完数据:{}", symbol)
80
-
81
-
82
- def classify_symbol(debt_real_time_quotes_df):
83
- debt_real_time_quotes_df['classification'] = debt_real_time_quotes_df['market'].apply(
84
- lambda market: classify_symbol_one(market))
85
- return debt_real_time_quotes_df
86
-
87
-
88
- # 单个股票分类
89
- def classify_symbol_one(market):
90
- if market == 0:
91
- return 'S'
92
- else:
93
- return 'H'
94
-
95
-
96
- if __name__ == '__main__':
97
- # 文件路径
98
- file_path = r"H:\data\1min\指数\指数列表.xlsx"
99
-
100
- df = pd.read_excel(file_path)
101
- df = df.rename(columns={
102
- "指数代码": "symbol"
103
- })
104
- new_symbol_list = df['symbol']
105
- query_trade = {"$and": [{"trade_date": {"$gte": "2025-03-08"}}, {"trade_date": {"$lte": "2025-03-16"}}]}
106
- trade_date_list_df_all = mongodb_util_27017.find_query_data('trade_date_list', query_trade)
107
- sync_zhi_shu_one_minute(new_symbol_list, trade_date_list_df_all)
@@ -1,7 +0,0 @@
1
- import sys
2
- import os
3
-
4
- file_path = os.path.abspath(__file__)
5
- end = file_path.index('mns') + 16
6
- project_path = file_path[0:end]
7
- sys.path.append(project_path)
@@ -1,131 +0,0 @@
1
- import sys
2
- import os
3
-
4
- file_path = os.path.abspath(__file__)
5
- end = file_path.index('mns') + 16
6
- project_path = file_path[0:end]
7
- sys.path.append(project_path)
8
- from bypy import ByPy
9
- from mns_common.db.MongodbUtil import MongodbUtil
10
- import tempfile
11
- from loguru import logger
12
- import akshare as ak
13
-
14
- mongodb_util = MongodbUtil('27017')
15
-
16
- import subprocess
17
-
18
-
19
- def get_file_list(path):
20
- """
21
- 获取百度网盘指定路径下的文件列表
22
- :param path: 百度网盘中的路径,例如 '/我的资源'
23
- :return: 文件列表
24
- """
25
- try:
26
- # 调用 bypy list 命令
27
- result = subprocess.run(['bypy', 'list', path], capture_output=True, text=True, check=True)
28
-
29
- # 输出结果
30
- if result.returncode == 0:
31
- file_list = result.stdout.splitlines() # 按行分割结果
32
- return file_list
33
- else:
34
- logger.error("获取文件路径异常:{}", result.stderr)
35
- return []
36
- except subprocess.CalledProcessError as e:
37
- logger.error("获取文件路径异常:{}", e)
38
- return []
39
-
40
-
41
- def upload_to_baidu(file_name, folder_name, data_df):
42
- bp = ByPy()
43
- file_name = file_name + '.csv'
44
- with tempfile.NamedTemporaryFile(mode='w', suffix='.csv', delete=False) as temp_file:
45
- data_df.to_csv(temp_file, index=False)
46
- temp_file_path = temp_file.name # 获取临时文件的路径
47
-
48
- # 上传临时文件到百度云
49
- remote_path = f'/{folder_name}/{file_name}'
50
- result = bp.upload(temp_file_path, remote_path)
51
- if result == 0:
52
- logger.info("上传成功:{}", file_name)
53
- else:
54
- logger.error("上传失败:{}", file_name)
55
- return result
56
-
57
-
58
- def mkdir_baidu_new_folder(remote_path):
59
- bp = ByPy()
60
- try:
61
- # 调用 mkdir 方法创建文件夹
62
- result = bp.mkdir(remote_path)
63
-
64
- if result == 0:
65
- logger.info("成功创建文件夹:{}", remote_path)
66
- else:
67
- logger.error("创建文件夹失败:{}", result)
68
-
69
- except Exception as e:
70
- logger.error("创建文件夹失败:{}", e)
71
-
72
-
73
- def del_baidu_old_folder(remote_path):
74
- bp = ByPy()
75
- try:
76
- # 调用 mkdir 方法创建文件夹
77
- result = bp.delete(remote_path)
78
-
79
- if result == 0:
80
- logger.info("成功删除文件夹:{}", remote_path)
81
- else:
82
- logger.error("删除文件夹失败:{}", result)
83
-
84
- except Exception as e:
85
- logger.error("删除文件夹失败:{}", e)
86
-
87
-
88
- if __name__ == '__main__':
89
- folder_name1 = '/美股/不复权日线'
90
- mkdir_baidu_new_folder(folder_name1)
91
- # get_file_list(folder_name1)
92
- stock_us_spot_em_df = ak.stock_us_spot_em()
93
- stock_us_spot_em_df = stock_us_spot_em_df.rename(columns={
94
- "序号": "index",
95
- "代码": "symbol",
96
- "名称": "name",
97
- "涨跌额": "change_price",
98
- "涨跌幅": "chg",
99
- "开盘价": "open",
100
- "最高价": "high",
101
- "最低价": "low",
102
- "最新价": "now_price",
103
- "昨收价": "last_price",
104
- "总市值": "total_mv",
105
- "市盈率": "pe",
106
- "成交量": "volume",
107
- "成交额": "amount",
108
- "振幅": "pct_chg",
109
- "换手率": "exchange"
110
- })
111
- stock_us_spot_em_df = stock_us_spot_em_df.sort_values(by=['amount'], ascending=False)
112
- stock_us_spot_em_df = stock_us_spot_em_df.fillna(0)
113
- stock_us_spot_em_df = stock_us_spot_em_df.loc[stock_us_spot_em_df['total_mv'] != 0]
114
- for stock_one in stock_us_spot_em_df.itertuples():
115
- try:
116
- symbol = stock_one.symbol
117
- name = stock_one.name
118
- query = {'symbol': symbol, 'amount': {"$gt": 0}}
119
- us_stock_bfq_daily_df_one = mongodb_util.find_query_data('us_stock_bfq_daily', query)
120
- del us_stock_bfq_daily_df_one['_id']
121
- del us_stock_bfq_daily_df_one['name']
122
- file_name_one = name + '_' + symbol
123
- upload_to_baidu(file_name_one, folder_name1, us_stock_bfq_daily_df_one)
124
-
125
- except BaseException as e:
126
- logger.error("同步数据发生异常:{}", e)
127
-
128
- # data_df = mongodb_util.find_query_data('us_stock_bfq_daily', query={'name': file_name1})
129
- # upload_to_baidu(file_name1, folder_name1, data_df)
130
-
131
-
@@ -1,91 +0,0 @@
1
- import akshare as ak
2
- import pandas as pd
3
- from mns_common.db.MongodbUtil import MongodbUtil
4
-
5
- mongodb_util = MongodbUtil('27017')
6
-
7
-
8
- def us_stock():
9
- # 输入参数
10
- symbol = input("请输入股票代码(all:全量(时间很长),特定代码:106.TTE):")
11
- start_date = input("请输入开始日期(格式:YYYYMMDD):")
12
- end_date = input("请输入结束日期(格式:YYYYMMDD):")
13
- fq = input("请输入复权信息(前复权:qfq,不复权:bfq,后复权:hfq):")
14
- k_line_period = input("请输入k线周期(日线:daily,周线:weekly,月线:monthly):")
15
- db_name = "us_stock_" + fq + "_" + k_line_period
16
- if fq == 'bfq':
17
- fq = ''
18
- if symbol != 'all':
19
- # 获取股票历史数据
20
- stock_us_hist_df = ak.stock_us_hist(symbol=symbol,
21
- period=k_line_period,
22
- start_date=start_date,
23
- end_date=end_date,
24
- adjust=fq)
25
- # 保存数据到 CSV 文件
26
- stock_us_hist_df.to_csv(f"{symbol}_historical_data.csv", index=False)
27
- print(f"数据已保存到 {symbol}_historical_data.csv")
28
- else:
29
- stock_us_spot_em_df = ak.stock_us_spot_em()
30
- stock_us_spot_em_df = stock_us_spot_em_df.rename(columns={
31
- "序号": "index",
32
- "代码": "symbol",
33
- "名称": "name",
34
- "涨跌额": "change_price",
35
- "涨跌幅": "chg",
36
- "开盘价": "open",
37
- "最高价": "high",
38
- "最低价": "low",
39
- "最新价": "now_price",
40
- "昨收价": "last_price",
41
- "总市值": "total_mv",
42
- "市盈率": "pe",
43
- "成交量": "volume",
44
- "成交额": "amount",
45
- "振幅": "pct_chg",
46
- "换手率": "exchange"
47
- })
48
- stock_us_spot_em_df = stock_us_spot_em_df.sort_values(by=['amount'], ascending=False)
49
- stock_us_spot_em_df = stock_us_spot_em_df.fillna(0)
50
- stock_us_spot_em_df = stock_us_spot_em_df.loc[stock_us_spot_em_df['total_mv'] != 0]
51
-
52
- k_line_result = pd.DataFrame()
53
-
54
- for stock_us_one in stock_us_spot_em_df.itertuples():
55
- try:
56
- # 获取股票历史数据
57
- stock_us_hist_df = ak.stock_us_hist(symbol=stock_us_one.symbol,
58
- period=k_line_period,
59
- start_date=start_date,
60
- end_date=end_date,
61
- adjust=fq)
62
- stock_us_hist_df = stock_us_hist_df.rename(columns={
63
- "日期": "date",
64
- "涨跌额": "change_price",
65
- "涨跌幅": "chg",
66
- "开盘": "open",
67
- "最高": "high",
68
- "最低": "low",
69
- "收盘": "close",
70
- "成交量": "volume",
71
- "成交额": "amount",
72
- "振幅": "pct_chg",
73
- "换手率": "exchange"
74
- })
75
-
76
- k_line_result = pd.concat([stock_us_hist_df, k_line_result])
77
- stock_us_hist_df['_id'] = stock_us_one.symbol + '_' + stock_us_hist_df['date']
78
- stock_us_hist_df['symbol'] = stock_us_one.symbol
79
- stock_us_hist_df['name'] = stock_us_one.name
80
- mongodb_util.insert_mongo(stock_us_hist_df, db_name)
81
- print(f"同步k线数据到: {stock_us_one.name}")
82
- except BaseException as e:
83
- print(f"同步数据发生异常: {stock_us_one.name}, {e}")
84
-
85
- # 保存数据到 CSV 文件
86
- k_line_result.to_csv(f"{symbol}_historical_data.csv", index=False)
87
- print(f"数据已保存到 {symbol}_historical_data.csv")
88
-
89
-
90
- if __name__ == "__main__":
91
- us_stock()
@@ -1,39 +0,0 @@
1
- import sys
2
- import os
3
-
4
- file_path = os.path.abspath(__file__)
5
- end = file_path.index('mns') + 16
6
- project_path = file_path[0:end]
7
- sys.path.append(project_path)
8
- import akshare as ak
9
-
10
-
11
- def sync_us_company_info():
12
- stock_us_spot_em_df = ak.stock_us_spot_em()
13
- stock_us_spot_em_df = stock_us_spot_em_df.rename(columns={
14
- "序号": "index",
15
- "代码": "symbol",
16
- "名称": "name",
17
- "涨跌额": "change_price",
18
- "涨跌幅": "chg",
19
- "开盘价": "open",
20
- "最高价": "high",
21
- "最低价": "low",
22
- "最新价": "now_price",
23
- "昨收价": "last_price",
24
- "总市值": "total_mv",
25
- "市盈率": "pe",
26
- "成交量": "volume",
27
- "成交额": "amount",
28
- "振幅": "pct_chg",
29
- "换手率": "exchange"
30
- })
31
- stock_us_spot_em_df = stock_us_spot_em_df.sort_values(by=['amount'], ascending=False)
32
- stock_us_spot_em_df = stock_us_spot_em_df.fillna(0)
33
- stock_us_spot_em_df = stock_us_spot_em_df.loc[stock_us_spot_em_df['total_mv']!=0]
34
- stock_us_spot_em_df.to_csv('us_stock.csv', index=False)
35
- return stock_us_spot_em_df
36
-
37
-
38
- if __name__ == '__main__':
39
- sync_us_company_info()