很高兴您能为FCL下载站添砖加瓦!您可根据下方指南开发第三方数据源。
您可在/data/content/tsb2CustomDataSrcGuide.html(访问,下载)中获取此指南的纯HTML代码,以便AI开发或离线查看。
此网站的数据源解析使用loadSelector模块,您可在https://github.com/XiaoluoFoxington/FCL.website.NEXT/blob/main/js/module/loadSelector.js中查看其实现源码。
数据源使用JSON格式,提供时需提供根层级的JSON文件,一切从这里开始。
每个层级 JSON 数组,可包含多个选项。每个选项都是 JSON 对象,可包含以下键值:
| 键值 | 类型 | 必须 | 描述 |
|---|---|---|---|
| name | String | 是 | 当前选项或当前按钮的名称 |
| arch | String | 否 | 当前选项的架构,用于筛选下载项。系统会自动匹配当前设备架构并在表格中高亮显示 |
| description | String | 否 | 当前选项的描述 HTML |
| desUrl | String | 否 | 当前选项的远程描述 HTML URL。如果同时提供了description,则覆盖description |
| desJsUrl | String | 否 | 与当前选项的远程描述 HTML 相关的 JavaScript URL |
| type | String | 否 | 当前选项的类型,用于分组显示 |
| default | Boolean | 否 | 是否默认选中选项。如未设置,则默认选择第一个选项 |
| nameIsSoftname | Boolean | 否 | 标记当前选项为软件名称。工具将据此识别并记录用户选中的软件名称(如"Fold Craft Launcher"),在需要获取最新版本等场景中使用 |
| size | Number | 否 | 文件大小(字节),将在下载表格中显示 |
| apiVer | String | 否 | API 版本标识,用于数据格式转换。支持的版本包括:Way2old、frostlynx、Lemwood、LemwoodLatest、cxsjmc、fengyuan |
| random | Boolean | 否 | 是否从此层级的选项中随机选择一个设为默认值。标记为notJoinRandom: true的选项将不参与随机选择 |
| notJoinRandom | Boolean | 否 | 标记当前选项不参与随机选择。仅在父级设置了random: true时生效 |
以下键值用于定义下一层级:
| 键值 | 类型 | 描述 |
|---|---|---|
| nextUrl | String | 下一层级的远程数组URL |
| children | Array | 下一层级的数组,可为多个下载项或继续向下嵌套。如同时提供了nextUrl,则忽略nextUrl |
| filter | Array<String> | URL 筛选器,是一个正则表达式字符串数组。下载项中只有 url 匹配至少一个正则表达式的才会显示。不匹配的项会被隐藏,并显示"显示被隐藏项"按钮。子项会继承父级的 filter,除非子项自己显式设置了 filter |
以下键值用于定义下载按钮:
| 键值 | 类型 | 描述 |
|---|---|---|
| url | String | 单个下载项 |
| items | Array | 多个下载项,如同时提供了url,则忽略url |
| btnText | String | 下载按钮上的文字,默认为"下载" |
url与items为最底层,将直接渲染为一个或多个按钮。nextUrl与children为下一层级,将通过判断是否为最底层来决定渲染下一层级还是按钮。
filter字段用于筛选下载表格中的项。当设置了filter后,只有下载项的url能匹配到filter数组中至少一个正则表达式的,才会显示在表格中。不匹配的项会被隐藏(带xf-filter-hidden类),并在表格下方显示"显示 N 个因不符合筛选条件而被隐藏的项目"按钮,用户可点击展开查看所有项。filter支持继承:子层级的选项会继承父级的filter,若子项自身也设置了filter,则覆盖继承值。
下载表格会自动隐藏所有下载项中均为空的列。表格列包括:操作、架构、描述、大小、显示名称、URL。
下载项的架构(arch)支持自动推断。如果未显式设置 arch,系统会依次尝试从下载 URL、选项名称中识别常见架构关键词(如 arm64-v8a、x86_64 等)。Zalith Launcher 2 的 all 架构文件的下载 URL、选项名称中不会包含 all(即使它是),会自动推断为 all 架构。
下载表格会自动检测用户设备架构,并在下载表格中高亮显示匹配的架构行(绿色背景)。
通过设置apiVer字段,可以将第三方 API 的数据格式转换为选择器所需的标准格式。支持的 API 版本:
| API 版本 | 描述 |
|---|---|
Way2old |
线路2旧旧 |
frostlynx |
线路2旧 |
Lemwood |
线路10 |
LemwoodLatest |
线路10 |
cxsjmc |
线路3 |
fengyuan |
线路2 |
通过设置random: true,可以让系统从当前层级的选项中随机选择一个设为默认值。某些选项可能不希望参与随机选择,可通过设置notJoinRandom: true来排除。
示例数据源 1:
此示例为此站默认数据源的简化版,展示多层级嵌套及nameIsSoftname标记用法。
[
{
"name": "线路3",
"type": "按线路分类",
"desUrl": "/data/down/3/index.html",
"desJsUrl": "/data/down/3/index.js"
},
{
"name": "MCJE-Launcher-on-Mobile",
"type": "分类",
"default": true,
"children": [
{
"name": "启动器",
"children": [
{
"name": "Fold Craft Launcher",
"nextUrl": "/data/down/fcl/index.json",
"default": true,
"nameIsSoftname": true
},
{
"name": "Zalith Launcher 2",
"nextUrl": "/data/down/zl2/index.json",
"nameIsSoftname": true
}
]
},
{
"name": "插件",
"children": [
{
"name": "渲染器",
"nextUrl": "/data/down/renderer/index.json",
"nameIsSoftname": true
}
]
}
]
}
]
示例数据源 2:
此示例为多层级嵌套。
[
{
"name": "官网",
"url": "https://www.example.com",
"btnText": "访问"
},
{
"name": "软件 1",
"default": true,
"children": [
{
"name": "最新版本",
"children": [
{
"arch": "all",
"url": "https://assets.example.com/software1/latest/all.7z"
},
{
"arch": "arm64-v8a",
"url": "https://assets.example.com/software1/latest/arm64-v8a.7z"
}
]
},
{
"name": "v11.4.5.14",
"description": "旧版不提供多架构版本,仅提供 all 架构。",
"url": "https://assets.example.com/software1/v11.4.5.14/all.7z"
}
]
}
]
示例数据源 3:
此示例展示apiVer、random和filter用法。
[
{
"name": "从第三方 API 获取",
"apiVer": "LemwoodLatest",
"nameIsSoftname": true,
"random": true,
"children": [
{
"name": "不使用随机选择的选项",
"notJoinRandom": true,
"url": "https://assets.example.com/custom/version.7z"
}
]
},
{
"name": "手动指定版本",
"children": [
{
"name": "v1.0.0",
"filter": [".apk"],
"children": [
{
"name": "all",
"arch": "all",
"url": "https://assets.example.com/v1.0.0/all.7z",
"size": 114514
},
{
"name": "arm64-v8a",
"arch": "arm64-v8a",
"url": "https://assets.example.com/v1.0.0/arm64-v8a.apk",
"size": 1919810
}
]
}
]
}
]