《新闻联播》每日抓取入库:全链路 + 可移植化 + 定时任务

从 CCTV 主页抓取《新闻联播》,下载 → 转 MP3/WAV → 静音切分 → ASR 识别
→ LLM 校对 → 切分为单条新闻 → 入库 MySQL。

主要内容:
- 全链路:getVideo5 抓取下载、audioRead 转写、deepseek 校对与切分、newsProcess 入库
- 可移植化:配置分层,.env 只放密钥、config.yml 放模型/接入点/路由/参数
- 可换供应商:endpoints(kind/base_url/api_key_env/extra_body)+ routes 按环节选路
- 数据保真:数值事实守卫,校对改动数字/年份/届次则整片回退 ASR 原文;
  识别不完整不发布该日精编,避免半天内容被当成完整一天
- 定时任务:systemd 每天 21:00,失败 21:30 / 22:00 重试;
  只缺切分时只重跑切分(省掉全部 ASR),用 state/.asr_complete_* 标记判定阶段
- 隧道自愈:13306 不通时自动执行 autossh.sh(所有入口共用,systemd 托管时只等待)
- 中间产物每日清理;97 项离线自检(配置/清理/事实守卫/解析/隧道)
This commit is contained in:
2026-09-25 11:17:46 +08:00
commit 60f8c263f2
35 changed files with 5770 additions and 0 deletions
+30
View File
@@ -0,0 +1,30 @@
# ============================================================================
# xwlb 敏感配置模板 —— 复制为 .env 后填写真实值
# ============================================================================
# cp .env.example .env
#
# 本文件只放 **敏感项**(口令 / API Key)。
# 非敏感配置(数据库地址、目录、各环节模型、切分参数、清理开关)在 config.yml。
# ============================================================================
# ---- MySQL / MariaDB 口令(地址/端口/用户/库名见 config.yml 的 mysql.*)----
MYSQL_PASSWORD=
# ---- 各供应商 API Key ----
# 变量名不是写死在代码里的:config.yml 的 endpoints.<接入点>.api_key_env 决定用哪个变量。
# 换供应商只需在 config.yml 里加接入点并写好 api_key_env,然后在这里加对应变量。
DASHSCOPE_API_KEY= # 语音识别(ASR) + 校对(config.yml: endpoints.dashscope.api_key_env)
DEEPSEEK_API_KEY= # 新闻切分 + 标题(config.yml: endpoints.deepseek.api_key_env)
# MOONSHOT_API_KEY= # 示例:把校对换成月之暗面时新增
# ============================================================================
# 可选:覆盖默认路径(一般不需要)
# ============================================================================
# XWLB_ENV_FILE=/path/to/.env # 指定其他 .env
# XWLB_CONFIG_FILE=/path/to/config.yml # 指定其他 config.yml
# ============================================================================
# 说明:进程环境变量 > config.yml > 代码内置默认值
# 因此临时试验可直接用环境变量覆盖,例如:
# DASHSCOPE_LLM_MODEL=qwen-max python audioRead.py 20260904
# ============================================================================