很高兴您能为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 线路11
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
          }
        ]
      }
    ]
  }
]