Nyora Data-Driven Sources
收藏资源简介:
数据驱动的漫画源定义目录,包含1071个具体源的信息,每个源由引擎、域名和配置组成,用于运行时动态加载漫画源。
A data-driven comic source definition directory containing information of 1071 specific sources. Each source consists of an engine, domain name and configuration, and is used for dynamically loading comic sources during runtime.
数据集概述
Nyora — Data-Driven Sources 是 Nyora(一款原生 Kotlin 漫画阅读器)的数据驱动源架构目录,核心目标是将漫画源的实现从“捆绑解析器类代码”转变为“数据而非代码”的模型。
核心概念
-
Source 定义:每个漫画源由三元组
{ engine, domain, config }构成。- engine:通用内置渲染引擎标识(如
"madara"、"mangareader"、"wpcomics"、"galleryadults"、"mangadex"等),共 34 种内置引擎。 - domain:站点主机名(不含协议,如
hiperdex.com),所有 URL 基于https://{domain}/…构建。 - config:纯数据对象(标量、枚举、短列表、CSS 选择器),其结构由
engine决定,见schema/SourceDef.schema.json。
- engine:通用内置渲染引擎标识(如
-
引擎为通用模板:每种引擎是针对一类站点(如 Madara 格式的 WordPress 阅读器、MangaThemesia 阅读器、NetTruyen/wpcomics 阅读器、nhentai/galleryadults 阅读器等)编译好的通用模板,在应用中只捆绑一次。每个具体站点(如 AdultWebtoon、HiperDex、SushiScan、NetTruyen 等)仅是一行 JSON 配置,驱动某个内置引擎。1071 个具体源 被归纳为 34 个引擎 加 34 个 JSON 文件(例如约 545 个 Madara 站点和约 259 个 MangaReader 站点各自仅对应一个引擎)。
设计动机:Play Store 合规姿态
- 发布的 Play Store 版本仅包含 34 个通用引擎(编译好的 Kotlin,知道如何读取 Madara/MangaThemesia/wpcomics 等站点,但不提及任何真实站点名称)。
- APK 中不内置任何站点域名(无站点主机、slug、标签前缀或封面 URL)。
- 所有真实源在运行时以数据形式到达,来自用户添加的仓库 URL(如
repo/madara.json)。应用获取 JSON,按 schema 校验,并通过EngineRegistry实例化{engine, domain, config}。
硬性约束(通过构建设计而非政策强制):
- 无 JavaScript:禁止源提供 JS 代码。站点所需的反机器人原语(如 AES 章节保护解密、
encodedSrcbase64 解码、NetShield/Cloudflare cookie 解决)是内置引擎功能,通过布尔标志切换,仓库永不携带实现代码。 - 无下载代码:SourceDef 为惰性数据,无 eval、无字节码、无动态类加载;引擎集在构建时固定。
- 无 APK 扩展:与 Tachiyomi/Mihon 风格的可安装扩展 APK 不同,本架构不安装任何可执行内容,添加仓库只是向表中添加行。
架构组件
数据流:repo/*.json(34 个文件,1071 行 SourceDef)→ schema/SourceDef.schema.json 校验 → engine/EngineRegistry.kt(字符串 id → 捆绑引擎工厂)→ 具体引擎(如 MadaraEngine.kt、MangaReaderEngine.kt 等)→ Nyora 领域模型(Manga / MangaChapter / MangaPage)。
EngineRegistry:单例工厂,映射仓库提供的 engine 字符串到捆绑的 SourceEngine。
- 使用字符串键而非枚举;共享的
EngineId枚举仅涵盖两个原始引擎(MADARA、MANGAREADER),注册表通过字符串统一解析全部 34 个引擎。 - 使用
Creator构造 lambda,避免调用可能抛异常的engineIdgetter。 - 处理
object与class工厂的差异。 - 确保 34 个引擎文件 ⇄ 34 个注册条目 ⇄ 34 个 schema
engine枚举值 一一对应,无重复。
Typed config 与 rawConfig:仅 madara 和 mangareader 有类型化 EngineConfig 及匹配子 schema;其他 32 个引擎从 SourceDef.rawConfig 解析设置。相关规范文档:spec/ENGINE_SPEC_madara.md、spec/ENGINE_SPEC_mangareader.md;提取器脚本 extract_madara.py 从 kotatsu 源代码生成 JSON 行。
扩展覆盖指南
- 将标记的长尾覆盖纳入配置:优先通过新增配置项(如
COVERAGE.md中的 143 行needsCustomLogic列表)吸收残留的每源覆盖,而非新增代码。 - 新增通用引擎族:流程包括阅读基础解析器
.kt、编写spec/ENGINE_SPEC_<family>.md、扩展 schema 枚举、构建引擎、注册到EngineRegistry、编写提取器。优先级见COVERAGE.md。 - 处理定制 API 源:
- 若多个站点共享 API 形态,构建小规模专用引擎(仍为通用+数据驱动)。
- 若站点独有,构建一次性引擎(如
asurascans、guya、mangago),仍捆绑、无源提供代码。 - 提取器不会将不支持的源作为 Madara/MangaReader 行输出,避免渲染错误;它们被列为
COVERAGE.md中的缺口。
内容政策注意事项
- 将源数据化使 二进制文件中性(仅含引擎,无域名、无成人内容),但中性姿态需刻意维持。
- 应用不得预置、宣传、策划或默认启用任何特定仓库(尤其成人仓库);用户提供仓库 URL,应用仅作为传输工具。
- NSFW 源带有
nsfw:true/contentType:"HENTAI",UI 必须通过显式成人开关进行门控,并排除在默认/引导界面之外。 - 对用户界面不展示引擎名称、解析器内部或“扩展”术语;源仅显示为用户添加的带标题条目。




