{
  "schema": "browsertv-tv-site-v1",
  "key": "example-video",
  "name": "示例影视站",
  "version": 1,
  "enabled": true,
  "description": "演示如何用声明式规则描述列表、详情、搜索和播放信息。",
  "tags": ["示例", "视频"],
  "capabilities": ["list", "search", "detail", "playback"],
  "homepage": "https://video.example/",
  "hosts": ["video.example", "www.video.example"],
  "display": {
    "title": "示例影视站",
    "order": 100,
    "theme": "system",
    "accent": "blue",
    "listColumns": 4,
    "coverAspect": "landscape"
  },
  "configurations": [
    {
      "key": "preferred_quality",
      "label": "默认画质",
      "type": "select",
      "required": true,
      "default": "1080p",
      "options": ["720p", "1080p", "4k"],
      "description": "客户端设置页按此声明项生成站点特有配置；规则本身不保存用户填写的内容。"
    },
    {
      "key": "show_paid_items",
      "label": "显示付费内容",
      "type": "boolean",
      "required": false,
      "default": false,
      "description": "示例布尔配置；规则不得用于绕过站点授权或付费限制。"
    }
  ],
  "examples": [
    {
      "key": "popular",
      "label": "热门",
      "url": "https://video.example/category/popular",
      "description": "热门视频列表页。"
    },
    {
      "key": "latest",
      "label": "最新",
      "url": "https://www.video.example/category/latest",
      "description": "最新更新列表页。"
    }
  ],
  "runtime": {
    "adapter": "rules",
    "script": {
      "sourceId": "example-video",
      "detailPattern": "^/video/\\d+$",
      "lite": {
        "pathPattern": "^/category/"
      },
      "coverHosts": ["img.video.example", "cdn.video.example"],
      "requestHosts": ["player.video.example"],
      "list": {
        "request": {
          "method": "GET",
          "url": "https://video.example/api/list?page={{page}}&quality={{config.preferred_quality}}",
          "headers": {
            "Referer": "https://video.example/"
          }
        },
        "response": {
          "type": "json",
          "root": "data.items"
        },
        "items": {
          "path": "data.items",
          "limit": 100,
          "fields": {
            "url": { "path": "url", "transform": "absolute" },
            "title": { "path": "name" },
            "cover": { "path": "poster", "transform": "absolute" },
            "duration": { "path": "duration", "transform": "duration" },
            "publishedAt": { "path": "pubdate", "transform": "date" }
          }
        },
        "next": { "path": "data.next", "transform": "absolute" },
        "pageStart": 1,
        "tabs": [
          { "key": "latest", "title": "最新", "url": "https://video.example/api/list?page={{page}}" },
          { "key": "popular", "title": "热门", "url": "https://video.example/api/list?rank=hot&page={{page}}" }
        ],
        "defaultTab": "latest"
      },
      "search": {
        "request": {
          "method": "GET",
          "url": "https://video.example/api/search?q={{keyword}}&page={{page}}"
        },
        "response": { "type": "json" },
        "items": {
          "path": "data.items",
          "fields": {
            "url": { "path": "url", "transform": "absolute" },
            "title": { "path": "name" },
            "cover": { "path": "poster", "transform": "absolute" },
            "duration": { "path": "duration", "transform": "duration" }
          }
        },
        "keywordSource": { "type": "query", "name": "q" }
      },
      "detail": {
        "request": {
          "method": "GET",
          "url": "https://video.example/api/detail?url={{detailUrl}}"
        },
        "response": { "type": "json" },
        "title": { "path": "data.name" },
        "cover": { "path": "data.poster", "transform": "absolute" },
        "sources": [
          { "path": "data.playUrl", "transform": "absolute" },
          { "path": "data.playbacks[0].url", "transform": "absolute" }
        ],
        "player": {
          "url": { "selector": "iframe[src]", "attribute": "src", "transform": "absolute" },
          "response": { "type": "html" },
          "sources": [
            {
              "selector": "script",
              "transforms": [
                { "transform": "jsonVar", "options": { "name": "player_data", "path": "url" } },
                { "transform": "base64", "options": { "encoding": "base64Percent" } }
              ]
            }
          ]
        }
      },
      "playback": {
        "preferAvc": false
      }
    }
  }
}
