Skip to content

Latest commit

 

History

History
155 lines (121 loc) · 8.23 KB

CONTRIBUTING.md

File metadata and controls

155 lines (121 loc) · 8.23 KB

Contribute to bangumi data

方式

你可以通过以下几种方式来帮助本项目:

  • 新建一个 issue,提出数据中的错误之处,或者你想新增的数据。
  • 你也可以通过 fork 本项目,添加或修改正确的数据,并发起 Pull Request 的方式来对项目做出贡献。注意请只修改 data 目录下的数据,dist 目录下的文件会在发版本时自动构建。

数据目录结构

data/                                --> 原始数据目录
    items/                           --> 番组原始数据目录
        2016/                        --> 以年份分割的目录
            06.json                  --> 以月份分割的目录,番组以开播年月放在对应的文件中
    site/                            --> 站点元数据
        info.json                    --> 资讯站点原始数据
        onair.json                   --> 放送站点原始数据
        resource.json                --> 资源站点原始数据
dist/                                --> 存放构建后数据的目录
    data.json                        --> 构建后的数据文件

自动生成的字段

所有 items 目录中的番组数据会依年月的顺序(均为 GMT+8)填入 data.jsonitems 数据。

所有 siteMeta 目录中的站点元数据会放入构建后 data.jsonsites 对象,并赋予与文件名相同的 type 值。因此 type 这个字段不需要手动添加。

字段说明

所有标明为 required 的字段必须存在,如无数据则依字段原始类型置空。

所有涉及时间对象的字段,格式均为 ISO 8601 规范的字符串。

所有涉及语言的字段,格式为 [ISO 639-1]-[ISO 15924]?,目前已有的为 jaenzh-Hanszh-Hant

单个番组中的 type 字段可选的有 tvwebovamovie

番组数据

{
    "title": "Re:ゼロから始める異世界生活", // 番组原始标题 [required]
    "titleTranslate": { // 番组标题翻译 [required]
        // 中文简体
        "zh-Hans": [
            // 可存在多个翻译版本,请尽量将广为流传的版本放在最前面(注意:并不一定是最正确的)
            "Re:从零开始的异世界生活",
            "从零开始的异世界生活"
        ],
        // 中文繁体
        "zh-Hant": [
            "Re:從零開始的異世界生活"
        ],
        // 英文翻译
        "en": [
            "Re:Zero -Starting Life in Another World-"
        ]
    },
    "type": "tv", // 番组类型 [required]
    "lang": "ja", // 番组语言 [required]
    "officialSite": "http://re-zero-anime.jp/", // 官网 [required]
    "begin": "2016-04-03T16:35:00.000Z", // tv/web:番组开始时间;movie:上映日期;ova:首话发售时间 [required]
    "broadcast": "R/2016-04-03T16:35:00.000Z/P7D", // 放送周期,见下方详细说明
    "end": "", // tv/web:番组完结时间;movie:无意义;ova:则为最终话发售时间(未确定则置空) [required]
    "comment": "", // 备注
    "sites": [ // 站点 [required]
        // 放送站点
        {
            "site": "bilibili", // 站点 name,请和最外层 sites 字段中的元数据对应 [required]
            "id": "3461", // 站点 id,可用于替换模板中相应的字段
            "url": "http://www.bilibili.com/sp/物语系列", // url,如果当前url不符合urlTemplate中的规则时使用,优先级高于id
            "begin": "2016-04-03T17:35:00.000Z", // 放送开始时间。
            "broadcast": "R/2016-04-03T17:35:00.000Z/P7D", // 放送周期,见下方详细说明
            "comment": "", // 备注
            "regions": ["CN"] // 番剧放送站点区域限制,用于覆盖站点本身的区域限制
        },
        // 资讯站点
        {
            "site": "bangumi", // 站点 name,请和最外层 sites 字段中的元数据对应 [required]
            "id": "140001" // 站点 id,可用于替换模板中相应的字段
        },
        // 资源(下载)站点
        {
            "site": "dmhy", // 站点 name,请和最外层 sites 字段中的元数据对应 [required]
            "id": "從零" // 下载关键词,可用于替换模板中相应的字段
        }
    ]
}

关于broadcast字段

本字段用于描述番剧的播放周期信息,会同时存在于番剧信息和播放站点的信息中。

原本的begin字段仅描述了番剧的播放开始时间,当长期连载或其他原因造成播放时间产生变动时,其所对应的数据和实际的播放时间会产生矛盾,并且默认了播放周期为7天,这与实际情况有时会不符。详细可见讨论

因此,如果需要展示番剧的播放时间或周期时,建议使用broadcast字段代替begin。但是需要注意,本字段为可选字段,如果不存在或为空,可以fallback到begin字段,使用时请做好兼容。

另外,broadcast仅在番剧未完结时有意义。若在播放中出现变更,会更新到最新的数据,但是完结后便不再更新。

目前支持的broadcast字段为以下几种格式:

  • 一次性: R/2020-01-01T13:00:00Z/P0D,一般用于剧场版、OVA等
  • 周播: R/2020-01-01T13:00:00Z/P7D,TV动画最常见的周期形式
  • 日播: R/2020-01-01T13:00:00Z/P1D
  • 月播: R/2020-01-01T13:00:00Z/P1M

站点元数据

{
    // 站点字段名,和番组数据中 sites 数组中元素的 site 字段名对应
    "bangumi": {
        "title": "番组计划", // 站点名称 [required]
        "urlTemplate": "https://bangumi.tv/subject/{{id}}", // 站点 url 模板 [required]
        "regions": ["CN"] // 站点区域限制,主要针对onAir类型的放送站点。如无该字段,表明该站点无区域限制
    }
}

针对同一个站点存在不同区域限制的情况(例如Bilibili存在不同ID的,只可在部分区域播放的番剧),现在的做法是新建一个站点并加上相应区域限制,可参照onAir.json中的bilibili_hk_mo_tw数据条目。

站点 url 拼接

通过站点的 site 字段获取到站点元数据中相应的 urlTemplate,并用相应的字段数据替换掉模板中用两层花括号包裹的占位符。

例如:id12345urlTemplatehttps://www.a.com/?id={{id}},则替换后为 https://www.a.com/?id=12345

各个放送站点的 url 均为专辑页面,以下列表中,突出部分为 id:

验证

运行 npm run validate 来验证所有原始数据格式是否正确。

构建

运行 npm run build 来构建 data.json。构建过程中会自动对数据格式进行校验,如果通不过则构建失败。