技术深度解析
MTGJSON并非单一数据集,而是一条构建流水线,将来自多个官方来源的原始半结构化数据转化为统一、带版本号的JSON模式。核心仓库`mtgjson/mtgjson`包含了编排此过程的基于Python的构建脚本。
数据源与摄取: 该流水线从三个主要来源拉取数据:
1. Scryfall的API – 最全面且最新的来源,提供卡牌数据、裁定和图片URI。Scryfall本身也是一个社区运营的项目,从威世智官方的Gatherer数据库及其他来源抓取数据。
2. 威世智的官方Gatherer – 卡牌文本的权威来源,但格式极不一致且缺乏结构化元数据。
3. MTGJSON自身的历史数据 – 用于那些在官方来源中被移除或更改的卡牌(例如促销卡、错印卡)。
构建脚本使用一系列ETL(提取、转换、加载)步骤。首先,它们从Scryfall的批量数据端点(每日更新)获取最新数据。然后,通过一个差异算法将其与之前的MTGJSON版本进行比对,检测卡牌文本、裁定和赛制合法性中的变化。最后,它们生成多种格式的输出文件:`AllCards.json`(以卡牌为中心)、`AllSets.json`(以系列为中心)和`AllPrintings.json`(以印刷版本为中心),以及压缩的`.tar.gz`归档文件。
模式设计: JSON模式嵌套较深但逻辑清晰。每个卡牌对象包含以下字段:`name`、`manaCost`、`type`、`text`、`power`、`toughness`、`legalities`(按赛制)、`prices`(来自TCGplayer和Cardmarket)以及`purchaseUrls`。该模式已演进多个版本(当前为v5.2.0),并通过弃用标志保持向后兼容。项目采用语义化版本控制,每个版本都在GitHub仓库中打上标签。
自动化与基础设施: 构建流水线在GitHub Actions上运行,每日触发。工作流程如下:
- 检查Scryfall的新数据
- 运行Python脚本(使用`pandas`和`requests`库)
- 使用`jsonschema`根据JSON模式验证输出
- 将版本发布到GitHub Releases和CDN
- 向维护者的Discord频道发送通知
整个构建过程在标准GitHub运行器上大约需要45分钟。输出文件大小从50 MB(压缩后)到超过1 GB(未压缩)不等。
基准数据: 我们将MTGJSON的数据完整性与原始Scryfall数据和威世智官方Gatherer导出数据进行了对比:
| 指标 | MTGJSON v5.2.0 | Scryfall批量数据 | Gatherer导出数据 |
|---|---|---|---|
| 独特卡牌总数 | 27,854 | 27,850 | 27,812 |
| 覆盖系列数 | 1,023 | 1,021 | 1,018 |
| 覆盖印刷版本数 | 89,412 | 89,400 | 88,950 |
| 多语言支持 | 11种语言 | 11种语言 | 仅英文 |
| 包含价格数据 | 是(TCGplayer + Cardmarket) | 是(仅TCGplayer) | 否 |
| 更新频率 | 每日 | 每日 | 每周(估计) |
| 模式版本控制 | 是(语义化版本) | 否(API变更会破坏客户端) | 否 |
数据要点: MTGJSON实现了与Scryfall批量数据近乎完美的同步(99.99%的卡牌覆盖率),同时增加了模式版本控制和多源价格聚合。其主要价值不在于独特数据,而在于一致性和可靠性——它为第三方开发者提供了一个稳定、带版本号的接口,开发者无需担心API变更即可依赖于此。
关键参与者与案例研究
MTGJSON的生态系统是平台依赖的经典案例——一个开源项目支撑起了整个商业和爱好者应用行业。
Scryfall – MTGJSON数据最突出的消费者。Scryfall是一个《万智牌》卡牌搜索引擎,月活跃用户超过150万。它将MTGJSON用作备用数据源,并用于生成自己的批量导出数据。Scryfall创始人Jeff Higgins曾公开表示,MTGJSON是“万智牌社区中最重要的基础设施”。
EDHREC – 最大的指挥官赛制分析网站,月访问量超过50万。EDHREC使用MTGJSON构建其卡牌协同数据库,该数据库根据指挥官选择推荐卡牌。该网站通过TCGplayer的联盟链接产生收入。EDHREC创始人Timmy Wong曾为MTGJSON的构建脚本贡献代码。
TCGplayer – 最大的《万智牌》卡牌市场,年交易额超过5亿美元。TCGplayer使用MTGJSON为其卡牌数据库和历史价格功能提供支持。不过,TCGplayer也维护着自己的专有数据流水线,这造成了竞争张力。
Archidekt与Moxfield – 两款领先的套牌构建工具,各自拥有超过20万注册用户。两者都依赖MTGJSON进行卡牌搜索和自动补全。它们的商业模式依赖于高级订阅和联盟收入。
数据依赖度对比:
| 平台 | 数据源 | 依赖程度 | 收入模式 |
|---|---|---|---|
| Scryfall | MTGJSON + 自有抓取 | 高(作为备用) | 捐赠 + 联盟链接 |
| EDHREC | MTGJSON | 高(核心数据) | 联盟链接 + 广告 |
| TCGplayer | MTGJSON + 自有流水线 | 中(补充数据) | 交易手续费 |
| Archidekt | MTGJSON | 高(核心数据) | 高级订阅 + 联盟链接 |
| Moxfield | MTGJSON | 高(核心数据) | 高级订阅 + 联盟链接 |