很高兴您能为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 版本标识,用于数据格式转换。支持的版本包括:Way2oldfrostlynxLemwoodLemwoodLatestcxsjmcfengyuan
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 下载按钮上的文字,默认为"下载"

urlitems为最底层,将直接渲染为一个或多个按钮。nextUrlchildren为下一层级,将通过判断是否为最底层来决定渲染下一层级还是按钮。

filter字段用于筛选下载表格中的项。当设置了filter后,只有下载项的url能匹配到filter数组中至少一个正则表达式的,才会显示在表格中。不匹配的项会被隐藏(带xf-filter-hidden类),并在表格下方显示"显示 N 个因不符合筛选条件而被隐藏的项目"按钮,用户可点击展开查看所有项。filter支持继承:子层级的选项会继承父级的filter,若子项自身也设置了filter,则覆盖继承值。

下载表格会自动隐藏所有下载项中均为空的列。表格列包括:操作、架构、描述、大小、显示名称、URL。

下载项的架构(arch)支持自动推断。如果未显式设置 arch,系统会依次尝试从下载 URL、选项名称中识别常见架构关键词(如 arm64-v8ax86_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:

此示例展示apiVerrandomfilter用法。

[
  {
    "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
          }
        ]
      }
    ]
  }
]