2026-10-31 14:33:07 +08:00
2026-10-31 14:33:07 +08:00
2026-10-31 14:33:07 +08:00
2026-10-31 14:33:07 +08:00
2026-10-31 14:33:07 +08:00
2026-10-31 14:33:07 +08:00
2026-10-31 14:33:07 +08:00
2026-10-31 14:33:07 +08:00
2026-10-31 14:33:07 +08:00

探数新闻下载器

在本机浏览器中填写 API Key、获取频道、选择数量,下载新闻正文和图片。所有项目文件与下载结果都位于本目录,不修改微信下载器。

启动

安装 uv 后,macOS 可以双击 start.command。也可以在本目录运行:

uv run --no-project --python 3.12 --with-requirements requirements.txt python app.py

启动后自动打开 http://127.0.0.1:8765 。保留启动窗口,退出时按 Ctrl+C。端口被占用时加 --port 8766;不自动打开浏览器时加 --no-browser。

  1. 填写探数 API Key,点击「获取新闻频道」。频道来自真实接口,不使用写死的列表。
  2. 选择频道、输入目标数量,点击「开始下载」。
  3. 页面显示成功保存的数量、百分比、重复数、失败数和最近 300 条日志。日志固定高度,可滚动;向上查看时不会强制滚回底部。
  4. 下载结果保存在本目录的 downloads 文件夹。点击「停止下载」后,等待当前请求或文章保存结束。
  5. 「调试终端」默认折叠,支持频道查询以及列表查询的 type、num、start 参数。测试请求只显示响应,不保存文章;同样消耗 API 调用额度。输出最多保留 100000 字符。

密钥仅在页面和服务运行内存中使用,不保存到配置、历史数据库或浏览器存储。服务仅监听本机地址。刷新页面可查看当前任务进度,开始新任务需重新填写密钥。单个服务同时只运行一个下载任务,请勿同时启动多个实例操作同一下载目录。

保存格式

沿用 wechat_official_acc_article_downloader 的格式和图片处理规则:

downloads/
├── .history.sqlite3
└── 新闻标题/
    ├── 新闻标题.md
    ├── image001.jpg
    └── image002.png

Markdown 开头是一级标题,空行后直接接由接口 content 转换的正文,不额外添加接口 time 对应的发布时间或分隔线。末尾为 来源:{src},如有侵权,请联系删除。,来源为空时使用「未知作者」。不在开头添加原文链接或作者。正文中的图片下载到同一目录、使用相对引用、按真实文件类型命名,同一图片地址只下载一次。接口的 pic 封面不单独插入正文。

标题中的不合法字符会替换;不同文章碰巧同名时添加 (2) 等后缀,目录和 Markdown 文件保持同名。任何正文图片下载失败,该篇不计入完成数,并清理半成品,再继续其他新闻;下次任务可以重试。

去重与分页

  • 下载图片前,检查原文 URL / PC URL(移除常见跟踪参数和片段)及规范化正文指纹。任一匹配即跳过,标题相同但正文和网址不同不会单凭标题去重。
  • SQLite 保存成功文章的指纹,跨任务、跨频道和服务重启后继续去重。被删除的文章目录不会阻止重新下载。不要删除 .history.sqlite3,否则会失去对应历史记录。
  • 每次任务从最新位置 start=0 开始,按返回数量推进,每页最多 40 条;重复和失败不计入成功数量,并继续后面的新闻。
  • 接口限制 start ≤ 400,一次任务最多覆盖约 440 条,具体还受返回数量和实时更新影响。达到分页边界或收到空列表时停止,未达目标就显示「未达到目标」,不会伪装成 100%。
  • 列表接口不自动重试,防止隐蔽消耗计费额度。API 业务错误、网络错误或响应格式错误会中断任务,已成功保存的文章保留。图片请求沿用原下载器的重试策略。
  • 新闻列表会实时变化,无法保证服务器在不同请求中不返回同一新闻;本工具在保存前去重,尽量避免重复图片下载与文件保存。

接口依据:探数官方新闻 API 文档。

验证

uv run --no-project --python 3.12 --with-requirements requirements.txt python -m unittest discover -s tests -v

测试使用模拟新闻响应与临时目录,不消耗真实 API 额度。覆盖格式与图片引用、图片失败清理、历史去重、分页边界、失败重试、取消、日志上限和本地 HTTP 接口。真实账号权限、余额、返回内容与远程图片可达性,需要在页面填入有效 Key 后验证。

S
Description
No description provided
Readme
46 KiB
0 Stars 2 Watchers 0 Forks
Languages
Python 78.6%
JavaScript 11.7%
HTML 9.1%
Shell 0.6%