基于node&typescript重写知乎助手
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 3 年前 | ||
| 4 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 7 年前 | ||
| 4 年前 | ||
| 4 年前 | ||
| 7 年前 | ||
| 3 年前 | ||
| 7 年前 | ||
| 3 年前 | ||
| 7 年前 | ||
| 6 个月前 | ||
| 3 年前 | ||
| 7 年前 | ||
| 3 年前 | ||
| 7 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 4 年前 | ||
| 7 年前 | ||
| 3 年前 |
项目说明
- 项目基于知乎现有接口+TypeScript 构建,为知友提供方便的, 以供自己阅读/自身结集整理为目的的, 将知乎内容转为 Epub 电子书的途径
使用说明
- 下载软件安装包, 双击安装
- 在
任务输入框中输入待抓取的网址信息 - 点击
开始执行按钮 - 执行完毕后会打开电子书所在文件夹, 使用多看阅读或 Win10 下双击使用 Edge 浏览器打开均可
- 输出文件
知乎助手输出的电子书\epub内, 为输出的 Epub 电子书, 可以直接使用电子书阅读器阅读知乎助手输出的电子书\html内, 为输出的网页版答案列表html文件夹中为按回答分割的单个回答页面列表,index.html为目录页单文件版文件夹中为整个文件, 可以使用浏览器打开后, 直接打印为 PDF 书籍
- 使用示例 =>

注意事项
- 在生成电子书时可能会有卡顿, 根据电子书的体积(100k~2G)卡顿时间在 1s~1 分钟不等, 函请谅解
- 所有图片缓存都会存在安装目录下, 随着制作的电子书数量增加, 体积可能会非常大, 因此建议将软件安装在非系统盘根目录, 体积大了直接删除即可
知乎助手支持收集的任务类型
| 网址类型 | 描述 | 示例 |
|---|---|---|
| 指定知乎用户的全部提问/回答/想法/赞同过的回答/赞同过的文章/关注过的问题 | 用户个人主页地址 | http://www.zhihu.com/people/yyln2016 |
| 专栏 | 专栏网址 | http://zhuanlan.zhihu.com/yyln2016 |
| 文章 | 文章地址 | https://zhuanlan.zhihu.com/p/58653502 |
| 话题 | 知乎话题地址, 保存话题信息和话题精华中的答案 |
http://www.zhihu.com/topic/20024374 |
| 问题 | 问题地址 | https://www.zhihu.com/question/26784045 |
| 回答 | 答案地址 | https://www.zhihu.com/question/26784045/answer/178802510 |
| 想法 | 想法地址 | https://www.zhihu.com/pin/1013109294408986624 |
| 收藏夹(公开/私人) | 知乎公开收藏夹地址, 只保存收藏夹信息和收藏夹内的答案, 由于获取不到文章列表, 所以无法保存文章 只能保存所登录账号的私密收藏夹夹 |
http://www.zhihu.com/collection/19555617 |
配置项说明
- 电子书名
- 最终生成的电子书名
- 抓取任务
- 支持三种模式:
- 默认独立输出单本电子书: 按子任务分别输出电子书 -> 不允许自定义电子书名
- 合并混排输出: 输出一本电子书, 电子书内容为将多个子任务的内容混排后进行输出 -> 允许自定义电子书名
- 合并按顺序输出: 输出一本电子书, 但内部按子任务进行合并排序, 每个子任务是一个章节 -> 允许自定义电子书名
- 支持三种模式:
- 排序规则
- 可以按照: 创建时间/更新时间/赞同数/回答数对内容进行排序
- 当有多个排序规则时, 排序优先级按从上到下进行
- 图片质量
- 高清 => 默认值
- 无图 => 完全没有图片
- 原图 => 图片原图, 会导致电子书体积过大, 一般不建议使用
- 自动分卷
- 每本电子书内最多可有的(问题+想法+文章)总数
- 超过该数值会对电子书进行自动分卷, 输出名为"电子书-卷 1"/"电子书-卷 2"/"电子书-卷 3"/etc 的 n 个文件
- 备注
- 用于保存备注信息
- 配置文件内容
- 最终生成的配置文件, debug 用
问题反馈
如有 bug, 烦请邮件告知
务必附上出现 bug 时的配置文件哦
目标分解
-
基础功能
-
扩展功能
-
-
todo
-
-
fixed bug list
-
二期规划
- 项目目标
- 制作电子书, 方便自己阅读
- 而不是制作电子书, 以对外发布
- 不需要商业化
- 因此不需要复杂的排版功能
- 关键在于, 是否方便
- 需要
- 收集功能
- 简单自定义内容
- 制作电子书, 方便自己阅读
- 电子书制作模式
- 基础模式
- 选择数据源
- 问题/答案/收藏夹/话题/想法/专栏/文章/用户回答/用户提问过的问题/用户关注过的问题/用户赞同过的回答&文章/用户想法
- 确认输出模式
- 排序模式
- 正序/倒序
- 问题与文章
- 赞同数
- 评论数
- 答案/文章创建时间
- 答案/文章最后更新时间
- 收藏时间-可选
- 想法
- 发布时间
- 赞同数
- 评论数
- 转发数
- 用户故事
- 支持按照赞同时间顺序
- 正序/倒序
- 支持按照赞同时间顺序
- 用户关注过的问题
- 支持按照关注时间顺序
- 正序/倒序
- 支持按照关注时间顺序
- 问题列表/混排模式
- 支持按照原始设定顺序
- 答案视为一个问题
- 文章也视为一个问题
- 按以下进行排序
- 总答案赞同数
- 问题关注人数
- 问题浏览数
- 问题创建时间
- 问题最后编辑时间
- 单纯收藏夹
- 支持按收藏时间排序
- 过滤条件
- 正序/倒序
- 问题与文章
- 赞同数
- 评论数
- 答案/文章创建时间
- 答案/文章最后更新时间
- 想法
- 发布时间
- 赞同数
- 评论数
- 转发数
- 问题与文章
- 前 n 条/前百分之 n
- 至少 m 条
- 至多 y 条
- 正序/倒序
- 图片配置
- 原图
- 默认
- 无图
- 自定义逻辑
- 按最小宽高(或/且)
- 宽大于指定值 => 使用原图
- 高大于指定值 => 使用原图
- 按最小宽高(或/且)
- 排序模式
- 输出单位
- 如果是简单类型(话题/专栏/用户回答/用户问题/用户想法/收藏夹/单个问题), 单独输出一本电子书, 允许自定义书名
- 如果是复杂类型(两种及以上类型混合), 按问题/文章/想法三大类聚合输出, 不支持分章节
- 存储单位
- 基本单位
- 回答
- 文章
- 想法
- id 统一使用 varchar(100)
- 使用基本接口进行查询
- 其余数据使用这两者进行构建, 例如, 关注问题列表的记录为
- 关注问题列表
- 问题下回答列表
- 关注问题列表
- 基本单位
- 选择数据源
- 基础模式
- 项目目标
代码规范
- 变量命名规范
- 类型统一使用 namespace 方式声明, 导入时使用
Type + xxx形式进行导入 - Model 导入时统一使用
M + xxx形式进行导入 - View 导入时统一使用
View + xxx形式进行导入 - Util 工具函数导入时统一使用
xxx + Util形式进行导入 - async 函数前统一添加
async前缀, 以和正常函数进行区分
- 类型统一使用 namespace 方式声明, 导入时使用
- 文件命名规范
- 统一使用下划线方式命名
开发说明
- 建议只开发命令版
- 使用
npm run ace启动
- 使用
- GUI 版需要为 Electron 编译 sqlite3, 非常麻烦, 不建议尝试
- 编译指南: https://www.cnblogs.com/DonaHero/p/9809325.html
- 流程
- Windows 用户
- 安装 Python3, 第一步时勾选
添加Python到Path, 如果未勾选, 可以重装一遍 - 安装VS 2022 社区版
- 文件-新建项目-Visual C++ -> 选择 安装 vs2022 所需的 C++开发环境
- 执行
npm run rebuild-electron-with-sqlite3, 编译完成 sqlite3 之后, 就可以启动 GUI 界面了
- 安装 Python3, 第一步时勾选
- Mac 用户
- 我没有 mac 谢谢
- Windows 用户
- 注意:
- 打包时会向 dist 目录中复制一份 node_modules 目录, 导致 npm run 时优先从 dist 中获取 node_module 信息, 导致无法启动
- 因此, 打包结束后需要将 dist 里的 node_modules 目录删掉, 以免影响后续开发工作
- 打包时会向 dist 目录中复制一份 node_modules 目录, 导致 npm run 时优先从 dist 中获取 node_module 信息, 导致无法启动
- 电子书封面分辨率为: 100 * 130(宽*高)
- commit 信息规范 =>
关键字 功能 feat 添加新功能 format 调整代码格式 fix 修复错误 doc 修订文档/注释
开发指南
基本思路
- TypeScript 提供类型支持, 在编写代码时可以自动提示变量下的属性
- Electron 提供图形界面, 利用 webview 标签直接登陆知乎
- 利用知乎接口抓取数据
- ace/command 提供命令行支持
- sqlite3 提供数据库支持
实现方式
- 将电子书制作分为以下三步
- 初始化环境 => 对应于
npm run ace Init:Env命令 - 抓取指定内容 => 对应于
npm run ace Fetch:XXX系列命令, 目前支持Column/Author/Activity/Collection/Topic - 从数据库中获得数据, 生成指定内容电子书 => 对应于
npm run ace Generate:XXX系列命令, 目前支持Column/Author/Activity/Collection/Topic - 因此, 实际任务流程就是根据用户输入 url, 生成对应命令配置, 不断执行命令即可
- 初始化环境 => 对应于
- 项目开发流程
npm run watch启动监控, 将ts自动编译为js文件npm run startgui, 启动前端界面(vue 项目, 基于 Element-UI 简单构建)- 修改
src/index.ts, 将代码由替换为// 线上地址 mainWindow.loadFile('./gui/dist/index.html') // 本地调试 & 打开控制台 // mainWindow.loadURL('http://127.0.0.1:8080') // mainWindow.webContents.openDevTools()使用本地页面进行调试// 线上地址 // mainWindow.loadFile('./gui/dist/index.html') // 本地调试 & 打开控制台 mainWindow.loadURL('http://127.0.0.1:8080') mainWindow.webContents.openDevTools() - 执行
npm run start, 启动 Electron- 前端点击
开始任务按钮后, 将任务配置写入task_config_list.json, 再由 Electron 收集登陆后产生的知乎 cookie, 存入config.json文件中, 随后启动Dispatch:Command命令, 开始执行任务
- 前端点击
- 注意事项
- Electron 需要编译 sqlite3 后才能启动, 不容易搞, 建议直接使用
npm run ace命令行方式进行调试 - 命令使用说明详见代码
- 建议最好配置淘宝镜像, 以便加快 install 速度
npm config set registry https://registry.npmmirror.com npm config set disturl https://npmmirror.com/mirrors/node/ npm config set electron_mirror https://npmmirror.com/mirrors/electron/ - 如果 sharp 无法安装, 可以尝试使用
npm install进行安装
- Electron 需要编译 sqlite3 后才能启动, 不容易搞, 建议直接使用
功能建议
欢迎通过issue提建议