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/sort/time/page/1.html

筛选列表为:

txt
全部  动作片  喜剧片  ...
全部  喜剧  爱情  ...
全部  中国大陆  中国香港  ...
全部  2022  2021  ...
按更新  按热度

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

筛选列表为:

txt
全部  国产剧  港台剧  ...
全部  古装  青春偶像  ...
全部  中国大陆  中国香港  ...
全部  2022  2021  ...
按更新  按热度

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

由此可得到筛选URL规则:

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

如果各大分类的筛选规则 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": [
                {
                    "id": 6,
                    "name": "动作片"
                },
                {
                    "id": 7,
                    "name": "喜剧片"
                }
            ]
        },
        {
            "id": 2,
            "name": "电视剧",
            "subClassify": [
                {
                    "id": 8,
                    "name": "国产剧"
                },
                {
                    "id": 9,
                    "name": "港台剧"
                }
            ]
        }
    ],
    "filter": {
        "type": [
            {
                "name": "古装"
            },
            {
                "name": "青春偶像"
            }
        ],
        "area": [
            {
                "name": "中国大陆"
            },
            {
                "name": "中国香港"
            }
        ],
        "year": [
            {
                "name": "2022"
            },
            {
                "name": "2021"
            }
        ]
    },
    "defaultSort": "time",          //默认排序参数
    "sort": [                       //排序列表
        {
            "name": "时间", 
            "value": "time"
        },
        {
            "name": "热度",
            "value": "hits"
        }
    ]
}

也可将不同内容的筛选规则写在分类内,相同部分的规则提取出来,以降低规则的代码量,更简洁,例如:

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": [
                {
                    "id": 6,
                    "name": "动作片"
                },
                {
                    "id": 7,
                    "name": "喜剧片"
                }
            ],
            "filter": {
                "type": [
                    {
                        "name": "动作"
                    },
                    {
                        "name": "喜剧"
                    }
                ]
            }
        },
        {
            "id": 2,
            "name": "电视剧",
            "subClassify": [
                {
                    "id": 8,
                    "name": "国产剧"
                },
                {
                    "id": 9,
                    "name": "港台剧"
                }
            ],
            "filter": {
                "type": [
                    {
                        "name": "古装"
                    },
                    {
                        "name": "青春偶像"
                    }
                ]
            }
        }
    ],
    "filter": {
        "area": [
            {
                "name": "中国大陆"
            },
            {
                "name": "中国香港"
            }
        ],
        "year": [
            {
                "name": "2022"
            },
            {
                "name": "2021"
            }
        ]
    },
    "defaultSort": "time",          //默认排序参数
    "sort": [                       //排序列表
        {
            "name": "时间", 
            "value": "time"
        },
        {
            "name": "热度",
            "value": "hits"
        }
    ]
}

编写详情页规则

详情页示例代码:

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