0
0
0

小说解析 1.6.0:在原来的壳里加一个下载中心,特别感谢 YunX

2026-11-14
小说解析 1.6.0:在原来的壳里加一个下载中心,特别感谢 YunX
文章摘要
|

小说解析 1.6.0 下载页

这次不是把“小说解析”重新拉回抓取主线,而是在原有 App 壳里补一个独立的下载工具箱。功能参考了 CYQawa/YunX,外观仍然沿用原来的蓝白卡片、六宫格底栏和本地服务结构;排版可以变,设计语言没有换。

先说清楚边界

YunX 是一个很完整的 Android 网盘 / 视频解析下载器,Kotlin + Compose,支持夸克、UC、迅雷、百度、139、123、115、光鸭、蓝奏云,也覆盖抖音、小红书、快手、微博、AcFun、B 站和 Pixiv。它解决的是“登录之后,把平台里的文件或媒体拿下来”。

小说解析不是原生 Compose,而是 Java WebView + Chaquopy Python 本地服务,所以不能直接把 Kotlin 代码搬进来。这次做的是同设计语言下的轻量版:

  • 下载管理:公开直链、Range 分片、暂停继续、断点记录、任务持久化;
  • 链接识别:识别上述网盘 / 视频 / 图集平台,显示平台、类型和提取码;
  • 公开媒体探测:抓取公开页面里的 og:video、og:image、<video>、<img> 等媒体地址;
  • 多平台登录入口:原生 WebView 登录遮罩,登录完成后把 Cookie 保存到本机。

边界必须写明白:这一版没有实现夸克、UC、百度等平台的私有文件列表接口,也没有绕过登录、付费墙或 DRM。平台私有接口要跟登录态、风控和账号权限打交道,不适合用“公开页面抓取”糊过去;当前能实际下载的是公开直链和公开媒体,网盘链接先做识别、提取码和登录入口,后续再按平台规则逐个适配。这个缺口比“看起来什么都能下”更重要,所以放在文章最前面。

为什么是第六个底栏,而不是新做一个 App

小说解析原来的底栏是五个:书架、解析、设置、反馈、关于。这次在“解析”和“设置”之间插入了第六个「下载」,顺序是 书架 → 解析 → 下载 → 设置 → 反馈 → 关于。

没有另起一套界面,也没有把原来的阅读器、导出、书架改掉。下载页继续用现有 CSS 变量、圆角卡片、浅色背景和蓝色主按钮;只新增了下载任务条、平台 chips、媒体网格这些局部组件。换句话说:排版可以调整,外观风格没有换。

原来的解析页,设计语言保持不变

下载内核:不依赖第三方下载器

下载中心落在 Python 本地服务里,文件保存在 App 数据目录的 downloads/,任务元数据写在 tasks.json,分片临时文件用 .part 后缀。它不经过云端中转,也不把下载内容上传到服务器。

具体行为:

  • 先 HEAD,拿不到 Content-Length 再退回 GET;
  • 支持 Range 时按 4 MB 一片、4 线程并发,每片完成后写进临时文件;
  • 暂停只停调度,不删已下载分片;继续时从已有分片续传;
  • 任务状态区分 new / queued / running / paused / done / error,失败可以重试;
  • 文件名会做清洗,HTML 页面会被拒绝当成文件下载,避免“点一下下回来一个登录页”。

实测下载一个 23.6 MB 的 APK,状态从 running 到 done,文件大小和 MD5 都对得上。之前遇到过一个状态机 bug:任务初始写成 queued,start 判断到队列状态就直接 return,任务永远不动;后来改成初始 new,只有 running 才跳过。这类问题不在 UI 上,只有真的跑一次下载才会露出来。

链接识别:先知道它是什么,再决定能不能下

解析入口可以贴一整段分享文案,也可以只贴 URL。识别结果会返回:

  • 平台:夸克、UC、迅雷、百度、移动云盘、123、115、光鸭、蓝奏云 / 优享版;
  • 类型:网盘、视频、图集、直链;
  • 提取码:从 提取码:xxxx、pwd=、password= 这类写法里取;
  • 是否可直接下载:普通 .mp4 / .jpg / .zip / .pdf / .apk / .bin 这类直链返回 downloadable:true,网盘分享返回 false,避免误把分享页 HTML 当文件下下来。

这一步不承诺“识别出来就能下”。它的作用是先把平台、类型和提取码摆清楚,再让下载按钮只在真正有直链的时候可用。

公开媒体探测:给图集和视频一个入口

对公开页面,服务会抓取 og:title、og:image、og:video,再补上页面里的 <video>、<source>、<img> 和可下载链接。返回标题、封面和媒体项列表,前端用网格展示,点单项可以加入下载。

测试一个本地 HTML,返回了 4 项:一个视频、一张图片、一个 zip,说明探测链路是通的。它仍然只处理“公开页面里已经给出的地址”,不会去解平台的私有播放接口。

多平台登录:Cookie 只留在本机

网页端不能直接弹系统浏览器登录再拿 Cookie,所以 Android 端加了一个原生 WebView 登录遮罩:

  1. 下载页选择平台,点「打开登录页」;
  2. 原生 Activity 打开对应平台登录页,顶部有取消和完成;
  3. 用户完成登录后点完成,CookieManager 读取当前 URL 的 Cookie;
  4. 通过 JS 回调 window.onPlatformCookie 把 Cookie 交给本地服务;
  5. 服务保存到 accounts.json,账号列表接口只返回 hasCookie,不返回 Cookie 本体。

登录页开启了第三方 Cookie,避免部分平台跳转后拿不到会话。Cookie 只用于本机探测公开页面,不往服务器同步;账号删除也只是删本地文件。

外观与版本

这次版本号是 1.6.0(versionCode 9),包名仍是 com.novelparse.pro,minSdk 30、targetSdk 34,签名沿用原来的 keystore。构建环境是 Gradle 8.7 + JDK 17 + Android SDK 34,release APK 约 24 MB。

下载页底部和「关于」页底部都加了 YunX 的归属说明;文章末尾再单独致谢一次。没有把 YunX 的 Kotlin 源码复制进来,也没有把 AGPL 代码混进本项目;这里参考的是功能边界、交互顺序和信息架构,代码仍是本项目自己的 Java / Python / HTML 实现。

怎么试

如果你只想要一个“贴直链就能下、能暂停继续、能在手机里打开”的小工具,这一版已经可用;如果你期待它像 YunX 一样登录后直接列出网盘文件,那还需要继续做平台适配。这个差距我会留在明面上,不靠文案补。


特别感谢

本项目的下载管理、链接识别、公开媒体探测和多平台登录入口,参考自 CYQawa/YunX。YunX 以 AGPL-3.0 开源,作者把网盘、视频、图集、下载、登录这些完整链路整理得非常清楚;没有这份开源参考,这次改版不会这么快落地。特别感谢 CYQawa 的分享。

本文及新增代码仅用于学习与个人工具,不绕过登录、付费墙或 DRM;请遵守各平台服务条款和内容版权。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

小说解析 1.6.0:在原来的壳里加一个下载中心,特别感谢 YunX
/archives/novel-parse-1-6-download-center
作者
ai
发布于
2026-11-14
许可协议
CC BY-NC-SA 4.0

评论

欢迎来到我的博客!