Skip to content

develop define site config

fzlins edited this page Jan 18, 2024 · 12 revisions

站点 config.json 文件描述

前言

  • 由于 config.json 中的内容可能会随着软件升级而不断变化,如果没有找到对应的说明,请以实际 config.json 中可用的内容为准,我们会尽量保持该文档同步更新;
  • 在编写 config.json 文件时,请多参考已存在的站点 config.json 文件;

必选属性

属性 类型 说明
name string 站点名称;例:MySite
url string 完整的网站地址,如果网站支持 https ,请优先考虑填写 https 的地址;例:https://abc.com/
icon string 网站图标地址;例:https://abc.com/favicon.ico
host string 站点的域名;例:abc.com ;注意,host 必需和站点的目录名称相同
schema string 对应的网站架构,例:NexusPHP ;如果没有对应的 schema,则填写 host 相同内容

可选属性

属性 类型 说明
description string 站点描述;例:这是一个神奇的网站
tags array 用于描述站点的标签,多个之间以 , 分隔;例:["综合", "音乐"]
plugins array 支持的插件列表,具体格式见 plugins
searchEntryConfig object 搜索入口配置,主要用于配置搜索的页面及一些基本参数;如果不指定则以网站架构定义的为准,具体格式见 searchEntryConfig
searchEntry array 具体搜索入口,可定义多个如果不指定则以网站架构定义的为准,具体格式见 searchEntry
torrentTagSelectors array 种子标签选择器列表;具体格式见 torrentTagSelectors
categories array 站点对应搜索入口的种子分类信息定义列表;具体格式见 categories
selectors array 获取用户站点数据、指定页面数据的选择器列表;
具体格式见 selectors
collaborator string|array 当前站点适配参与人员名称列表,请附上您的大名;

以下属性如果未定义,则以对应 schema 已定义的内容为准

plugins

属性 类型 必选 说明
name string 插件的名称
pages array 表示该插件在哪些页面加载
scripts string 插件对应的脚本文件,JavaScript 文件

searchEntryConfig

属性 类型 必选 说明
page string 搜索的入口页面,如:/torrents.php
queryString string 追加到搜索页面的查询字符串 ,如:search=$key$
可用关键字:
$key$ : 搜索的关键字
resultType string 搜索页面返回的类型,可用类型为:htmljson
parseScriptFile string 用于解析原始结果的脚本文件地址,如:/schemas/NexusPHP/getSearchResult.js
resultSelector string resultType 类型为 html 时,表示定位种子列表的 jQuery 查询表达式;
resultType 类型为 json 时,可省略;
area array 搜索区域定义,可在此定义一些自动匹配的规则,当搜索特定关键字时,使用指定的规则,具体格式见 searchEntryConfig.area ;
headers object 发送搜索请求时需要特别指定的 http 请求头,以 key: value 格式定义,如:{"x-requested-with": "XMLHttpRequest"}
fieldSelector object 用于定义解析搜索结果的字段,以 key: value 格式定义;
特定字段参考:searchEntryConfig.fieldSelector 特定字段说明
格式定义参考:selectors.item.fields
dataRowSelector string 1.4.5 +
数据行选择器,默认为 > tbody > tr
dataCellSelector string 1.5.2.0c04091+
数据格子选择器,默认为 > td
firstDataRowIndex number 1.4.5 +
指定数据表格中第一行数据索引,默认为 1
fieldIndex object 1.4.5 +
数据字段在表格中的列索引,默认都为 -1 ,表示字段不可用。
允许的字段列表:title, time, size, seeders, leechers, completed, comments, author, category, url, link, progress, status ;
例:
{"title": 1, "url": 1}
loggedRegex string 1.4.5 +
用于验证是否已登录的正则表达式
skipIMDbId boolean 用于是否跳过IMDb搜索
skipNonLatinCharacters boolean 用于是否跳过非拉丁字符搜索

searchEntryConfig.fieldSelector 特定字段说明

字段名称 类型 说明
progress number 种子当前进度,可用范围 0-100 ,如果不指定表示不支持进度;
不匹配的情况下要返回null,否则种子会被标记为有状态
status number 种子当前状态,和 progress 属性配合使用,可用状态值如下:
1: 正在下载
2: 正在做种
3: 未活动(曾经下载过,但未完成)
255: 已完成,未做种

searchEntry

属性 类型 必选 说明
name string 入口名称
enabled boolean 默认是否启用该入口,可用值:true , false

torrentTagSelectors

属性 类型 必选 说明
name string 标签名称
selector string 匹配该标签的选择器
color string 标签颜色,可以使用 颜色名称 或以十六进制表示,如:blue#aabbcc

categories

属性 类型 必选 说明
entry string 需要匹配的入口;例:
* 表示适用于所有入口;
torrents.php 表示只适用于 torrents.php 的入口页面
result string 分类配置返回信息,其中 $id$ 会被替换为具体的分类编号,最终会追加到 searchEntryConfig.queryString 最后,如:&cat$id$=1 最终输出的值可能为 &cat11=1
category array 站点的分类信息,每个 item 表示一个分类,如:
[{id: 11, name: "电影"}, {id: 22, name: "音乐"}]

selectors

选择器可用于:

  • 站点数据获取;
  • 指定页面特殊字段内容获取;
属性 类型 必选 说明
userBaseInfo object 用户基本信息表达式定义,如用户ID、名称等;
userExtendInfo object 用户扩展信息表达式定义,如上传量、下载量等;
userSeedingTorrents object 正在上传的种子信息,如做种数量等;
<page_name> object 指定页面需要获取的表达式定义;
如:/details.php 表示助手工具栏获取 /details.php 页面内容时,可使用该配置来获取指定字段的信息;
common object <page_name> 未定义或不能匹配时,会尝试从 common 选择器中获取信息;

由于可能需要从不同页面获取数据,所以单独定义不同的 selector ;如果可以在同一页面获取,所有字段定义在 userBaseInfo 下即可;

selectors.item

属性 类型 必选 说明
page string 获取指定信息的页面文件地址,如:user.php
用于获取站点数据时,该内容必需指定
dataType string 返回的数据类型,可用值:htmljson ;默认为 html
fields object 当前规则需要获取的数据字段列表;以 key: value 格式定义,如:{"name": {"selector": ["a[href*='userdetails.php']:first"]}}
格式定义参考:selectors.item.fields
可用字段参考:common.tsUserInfo 接口定义;
prerequisites string 执行该规则的前提条件(条件表达式),合法的 js 语句;
可用关键字:
user :表示已获取的用户信息对象;
例:"!user.id"
requestMethod string 请求使用的方法,可用值:GET, POST ;默认为 GET
requestData object POST 时需要额外附加的数据,可用关键字:
$user.id$ :当前用户id;
$user.name$ :当前用户名称;
例:
{"userid": "$user.id$", "type": "seeding"}
merge boolean 是否合并 schema 已定义的内容,默认为 false
parser string 1.1.2 新增
用于解析数据的脚本文件路径;当指定该内容时,则执行该解析器,由解析器处理指定页面返回的内容,可用于请求多个页面等操作;
topElement string 1.3.2 新增
指定用于获取内容的顶级 DOM 对象,默认为 body

selectors.item.fields

属性 类型 必选 说明
selector string|array 获取目标数据的查询表达式,如果是数组,则依次查询,直到获取目标数据为止;如果目标格式为:
html 则返回 jQuery 对象;
json 则返回 js 对象;
filters array 目标数据获取后执行的过滤器,合法的 js 语句;每个过滤器按顺序逐个执行;
可用关键字及函数:
query :执行 selector 后获取到的目标数据,通常为 jQuery 对象或 js 对象;
dateTime :一个 dayjs 实例,可用于验证和格式化时间;
_self :当前 InfoParser 实例;可用方法参考 infoParser.ts 类定义;
attribute string dataType=html 时可用,指定要返回的属性,如果该属性被定义,在执行 filters 之前会先从该属性获取内容并返回给 query 对象,如:{"attribute": "value"} ,则会执行 query = query.attr('value')
switchFilters array 按已匹配的 selectorindex 值来进行过滤选择,如 selector 定义为两个 {"selector": ["S1", "S2"]},已匹配到数据的表达式为 S2,那么 {"switchFilters": [["F1", "F2"], ["F3", "F4"]]} 在执行时,会依次执行 F3, F4 过滤器;

filtersattributeswitchFilters 都没有定义时,默认返回:
htmlquery.text().trim()
jsonquery

如果 switchFiltersfilters 都被定义,则执行 switchFilters

searchEntryConfig.area

属性 类型 必选 说明
name string 当前规则名称
keyAutoMatch string 自动匹配关键的正则表达式,如果匹配成功则使用该规则
queryString string 如果该字段被定义,将直接替换 searchEntryConfig.queryString
appendQueryString string 当前规则需要追加的 查询表达式
replaceKey array 替换关键映射条件,用两个元素表示,第一个为需要匹配的关键字,第二个为目标值,如:["tt", ""] 表示将搜索关键中的 "tt" 替换为 "" 空字符串

config.json 文件示例

{
  "name": "MySite",
  "description": "我的站点",
  "url": "https://abc.com/",
  "icon": "https://abc.com/favicon.ico",
  "tags": ["综合", "音乐"],
  "schema": "NexusPHP",
  "host": "abc.com",
  "plugins": [
    {
      "name": "特殊插件",
      "pages": ["/torrents.php"],
      "scripts": ["/libs/album/album.js", "torrents.js"],
      "styles": ["/libs/album/style.css"]
    }
  ],
  "searchEntryConfig": {
    "page": "/torrents.php",
    "queryString": "search=$key$&notnewword=1",
    "area": [{
      "name": "IMDB",
      "keyAutoMatch": "^(tt\\d+)$",
      "appendQueryString": "&search_area=4"
    }],
    "resultType": "html",
    "parseScriptFile": "/schemas/NexusPHP/getSearchResult.js",
    "resultSelector": "table.torrents:last"
  },
  "searchEntry": [{
    "name": "全部",
    "enabled": true
  }],
  "torrentTagSelectors": [
    {
      "name": "Free",
      "selector": "img.pro_free",
      "color": "blue"
    }
  ],
  "categories": [
    {
      "entry": "*",
      "result": "cat$id$=1",
      "category": [
        {
          "id": 20,
          "name": "原盘(Full BD)"
        }
      ]
    }
  ]
}