{"id":13521829,"url":"https://github.com/YaoZeyuan/zhihuhelp","last_synced_at":"2025-03-31T21:33:31.920Z","repository":{"id":1022431,"uuid":"169049001","full_name":"YaoZeyuan/zhihuhelp","owner":"YaoZeyuan","description":"基于node\u0026typescript重写知乎助手","archived":false,"fork":false,"pushed_at":"2023-10-18T12:53:06.000Z","size":6472,"stargazers_count":849,"open_issues_count":62,"forks_count":169,"subscribers_count":31,"default_branch":"master","last_synced_at":"2024-11-02T06:30:47.703Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.yaozeyuan.online/zhihuhelp/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/YaoZeyuan.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-02-04T08:37:40.000Z","updated_at":"2024-11-02T02:52:13.000Z","dependencies_parsed_at":"2024-01-13T21:43:13.661Z","dependency_job_id":"2c581307-a9f2-428f-80eb-78db4af4f7c1","html_url":"https://github.com/YaoZeyuan/zhihuhelp","commit_stats":{"total_commits":468,"total_committers":6,"mean_commits":78.0,"dds":"0.42307692307692313","last_synced_commit":"0e8cb7b582f72ccc3843283a0aa7e5b34ac20a9e"},"previous_names":[],"tags_count":40,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YaoZeyuan%2Fzhihuhelp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YaoZeyuan%2Fzhihuhelp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YaoZeyuan%2Fzhihuhelp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YaoZeyuan%2Fzhihuhelp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/YaoZeyuan","download_url":"https://codeload.github.com/YaoZeyuan/zhihuhelp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246544311,"owners_count":20794482,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T06:00:38.387Z","updated_at":"2025-03-31T21:33:31.583Z","avatar_url":"https://github.com/YaoZeyuan.png","language":"TypeScript","funding_links":[],"categories":["好玩项目","TypeScript"],"sub_categories":["摸鱼神器"],"readme":"## 项目说明\n\n**知乎助手** 由 [姚泽源](http://www.yaozeyuan.online/) 创作，采用 [MIT](http://opensource.org/licenses/MIT) 协议进行许可。\n\n- 项目基于知乎现有接口+TypeScript 构建，为知友提供方便的, 以供自己阅读/自身结集整理为目的的, 将知乎内容转为 Epub 电子书的途径\n\n## 使用说明\n\n1.  [下载软件安装包](https://www.yaozeyuan.online/zhihuhelp), 双击安装\n2.  在`任务输入框`中输入待抓取的网址信息\n3.  点击`开始执行`按钮\n4.  执行完毕后会打开电子书所在文件夹, 使用**多看阅读**或 Win10 下双击使用 Edge 浏览器打开均可\n5.  输出文件\n    1.  `知乎助手输出的电子书\\epub`内, 为输出的 Epub 电子书, 可以直接使用电子书阅读器阅读\n    2.  `知乎助手输出的电子书\\html`内, 为输出的网页版答案列表\n        1.  `html`文件夹中为按回答分割的单个回答页面列表, `index.html`为目录页\n        2.  `单文件版`文件夹中为整个文件, 可以使用浏览器打开后, 直接打印为 PDF 书籍\n6.  使用示例 =\u003e\n    ![使用说明](http://ww1.sinaimg.cn/large/6671cfa8ly1g5w8r66ou7j21b90sijtj.jpg)\n\n# 注意事项\n\n1.  在生成电子书时可能会有卡顿, 根据电子书的体积(100k~2G)卡顿时间在 1s~1 分钟不等, 函请谅解\n2.  所有图片缓存都会存在安装目录下, 随着制作的电子书数量增加, 体积可能会非常大, 因此建议将软件安装在非系统盘根目录, 体积大了直接删除即可\n\n## 知乎助手支持收集的任务类型\n\n| 网址类型                                                                | 描述                                                                                                                                    | 示例                                                       |\n| ----------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- |\n| 指定知乎用户的全部提问/回答/想法/赞同过的回答/赞同过的文章/关注过的问题 | 用户个人主页地址                                                                                                                        | `http://www.zhihu.com/people/yyln2016`                     |\n| 专栏                                                                    | 专栏网址                                                                                                                                | `http://zhuanlan.zhihu.com/yyln2016`                       |\n| 文章                                                                    | 文章地址                                                                                                                                | `https://zhuanlan.zhihu.com/p/58653502`                    |\n| 话题                                                                    | 知乎话题地址，\u003cbr /\u003e保存话题信息和话题精华中的答案                                                                                      | `http://www.zhihu.com/topic/20024374`                      |\n| 问题                                                                    | 问题地址                                                                                                                                | `https://www.zhihu.com/question/26784045`                  |\n| 回答                                                                    | 答案地址                                                                                                                                | `https://www.zhihu.com/question/26784045/answer/178802510` |\n| 想法                                                                    | 想法地址                                                                                                                                | `https://www.zhihu.com/pin/1013109294408986624`            |\n| 收藏夹(公开/私人)                                                       | 知乎公开收藏夹地址，\u003cbr /\u003e只保存收藏夹信息和收藏夹内的答案, 由于获取不到文章列表, 所以无法保存文章\u003cbr/\u003e只能保存所登录账号的私密收藏夹夹 | `http://www.zhihu.com/collection/19555617`                 |\n\n# 配置项说明\n\n1.  电子书名\n    1.  最终生成的电子书名\n2.  抓取任务\n    1.  支持三种模式:\n        1.  **默认**独立输出单本电子书: 按子任务分别输出电子书 -\u003e 不允许自定义电子书名\n        2.  合并混排输出: 输出一本电子书, 电子书内容为将多个子任务的内容混排后进行输出 -\u003e 允许自定义电子书名\n        3.  合并按顺序输出: 输出一本电子书, 但内部按子任务进行合并排序, 每个子任务是一个章节 -\u003e 允许自定义电子书名\n3.  排序规则\n    1.  可以按照: 创建时间/更新时间/赞同数/回答数对内容进行排序\n    2.  当有多个排序规则时, 排序优先级按从上到下进行\n4.  图片质量\n    1.  高清 =\u003e 默认值\n    2.  无图 =\u003e 完全没有图片\n    3.  原图 =\u003e 图片原图, 会导致电子书体积过大, 一般不建议使用\n5.  自动分卷\n    1.  每本电子书内最多可有的(问题+想法+文章)总数\n    2.  超过该数值会对电子书进行自动分卷, 输出名为\"电子书-卷 1\"/\"电子书-卷 2\"/\"电子书-卷 3\"/etc 的 n 个文件\n6.  备注\n    1.  用于保存备注信息\n7.  配置文件内容\n    1.  最终生成的配置文件, debug 用\n\n# 问题反馈\n\n如有 bug, 烦请[邮件告知](mailto://yaozeyuan93@gmail.com?subject%3D%E7%9F%A5%E4%B9%8E%E5%8A%A9%E6%89%8Bbug%E5%8F%8D%E9%A6%88%26body%3D%E4%BD%A0%E5%A5%BD%2C%E6%88%91%E5%9C%A8%E4%BD%BF%E7%94%A8%E7%9F%A5%E4%B9%8E%E5%8A%A9%E6%89%8B%E6%97%B6%E5%8F%91%E7%8E%B0%E4%BA%86%E4%BB%A5%E4%B8%8B%E9%97%AE%E9%A2%98%2C%0A1.%09XXX%0A2.%09YYY%0A3.%09ZZZ%0A%E8%BF%99%E6%98%AF%E6%88%91%E7%9A%84%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E5%86%85%E5%AE%B9.%0A%0A%E9%BA%BB%E7%83%A6%E7%9C%8B%E4%B8%80%E4%B8%8B.)\n\n务必附上出现 bug 时的配置文件哦\n\n# 目标分解\n\n1.  基础功能\n    - [x] 抓取用户回答\n    - [x] 导出用户回答\n    - [x] 抓取收藏夹\n    - [x] 导出收藏夹\n    - [x] 抓取话题精华回答\n    - [x] 导出话题精华回答\n    - [x] 自定义抓取问题/回答/文章列表\n    - [x] 抓取专栏文章\n    - [x] 导出专栏文章\n    - [x] 抓取用户行为记录\n    - [x] 导出用户点赞的所有文章/回答\n    - [x] 使用基础命令, 派发进程\n2.  扩展功能\n    - [x] 导出为单页 HTML\n    - [x] 导出为 epub\n    - [x] 支持通过配置, 按赞同数/创建时间 正序/倒序 导出文章/答案\n    - [x] 添加升级检测, 从服务器获取 cookie\n    - [x] 添加图形界面, 利用 Electron 创建图形界面/登陆知乎/生成命令配置\n    - [x] 利用 Electron 根据命令启动配置\n    - [x] 在 Electron 展示后端运行日志\n    - [ ] 获取问题/回答/文章时, 统一使用标准的 answer/article 接口进行获取, 保证数据结构一致性(需要了解知乎接口相关参数原理)\n    - [x] 能够自动读取上一次生成的配置文件, 而不是每次都需要重新输入\n    - [ ] 能够按照赞同/答案长度等指标过滤答案\n    - [ ] 开始运行时在前端界面自动检测升级, 并给与提示\n    - [ ] 导出文件时, 支持自定义配置\n      - [x] 电子书名\n        - [ ] 应有默认值\n      - [ ] 封面\n      - [ ] 作者\n3.  todo\n    - [x] 将 type 声明改为使用 namespace 形式进行声明\n    - [x] 将 view 改为使用类继承方式进行实现\n    - [x] 输出目录结构\n    - [x] 当用户回答为空时, 需要跳过渲染环节\n    - [x] 解决 GUI 下看不到运行日志的问题\n    - [x] 解决 GUI 版本无法生成 epub 文件\n    - [x] 解决 GUI 版本无法将生成结果从缓存文件夹中复制到输出文件夹中的问题\n    - [x] 为电子书添加封面\n    - [x] 解决 Edge 浏览器下用户头像过大问题\n    - [x] 解决目录列表页显示有空行的问题\n    - [x] 解决多看电子书结尾处右下角会换行的问题\n    - [x] 添加一个 tab, 作为使用说明\n    - [x] 运行日志刷新频率过高会导致页面卡死, 定时刷新需要延长执行时间\n    - [x] 展示日志应该限制总高度, 每次刷新后应自动滚动到最下方\n    - [x] 把 demo 调的正规一点\n    - [ ] 话题支持输出文章\u0026回答(话题列表中同时有回答\u0026文章, 目前为了赶进度, 只渲染的文章)\n    - [ ] 支持分卷(每 10000 个问题分为一本电子书, 避免文件体积过大)\n    - [ ] 调整回答右下角日期格式, 现在分成了三块, 不好看\n    - [ ] 支持配置项中的功能\n      - [ ] 答案排序\n        - [x] 创建时间\n        - [x] 更新时间\n        - [x] 赞同数\n        - [x] 评论数\n          - [x] 由高到低\n          - [x] 有新到旧\n      - [x] 图片质量\n        - [x] 高清\n        - [x] 原图\n        - [x] 无图\n      - [x] 自动分卷\n        - [x] 10000\n    - [ ] 只有抓取全部记录才是高频率的抓取, 因此可以设定抓取范围, 按时间范围, 避免频繁抓取\n    - [ ] 验证想法页面是否可以正常渲染\n    - [x] 优化页面样式\n    - [ ] 启动时检查是否有权限/用户是否被封禁\n    - [ ] 如果用户被封禁, 暂停任务, 提示用户重新登陆\n4.  fixed bug list\n    - [x] 输出图片的时候, 本应该替换 src 属性, 但是替换成了 data-default-watermark-src 属性\n    - [x] 致谢列表溢出了背景颜色区域\n5.  二期规划\n\n    1.  项目目标\n        1.  制作电子书, 方便自己阅读\n            1.  而不是制作电子书, 以对外发布\n            2.  不需要商业化\n            3.  因此不需要复杂的排版功能\n            4.  关键在于, 是否方便\n        2.  需要\n            1.  收集功能\n            2.  简单自定义内容\n    2.  电子书制作模式\n        1.  基础模式\n            1.  选择数据源\n                1.  问题/答案/收藏夹/话题/想法/专栏/文章/用户回答/用户提问过的问题/用户关注过的问题/用户赞同过的回答\u0026文章/用户想法\n            2.  确认输出模式\n                1.  排序模式\n                    1.  正序/倒序\n                    2.  问题与文章\n                        1.  赞同数\n                        2.  评论数\n                        3.  答案/文章创建时间\n                        4.  答案/文章最后更新时间\n                        5.  收藏时间-可选\n                    3.  想法\n                        1.  发布时间\n                        2.  赞同数\n                        3.  评论数\n                        4.  转发数\n                    4.  用户故事\n                        1.  支持按照赞同时间顺序\n                            1.  正序/倒序\n                    5.  用户关注过的问题\n                        1.  支持按照关注时间顺序\n                            1.  正序/倒序\n                    6.  问题列表/混排模式\n                        1.  支持按照原始设定顺序\n                        2.  答案视为一个问题\n                        3.  文章也视为一个问题\n                        4.  按以下进行排序\n                            1.  总答案赞同数\n                            2.  问题关注人数\n                            3.  问题浏览数\n                            4.  问题创建时间\n                            5.  问题最后编辑时间\n                    7.  单纯收藏夹\n                        1.  支持按收藏时间排序\n                2.  过滤条件\n                    1.  正序/倒序\n                        1.  问题与文章\n                            1.  赞同数\n                            2.  评论数\n                            3.  答案/文章创建时间\n                            4.  答案/文章最后更新时间\n                        2.  想法\n                            1.  发布时间\n                            2.  赞同数\n                            3.  评论数\n                            4.  转发数\n                    2.  前 n 条/前百分之 n\n                    3.  至少 m 条\n                    4.  至多 y 条\n                3.  图片配置\n                    1.  原图\n                    2.  默认\n                    3.  无图\n                    4.  自定义逻辑\n                        1.  按最小宽高(或/且)\n                            1.  宽大于指定值 =\u003e 使用原图\n                            2.  高大于指定值 =\u003e 使用原图\n            3.  输出单位\n                1.  如果是简单类型(话题/专栏/用户回答/用户问题/用户想法/收藏夹/单个问题), 单独输出一本电子书, 允许自定义书名\n                2.  如果是复杂类型(两种及以上类型混合), 按问题/文章/想法三大类聚合输出, 不支持分章节\n            4.  存储单位\n                1.  基本单位\n                    1.  回答\n                    2.  文章\n                    3.  想法\n                2.  id 统一使用 varchar(100)\n                3.  使用基本接口进行查询\n                4.  其余数据使用这两者进行构建, 例如, 关注问题列表的记录为\n                    1.  关注问题列表\n                        1.  问题下回答列表\n\n    - [ ] 支持自定义\n      - [ ] 电子书\n        - [ ] 书名\n        - [ ] 封面图片\n        - [ ] 作者\n        - [ ] 相关可配置属性\n      - [ ] 电子书集合\n        - [ ] 统一叫自定义电子书\n        - [ ] 回答\n        - [ ] 问题\n        - [ ] 专栏\n        - [ ] 文章\n        - [ ] 想法\n    - [ ] 支持抓取\n      - [ ] 想法\n      - [ ] 回答\n      - [ ] 问题\n      - [ ] 用户关注过的问题下的回答\n    - [ ] 组织模式\n      - [ ] 按问题组织\n      - [ ] 对外的最小粒度应该是问题/文章/想法\n      - [ ] 想法单条展示\n        - [ ] 想法下\n          - [ ] 图片 =\u003e 直接展示\n          - [ ] 文章/回答 =\u003e 抓取内容进行渲染\n          - [ ] 问题 =\u003e 抓取答案进行渲染, 默认只渲染按赞同数排名的前 20 条\n\n# 代码规范\n\n1.  变量命名规范\n    1.  类型统一使用 namespace 方式声明, 导入时使用`Type + xxx`形式进行导入\n    2.  Model 导入时统一使用`M + xxx`形式进行导入\n    3.  View 导入时统一使用`View + xxx`形式进行导入\n    4.  Util 工具函数导入时统一使用`xxx + Util`形式进行导入\n    5.  async 函数前统一添加`async`前缀, 以和正常函数进行区分\n2.  文件命名规范\n    1.  统一使用下划线方式命名\n\n# 开发说明\n\n1.  建议只开发命令版\n    1.  使用`npm run ace`启动\n2.  GUI 版需要为 Electron 编译 sqlite3, 非常麻烦, 不建议尝试\n    1.  编译指南: https://www.cnblogs.com/DonaHero/p/9809325.html\n    2.  流程\n        1.  Windows 用户\n            1.  安装 Python3, 第一步时勾选`添加Python到Path`, 如果未勾选, 可以重装一遍\n            2.  安装[VS 2022 社区版](https://visualstudio.microsoft.com/zh-hans/thank-you-downloading-visual-studio/?sku=community\u0026channel=Release\u0026version=VS2022\u0026source=VSLandingPage\u0026cid=2030\u0026passive=false)\n            3.  文件-新建项目-Visual C++ -\u003e 选择 安装 vs2022 所需的 C++开发环境\n            4.  执行 `npm run rebuild-electron-with-sqlite3`, 编译完成 sqlite3 之后, 就可以启动 GUI 界面了\n        2.  Mac 用户\n            1.  我没有 mac 谢谢\n    3.  注意:\n        1.  打包时会向 dist 目录中复制一份 node_modules 目录, 导致 npm run 时优先从 dist 中获取 node_module 信息, 导致无法启动\n            1.  因此, 打包结束后需要将 dist 里的 node_modules 目录删掉, 以免影响后续开发工作\n3.  电子书封面分辨率为: 100 * 130(宽*高)\n4.  commit 信息规范 =\u003e\n    | 关键字 | 功能 |\n    | ------ | ------------- |\n    | feat | 添加新功能 |\n    | format | 调整代码格式 |\n    | fix | 修复错误 |\n    | doc | 修订文档/注释 |\n\n# 开发指南\n\n## 基本思路\n\n1.  TypeScript 提供类型支持, 在编写代码时可以自动提示变量下的属性\n2.  Electron 提供图形界面, 利用 webview 标签直接登陆知乎\n3.  利用知乎接口抓取数据\n4.  ace/command 提供命令行支持\n5.  sqlite3 提供数据库支持\n\n## 实现方式\n\n1.  将电子书制作分为以下三步\n    1.  初始化环境 =\u003e 对应于`npm run ace Init:Env`命令\n    2.  抓取指定内容 =\u003e 对应于`npm run ace Fetch:XXX`系列命令, 目前支持`Column`/`Author`/`Activity`/`Collection`/`Topic`\n    3.  从数据库中获得数据, 生成指定内容电子书 =\u003e 对应于`npm run ace Generate:XXX`系列命令, 目前支持`Column`/`Author`/`Activity`/`Collection`/`Topic`\n    4.  因此, 实际任务流程就是根据用户输入 url, 生成对应命令配置, 不断执行命令即可\n2.  项目开发流程\n    1.  `npm run watch` 启动监控, 将`ts`自动编译为`js`文件\n    2.  `npm run startgui`, 启动前端界面(vue 项目, 基于 Element-UI 简单构建)\n    3.  修改`src/index.ts`, 将代码由\n        ```js\n        // 线上地址\n        mainWindow.loadFile('./gui/dist/index.html')\n        // 本地调试 \u0026 打开控制台\n        // mainWindow.loadURL('http://127.0.0.1:8080')\n        // mainWindow.webContents.openDevTools()\n        ```\n        替换为\n        ```js\n        // 线上地址\n        // mainWindow.loadFile('./gui/dist/index.html')\n        // 本地调试 \u0026 打开控制台\n        mainWindow.loadURL('http://127.0.0.1:8080')\n        mainWindow.webContents.openDevTools()\n        ```\n        使用本地页面进行调试\n    4.  执行`npm run start`, 启动 Electron\n        1.  前端点击`开始任务`按钮后, 将任务配置写入`task_config_list.json`, 再由 Electron 收集登陆后产生的知乎 cookie, 存入`config.json`文件中, 随后启动`Dispatch:Command`命令, 开始执行任务\n3.  注意事项\n    1.  Electron 需要编译 sqlite3 后才能启动, 不容易搞, 建议直接使用`npm run ace`命令行方式进行调试\n    2.  命令使用说明详见代码\n    3.  建议最好配置淘宝镜像, 以便加快 install 速度\n        ```shell\n        npm config set registry https://registry.npmmirror.com\n        npm config set disturl https://npmmirror.com/mirrors/node/\n        npm config set electron_mirror https://npmmirror.com/mirrors/electron/\n        ```\n    4.  如果 sharp 无法安装, 可以尝试使用`npm install`进行安装\n\n# 功能建议\n\n欢迎通过[issue](https://github.com/YaoZeyuan/zhihuhelp/issues)提建议\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FYaoZeyuan%2Fzhihuhelp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FYaoZeyuan%2Fzhihuhelp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FYaoZeyuan%2Fzhihuhelp/lists"}