Skip to content

编写视频源

💡提示

在编写视频源之前,请前往视频源规则了解学习视频源规则的构成和规则说明。

新建视频源

例如:我们要编写 https://www.abc.com 的视频规则

  1. 打开 IEnjoy,在 导航栏 我的 界面,点击 视频源管理
  2. 点击右上角 图标,选择 新建视频源
  • 源Url:https://www.abc.com(必填项)
  • 源名称:网站名称或者其他自己随便定义(必填项)
  • 源分组:用作筛选视频源之用(非必填项)
  • 请求头:非必填项,一般无需设置

请求头的值是JSON对象,键和值都是字符串,格式为:

json
{
    "User-Agent": "user-agent",
    "Referer": "",
    "Cookie": "{\"key1\": \"value1\", \"key2\": \"value2\"}"
}

编写搜索页规则

搜索Url为:https://www.abc.com/search/page/1/wd/影片名称.html

搜索结果页示例代码:

html
...
<div class="video-list">
    <div class="video-card">
        <div class="video-pic">
            <a href=""><img src="" alt="影片封面"/></a>
        </div>
        <div class="video-info">
            <p>影片一名称</p>
            <p>影片一分类信息</p>
            <p>导演:导演名字</p>
            <p>主演:主演名字</p>
            <p>影片一简介</p>
            <a href="">详情</a>
        </div>
    </div>
    <div class="video-card">
        <div class="video-pic">
            <a href=""><img src="" alt="影片封面"/></a>
        </div>
        <div class="video-info">
            <p>影片二名称</p>
            <p>影片二分类信息</p>
            <p>导演:导演名字</p>
            <p>主演:主演名字</p>
            <p>影片二简介</p>
            <a href="">详情</a>
        </div>
    </div>
</div>
...

搜索地址:/search/wd//page/.html 固定格式:将关键词替换为 ,页码替换为 ,域名部分可省略。

txt
列表://div[@class='video-card']
剧集名称://p[1]/text()
导演:substring-after(//p[3]/text(),'导演:')
主演:substring-after(//p[4]/text(),'主演:')
分类://p[2]/text()
更新状态:没有信息,规则可留空
更新时间:没有信息,规则可留空
简介://p[5]/text()
海报://img/@src
详情页Url://img/../@href
txt
列表:class.video-list.1@class.video-card
剧集名称:class.video-info@tag.p.0@text
导演:class.video-info@tag.p.2@text##导演:
主演:class.video-info@tag.p.3@text##主演:
分类:class.video-info@tag.p.1@text
更新状态:没有信息,规则可留空
更新时间:没有信息,规则可留空
简介:class.video-info@tag.p.4@text
海报:class.video-pic@tag.img@src
详情页Url:class.video-info@tag.a@href

编写发现页规则

💡提示

发现页除了【发现Url筛选规则】外,其他的规则编写方法与搜索的规则一样。其他就不赘述,着重讲解【发现Url筛选规则】的编写。
若顶层filter设定了值,那么子分类的filter将被忽略

电影列表Url为:https://www.abc.com/show/catid/1/area/中国大陆/type/喜剧/year/2022/page/1.html

筛选列表为:

txt
分类  全部  动作片  喜剧片  ...
类型  全部  喜剧  爱情  ...
地区  全部  中国大陆  中国香港  ...
年份  全部  2022  2021  ...

电视剧列表Url为:https://www.abc.com/show/catid/2/area/中国大陆/type/国产剧/year/2022/page/1.html

筛选列表为:

txt
分类  全部  国产剧  港台剧  ...
类型  全部  古装  青春偶像  ...
地区  全部  中国大陆  中国香港  ...
年份  全部  2022  2021  ...

以电影列表和电视剧列表为例子来讲解。

由此可得到筛选URL规则:

json
{
    "url": "/show/catid/{{id}}/area/{{area}}/type/{{type}}/year/{{year}}/page/{{page}}.html",
    //分类id的参数名是catid,与默认的id不一致
    //所以需要将catid映射到id,参数名一致时可省略。
    "mapping":{
        "id": "catid",
    },
    "classify": [
        {
            "id": 1,
            "alias": "dianying", //一般是在伪静态隐藏了ID时设置
            "name": "电影",
            "subClassify": {
                "name": "分类",
                "values": [
                    {
                        "id": 6, //若使用alias别名,id可省略
                        "alias": "dongzuo", //别名,一般是在伪静态隐藏了分类时设置,可忽略
                        "name": "动作片"
                    },
                    {
                        "id": 7, //若使用alias别名,id可省略
                        "alias": "xiju", //别名,一般是在伪静态隐藏了分类时设置,可忽略
                        "name": "喜剧片"
                    }
                ]
            },
            "filter": {
                "type": {
                    "name": "类型",
                    "values": [
                        {
                            "name": "喜剧"
                        },
                        {
                            "name": "爱情"
                        }
                    ]
                },
                "area": {
                    "name": "地区",
                    "values": [
                        {
                            "name": "中国大陆"
                        },
                        {
                            "name": "中国香港"
                        }
                    ]
                },
                "year": {
                    "name": "年份",
                    "values": [
                        {
                            "name": "2022"
                        },
                        {
                            "name": "2021"
                        }
                    ]
                }
            }
        },
        {
            "id": 2,
            "name": "电视剧",
            "subClassify": {
                "name": "分类",
                "values": [
                    {
                        "id": 8, //若使用alias别名,id可省略
                        "alias": "guochanju", //别名,一般是在伪静态隐藏了分类时设置,可忽略
                        "name": "国产剧"
                    },
                    {
                        "id": 9, //若使用alias别名,id可省略
                        "alias": "gangtaiju", //别名,一般是在伪静态隐藏了分类时设置,可忽略
                        "name": "港台剧"
                    }
                ]
            },
            "filter": {
                "type": {
                    "name": "类型",
                    "values": [
                        {
                            "name": "古装"
                        },
                        {
                            "name": "青春偶像"
                        }
                    ]
                },
                "area": {
                    "name": "地区",
                    "values": [
                        {
                            "name": "中国大陆"
                        },
                        {
                            "name": "中国香港"
                        }
                    ]
                },
                "year": {
                    "name": "年份",
                    "values": [
                        {
                            "name": "2022"
                        },
                        {
                            "name": "2021"
                        }
                    ]
                }
            }
        }
    ]
}

如果各大分类的筛选规则 filter 部分一致,那么可将筛选规则 filter 部分提取出来方在跟 classify 同级,简写为:

json
{
    "url": "/show/catid/{{id}}/area/{{area}}/type/{{type}}/year/{{year}}/page/{{page}}.html",
    //分类id的参数名是catid,与默认的id不一致
    //所以需要将catid映射到id,参数名一致时可省略。
    "mapping":{
        "id": "catid",
    },
    "classify": [
        {
            "id": 1,
            "name": "电影",
            "subClassify": {
                "name": "分类",
                "values": [
                    {
                        "id": 6,
                        "name": "动作片"
                    },
                    {
                        "id": 7,
                        "name": "喜剧片"
                    }
                ]
            }
        },
        {
            "id": 2,
            "name": "电视剧",
            "subClassify": {
                "name": "分类",
                "values": [
                    {
                        "id": 8,
                        "name": "国产剧"
                    },
                    {
                        "id": 9,
                        "name": "港台剧"
                    }
                ]
            }
        }
    ],
    "filter": {
        "type": {
            "name": "类型",
            "values": [
                {
                    "name": "古装"
                },
                {
                    "name": "青春偶像"
                }
            ]
        },
        "area": {
            "name": "地区",
            "values": [
                {
                    "name": "中国大陆"
                },
                {
                    "name": "中国香港"
                }
            ]
        },
        "year": {
            "name": "年份",
            "values": [
                {
                    "name": "2022"
                },
                {
                    "name": "2021"
                }
            ]
        }
    }
}

编写详情页规则

详情页示例代码:

html
...
<div id="video-detail">
    <div class="info-left">
        <h1>影片名称</h1>
        <p>影片分类</p>
        <div class="info-box">
            <p>影片简介</p>
            <p>导演</p>
            <p>主演</p>
            <p>更新至第06集</p>
            <p>更新时间</p>
        </div>
    </div>
    <div class="info-right">
        <img src="" alt="影片海报" />
    </div>
</div>
...
txt
剧集名称://h1/text()
导演://div[@class='info-box']/p[2]/text()
主演://div[@class='info-box']/p[3]/text()
分类://div[@class='info-left']/p/text()
更新状态://div[@class='info-box']/p[4]/text()
更新时间://div[@class='info-box']/p[5]/text()
海报://div[@class='info-right']/img/@src
简介://div[@class='info-box']/p[1]/text()
播放页Url:该规则是在详情页没有播放列表,需要跳转到播放列表页时才会用到。
txt
剧集名称:id.video-detail@h1
导演:id.video-detail@tag.p.2@text 或 id.video-detail@class.info-box@tag.p.1@text
主演:id.video-detail@tag.p.3@text 或 id.video-detail@class.info-box@tag.p.2@text
分类:id.video-detail@tag.p.0@text
更新状态:id.video-detail@tag.p.4@text
更新时间:id.video-detail@tag.p.5@text
海报:tag.img@src
简介:id.video-detail@tag.p.1@text
播放页Url:该规则是在详情页没有播放列表,需要跳转到播放列表页时才会用到。

编写剧集规则

剧集列表示例代码:

html
...
<ul class="play-line">
    <li>极速播放</li>
    <li>云播</li>
    ...
</ul>
<ul class="play-list" id="panel1">
    <li><a href="">第1集</a></li>
    <li><a href="">第2集</a></li>
    ...
</ul>
<ul class="play-list" id="panel2">
    <li><a href="">第1集</a></li>
    <li><a href="">第2集</a></li>
    ...
</ul>
...
txt
线路列表://ul[@class='play-line']/li
线路名称://text()
播放列表://ul[@class='play-list']
剧集列表://a
剧集名称://text()
播放Url://@href
txt
线路列表:class.play-line@tag.li
线路名称:text
播放列表:class.play-list
剧集列表:tag.li@tag.a
剧集名称:text
播放Url:href

编写播放规则

播放规则示例代码:

html
<script>
var param = {"a": "a", "nowPlay": "https://a.com/x.html", "nextPlay": ""}
</script>

Url正则格式:正则表达式1||正则表达式2||...||正则表达式n##替换内容,正则表达式可为多个,每个正则之间用 || 隔开,##替换内容可省略。

txt
Js变量://script[contains(text(),'param')]/text()
Url正则:(https?).+?(?=".+next)||(https?)##https://www.abc.com/?url=$1
txt
Js变量:param@(https?).+?(?=".+next)    //格式为:JS变量名.位置@正则表达式
Url正则:(https?)##https://www.abc.com/?url=$1