"""短剧采集 CLI 用法: .venv/bin/python scripts/collect_short_dramas.py # 全量增量同步 .venv/bin/python scripts/collect_short_dramas.py --pages 1 --size 3 # 试跑 .venv/bin/python scripts/collect_short_dramas.py --drama-id 130 # 手动更新单部 """ import argparse import asyncio import logging import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) from app.database import SessionFactory # noqa: E402 from app.services.collection_service import sync_drama_by_id, sync_short_dramas # noqa: E402 logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s") async def main() -> None: parser = argparse.ArgumentParser(description="短剧采集") parser.add_argument("--drama-id", type=int, default=0, help="只同步指定源站短剧 id") parser.add_argument("--pages", type=int, default=0, help="最多同步的列表页数,0=全部") parser.add_argument("--size", type=int, default=20, help="每页条数") parser.add_argument("--sort", choices=["heat", "latest"], default="heat") parser.add_argument("--delay", type=float, default=0.25, help="上游请求间隔秒") args = parser.parse_args() async with SessionFactory() as db: if args.drama_id: stat = await sync_drama_by_id(db, args.drama_id) else: stat = await sync_short_dramas( db, max_pages=args.pages, page_size=args.size, sort_by=args.sort, delay=args.delay ) print("同步完成:", stat) if __name__ == "__main__": asyncio.run(main())