Spaces:
Paused
Paused
Upload 2 files
Browse files- requirements.txt +1 -0
- sync_data.py +18 -7
requirements.txt
CHANGED
|
@@ -7,3 +7,4 @@ python-dotenv>=1.0.0
|
|
| 7 |
yfinance>=0.2.0
|
| 8 |
pytz>=2023.3
|
| 9 |
schedule>=1.2.0 # 定时任务调度
|
|
|
|
|
|
| 7 |
yfinance>=0.2.0
|
| 8 |
pytz>=2023.3
|
| 9 |
schedule>=1.2.0 # 定时任务调度
|
| 10 |
+
pyarrow>=14.0.0 # Parquet 文件支持
|
sync_data.py
CHANGED
|
@@ -37,13 +37,23 @@ def get_stock_list() -> pd.DataFrame:
|
|
| 37 |
"""获取全市场标的列表"""
|
| 38 |
logger.info("Fetching all-market target list...")
|
| 39 |
all_lists = []
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
|
| 46 |
-
# ETF / LOF / REITs
|
| 47 |
try:
|
| 48 |
df_etf = ak.fund_etf_spot_em()[['代码', '名称']]
|
| 49 |
df_etf.columns = ['code', 'name']
|
|
@@ -73,7 +83,8 @@ def get_stock_list() -> pd.DataFrame:
|
|
| 73 |
c_code = '代码' if '代码' in df_cb.columns else 'symbol'
|
| 74 |
c_name = '名称' if '名称' in df_cb.columns else 'name'
|
| 75 |
df_cb = df_cb[[c_code, c_name]]; df_cb.columns = ['code', 'name']; df_cb['market'] = '可转债'; all_lists.append(df_cb)
|
| 76 |
-
except
|
|
|
|
| 77 |
|
| 78 |
except Exception as e:
|
| 79 |
logger.error(f"List fetching error: {e}")
|
|
|
|
| 37 |
"""获取全市场标的列表"""
|
| 38 |
logger.info("Fetching all-market target list...")
|
| 39 |
all_lists = []
|
| 40 |
+
|
| 41 |
+
max_retries = 3
|
| 42 |
+
for attempt in range(max_retries):
|
| 43 |
+
try:
|
| 44 |
+
df_a = ak.stock_zh_a_spot_em()[['代码', '名称']]
|
| 45 |
+
df_a.columns = ['code', 'name']
|
| 46 |
+
df_a['market'] = df_a['code'].apply(lambda x: '主板' if x.startswith(('60', '00')) else ('创业板' if x.startswith('30') else ('科创板' if x.startswith('68') else ('北交所' if x.startswith(('8', '4', '920')) else '其他'))))
|
| 47 |
+
all_lists.append(df_a)
|
| 48 |
+
break # 成功则退出重试循环
|
| 49 |
+
except Exception as e:
|
| 50 |
+
if attempt == max_retries - 1:
|
| 51 |
+
logger.error(f"Failed to fetch A-stock list after {max_retries} attempts: {e}")
|
| 52 |
+
else:
|
| 53 |
+
logger.warning(f"Attempt {attempt + 1} failed, retrying... Error: {e}")
|
| 54 |
+
time.sleep(5) # 重试前等待 5 秒
|
| 55 |
|
| 56 |
+
# ETF / LOF / REITs (增加容错)
|
| 57 |
try:
|
| 58 |
df_etf = ak.fund_etf_spot_em()[['代码', '名称']]
|
| 59 |
df_etf.columns = ['code', 'name']
|
|
|
|
| 83 |
c_code = '代码' if '代码' in df_cb.columns else 'symbol'
|
| 84 |
c_name = '名称' if '名称' in df_cb.columns else 'name'
|
| 85 |
df_cb = df_cb[[c_code, c_name]]; df_cb.columns = ['code', 'name']; df_cb['market'] = '可转债'; all_lists.append(df_cb)
|
| 86 |
+
except Exception as e:
|
| 87 |
+
logger.warning(f"Convertible bond list fetch failed: {e}")
|
| 88 |
|
| 89 |
except Exception as e:
|
| 90 |
logger.error(f"List fetching error: {e}")
|