系统架构

jMM 的系统架构图如下所示.

Figure made with TikZ

jMM 系统架构图

整个系统架构分为 5 层, 分别是:

  • CLI 层, 即 Command-Line Interface 命令行界面, 负责与用户进行指令交互, 在这一层提供了非常多的用户指令:

    • generate-config 用于配置 jMM.

    • valid-config 用于验证 jMM 配置.

    • scape 用于媒体刮削.

  • IO 层, 提供文件的遍历, 复制, 重命名等功能.

    • MediaFinder 提供媒体文件发现功能.

    • FileManager 提供文件重命名, 转移等功能.

  • Router 层, 根据番号进行路由, 将刮削的任务委托给不同的爬虫.

    • RoutingRule 管理路由规则, 将番号委托给不同的爬虫组完成刮削.

    • CrawlerGroup 将多个爬虫组合成一个爬虫组, 可以将刮削的元数据进行自动合并.

  • Crawler 层, 提供 JavDB, JavBus, Arzon 等主流媒体资料在线数据库的爬虫.

  • Utilities 层, 基础层, 提供系统所需的各种基础功能.

    • BaseCrawler 为所有爬虫的基类, 其定义了爬虫的行为以及接口. 如果你想爬取其他在线数据库网站, 你可以继承 BaseCrawler 并开发自己的爬虫, 并交给 Router 层来管理这些爬虫.

    • Translator 是百度翻译服务的 OOP 抽象, 用于将日语翻译成中文.

    • Session 为请求回话管理, 提供了 HTTP/HTTPS 代理, 错误重试, QPS 限制等一系列功能.

    • ImageProcessor 为图像处理单元, 提供 fanart 转 poster, 人脸识别等功能.

    • Configuration 为配置管理器, 用于系统默认配置以及用户自定义配置的管理与解析.

当使用 jMM 进行电影刮削时:

  • 初始化 MediaFinder 并对指定的目录进行扫描, 获取所有待刮削的影片.

  • 针对每一个影片:

    • 利用 NumberExtractor 模块从文件名中抽取番号.

    • 将番号交给 Router 进行路由, Router 针对自身的每个路由规则:

      • 判断番号与规则是否匹配, 如果不匹配采用继续匹配下一条路由规则.

      • 如果匹配, 则将番号委托给该条规则对应的爬虫组 CrawlerGroup 进行元数据获取, CrawlerGroup 将番号依次交给爬虫:

        • 爬虫获取该番号的元数据.

        • 判断是否完成爬取, 如果缺少字段, 继续交给下一个爬虫进行爬取, 如果所有字段都获取完毕, 则退出爬取过程.

      • 如果所有的规则都不匹配, 则抛出异常, 通知调用者无法找到影片的元数据.

    • 获取元数据, 将元数据委托给 FileManager, FileManager 将元数据以及媒体文件按照 Infuse, Plex 等主流播放器格式进行存储.

    • 如果获取元数据失败, 则将失败信息写入日志.