Files
lhbfx/backend/scripts/import_ths_year.py

57 lines
2.0 KiB
Python

from __future__ import annotations
import argparse
from datetime import datetime
from pathlib import Path
from _bootstrap import add_src_to_path
add_src_to_path()
from lhbfx.pipeline import import_range
def log_line(log_file: Path, message: str) -> None:
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
line = f"[{timestamp}] {message}"
print(line, flush=True)
log_file.parent.mkdir(parents=True, exist_ok=True)
with log_file.open("a", encoding="utf-8") as f:
f.write(line + "\n")
def main() -> None:
parser = argparse.ArgumentParser(description="按工作日批量导入某年同花顺龙虎榜数据")
parser.add_argument("--year", type=int, default=2026, help="年份,默认 2026")
parser.add_argument("--start", default=None, help="起始日期 YYYY-MM-DD")
parser.add_argument("--end", default=None, help="结束日期 YYYY-MM-DD")
parser.add_argument("--limit", type=int, default=None, help="限制导入的交易日数量")
parser.add_argument("--log-file", default=None, help="日志文件路径")
args = parser.parse_args()
default_log = Path(__file__).resolve().parents[1] / "output" / "logs" / f"import_{args.year}.log"
log_file = Path(args.log_file) if args.log_file else default_log
log_line(
log_file,
f"开始导入 year={args.year}, start={args.start}, end={args.end}, limit={args.limit}",
)
result = import_range(year=args.year, start=args.start, end=args.end, limit=args.limit)
for item in result["success"]:
log_line(
log_file,
f"{item['trade_date']} -> 成功, 概览 {item['overview_count']} 条, 明细 {item['detail_count']}",
)
for item in result["failed"]:
log_line(log_file, f"{item['trade_date']} -> 失败, error={item['error']}")
log_line(
log_file,
f"导入完成 success={result['success_count']}, failed={result['failed_count']}, total={result['requested_days']}",
)
if __name__ == "__main__":
main()