Git Product home page Git Product logo

zhihuhelp_with_node's Introduction

知乎助手 with TS

项目说明

知乎助手姚泽源 创作,采用 MIT 协议进行许可。

  • 项目基于知乎现有接口+TypeScript构建,希望能借此探索TypeScript的使用方式, 同时为知友提供将知乎内容转为Epub电子书的途径

使用说明

  1. 下载软件安装包(Windows版), 双击安装
  2. 任务输入框中输入待抓取的网址信息
  3. 点击开始执行按钮
  4. 执行完毕后会打开电子书所在文件夹, 使用多看阅读或双击使用Edge浏览器打开均可
  5. 输出文件
    1. 知乎助手输出的电子书\epub内, 为输出的Epub电子书, 可以直接使用电子书阅读器阅读
    2. 知乎助手输出的电子书\html内, 为输出的网页版答案列表
      1. html文件夹中为按回答分割的单个回答页面列表, index.html为目录页
      2. 单文件版文件夹中为整个文件, 可以使用浏览器打开后, 直接打印为PDF书籍
  6. 使用示例 => 使用说明

注意事项

  1. 在生成电子书时可能会有卡顿, 根据电子书的体积(100k2G)卡顿时间在1s1分钟不等, 函请谅解
  2. 所有图片缓存都会存在安装目录下, 随着制作的电子书数量增加, 体积可能会非常大, 因此建议将软件安装在非系统盘根目录, 体积大了直接删除即可

知乎助手支持收集的网址类型

网址类型 描述 示例
指定知乎用户赞同过的全部回答&文章 用户个人主页地址 + /activities/ http://www.zhihu.com/people/yyln2016/activities/,
http://www.zhihu.com/people/ying-ye-78/activities/,
http://www.zhihu.com/people/bo-cai-28-7/activities/
指定知乎用户的全部回答 用户个人主页地址 http://www.zhihu.com/people/yyln2016,
http://www.zhihu.com/people/ying-ye-78/answers,
http://www.zhihu.com/people/bo-cai-28-7/logs
话题 知乎话题地址,
保存话题信息和话题精华中的答案
http://www.zhihu.com/topic/20024374,
http://www.zhihu.com/topic/20024374/top-answers,
http://www.zhihu.com/topic/20024374
公开收藏夹 知乎公开收藏夹地址,
保存收藏夹信息和收藏夹内的答案
http://www.zhihu.com/collection/19555617,
http://www.zhihu.com/collection/19731344,
http://www.zhihu.com/collection/133027089
私人收藏夹 知乎私人收藏夹地址,
保存收藏夹信息和收藏夹内的答案,
需要创建者用自己的ID登陆知乎助手
同正常收藏夹
专栏 专栏的网址 http://zhuanlan.zhihu.com/yyln2016,
http://zhuanlan.zhihu.com/FrontendPerusal,
http://zhuanlan.zhihu.com/patisserie

目标分解

  1. 基础功能
    • 抓取用户回答
    • 导出用户回答
    • 抓取收藏夹
    • 导出收藏夹
    • 抓取话题精华回答
    • 导出话题精华回答
    • 自定义抓取问题/回答/文章列表
    • 抓取专栏文章
    • 导出专栏文章
    • 抓取用户行为记录
    • 导出用户点赞的所有文章/回答
    • 使用基础命令, 派发进程
  2. 扩展功能
    • 导出为单页HTML
    • 导出为epub
    • 支持通过配置, 按赞同数/创建时间 正序/倒序 导出文章/答案
    • 添加升级检测, 从服务器获取cookie
    • 添加图形界面, 利用Electron创建图形界面/登陆知乎/生成命令配置
    • 利用Electron根据命令启动配置
    • 在Electron展示后端运行日志
    • 获取问题/回答/文章时, 统一使用标准的answer/article接口进行获取, 保证数据结构一致性(需要了解知乎接口相关参数原理)
    • 能够自动读取上一次生成的配置文件, 而不是每次都需要重新输入
    • 能够按照赞同/答案长度等指标过滤答案
    • 开始运行时在前端界面自动检测升级, 并给与提示
    • 导出文件时, 支持自定义配置(电子书名/封面/作者/etc)
  3. todo
    • 将type声明改为使用namespace形式进行声明
    • 将view改为使用类继承方式进行实现
    • 输出目录结构
    • 当用户回答为空时, 需要跳过渲染环节
    • 解决GUI下看不到运行日志的问题
    • 解决GUI版本无法生成epub文件
    • 解决GUI版本无法将生成结果从缓存文件夹中复制到输出文件夹中的问题
    • 为电子书添加封面
    • 解决Edge浏览器下用户头像过大问题
    • 解决目录列表页显示有空行的问题
    • 解决多看电子书结尾处右下角会换行的问题
    • 添加一个tab, 作为使用说明
    • 运行日志刷新频率过高会导致页面卡死, 定时刷新需要延长执行时间
    • 展示日志应该限制总高度, 每次刷新后应自动滚动到最下方
    • 把demo调的正规一点
    • 话题支持输出文章&回答(话题列表中同时有回答&文章, 目前为了赶进度, 只渲染的文章)
  4. fixed bug list
    • 输出图片的时候, 本应该替换src属性, 但是替换成了data-default-watermark-src属性
    • 致谢列表溢出了背景颜色区域

代码规范

  1. 变量命名规范
    1. 类型统一使用namespace方式声明, 导入时使用Type + xxx形式进行导入
    2. Model导入时统一使用M + xxx形式进行导入
    3. View导入时统一使用View + xxx形式进行导入
    4. Util工具函数导入时统一使用xxx + Util形式进行导入
    5. async函数前统一添加async前缀, 以和正常函数进行区分
  2. 文件命名规范
    1. 统一使用下划线方式命名

开发说明

  1. 建议只开发命令版
    1. 使用npm run ace启动
  2. GUI版需要为Electron编译sqlite3, 非常麻烦, 不建议尝试
    1. 编译指南: https://www.cnblogs.com/DonaHero/p/9809325.html
    2. 流程
      1. Windows用户
        1. 安装VS 2015社区版, 是的你没看错
        2. 文件-新建项目-Visual C++ -> 选择 安装vs2015所需的C++开发环境
        3. 好了一个小时过去了
        4. 执行 npm run rebuild-electron-with-sqlite3, 编译完成sqlite3之后, 就可以启动GUI界面了
      2. Mac用户
        1. 我没有mac谢谢
    3. 注意:
      1. 打包时会向dist目录中复制一份node_modules目录, 导致npm run 时优先从dist中获取node_module信息, 导致无法启动
        1. 因此, 打包结束后需要将dist里的node_modules目录删掉, 以免影响后续开发工作
  3. 电子书封面分辨率为: 100 * 130(宽*高)
  4. commit信息规范 =>
    关键字 功能
    feat 添加新功能
    format 调整代码格式
    fix 修复错误
    doc 修订文档/注释

开发指南

基本思路

  1. TypeScript提供类型支持, 在编写代码时可以自动提示变量下的属性
  2. Electron提供图形界面, 利用webview标签直接登陆知乎
  3. 利用知乎接口抓取数据
  4. ace/command提供命令行支持
  5. sqlite3提供数据库支持

实现方式

  1. 将电子书制作分为以下三步
    1. 初始化环境 => 对应于npm run ace Init:Env命令
    2. 抓取指定内容 => 对应于npm run ace Fetch:XXX系列命令, 目前支持Column/Author/Activity/Collection/Topic
    3. 从数据库中获得数据, 生成指定内容电子书 => 对应于npm run ace Generate:XXX系列命令, 目前支持Column/Author/Activity/Collection/Topic
    4. 因此, 实际任务流程就是根据用户输入url, 生成对应命令配置, 不断执行命令即可
  2. 项目开发流程
    1. npm run watch 启动监控, 将ts自动编译为js文件
    2. npm run startgui, 启动前端界面(vue项目, 基于Element-UI简单构建)
    3. 修改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()
      使用本地页面进行调试
    4. 执行npm run start, 启动Electron
      1. 前端点击开始任务按钮后, 将任务配置写入task_config_list.json, 再由Electron收集登陆后产生的知乎cookie, 存入config.json文件中, 随后启动Dispatch:Command命令, 开始执行任务
  3. 注意事项
    1. Electron需要编译sqlite3后才能启动, 不容易搞, 建议直接使用npm run ace命令行方式进行调试
    2. 命令使用说明详见代码

功能建议

欢迎通过issue提建议

支持作者

感谢支持

致谢列表

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.