"""读取校招鸭公告 URL 文件并批量处理(一次性执行)。 运行(项目根目录下): python init_xiaozhaoya.py """ from __future__ import annotations import json from pathlib import Path from app.core.database import close_db, init_db from app.core.logger import log from app.service.announcement_batch_service import save_announcements URLS_PATH = Path(__file__).resolve().parent / "doc" / "xiaozhaoya_announcement_links.json" def load_urls() -> list[str]: """从本地 JSON 读取公告地址,过滤无效值并保持原始顺序去重。""" with URLS_PATH.open("r", encoding="utf-8") as json_file: payload = json.load(json_file) if not isinstance(payload, list): raise ValueError(f"公告地址 JSON 必须是数组:{URLS_PATH}") urls: list[str] = [] seen: set[str] = set() for value in payload: if not isinstance(value, str): continue url = value.strip() if not url.startswith(("http://", "https://")) or url in seen: continue seen.add(url) urls.append(url) log.info("从文件读取到 {} 条公告地址(原始 {} 条)", len(urls), len(payload)) return urls def main() -> None: """读取 URL,初始化数据库并直接调用批量处理服务。""" urls = load_urls() init_db() try: save_announcements(urls) finally: close_db() if __name__ == "__main__": main()