该项目是一个用于批量下载 Kemono 中帖子内容的实用命令行工具,在 GitHub 上开源,500+ stars。
## 功能
- 支持多文件并发下载
- API 调用和下载失败后 **自动重试**
- 支持下载单个帖子以及指定的画师的 **全部帖子**
- 可 **更新已下载** 的画师目录至最新状态
- 支持自定义下载的帖子/画师的 **文件和目录名格式**、**目录结构**
- 例如帖子目录可设置为 `[2025-01-02]_TheTitle` 的格式,图片文件设置为按顺序的 `1.jpg`、`2.jpg` 等
- 当你希望将某作者的所有帖子图片统一存放至一个目录下,以便预览,可以使用 `job.mix_posts` 配置项搭配自定义文件名格式,你将得到几百上千张图片的目录
- 如 `[2025-01-02]_TheTitle_1.jpg`、`[2025-01-02]_TheTitle_2.jpg`、`[2025-01-02]_TheTitle_3.jpg` 等
- 支持排除 **指定格式** 的文件或仅下载指定格式的文件
- 例如当你不想下载庞大重复的 PSD 和压缩包文件时,可以在配置中排除 `.psd` 和 `.zip` 文件
- 支持按**文件大小**过滤下载
- 例如,如果你想在磁盘空间不足时避免下载大型视频文件,可以在配置中设置最大文件大小限制
- 你也可以设置最小文件大小,以跳过下载缩略图或预览图片
- 支持按帖子**标题关键词**过滤下载
- 例如你只想下载标题中包含“表情、効果音差分”的帖子,可以使用 `sync-creator` 命令的 `--keywords` 选项
- 如果你想排除标题中包含指定关键词的帖子,可以使用 `--keywords-exclude` 选项
- 支持按帖子发布日期**时间范围**过滤下载
- 能够解析帖子页面 HTML 多信息文本中包含的图片并下载
- 这类帖子特征为:浏览器页面刚进入时图片可能没有加载出来,且没有预览图
- 能够收集帖子页面中列出的**网盘链接**并保存至文本文件
- 可搜索画师和帖子,并导出结果
- 如果你希望自己处理画师和帖子数据,可以使用该功能导出 JSON 数据
- 支持全平台,并提供 iOS 快捷指令
- 纯 Python 分支可在 iOS 的 a-Shell 或浏览器的 Pyodide 上运行
- API 管理
- 通过 datamodel-codegen 读取Kemono的OpenAPI Schema文件,生成API所需的所有Pydantic模型。
- 用Pydantic来管理API的数据类型和格式,而不是JSON,这样开发过程代码提示、后期可维护性强。
- 抽象API调用,使API Base URL等允许用户额外自定义,而业务逻辑中无需实现完整的API调用过程。
- 配置管理
- 通过 Pydantic Settings 管理用户配置,用户配置从环境变量和.env文件中读取,而不是json,因此用户可选择只配置部分需要替换默认值的配置项
- 使用 urwid 为 Pydantic 基类模型设计配置TUI编辑器,使其对所有配置类别通用,而无需单独设计每个配置类别的TUI界面
- 功能实现
- 项目宗旨是为批量下载Kemono资源提供便利性和高度可自定义性,由于Kemono内帖子资源文件类型多样且数量庞大,因此需要满足用户对例如目录结构、文件命名格式、根据扩展名排除以及按时间范围和数量范围下载等
- 项目打包分发
- 项目通过 poetry 管理依赖和构建,并为不同功能设置可选依赖(如TUI界面)
- 通过 GitHub CI/CD 自动化完成项目的打包和分发流程,包括wheel构建、pyinstaller打包以及随后的GitHub Release、PyPI 包发布,而无需人工操作,全过程透明,使分发的软件安全性得到保证。
- 测试
- 通过 pytest 编写测试
- 通过 codecoverage 统计代码覆盖率并汇报至平台
- 每次 Pull Request 都会触发代码覆盖率检测,检查新代码是否缺少测试程序
- 使用 CI/CD 自动化触发测试
- 文档
- 使用 mkdocs 以及 mkdocstrings 完成文档自动化构建,而无需重复编写如用户配置的文档。
- 使用 CI/CD 自动发布文档