"""快速采集测试脚本""" import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).parent)) from src.fetcher import stock_api, lhb_fetcher, news_flash_fetcher, macro_event_fetcher from src.storage.db import upsert_df, upsert_log, get_conn from datetime import datetime, timedelta def test_daily(): print("=== [1/4] 日K线(主要指数 90天) ===") df = stock_api.batch_fetch_indices(days=90) if df is not None and not df.empty: upsert_df(df, "stock_daily") print(f" 索引列表: {sorted(df['ts_code'].unique())}") print(f" 总行数: {len(df)}") # 验证最近一条 latest = df.sort_values("trade_date").tail(3) print(f" 最新3条:\n{latest[['ts_code','trade_date','close']].to_string(index=False)}") else: print(" [FAIL] 返回空") def test_lhb(): print("\n=== [2/4] 龙虎榜(近10日,含上周五) ===") # 上周五(最近确定有数据的交易日) start = (datetime.today() - timedelta(days=10)).strftime("%Y-%m-%d") end = datetime.today().strftime("%Y-%m-%d") df = lhb_fetcher.fetch_lhb_range(start, end) if df is not None and not df.empty: upsert_df(df, "lhb_daily") upsert_log("lhb_daily", "", last_date=end) print(f" 总行数: {len(df)}") print(f" 涵盖交易日: {sorted(df['trade_date'].unique())}") print(f" 样例:\n{df[['trade_date','ts_code','name','reason']].head(5).to_string(index=False)}") else: print(" [WARN] 该时间段无龙虎榜数据(可能是非交易日)") def test_flash(): print("\n=== [3/4] 7x24 快讯流(AkShare 财联社) ===") df = news_flash_fetcher.fetch_akshare_news() if df is not None and not df.empty: upsert_df(df, "news_flash", csv备份=False) print(f" 总行数: {len(df)}") print(f" 样例:\n{df.head(3).to_string(index=False)}") else: print(" [WARN] 无快讯数据") def test_events(): print("\n=== [4/4] 大事提醒 ===") df = macro_event_fetcher.fetch_macro_calendar() if df is not None and not df.empty: upsert_df(df, "macro_event") print(f" 总行数: {len(df)}") print(f" 样例:\n{df.head(5).to_string(index=False)}") else: print(" [WARN] 无数据(可能接口报表名需调整)") def db_summary(): print("\n=== 数据库现状 ===") with get_conn() as conn: tables = ["stock_daily","lhb_daily","news_flash","macro_event","news_cn"] for t in tables: try: cnt = conn.execute(f"SELECT COUNT(*) FROM {t}").fetchone()[0] print(f" {t}: {cnt} rows") except Exception: print(f" {t}: 0 rows (table may not exist)") if __name__ == "__main__": test_daily() test_lhb() test_flash() test_events() db_summary()