Files
fanqie-assistant/README.md
T
2026-07-30 04:16:53 +08:00

108 lines
5.4 KiB
Markdown

# 番茄小说助手 (fanqie-assistant)
一个用于 [番茄小说网页版](https://fanqienovel.com) 的用户脚本(Userscript):去广告、去推广、解锁章节、优化阅读体验。
> **使用该项目会有账号被官方封禁的风险。** 如您继续使用,则证明您已知晓未来可能发生的风险并对其负责。
> **项目处于开发初期。** 功能仅覆盖基础阅读,接口和目录结构都可能随时调整。欢迎试用和反馈,但请做好随时会有破坏性变更的准备。
> **这是我的第一个 TypeScript 项目。** 属于边学编写,代码质量可能不高,有问题欢迎指正。
## 已实现
第一阶段「基础阅读」已经可用:
- **正文替换**:阅读页拉取完整正文并渲染,替换网页原有内容容器,同时允许复制文本。
- **解锁章节**:网页端被屏蔽的章节可以正常阅读。
- **漫画阅读**:图片章节支持懒加载,加密图片滚动到视口时自动处理。
- **字体反混淆**:还原网页自绘字体渲染的混淆文本,动态插入的内容同样生效。
- **屏蔽埋点上报**:丢弃发往字节、百度统计域名的埋点请求。
- **章节信息补全**:补上卷名、精确到秒的更新时间,并修正页面标题。
- **用户信息展示**:已登录时在头像菜单里显示已读本数和累计阅读时长。
## 开发计划
计划不分先后,也可能会开发以下列表以外的功能:
1. 短剧网页端播放
2. 更完善的用户详情界面(自己的和他人的)
3. 段评、章评、书评
4. 阅读数据上报(与安卓端同步阅读进度与时长)
5. APP 端带推荐的排行榜
6. 分类筛选
7. 解锁书架中因下架或版权原因无法在网页阅读、但 APP 端仍可阅读的书籍
8. 更详细的书籍信息(评分、在读人数等)
9. 推书页面
10. 听书
11. 自定义 API 接口以实现更多高级功能
如果您有更多好的想法,欢迎提 PR 或 Issue。
## 使用
需要一个用户脚本管理器,推荐 [Tampermonkey](https://www.tampermonkey.net/)。
安装构建产物 `fanqie-assistant.user.js` 即可。
## 开发
```bash
npm install
npm run dev # 启动开发服务器
npm run build # 类型检查 + 打包
npm run preview # 预览构建产物
```
### 调试
`npm run dev` 后,vite-plugin-monkey 会输出一个安装地址,在脚本管理器里安装这个开发版即可。它指向本地开发服务器,改完代码刷新页面就能看到效果,不需要每次重新打包安装。
脚本运行时机是 `document-start`,日志都打在浏览器控制台,按 `fqa` 或钩子 id(如 `readerHook_load`)过滤比较方便。
调试时注意关掉正式版脚本,两个版本同时启用会重复注入。
### 编译
```bash
npm run build
```
产物是单文件 `dist/fanqie-assistant.user.js`。`build` 会先跑 `tsc` 做类型检查,类型报错会中断打包。
## 项目结构
```
src/
├── main.ts 入口,安装导航钩子并按顺序初始化各模块
├── config.ts 设备配置与全局常量
├── types.ts 书籍、卷、章节等数据模型
├── cssInject.ts 样式注入
├── fontDecrypt.ts 自绘字体文本还原
├── localStorage.ts 存储读写封装
├── api/ 接口层(用户、书籍、目录、正文)
├── hooks/ 页面钩子(阅读页、用户菜单、请求拦截)
├── utils/ 请求封装与加解密工具
└── assets/ 样式与图标
```
新增页面功能时,在 `hooks/` 下建一个模块,导出 `HookConfig[]` 并在 `hooks/index.ts` 里注册。每个钩子声明自己关心的事件和一个 `filter`,命中才执行,互不影响。
### UI 技术选型
目前的界面改动都是直接操作 DOM,因为改的量还很小,插几个节点就够了。Vue 已经引入并配好构建(`@vitejs/plugin-vue`),等做到短剧播放、用户详情、评论这类大型界面时会用 Vue 写,但现在还没到那一步。
## 关于账号安全
正文与书籍详情走 `*.jxbhmy.com`,这是番茄小说旗下**红烛小说**的接口,与番茄数据基本通用,风控更低且不需要请求签名。这是第一方接口,不是第三方服务。
脚本**没有申请 `GM_cookie` 权限**。`sessionid` 是 HttpOnly 的,脚本读不到、也没打算读。所有需要登录凭据的请求都用页面原生 `fetch` 发送的同源请求完成,由浏览器自动带上 Cookie,凭据不经过脚本,也不会被发往任何其他地方。
如果后续同源接口无法满足脚本需求,会考虑使用 `GM_cookie` 权限。但我们确保您的凭据不会被发送到番茄小说及其相关平台以外的任何第三方。后期加入第三方接口时,接口由您自己输入。此时,我们可能会将凭据发往**您自己填写的 API **。使用即应确认风险,我们不对任何第三方接口的行为负责。
代码全部开源,欢迎审查。
## 许可
[GPL-3.0](LICENSE)
## 免责声明
本项目仅供学习和技术研究使用。请遵守番茄小说的用户协议与相关法律法规,不要用于商业用途或内容再分发。
本项目永久开源免费,未经授权不得用于售卖。如果您通过购买获得此项目,那么证明你被骗了,请举报退款。
本项目不保证任何功能的稳定性、准确性和安全性,使用时请自行承担风险。