This commit is contained in:
pricema 2025-10-07 01:38:18 +08:00
parent 6e8af5c540
commit 6d799713f8
414 changed files with 115992 additions and 1 deletions

80
.gitignore vendored Normal file
View File

@ -0,0 +1,80 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# Dependency directories
node_modules/
package-lock.json
# Build output
dist/
dist-ssr/
*.local
bundle-analysis.html
# Environment variables
.env
.env.local
.env.development
.env.development.local
.env.test.local
.env.production.local
# Vite specific
.vite/
vite.config.js.timestamp-*
vite.config.ts.timestamp-*
# IDEs and editors
.idea/
.vscode/*
!.vscode/extensions.json
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
# OS generated files
.DS_Store
Thumbs.db
# Testing
coverage/
*.lcov
# Yarn
.yarn/*
!.yarn/patches
!.yarn/releases
!.yarn/plugins
!.yarn/sdks
!.yarn/versions
.pnp.*
# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
vite.config.dev.ts
# test
.git/objects/*
data/archive
.DS_Store
runtime/*
archive/
*.ipynb
*.pack
*.pyc

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "box"]
path = box
url = https://github.com/xMydev/TVBoxRuleMaster

1932
19988d71ec893884cbe.tmp Normal file

File diff suppressed because it is too large Load Diff

1
CNAME Normal file
View File

@ -0,0 +1 @@
clun.cc

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 ClunTop
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

1932
box.json Normal file

File diff suppressed because it is too large Load Diff

1281
fun.json Normal file

File diff suppressed because it is too large Load Diff

60
git.sh Normal file
View File

@ -0,0 +1,60 @@
#!/bin/env sh
#!/system/bin/sh
if [ "$(id -u)" -ne 0 ]; then
exec sudo "$0" "$@"
exit 1
fi
file_pwd=$(pwd)
file="/data/data/bin.mt.plus/home/tvbox"
if [ "$file_pwd" != "$file" ]; then
cd "$file"
fi
branch() {
git pull origin main
}
state(){
git status
}
warehouse() {
git remote add origin https://github.com/cluntop/tvbox.git
}
submit() {
git pull origin main && git add .
git commit -m "Update Up"
git push origin HEAD:main
}
garbage() {
git reflog expire --expire=now --all
git gc --prune=now --aggressive --prune
}
while true; do
echo "当前时间:$(date)"
echo "脚本路径:$(pwd)"
echo -e "\n请选择要执行的操作"
echo "1. 提交更改"
echo "2. 远程分支"
echo "3. 远程仓库"
echo "4. 查看状态"
echo "5. 清理垃圾"
echo "0. 退出菜单"
read -p "您的选项:" num
case $num in
1) submit ;;
2) branch ;;
3) warehouse ;;
4) state ;;
5) garbage ;;
0) echo -e "\n退出选项" ; exit 0 ;;
*) echo -e "\n无效选项" ;;
esac ; read -p $'\n返回菜单' -n 1 -r
clear ; echo
done

66
index.html Normal file
View File

@ -0,0 +1,66 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>雨呢主页,TVBox,接口</title>
<link rel="stylesheet" type="text/css" href="./js/index.css" as="style">
<link rel="icon" type="image/ico" href="./img/logo.png">
<link rel="dns-prefetch" href="https://gh.clun.top">
<link rel="canonical" href="https://clun.top">
<meta name="keywords" content="雨呢主页,雨呢个人主页,雨呢网盘,疯子社网盘,聚合大全,资源大全,TVBox,接口">
<meta name="description" content="雨呢主页 - 雨呢个人主页.">
<meta property="og:title" content="雨呢主页 - TVBox 接口">
<meta property="og:type" content="profile">
<meta property="og:description" content="雨呢个人主页,TVBox,接口" />
<meta property="og:image" content="./img/logo.png">
<meta property="og:url" content="https://clun.top/">
<meta property="og:locale" content="zh-CN">
<script src="./js/jquery.min.js" charset="utf-8"></script>
<script src="./js/index.min.js" charset="utf-8"></script>
</head>
<body>
<div class="container">
<h1>雨呢个人主页</h1>
<ul>
<li><a href="https://t.me/clun_tz" style="" target="_blank">频道</a> /
<a href="https://t.me/clun_top" style="" target="_blank">群组</a> TVBox 接口 GitHub
<a href="https://github.com/cluntop/tvbox" style="" target="_blank">链接</a>
</li>
<li>很荣幸您能访问我的网站!</li>
<li>自用 https://clun.top/box.json</li>
<li>FongMi leanback
<a href="https://gh.clun.top/raw.githubusercontent.com/FongMi/Release/refs/heads/fongmi/apk/release/leanback-armeabi_v7a.apk" target="_blank">v7a</a>
<a href="https://gh.clun.top/raw.githubusercontent.com/FongMi/Release/refs/heads/fongmi/apk/release/leanback-arm64_v8a.apk" target="_blank">v8a</a>
</li>
<li>okjack leanback
<a href="https://gh.clun.top/raw.githubusercontent.com/FongMi/Release/refs/heads/okjack/apk/release/leanback-armeabi_v7a.apk" target="_blank">v7a</a>
<a href="https://gh.clun.top/raw.githubusercontent.com/FongMi/Release/refs/heads/okjack/apk/release/leanback-arm64_v8a.apk" target="_blank">v8a</a>
</li>
<li>FongMi mobile
<a href="https://gh.clun.top/raw.githubusercontent.com/FongMi/Release/refs/heads/fongmi/apk/release/mobile-armeabi_v7a.apk" target="_blank">v7a</a>
<a href="https://gh.clun.top/raw.githubusercontent.com/FongMi/Release/refs/heads/fongmi/apk/release/mobile-arm64_v8a.apk" target="_blank">v8a</a>
</li>
<li>okjack mobile
<a href="https://gh.clun.top/raw.githubusercontent.com/FongMi/Release/refs/heads/okjack/apk/release/mobile-armeabi_v7a.apk" target="_blank">v7a</a>
<a href="https://gh.clun.top/raw.githubusercontent.com/FongMi/Release/refs/heads/okjack/apk/release/mobile-arm64_v8a.apk" target="_blank">v8a</a>
<li>测试</li>
</li>
<li>测试 2</li>
</ul>
<p>
<a id="time"></a> | <a id="cfs">显示</a>
</p>
</div>
</body>
</html>

View File

@ -5,7 +5,7 @@
"sites": [
{
"key": "豆瓣",
"name": "🤓公众号┃OK杰克",
"name": "🤓公众号┃星河电视屋",
"type": 3,
"api": "csp_DoubanGuard",
"searchable": 0,

View File

@ -0,0 +1,197 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import re
import sys
from urllib.parse import quote, urlparse
from Crypto.Hash import SHA256
sys.path.append("..")
import json
import time
from pyquery import PyQuery as pq
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def action(self, action):
pass
def destroy(self):
pass
host='https://www.knvod.com'
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Sec-Fetch-Dest': 'document',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"',
'sec-ch-ua-platform': '"macOS"',
'Origin': host,
'Referer': f"{host}/",
'Cookie':'X-Robots-Tag=CDN-VERIFY'
}
def homeContent(self, filter):
data=self.getpq(self.fetch(self.host,headers=self.headers).text)
result = {}
classes = []
for k in data('.head-more.box a').items():
i=k.attr('href')
if i and '/show' in i:
classes.append({
'type_name': k.text(),
'type_id': re.findall(r'\d+', i)[0]
})
result['class'] = classes
result['list']=self.getlist(data('.border-box.public-r .public-list-div'))
return result
def homeVideoContent(self):
pass
def categoryContent(self, tid, pg, filter, extend):
data=self.getpq(self.fetch(f"{self.host}/show/{tid}--------{pg}---/",headers=self.headers).text)
result = {}
result['list'] = self.getlist(data('.border-box.public-r .public-list-div'))
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
data = self.getpq(self.fetch(f"{self.host}/list/{ids[0]}/", headers=self.headers).text)
v=data('.detail-info.lightSpeedIn .slide-info')
vod = {
'vod_year': v.eq(-1).text().split(':',1)[-1],
'vod_remarks': v.eq(0),
'vod_actor': v.eq(3).text().split(':',1)[-1],
'vod_director': v.eq(2).text().split(':',1)[-1],
'vod_content': data('.switch-box #height_limit').text()
}
np=data('.anthology.wow.fadeInUp')
ndata=np('.anthology-tab .swiper-wrapper .swiper-slide')
pdata=np('.anthology-list .anthology-list-box ul')
play,names=[],[]
for i in range(len(ndata)):
n=ndata.eq(i)('a')
n('span').remove()
names.append(n.text())
vs=[]
for v in pdata.eq(i)('li').items():
vs.append(f"{v.text()}${v('a').attr('href')}")
play.append('#'.join(vs))
vod["vod_play_from"] = "$$$".join(names)
vod["vod_play_url"] = "$$$".join(play)
result = {"list": [vod]}
return result
def searchContent(self, key, quick, pg="1"):
data = self.fetch(f"{self.host}/index.php/ajax/suggest?mid=1&wd={key}&limit=9999&timestamp={int(time.time()*1000)}", headers=self.headers).json()
videos=[]
for i in data['list']:
videos.append({
'vod_id': i['id'],
'vod_name': i['name'],
'vod_pic': i['pic']
})
return {'list':videos,'page':pg}
def playerContent(self, flag, id, vipFlags):
h={
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.8 Mobile/15E148 Safari/604.1',
'Origin': self.host
}
data = self.getpq(self.fetch(f"{self.host}{id}", headers=self.headers).text)
try:
jstr = data('.player-box .player-left script').eq(1).text()
jsdata = json.loads(jstr.split('=',1)[-1])
url = jsdata.get('url')
if not re.search(r'\.m3u8|\.mp4',jsdata['url']):
jxd=self.fetch(f"{self.host}/static/player/{jsdata['from']}.js", headers=self.headers).text
jx=re.search(r'http.*?url=', jxd)
if not jx:raise Exception('未找到jx')
parsed_url = urlparse(jx.group())
jxhost = parsed_url.scheme + "://" + parsed_url.netloc
title=data('head title').eq(0).text().split('-')[0]
next=f"{self.host.split('//')[-1]}{jsdata['link_next']}" if jsdata.get('link_next') else ''
cd=self.fetch(f"{jx.group()}{jsdata['url']}&next=//{next}&title={quote(title)}", headers=self.headers).text
match = re.search(r'var\s+config\s*=\s*(\{[\s\S]*?\})', cd)
if not match:raise Exception('未找到config')
cm=re.sub(r',\s*}(?=\s*$)', '}', match.group(1))
config=json.loads(cm)
config.update({'key':self.sha256(f"{self.gettime()}knvod")})
config.pop('next',None)
headers = {
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.8 Mobile/15E148 Safari/604.1',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Cache-Control': 'no-cache',
'DNT': '1',
'Origin': jxhost,
'Pragma': 'no-cache',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'Sec-Fetch-Storage-Access': 'active',
'X-Requested-With': 'XMLHttpRequest',
}
h['Origin']=jxhost
jd=self.post(f"{jxhost}/post.php", headers=headers, data=json.dumps(config))
data=json.loads(jd.content.decode('utf-8-sig'))
url=data.get('knvod')
p = 0
if not url:raise Exception('未找到播放地址')
except Exception as e:
print('错误信息:',e)
p,url=1,f"{self.host}{id}"
return {"parse": p, "url": url, "header": h}
def localProxy(self, param):
pass
def getlist(self,data):
videos=[]
for i in data.items():
id = i('a').attr('href')
if id:
id = re.search(r'\d+', id).group(0)
img = i('img').attr('data-src')
if img and 'url=' in img and 'http' not in img: img = f'{self.host}{img}'
videos.append({
'vod_id': id,
'vod_name': i('a').attr('title'),
'vod_pic': img,
'vod_remarks': i('.public-prt').text() or i('.public-list-prb').text()
})
return videos
def getpq(self, data):
try:
return pq(data)
except Exception as e:
print(f"{str(e)}")
return pq(data.encode('utf-8'))
def gettime(self):
current_time = int(time.time())
hourly_timestamp = current_time - (current_time % 3600)
return hourly_timestamp
def sha256(self, text):
sha = SHA256.new()
sha.update(text.encode())
return sha.hexdigest()

View File

@ -0,0 +1,151 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import sys
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
ahost='https://api.cenguigui.cn'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36',
'sec-ch-ua-platform': '"macOS"',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"',
'DNT': '1',
'sec-ch-ua-mobile': '?0',
'Sec-Fetch-Site': 'cross-site',
'Sec-Fetch-Mode': 'no-cors',
'Sec-Fetch-Dest': 'video',
'Sec-Fetch-Storage-Access': 'active',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
}
def homeContent(self, filter):
result = {'class': [{'type_id': '推荐榜', 'type_name': '🔥 推荐榜'},
{'type_id': '新剧', 'type_name': '🎬 新剧'},
{'type_id': '逆袭', 'type_name': '🎬 逆袭'},
{'type_id': '霸总', 'type_name': '🎬 霸总'},
{'type_id': '现代言情', 'type_name': '🎬 现代言情'},
{'type_id': '打脸虐渣', 'type_name': '🎬 打脸虐渣'},
{'type_id': '豪门恩怨', 'type_name': '🎬 豪门恩怨'},
{'type_id': '神豪', 'type_name': '🎬 神豪'},
{'type_id': '马甲', 'type_name': '🎬 马甲'},
{'type_id': '都市日常', 'type_name': '🎬 都市日常'},
{'type_id': '战神归来', 'type_name': '🎬 战神归来'},
{'type_id': '小人物', 'type_name': '🎬 小人物'},
{'type_id': '女性成长', 'type_name': '🎬 女性成长'},
{'type_id': '大女主', 'type_name': '🎬 大女主'},
{'type_id': '穿越', 'type_name': '🎬 穿越'},
{'type_id': '都市修仙', 'type_name': '🎬 都市修仙'},
{'type_id': '强者回归', 'type_name': '🎬 强者回归'},
{'type_id': '亲情', 'type_name': '🎬 亲情'},
{'type_id': '古装', 'type_name': '🎬 古装'},
{'type_id': '重生', 'type_name': '🎬 重生'},
{'type_id': '闪婚', 'type_name': '🎬 闪婚'},
{'type_id': '赘婿逆袭', 'type_name': '🎬 赘婿逆袭'},
{'type_id': '虐恋', 'type_name': '🎬 虐恋'},
{'type_id': '追妻', 'type_name': '🎬 追妻'},
{'type_id': '天下无敌', 'type_name': '🎬 天下无敌'},
{'type_id': '家庭伦理', 'type_name': '🎬 家庭伦理'},
{'type_id': '萌宝', 'type_name': '🎬 萌宝'},
{'type_id': '古风权谋', 'type_name': '🎬 古风权谋'},
{'type_id': '职场', 'type_name': '🎬 职场'},
{'type_id': '奇幻脑洞', 'type_name': '🎬 奇幻脑洞'},
{'type_id': '异能', 'type_name': '🎬 异能'},
{'type_id': '无敌神医', 'type_name': '🎬 无敌神医'},
{'type_id': '古风言情', 'type_name': '🎬 古风言情'},
{'type_id': '传承觉醒', 'type_name': '🎬 传承觉醒'},
{'type_id': '现言甜宠', 'type_name': '🎬 现言甜宠'},
{'type_id': '奇幻爱情', 'type_name': '🎬 奇幻爱情'},
{'type_id': '乡村', 'type_name': '🎬 乡村'},
{'type_id': '历史古代', 'type_name': '🎬 历史古代'},
{'type_id': '王妃', 'type_name': '🎬 王妃'},
{'type_id': '高手下山', 'type_name': '🎬 高手下山'},
{'type_id': '娱乐圈', 'type_name': '🎬 娱乐圈'},
{'type_id': '强强联合', 'type_name': '🎬 强强联合'},
{'type_id': '破镜重圆', 'type_name': '🎬 破镜重圆'},
{'type_id': '暗恋成真', 'type_name': '🎬 暗恋成真'},
{'type_id': '民国', 'type_name': '🎬 民国'},
{'type_id': '欢喜冤家', 'type_name': '🎬 欢喜冤家'},
{'type_id': '系统', 'type_name': '🎬 系统'},
{'type_id': '真假千金', 'type_name': '🎬 真假千金'},
{'type_id': '龙王', 'type_name': '🎬 龙王'},
{'type_id': '校园', 'type_name': '🎬 校园'},
{'type_id': '穿书', 'type_name': '🎬 穿书'},
{'type_id': '女帝', 'type_name': '🎬 女帝'},
{'type_id': '团宠', 'type_name': '🎬 团宠'},
{'type_id': '年代爱情', 'type_name': '🎬 年代爱情'},
{'type_id': '玄幻仙侠', 'type_name': '🎬 玄幻仙侠'},
{'type_id': '青梅竹马', 'type_name': '🎬 青梅竹马'},
{'type_id': '悬疑推理', 'type_name': '🎬 悬疑推理'},
{'type_id': '皇后', 'type_name': '🎬 皇后'},
{'type_id': '替身', 'type_name': '🎬 替身'},
{'type_id': '大叔', 'type_name': '🎬 大叔'},
{'type_id': '喜剧', 'type_name': '🎬 喜剧'},
{'type_id': '剧情', 'type_name': '🎬 剧情'}]}
return result
def homeVideoContent(self):
pass
def categoryContent(self, tid, pg, filter, extend):
params = {
'classname': tid,
'offset': str((int(pg) - 1)),
}
data = self.fetch(f'{self.ahost}/api/duanju/api.php', params=params, headers=self.headers).json()
videos = []
for k in data['data']:
videos.append({
'vod_id': k.get('book_id'),
'vod_name': k.get('title'),
'vod_pic': k.get('cover'),
'vod_year': k.get('score'),
'vod_remarks': f"{k.get('sub_title')}|{k.get('episode_cnt')}"
})
result = {}
result['list'] = videos
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
v=self.fetch(f'{self.ahost}/api/duanju/api.php', params={'book_id': ids[0]}, headers=self.headers).json()
vod = {
'type_name': v.get('category'),
'vod_year': v.get('time'),
'vod_remarks': v.get('duration'),
'vod_content': v.get('desc'),
'vod_play_from': '嗷呜爱看短剧',
'vod_play_url': '#'.join([f"{i['title']}${i['video_id']}" for i in v['data']])
}
return {'list':[vod]}
def searchContent(self, key, quick, pg="1"):
return self.categoryContent(key, pg, True, {})
def playerContent(self, flag, id, vipFlags):
data=self.fetch(f'{self.ahost}/api/duanju/api.php', params={'video_id': id}, headers=self.headers).json()
return {'parse': 0, 'url': data['data']['url'], 'header': self.headers}
def localProxy(self, param):
pass

View File

@ -0,0 +1,127 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import re
import sys
from pyquery import PyQuery as pq
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
host='https://www.hongguodj.cc'
headers = {
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
'DNT': '1',
'Origin': host,
'Pragma': 'no-cache',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'cross-site',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"macOS"',
}
def homeContent(self, filter):
result = {}
classes = []
vlist = []
data = pq(self.fetch(self.host, headers=self.headers).text)
for i in list(data('.slip li').items())[1:]:
classes.append({
'type_name': i.text(),
'type_id': re.findall(r'\d+', i('a').attr('href'))[0]
})
for i in data('.wrap .rows').items():
vlist.extend(self.getlist(i('li')))
result['class'] = classes
result['list'] = vlist
return result
def homeVideoContent(self):
pass
def categoryContent(self, tid, pg, filter, extend):
data=pq(self.fetch(f'{self.host}/type/{tid}-{pg}.html', headers=self.headers).text)
result = {}
result['list'] = self.getlist(data('.list ul li'))
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
data=pq(self.fetch(f'{self.host}{ids[0]}', headers=self.headers).text)
v=data('.info')
p=v('p')
vod = {
'vod_name': v('h1').text(),
'type_name': p.eq(2).text(),
'vod_year': p.eq(3).text(),
'vod_area': p.eq(4).text(),
'vod_remarks': v('em').text(),
'vod_actor': p.eq(0).text(),
'vod_director': p.eq(1).text(),
'vod_content': data('#desc .text').text(),
'vod_play_from': '',
'vod_play_url': ''
}
names = [i.text() for i in data('.title.slip a').items()]
plist=[]
for i in data('.play-list ul').items():
plist.append('#'.join([f'{j("a").text()}${j("a").attr("href")}' for j in i('li').items()]))
vod['vod_play_from'] = '$$$'.join(names)
vod['vod_play_url'] = '$$$'.join(plist)
return {'list': [vod]}
def searchContent(self, key, quick, pg="1"):
data=pq(self.fetch(f'{self.host}/search/{key}----------{pg}---.html', headers=self.headers).text)
return {'list': self.getlist(data('.show.rows li')),'page':pg}
def playerContent(self, flag, id, vipFlags):
p=0
uid=f'{self.host}{id}'
data=pq(self.fetch(uid, headers=self.headers).text)
url=data('.video.ratio').attr('data-play')
if not url:
url = uid
p = 1
return {'parse': p, 'url': url, 'header': self.headers}
def localProxy(self, param):
pass
def getlist(self,data):
vlist = []
for j in data.items():
vlist.append({
'vod_id': j('a').attr('href'),
'vod_name': j('img').attr('alt'),
'vod_pic': self.host + j('img').attr('data-src'),
'vod_year': j('.bg').text(),
'vod_remarks': j('p').text()
})
return vlist

View File

@ -0,0 +1,147 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import base64
import re
import sys
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
from pyquery import PyQuery as pq
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
host = 'https://www.jdys.art'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36',
'sec-ch-ua-platform': '"macOS"',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"',
'dnt': '1',
'sec-ch-ua-mobile': '?0',
'origin': host,
'sec-fetch-site': 'cross-site',
'sec-fetch-mode': 'cors',
'sec-fetch-dest': 'empty',
'referer': f'{host}/',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'priority': 'u=1, i',
}
def homeContent(self, filter):
data = self.getpq(self.fetch(self.host, headers=self.headers).text)
result = {}
classes = []
for k in list(data('.navtop .navlist li').items())[:9]:
classes.append({
'type_name': k('a').text(),
'type_id': k('a').attr('href'),
})
result['class'] = classes
result['list'] = self.getlist(data('.mi_btcon .bt_img ul li'))
return result
def homeVideoContent(self):
pass
def categoryContent(self, tid, pg, filter, extend):
data = self.getpq(self.fetch(f"{tid}{'' if pg == '1' else f'page/{pg}/'}", headers=self.headers).text)
result = {}
result['list'] = self.getlist(data('.mi_cont .bt_img ul li'))
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
data = self.getpq(self.fetch(ids[0], headers=self.headers).text)
data2 = data('.moviedteail_list li')
vod = {
'vod_name': data('.dytext h1').text(),
'type_name': data2.eq(0).text(),
'vod_year': data2.eq(2).text(),
'vod_area': data2.eq(1).text(),
'vod_remarks': data2.eq(4).text(),
'vod_actor': data2.eq(7).text(),
'vod_director': data2.eq(5).text(),
'vod_content': data('.yp_context').text().strip()
}
vdata = data('.paly_list_btn a')
play = []
for i in vdata.items():
a = i.text() + "$" + i.attr.href
play.append(a)
vod["vod_play_from"] = "在线播放"
vod["vod_play_url"] = "#".join(play)
result = {"list": [vod]}
return result
def searchContent(self, key, quick, pg="1"):
data = self.getpq(self.fetch(f"{self.host}/page/{pg}/?s={key}", headers=self.headers).text)
return {'list': self.getlist(data('.mi_cont .bt_img ul li')), 'page': pg}
def playerContent(self, flag, id, vipFlags):
data = self.getpq(self.fetch(id, headers=self.headers).text)
try:
sc = data('.videoplay script').eq(-1).text()
strd = re.findall(r'var\s+[^=]*=\s*"([^"]*)";', sc)
kdata = re.findall(r'parse\((.*?)\);', sc)
jm = self.aes(strd[0], kdata[0].replace('"', ''), kdata[1].replace('"', ''))
url = re.search(r'url: "(.*?)"', jm).group(1)
p = 0
except:
p = 1
url = id
result = {}
result["parse"] = p
result["url"] = url
result["header"] = self.headers
return result
def localProxy(self, param):
pass
def getpq(self, text):
try:
return pq(text)
except Exception as e:
print(f"{str(e)}")
return pq(text.encode('utf-8'))
def getlist(self, data):
videos = []
for i in data.items():
videos.append({
'vod_id': i('a').attr('href'),
'vod_name': i('a img').attr('alt'),
'vod_pic': i('a img').attr('src'),
'vod_remarks': i('.dycategory').text(),
'vod_year': i('.dyplayinfo').text() or i('.rating').text(),
})
return videos
def aes(self, word, key, iv):
key = key.encode('utf-8')
iv = iv.encode('utf-8')
encrypted_data = base64.b64decode(word)
cipher = AES.new(key, AES.MODE_CBC, iv)
decrypted_data = cipher.decrypt(encrypted_data)
decrypted_data = unpad(decrypted_data, AES.block_size)
return decrypted_data.decode('utf-8')

225
js/py/plugin/html/金牌.py Normal file
View File

@ -0,0 +1,225 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import json
import sys
import threading
import uuid
import requests
sys.path.append('..')
from base.spider import Spider
import time
from Crypto.Hash import MD5, SHA1
class Spider(Spider):
'''
配置示例
{
"key": "xxxx",
"name": "xxxx",
"type": 3,
"api": ".所在路径/金牌.py",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"changeable": 1,
"ext": {
"site": "https://www.jiabaide.cn,域名2,域名3"
}
},
'''
def init(self, extend=""):
if extend:
hosts=json.loads(extend)['site']
self.host = self.host_late(hosts)
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
def homeContent(self, filter):
cdata = self.fetch(f"{self.host}/api/mw-movie/anonymous/get/filer/type", headers=self.getheaders()).json()
fdata = self.fetch(f"{self.host}/api/mw-movie/anonymous/v1/get/filer/list", headers=self.getheaders()).json()
result = {}
classes = []
filters={}
for k in cdata['data']:
classes.append({
'type_name': k['typeName'],
'type_id': str(k['typeId']),
})
sort_values = [{"n": "最近更新", "v": "2"},{"n": "人气高低", "v": "3"}, {"n": "评分高低", "v": "4"}]
for tid, d in fdata['data'].items():
current_sort_values = sort_values.copy()
if tid == '1':
del current_sort_values[0]
filters[tid] = [
{"key": "type", "name": "类型",
"value": [{"n": i["itemText"], "v": i["itemValue"]} for i in d["typeList"]]},
*([] if not d["plotList"] else [{"key": "v_class", "name": "剧情",
"value": [{"n": i["itemText"], "v": i["itemText"]}
for i in d["plotList"]]}]),
{"key": "area", "name": "地区",
"value": [{"n": i["itemText"], "v": i["itemText"]} for i in d["districtList"]]},
{"key": "year", "name": "年份",
"value": [{"n": i["itemText"], "v": i["itemText"]} for i in d["yearList"]]},
{"key": "lang", "name": "语言",
"value": [{"n": i["itemText"], "v": i["itemText"]} for i in d["languageList"]]},
{"key": "sort", "name": "排序", "value": current_sort_values}
]
result['class'] = classes
result['filters'] = filters
return result
def homeVideoContent(self):
data1 = self.fetch(f"{self.host}/api/mw-movie/anonymous/v1/home/all/list", headers=self.getheaders()).json()
data2=self.fetch(f"{self.host}/api/mw-movie/anonymous/home/hotSearch",headers=self.getheaders()).json()
data=[]
for i in data1['data'].values():
data.extend(i['list'])
data.extend(data2['data'])
vods=self.getvod(data)
return {'list':vods}
def categoryContent(self, tid, pg, filter, extend):
params = {
"area": extend.get('area', ''),
"filterStatus": "1",
"lang": extend.get('lang', ''),
"pageNum": pg,
"pageSize": "30",
"sort": extend.get('sort', '1'),
"sortBy": "1",
"type": extend.get('type', ''),
"type1": tid,
"v_class": extend.get('v_class', ''),
"year": extend.get('year', '')
}
data = self.fetch(f"{self.host}/api/mw-movie/anonymous/video/list?{self.js(params)}", headers=self.getheaders(params)).json()
result = {}
result['list'] = self.getvod(data['data']['list'])
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
data=self.fetch(f"{self.host}/api/mw-movie/anonymous/video/detail?id={ids[0]}",headers=self.getheaders({'id':ids[0]})).json()
vod=self.getvod([data['data']])[0]
vod['vod_play_from']='嗷呜有金牌'
vod['vod_play_url'] = '#'.join(
f"{i['name'] if len(vod['episodelist']) > 1 else vod['vod_name']}${ids[0]}@@{i['nid']}" for i in
vod['episodelist'])
vod.pop('episodelist', None)
return {'list':[vod]}
def searchContent(self, key, quick, pg="1"):
params = {
"keyword": key,
"pageNum": pg,
"pageSize": "8",
"sourceCode": "1"
}
data=self.fetch(f"{self.host}/api/mw-movie/anonymous/video/searchByWord?{self.js(params)}",headers=self.getheaders(params)).json()
vods=self.getvod(data['data']['result']['list'])
return {'list':vods,'page':pg}
def playerContent(self, flag, id, vipFlags):
self.header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.61 Chrome/126.0.6478.61 Not/A)Brand/8 Safari/537.36',
'sec-ch-ua-platform': '"Windows"',
'DNT': '1',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
'sec-ch-ua-mobile': '?0',
'Origin': self.host,
'Referer': f'{self.host}/'
}
ids=id.split('@@')
pdata = self.fetch(f"{self.host}/api/mw-movie/anonymous/v2/video/episode/url?clientType=1&id={ids[0]}&nid={ids[1]}",headers=self.getheaders({'clientType':'1','id': ids[0], 'nid': ids[1]})).json()
vlist=[]
for i in pdata['data']['list']:vlist.extend([i['resolutionName'],i['url']])
return {'parse':0,'url':vlist,'header':self.header}
def localProxy(self, param):
pass
def host_late(self, url_list):
if isinstance(url_list, str):
urls = [u.strip() for u in url_list.split(',')]
else:
urls = url_list
if len(urls) <= 1:
return urls[0] if urls else ''
results = {}
threads = []
def test_host(url):
try:
start_time = time.time()
response = requests.head(url, timeout=1.0, allow_redirects=False)
delay = (time.time() - start_time) * 1000
results[url] = delay
except Exception as e:
results[url] = float('inf')
for url in urls:
t = threading.Thread(target=test_host, args=(url,))
threads.append(t)
t.start()
for t in threads:
t.join()
return min(results.items(), key=lambda x: x[1])[0]
def md5(self, sign_key):
md5_hash = MD5.new()
md5_hash.update(sign_key.encode('utf-8'))
md5_result = md5_hash.hexdigest()
return md5_result
def js(self, param):
return '&'.join(f"{k}={v}" for k, v in param.items())
def getheaders(self, param=None):
if param is None:param = {}
t=str(int(time.time()*1000))
param['key']='cb808529bae6b6be45ecfab29a4889bc'
param['t']=t
sha1_hash = SHA1.new()
sha1_hash.update(self.md5(self.js(param)).encode('utf-8'))
sign = sha1_hash.hexdigest()
deviceid = str(uuid.uuid4())
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.61 Chrome/126.0.6478.61 Not/A)Brand/8 Safari/537.36',
'Accept': 'application/json, text/plain, */*',
'sign': sign,
't': t,
'deviceid':deviceid
}
return headers
def convert_field_name(self, field):
field = field.lower()
if field.startswith('vod') and len(field) > 3:
field = field.replace('vod', 'vod_')
if field.startswith('type') and len(field) > 4:
field = field.replace('type', 'type_')
return field
def getvod(self, array):
return [{self.convert_field_name(k): v for k, v in item.items()} for item in array]

View File

@ -0,0 +1,144 @@
# coding=utf-8
# !/usr/bin/python
import sys
import requests
import datetime
from bs4 import BeautifulSoup
import re
import base64
from base.spider import Spider
import json
sys.path.append('..')
xurl = "http://xjj2.716888.xyz"
headerx = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36',
'Cookie':'mk_encrypt_c21f969b5f03d33d43e04f8f136e7682=390e11f0d5ae13b2787e6a72db11527f'
}
class Spider(Spider):
global xurl
global headerx
def getName(self):
return "首页"
def init(self, extend):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def homeContent(self, filter):
pass
def homeVideoContent(self):
id = ['4k/4k.php', 'djxjj/dj1.php', 'zj/jipinyz/jipinyz.php', 'zj/xuejie/xuejie.php', 'zj/kawayi/kawayi.php',
'zj/nennen/nennen.php', 'zj/heji1/heji1.php', 'zj/sihuawd/sihuawd.php', 'zj/wanmeisc/wanmeisc.php',
'zj/manyao/manyao.php', 'zj/sihuadd/sihuadd.php', 'zj/qingchun/qingchun.php', 'zj/cos/cos.php',
'zj/jingpinbz/jingpinbz.php', 'zj/jipinll/jipinll.php', 'zj/nideym/nideym.php', 'zj/tianmei/tianmei.php',
'zj/yusi/yusi.php', 'zj/shuaige/shuaige.php', 'zj/rewu/rewu.php', 'zj/jingpinsc/jingpinsc.php']
name = ['随机', 'DJ姐姐', '极品钰足', '学姐系列', '卡哇伊', '嫩嫩系列', '美女舞蹈', '丝滑舞蹈', '完美身材',
'慢摇系列', '丝滑吊带', '清纯系列', 'COS系列', '精品变装', '极品罗丽', '你的裕梦', '甜妹系列',
'御丝系列', '帅哥哥', '热舞系列', '精品收藏']
pic = ['https://img0.baidu.com/it/u=2236794495,926227820&fm=253&fmt=auto&app=138&f=JPEG?w=1091&h=500',
'https://pic.rmb.bdstatic.com/mvideo/e17d86ce4489a02870ace9a25a804c3e',
'https://img1.baidu.com/it/u=4087009209,613234683&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=364',
'https://img1.baidu.com/it/u=2347706654,3055017263&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=750',
'https://img2.baidu.com/it/u=3715511725,1094436549&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=1083',
'https://img2.baidu.com/it/u=2560410906,3760952489&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=750',
'https://img0.baidu.com/it/u=4119328645,2294770712&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=750',
'https://img1.baidu.com/it/u=3167365498,4156845177&fm=253&fmt=auto&app=120&f=JPEG?w=355&h=631',
'https://img2.baidu.com/it/u=2214691242,2295609938&fm=253&fmt=auto&app=120&f=JPEG?w=800&h=973',
'https://img1.baidu.com/it/u=3930123826,1131807820&fm=253&fmt=auto&app=138&f=JPEG?w=889&h=500',
'https://img2.baidu.com/it/u=3998619741,1128428746&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=594',
'https://img2.baidu.com/it/u=1507871502,2316279678&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=768',
'https://img0.baidu.com/it/u=2245878765,4037513957&fm=253&fmt=auto&app=138&f=JPEG?w=617&h=411',
'https://img1.baidu.com/it/u=3623293272,829752126&fm=253&fmt=auto&app=138&f=JPEG?w=285&h=285',
'https://img2.baidu.com/it/u=1922261112,3647796435&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=542',
'https://img1.baidu.com/it/u=3970043028,2042301564&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=889',
'https://img2.baidu.com/it/u=3229384329,3046902124&fm=253&fmt=auto&app=120&f=JPEG?w=800&h=800',
'https://img1.baidu.com/it/u=3113661564,2558849413&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500',
'https://img1.baidu.com/it/u=2361496550,3302335162&fm=253&fmt=auto&app=138&f=JPEG?w=333&h=500',
'https://img1.baidu.com/it/u=270105183,1595166255&fm=253&fmt=auto&app=120&f=JPEG?w=800&h=500',
'https://img1.baidu.com/it/u=4071105902,825241031&fm=253&fmt=auto&app=138&f=JPEG?w=235&h=340']
list_length = len(id)
videos = []
for i in range(list_length):
print(id[i])
video = {
"vod_id": id[i],
"vod_name": name[i],
"vod_pic": pic[i],
"vod_remarks": '播放20个',
}
videos.append(video)
result = {'list': videos}
return result
def categoryContent(self, cid, pg, filter, ext):
pass
def detailContent(self, ids):
videos = []
result = {}
did = ids[0]
for i in range(1, 21):
playurl = ""
for j in range(1, i + 1):
playurl += f"{j}$/fenlei/{did}#"
playurl = playurl[:-1]
videos.append({
"vod_id": '',
"vod_name": '',
"vod_pic": "",
"type_name": '',
"vod_year": "",
"vod_area": "",
"vod_remarks": "",
"vod_actor": "",
"vod_director": "",
"vod_content": "",
"vod_play_from": "GK推荐",
"vod_play_url": playurl
})
result['list'] = videos
return result
def playerContent(self, flag, id, vipFlags):
result = {}
response = requests.get(url=xurl + id, headers=headerx, allow_redirects=False)
location_header = response.headers.get('Location')
if 'http' in location_header:
purl = location_header
else:
purl = 'http:' + location_header
result["parse"] = 0
result["playUrl"] = ''
result["url"] = purl
result["header"] = headerx
return result
def searchContentPage(self, key, quick, page):
pass
def searchContent(self, key, quick):
return self.searchContentPage(key, quick, '1')
def localProxy(self, params):
if params['type'] == "m3u8":
return self.proxyM3u8(params)
elif params['type'] == "media":
return self.proxyMedia(params)
elif params['type'] == "ts":
return self.proxyTs(params)
return None

View File

@ -0,0 +1,218 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import re
import sys
from urllib.parse import urlparse
import base64
from pyquery import PyQuery as pq
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
self.host=self.gethost()
self.headers.update({'referer': f'{self.host}/'})
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="130", "Google Chrome";v="130"',
'sec-ch-ua-platform': '"Android"',
'user-agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
}
def homeContent(self, filter):
data=self.getpq()
result = {}
classes = []
filters = {"1": {"name": "类型","key": "tid","value": [{"n": "喜剧","v": 6},{"n": "爱情","v": 7},{"n": "恐怖","v": 8},{"n": "动作","v": 9},{"n": "科幻","v": 10},{"n": "战争","v": 11},{"n": "犯罪","v": 12},{"n": "动画","v": 13},{"n": "奇幻","v": 14},{"n": "剧情","v": 15},{"n": "冒险","v": 16},{"n": "悬疑","v": 17},{"n": "惊悚","v": 18},{"n": "其它","v": 19}]},"2": {"name": "类型","key": "tid","value": [{"n": "大陆剧","v": 20},{"n": "港剧","v": 21},{"n": "韩剧","v": 22},{"n": "美剧","v": 23},{"n": "日剧","v": 24},{"n": "英剧","v": 25},{"n": "台剧","v": 26},{"n": "其它","v": 27}]}}
for k in data('.top_bar.clearfix a').items():
j = k.attr('href')
if j and 'list' in j:
id = re.search(r'\d+', j).group(0)
classes.append({
'type_name': k.text(),
'type_id': id
})
result['class'] = classes
result['filters'] = filters
result['list'] = self.getlist(data('.grid_box ul li'))
return result
def homeVideoContent(self):
pass
def categoryContent(self, tid, pg, filter, extend):
data=self.getpq(f"/list/{extend.get('tid',tid)}-{pg}.html")
result = {}
result['list'] = self.getlist(data('.grid_box ul li'))
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
data=self.getpq(ids[0])
vod = {
'vod_remarks': data('.grid_box.v_info_box p').text(),
'vod_content': data('.p_txt.show_part').text().split('\n')[0],
}
n=list(data('.play_from ul li').items())
p=list(data('ul.play_list li').items())
ns,ps=[],[]
for i,j in enumerate(n):
ns.append(j.text())
ps.append('#'.join([f"{k.text()}${k.attr('href')}" for k in list(p[i]('a').items())[::-1]]))
vod['vod_play_from']='$$$'.join(ns)
vod['vod_play_url']='$$$'.join(ps)
return {'list':[vod]}
def searchContent(self, key, quick, pg="1"):
pass
def playerContent(self, flag, id, vipFlags):
data=self.getpq(id)
try:
surl=data('section[style*="padding-top"] iframe').eq(0).attr('src')
sd=pq(self.fetch(surl,headers=self.headers).text)('body script').html()
jdata=self.extract_values(sd)
jdata['key']=self.hhh(jdata['key'])
parsed_url = urlparse(surl)
durl = parsed_url.scheme + "://" + parsed_url.netloc
headers = {
'accept': 'application/json, text/javascript, */*; q=0.01',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
'cache-control': 'no-cache',
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
'dnt': '1',
'origin': durl,
'pragma': 'no-cache',
'priority': 'u=1, i',
'referer': f'{surl}',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="130", "Google Chrome";v="130"',
'sec-ch-ua-mobile': '?1',
'sec-ch-ua-platform': '"Android"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-origin',
'sec-fetch-storage-access': 'active',
'user-agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
'x-requested-with': 'XMLHttpRequest',
}
jjb=self.post(f"{durl}/api.php",headers=headers,data=jdata).json()
url,p=jjb['url'],0
except Exception as e:
self.log(f"失败: {e}")
url,p=f'{self.host}{id}',1
phd={
'User-Agent': 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
'sec-ch-ua-platform': '"Android"',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="130", "Google Chrome";v="130"',
'sec-fetch-dest': 'video',
'referer': f'{self.host}/',
'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8',
}
return {'parse': p, 'url': url, 'header': phd}
def localProxy(self, param):
pass
def liveContent(self, url):
pass
def gethost(self):
data=pq(self.fetch("http://shapp.us",headers=self.headers).text)
for i in data('.content-top ul li').items():
h=i('a').attr('href')
if h:
data = self.fetch(h, headers=self.headers, timeout=5)
if data.status_code == 200:
return h
def extract_values(self, text):
url_match = re.search(r'var url = "([^"]+)"', text)
url = url_match.group(1) if url_match else None
t_match = re.search(r'var t = "([^"]+)"', text)
t = t_match.group(1) if t_match else None
key_match = re.search(r'var key = hhh\("([^"]+)"\)', text)
key_param = key_match.group(1) if key_match else None
act_match = re.search(r'var act = "([^"]+)"', text)
act = act_match.group(1) if act_match else None
play_match = re.search(r'var play = "([^"]+)"', text)
play = play_match.group(1) if play_match else None
return {
"url": url,
"t": t,
"key": key_param,
"act": act,
"play": play
}
def getlist(self,data):
videos = []
for i in data.items():
videos.append({
'vod_id': i('a').attr('href'),
'vod_name': i('a').attr('title'),
'vod_pic': i('a img').attr('data-original'),
'vod_remarks': i('.v_note').text()
})
return videos
def getpq(self, path=''):
data=self.fetch(f"{self.host}{path}",headers=self.headers).text
try:
return pq(data)
except Exception as e:
print(f"{str(e)}")
return pq(data.encode('utf-8'))
def hhh(self, t):
ee = {
"0Oo0o0O0": "a", "1O0bO001": "b", "2OoCcO2": "c", "3O0dO0O3": "d",
"4OoEeO4": "e", "5O0fO0O5": "f", "6OoGgO6": "g", "7O0hO0O7": "h",
"8OoIiO8": "i", "9O0jO0O9": "j", "0OoKkO0": "k", "1O0lO0O1": "l",
"2OoMmO2": "m", "3O0nO0O3": "n", "4OoOoO4": "o", "5O0pO0O5": "p",
"6OoQqO6": "q", "7O0rO0O7": "r", "8OoSsO8": "s", "9O0tO0O9": "t",
"0OoUuO0": "u", "1O0vO0O1": "v", "2OoWwO2": "w", "3O0xO0O3": "x",
"4OoYyO4": "y", "5O0zO0O5": "z", "0OoAAO0": "A", "1O0BBO1": "B",
"2OoCCO2": "C", "3O0DDO3": "D", "4OoEEO4": "E", "5O0FFO5": "F",
"6OoGGO6": "G", "7O0HHO7": "H", "8OoIIO8": "I", "9O0JJO9": "J",
"0OoKKO0": "K", "1O0LLO1": "L", "2OoMMO2": "M", "3O0NNO3": "N",
"4OoOOO4": "O", "5O0PPO5": "P", "6OoQQO6": "Q", "7O0RRO7": "R",
"8OoSSO8": "S", "9O0TTO9": "T", "0OoUO0": "U", "1O0VVO1": "V",
"2OoWWO2": "W", "3O0XXO3": "X", "4OoYYO4": "Y", "5O0ZZO5": "Z"
}
n = ""
o = base64.b64decode(t).decode('utf-8', errors='replace')
i = 0
while i < len(o):
l = o[i]
found = False
for key, value in ee.items():
if o[i:i + len(key)] == key:
l = value
i += len(key) - 1
found = True
break
if not found:
pass
n += l
i += 1
return n

View File

@ -0,0 +1,301 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import json
import sys
import time
from concurrent.futures import ThreadPoolExecutor, as_completed
from urllib.parse import quote
from Crypto.Hash import MD5
import requests
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
self.session = requests.Session()
self.session.headers.update(self.headers)
self.session.cookies.update(self.cookie)
self.get_ctoken()
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
host='https://www.youku.com'
shost='https://search.youku.com'
h5host='https://acs.youku.com'
ihost='https://v.youku.com'
headers = {
'User-Agent': 'Mozilla/5.0 (; Windows 10.0.26100.3194_64 ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Electron/14.2.0 Safari/537.36 Node/14.17.0 YoukuDesktop/9.2.60 UOSYouku (2.0.1)-Electron(UTDID ZYmGMAAAACkDAMU8hbiMmYdd;CHANNEL official;ZREAL 0;BTYPE TM2013;BRAND TIMI;BUILDVER 9.2.60.1001)',
'Referer': f'{host}/'
}
cookie={
"__ysuid": "17416134165380iB",
"__aysid": "1741613416541WbD",
"xlly_s": "1",
"isI18n": "false",
"cna": "bNdVIKmmsHgCAXW9W6yrQ1/s",
"__ayft": "1741672162330",
"__arpvid": "1741672162331FBKgrn-1741672162342",
"__ayscnt": "1",
"__aypstp": "1",
"__ayspstp": "3",
"tfstk": "gZbiib4JpG-6DqW-B98_2rwPuFrd1fTXQt3vHEp4YpJIBA3OgrWcwOi90RTOo9XVQ5tAM5NcK_CP6Ep97K2ce1XDc59v3KXAgGFLyzC11ET2n8U8yoyib67M3xL25e8gS8pbyzC1_ET4e8URWTsSnHv2uh8VTeJBgEuN3d-ELQAWuKWV36PHGpJ2uEWVTxvicLX1ewyUXYSekxMf-CxMEqpnoqVvshvP_pABOwvXjL5wKqeulm52np_zpkfCDGW9Ot4uKFIRwZtP7vP9_gfAr3KEpDWXSIfWRay-DHIc_Z-hAzkD1i5Ooi5LZ0O5YO_1mUc476YMI3R6xzucUnRlNe_zemKdm172xMwr2L7CTgIkbvndhFAVh3_YFV9Ng__52U4SQKIdZZjc4diE4EUxlFrfKmiXbBOHeP72v7sAahuTtWm78hRB1yV3tmg9bBOEhWVnq5KwOBL5."
}
def homeContent(self, filter):
result = {}
categories = ["电视剧", "电影", "综艺", "动漫", "少儿", "纪录片", "文化", "亲子", "教育", "搞笑", "生活",
"体育", "音乐", "游戏"]
classes = [{'type_name': category, 'type_id': category} for category in categories]
filters = {}
self.typeid = {}
with ThreadPoolExecutor(max_workers=len(categories)) as executor:
tasks = {
executor.submit(self.cf, {'type': category}, True): category
for category in categories
}
for future in as_completed(tasks):
try:
category = tasks[future]
session, ft = future.result()
filters[category] = ft
self.typeid[category] = session
except Exception as e:
print(f"处理分类 {tasks[future]} 时出错: {str(e)}")
result['class'] = classes
result['filters'] = filters
return result
def homeVideoContent(self):
try:
vlist = []
params={"ms_codes":"2019061000","params":"{\"debug\":0,\"gray\":0,\"pageNo\":1,\"utdid\":\"ZYmGMAAAACkDAMU8hbiMmYdd\",\"userId\":\"\",\"bizKey\":\"YOUKU_WEB\",\"appPackageKey\":\"com.youku.YouKu\",\"showNodeList\":0,\"reqSubNode\":0,\"nodeKey\":\"WEBHOME\",\"bizContext\":\"{\\\"spmA\\\":\\\"a2hja\\\"}\"}","system_info":"{\"device\":\"pcweb\",\"os\":\"pcweb\",\"ver\":\"1.0.0.0\",\"userAgent\":\"Mozilla/5.0 (; Windows 10.0.26100.3194_64 ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Electron/14.2.0 Safari/537.36 Node/14.17.0 YoukuDesktop/9.2.60 UOSYouku (2.0.1)-Electron(UTDID ZYmGMAAAACkDAMU8hbiMmYdd;CHANNEL official;ZREAL 0;BTYPE TM2013;BRAND TIMI;BUILDVER 9.2.60.1001)\",\"guid\":\"1590141704165YXe\",\"appPackageKey\":\"com.youku.pcweb\",\"young\":0,\"brand\":\"\",\"network\":\"\",\"ouid\":\"\",\"idfa\":\"\",\"scale\":\"\",\"operator\":\"\",\"resolution\":\"\",\"pid\":\"\",\"childGender\":0,\"zx\":0}"}
data=self.getdata(f'{self.h5host}/h5/mtop.youku.columbus.home.query/1.0/',params)
okey=list(data['data'].keys())[0]
for i in data['data'][okey]['data']['nodes'][0]['nodes'][-1]['nodes'][0]['nodes']:
if i.get('nodes') and i['nodes'][0].get('data'):
i=i['nodes'][0]['data']
if i.get('assignId'):
vlist.append({
'vod_id': i['assignId'],
'vod_name': i.get('title'),
'vod_pic': i.get('vImg') or i.get('img'),
'vod_year': i.get('mark',{}).get('data',{}).get('text'),
'vod_remarks': i.get('summary')
})
return {'list': vlist}
except Exception as e:
print(f"处理主页视频数据时出错: {str(e)}")
return {'list': []}
def categoryContent(self, tid, pg, filter, extend):
result = {}
vlist = []
result['page'] = pg
result['limit'] = 90
result['total'] = 999999
pagecount = 9999
params = {'type': tid}
id = self.typeid[tid]
params.update(extend)
if pg == '1':
id=self.cf(params)
data=self.session.get(f'{self.host}/category/data?session={id}&params={quote(json.dumps(params))}&pageNo={pg}').json()
try:
data=data['data']['filterData']
for i in data['listData']:
if i.get('videoLink') and 's=' in i['videoLink']:
vlist.append({
'vod_id': i.get('videoLink').split('s=')[-1],
'vod_name': i.get('title'),
'vod_pic': i.get('img'),
'vod_year': i.get('rightTagText'),
'vod_remarks': i.get('summary')
})
self.typeid[tid]=quote(json.dumps(data['session']))
except:
pagecount=pg
result['list'] = vlist
result['pagecount'] = pagecount
return result
def detailContent(self, ids):
try:
data=self.session.get(f'{self.ihost}/v_getvideo_info/?showId={ids[0]}').json()
v=data['data']
vod = {
'type_name': v.get('showVideotype'),
'vod_year': v.get('lastUpdate'),
'vod_remarks': v.get('rc_title'),
'vod_actor': v.get('_personNameStr'),
'vod_content': v.get('showdesc'),
'vod_play_from': '优酷',
'vod_play_url': ''
}
params={"biz":"new_detail_web2","videoId":v.get('vid'),"scene":"web_page","componentVersion":"3","ip":data.get('ip'),"debug":0,"utdid":"ZYmGMAAAACkDAMU8hbiMmYdd","userId":0,"platform":"pc","nextSession":"","gray":0,"source":"pcNoPrev","showId":ids[0]}
sdata,index=self.getinfo(params)
pdata=sdata['nodes']
if index > len(pdata):
batch_size = len(pdata)
total_batches = ((index + batch_size - 1) // batch_size) - 1
ssj = json.loads(sdata['data']['session'])
with ThreadPoolExecutor(max_workers=total_batches) as executor:
futures = []
for batch in range(total_batches):
start = batch_size + 1 + (batch * batch_size)
end = start + batch_size - 1
next_session = ssj.copy()
next_session.update({
"itemStartStage": start,
"itemEndStage": min(end, index)
})
current_params = params.copy()
current_params['nextSession'] = json.dumps(next_session)
futures.append((start, executor.submit(self.getvinfo, current_params)))
futures.sort(key=lambda x: x[0])
for _, future in futures:
try:
result = future.result()
pdata.extend(result['nodes'])
except Exception as e:
print(f"Error fetching data: {str(e)}")
vod['vod_play_url'] = '#'.join([f"{i['data'].get('title')}${i['data']['action'].get('value')}" for i in pdata])
return {'list': [vod]}
except Exception as e:
print(e)
return {'list': [{'vod_play_from': '哎呀翻车啦', 'vod_play_url': f'呜呜呜${self.host}'}]}
def searchContent(self, key, quick, pg="1"):
data=self.session.get(f'{self.shost}/api/search?pg={pg}&keyword={key}').json()
vlist = []
for i in data['pageComponentList']:
if i.get('commonData') and (i['commonData'].get('showId') or i['commonData'].get('realShowId')):
i=i['commonData']
vlist.append({
'vod_id': i.get('showId') or i.get('realShowId'),
'vod_name': i['titleDTO'].get('displayName'),
'vod_pic': i['posterDTO'].get('vThumbUrl'),
'vod_year': i.get('feature'),
'vod_remarks': i.get('updateNotice')
})
return {'list': vlist, 'page': pg}
def playerContent(self, flag, id, vipFlags):
return {'jx':1,'parse': 1, 'url': f"{self.ihost}/video?vid={id}", 'header': ''}
def localProxy(self, param):
pass
def cf(self,params,b=False):
response = self.session.get(f'{self.host}/category/data?params={quote(json.dumps(params))}&optionRefresh=1&pageNo=1').json()
data=response['data']['filterData']
session=quote(json.dumps(data['session']))
if b:
return session,self.get_filter_data(data['filter']['filterData'][1:])
return session
def process_key(self, key):
if '_' not in key:
return key
parts = key.split('_')
result = parts[0]
for part in parts[1:]:
if part:
result += part[0].upper() + part[1:]
return result
def get_filter_data(self, data):
result = []
try:
for item in data:
if not item.get('subFilter'):
continue
first_sub = item['subFilter'][0]
if not first_sub.get('filterType'):
continue
filter_item = {
'key': self.process_key(first_sub['filterType']),
'name': first_sub['title'],
'value': []
}
for sub in item['subFilter']:
if 'value' in sub:
filter_item['value'].append({
'n': sub['title'],
'v': sub['value']
})
if filter_item['value']:
result.append(filter_item)
except Exception as e:
print(f"处理筛选数据时出错: {str(e)}")
return result
def get_ctoken(self):
data=self.session.get(f'{self.h5host}/h5/mtop.ykrec.recommendservice.recommend/1.0/?jsv=2.6.1&appKey=24679788')
def md5(self,t,text):
h = MD5.new()
token=self.session.cookies.get('_m_h5_tk').split('_')[0]
data=f"{token}&{t}&24679788&{text}"
h.update(data.encode('utf-8'))
return h.hexdigest()
def getdata(self, url, params, recursion_count=0, max_recursion=3):
data = json.dumps(params)
t = int(time.time() * 1000)
jsdata = {
'appKey': '24679788',
't': t,
'sign': self.md5(t, data),
'data': data
}
response = self.session.get(url, params=jsdata)
if '令牌过期' in response.text:
if recursion_count >= max_recursion:
raise Exception("达到最大递归次数,无法继续请求")
self.get_ctoken()
return self.getdata(url, params, recursion_count + 1, max_recursion)
else:
return response.json()
def getvinfo(self,params):
body = {
"ms_codes": "2019030100",
"params": json.dumps(params),
"system_info": "{\"os\":\"iku\",\"device\":\"iku\",\"ver\":\"9.2.9\",\"appPackageKey\":\"com.youku.iku\",\"appPackageId\":\"pcweb\"}"
}
data = self.getdata(f'{self.h5host}/h5/mtop.youku.columbus.gateway.new.execute/1.0/', body)
okey = list(data['data'].keys())[0]
i = data['data'][okey]['data']
return i
def getinfo(self,params):
i = self.getvinfo(params)
jdata=i['nodes'][0]['nodes'][3]
info=i['data']['extra']['episodeTotal']
if i['data']['extra']['showCategory'] in ['电影','游戏']:
jdata = i['nodes'][0]['nodes'][4]
return jdata,info

View File

@ -0,0 +1,249 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import json
import random
import sys
from base64 import b64encode, b64decode
from concurrent.futures import ThreadPoolExecutor, as_completed
from urllib.parse import quote
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
self.did = 'f8da348e186e6ee574d647918f5a7114'
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
rhost = 'https://www.iqiyi.com'
hhost='https://mesh.if.iqiyi.com'
dhost='https://miniapp.iqiyi.com'
headers = {
'Origin': rhost,
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36',
'Referer': f'{rhost}/',
}
def homeContent(self, filter):
result = {}
cateManual = {
"全部": "1009",
"电影": "1",
"剧集": "2",
"综艺": "6",
"动漫": "4",
"儿童": "15",
"微剧": "35",
"纪录片": "3"
}
classes = []
filters = {}
for k in cateManual:
classes.append({
'type_name': k,
'type_id': cateManual[k]
})
with ThreadPoolExecutor(max_workers=len(classes)) as executor:
results = executor.map(self.getf, classes)
for id, ft in results:
if len(ft):filters[id] = ft
result['class'] = classes
result['filters'] = filters
return result
def homeVideoContent(self):
data=self.fetch(f'{self.hhost}/portal/lw/v5/channel/recommend?v=13.014.21150', headers=self.headers).json()
vlist = []
for i in data['items'][1:]:
for j in i['video'][0]['data']:
id = j.get('firstId')
pic=j.get('prevue',{}).get('image_url') or j.get('album_image_url_hover')
if id and pic:
pu=j.get('prevue',{}).get('page_url') or j.get('page_url').split('?')[0]
id = f'{id}@{self.e64(pu)}'
vlist.append({
'vod_id': id,
'vod_name': j.get('display_name'),
'vod_pic': pic,
'vod_year': j.get('sns_score'),
'vod_remarks': j.get('dq_updatestatus') or j.get('rank_prefix')
})
return {'list':vlist}
def categoryContent(self, tid, pg, filter, extend):
if pg == "1":
self.sid = ''
new_data = {'mode':'24'}
for key, value in extend.items():
if value:
key_value_pairs = self.d64(value).split(',')
for pair in key_value_pairs:
k, v = pair.split('=')
if k in new_data:
new_data[k] += "," + v
else:
new_data[k] = v
path=f"/portal/lw/videolib/data?uid=&passport_id=&ret_num=60&version=13.034.21571&device_id={self.did}&channel_id={tid}&page_id={pg}&session={self.sid}&os=&conduit_id=&vip=0&auth=&recent_selected_tag=&ad=%5B%7B%22lm%22%3A%225%22%2C%22ai%22%3A%225%22%2C%22fp%22%3A%226%22%2C%22sei%22%3A%22S78ff51b694677e17af4b19368dadb7bd%22%2C%22position%22%3A%22library%22%7D%5D&adExt=%7B%22r%22%3A%221.2.1-ares6-pure%22%7D&dfp=a00b3c577e541c41149be7cde9320500b0a11307e61a8445448f7f4a9e895ced0f&filter={quote(json.dumps(new_data))}"
data=self.fetch(f'{self.hhost}{path}', headers=self.headers).json()
self.sid = data['session']
videos = []
for i in data['data']:
id = i.get('firstId') or i.get('tv_id')
if not id:
id=i.get('play_url').split(';')[0].split('=')[-1]
if id and not i.get('h'):
id=f'{id}@{self.e64(i.get("page_url"))}'
videos.append({
'vod_id': id,
'vod_name': i.get('display_name'),
'vod_pic': i.get('album_image_url_hover'),
'vod_year': i.get('sns_score'),
'vod_remarks': i.get('dq_updatestatus') or i.get('pay_mark')
})
result = {}
result['list'] = videos
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
ids = ids[0].split('@')
ids[-1] = self.d64(ids[-1])
data = self.fetch(f'{self.dhost}/h5/mina/baidu/play/body/v1/{ids[0]}/', headers=self.headers).json()
v=data['data']['playInfo']
vod = {
'vod_name': v.get('albumName'),
'type_name': v.get('tags'),
'vod_year': v.get('albumYear'),
'vod_remarks': v.get('updateStrategy'),
'vod_actor': v.get('mainActors'),
'vod_director': v.get('directors'),
'vod_content': v.get('albumDesc'),
'vod_play_from': '爱奇艺',
'vod_play_url': ''
}
if data.get('data') and data['data'].get('videoList') and data['data']['videoList'].get('videos'):
purl=[f'{i["shortTitle"]}${i["pageUrl"]}' for i in data['data']['videoList']['videos']]
pg=data['data']['videoList'].get('totalPages')
if pg and pg > 1:
id = v['albumId']
pages = list(range(2, pg + 1))
page_results = {}
with ThreadPoolExecutor(max_workers=10) as executor:
future_to_page = {
executor.submit(self.fetch_page_data, page, id): page
for page in pages
}
for future in as_completed(future_to_page):
page = future_to_page[future]
try:
result = future.result()
page_results[page] = result
except Exception as e:
print(f"Error fetching page {page}: {e}")
for page in sorted(page_results.keys()):
purl.extend(page_results[page])
vod['vod_play_url'] = '#'.join(purl)
else:
vdata=self.fetch(f'{self.dhost}/h5/mina/baidu/play/head/v1/{ids[0]}/', headers=self.headers).json()
v=vdata['data']['playInfo']
vod = {
'vod_name': v.get('shortTitle'),
'type_name': v.get('channelName'),
'vod_year': v.get('year'),
'vod_remarks': v.get('focus'),
'vod_actor': v.get('mainActors'),
'vod_director': v.get('directors'),
'vod_content': v.get('desc'),
'vod_play_from': '爱奇艺',
'vod_play_url': f'{v.get("shortTitle")}${ids[-1]}'
}
return {'list':[vod]}
def searchContent(self, key, quick, pg="1"):
data=self.fetch(f'{self.hhost}/portal/lw/search/homePageV3?key={key}&current_page={pg}&mode=1&source=input&suggest=&version=13.014.21150&pageNum={pg}&pageSize=25&pu=&u={self.did}&scale=150&token=&userVip=0&conduit=&vipType=-1&os=&osShortName=win10&dataType=&appMode=', headers=self.headers).json()
videos = []
vdata=data['data']['templates']
for i in data['data']['templates']:
if i.get('intentAlbumInfos'):
vdata=[{'albumInfo': c} for c in i['intentAlbumInfos']]+vdata
for i in vdata:
if i.get('albumInfo') and (i['albumInfo'].get('playQipuId','') or i['albumInfo'].get('qipuId')) and i['albumInfo'].get('pageUrl'):
b=i['albumInfo']
id=f"{(b.get('playQipuId','') or b.get('qipuId'))}@{self.e64(b.get('pageUrl'))}"
videos.append({
'vod_id': id,
'vod_name': b.get('title'),
'vod_pic': b.get('img'),
'vod_year': (b.get('year',{}) or {}).get('value'),
'vod_remarks': b.get('subscriptContent') or b.get('channel') or b.get('vipTips')
})
return {'list':videos,'page':pg}
def playerContent(self, flag, id, vipFlags):
id=id.replace('http://m.','https://www.')
return {'jx':1,'parse': 1, 'url': id, 'header': ''}
def localProxy(self, param):
pass
def fetch_page_data(self, page, id):
try:
url = f'{self.dhost}/h5/mina/avlist/{page}/{id}/'
data = self.fetch(url, headers=self.headers).json()
return [f'{i["shortTitle"]}${i["pageUrl"]}' for i in data['data']['videoList']['videos']]
except:
return []
def getf(self,body):
data=self.fetch(f'{self.hhost}/portal/lw/videolib/tag?channel_id={body["type_id"]}&tagAdd=&selected_tag_name=&version=13.014.21150&device={self.did}&uid=', headers=self.headers).json()
ft = []
# for i in data[:-1]:
for i in data:
try:
value_array = [{"n": value['text'], "v": self.e64(value['tag_param'])} for value in i['tags'] if
value.get('tag_param')]
ft.append({"key": i['group'], "name": i['group'], "value": value_array})
except:
print(i)
return (body['type_id'], ft)
def e64(self, text):
try:
text_bytes = text.encode('utf-8')
encoded_bytes = b64encode(text_bytes)
return encoded_bytes.decode('utf-8')
except Exception as e:
print(f"Base64编码错误: {str(e)}")
return ""
def d64(self,encoded_text: str):
try:
encoded_bytes = encoded_text.encode('utf-8')
decoded_bytes = b64decode(encoded_bytes)
return decoded_bytes.decode('utf-8')
except Exception as e:
print(f"Base64解码错误: {str(e)}")
return ""
def random_str(self,length=16):
hex_chars = '0123456789abcdef'
return ''.join(random.choice(hex_chars) for _ in range(length))

View File

@ -0,0 +1,320 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import json
import sys
import uuid
import copy
sys.path.append('..')
from base.spider import Spider
from concurrent.futures import ThreadPoolExecutor, as_completed
class Spider(Spider):
def init(self, extend=""):
self.dbody = {
"page_params": {
"channel_id": "",
"filter_params": "sort=75",
"page_type": "channel_operation",
"page_id": "channel_list_second_page"
}
}
self.body = self.dbody
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
host = 'https://v.qq.com'
apihost = 'https://pbaccess.video.qq.com'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5410.0 Safari/537.36',
'origin': host,
'referer': f'{host}/'
}
def homeContent(self, filter):
cdata = {
"电视剧": "100113",
"电影": "100173",
"综艺": "100109",
"纪录片": "100105",
"动漫": "100119",
"少儿": "100150",
"短剧": "110755"
}
result = {}
classes = []
filters = {}
for k in cdata:
classes.append({
'type_name': k,
'type_id': cdata[k]
})
with ThreadPoolExecutor(max_workers=len(classes)) as executor:
futures = [executor.submit(self.get_filter_data, item['type_id']) for item in classes]
for future in futures:
cid, data = future.result()
if not data.get('data', {}).get('module_list_datas'):
continue
filter_dict = {}
try:
items = data['data']['module_list_datas'][-1]['module_datas'][-1]['item_data_lists']['item_datas']
for item in items:
if not item.get('item_params', {}).get('index_item_key'):
continue
params = item['item_params']
filter_key = params['index_item_key']
if filter_key not in filter_dict:
filter_dict[filter_key] = {
'key': filter_key,
'name': params['index_name'],
'value': []
}
filter_dict[filter_key]['value'].append({
'n': params['option_name'],
'v': params['option_value']
})
except (IndexError, KeyError):
continue
filters[cid] = list(filter_dict.values())
result['class'] = classes
result['filters'] = filters
return result
def homeVideoContent(self):
json_data = {'page_context':None,'page_params':{'page_id':'100101','page_type':'channel','skip_privacy_types':'0','support_click_scan':'1','new_mark_label_enabled':'1','ams_cookies':'',},'page_bypass_params':{'params':{'caller_id':'','data_mode':'default','page_id':'','page_type':'channel','platform_id':'2','user_mode':'default',},'scene':'channel','abtest_bypass_id':'',}}
data = self.post(f'{self.apihost}/trpc.vector_layout.page_view.PageService/getPage',headers=self.headers, json=json_data).json()
vlist = []
for it in data['data']['CardList'][0]['children_list']['list']['cards']:
if it.get('params'):
p = it['params']
tag = json.loads(p.get('uni_imgtag', '{}') or p.get('imgtag', '{}') or '{}')
id = it.get('id') or p.get('cid')
name = p.get('mz_title') or p.get('title')
if name and 'http' not in id:
vlist.append({
'vod_id': id,
'vod_name': name,
'vod_pic': p.get('image_url'),
'vod_year': tag.get('tag_2', {}).get('text'),
'vod_remarks': tag.get('tag_4', {}).get('text')
})
return {'list': vlist}
def categoryContent(self, tid, pg, filter, extend):
result = {}
params = {
"sort": extend.get('sort', '75'),
"attr": extend.get('attr', '-1'),
"itype": extend.get('itype', '-1'),
"ipay": extend.get('ipay', '-1'),
"iarea": extend.get('iarea', '-1'),
"iyear": extend.get('iyear', '-1'),
"theater": extend.get('theater', '-1'),
"award": extend.get('award', '-1'),
"recommend": extend.get('recommend', '-1')
}
if pg == '1':
self.body = self.dbody.copy()
self.body['page_params']['channel_id'] = tid
self.body['page_params']['filter_params'] = self.josn_to_params(params)
data = self.post(
f'{self.apihost}/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=1000005&vplatform=2&vversion_name=8.9.10&new_mark_label_enabled=1',
json=self.body, headers=self.headers).json()
ndata = data['data']
if ndata['has_next_page']:
result['pagecount'] = 9999
self.body['page_context'] = ndata['next_page_context']
else:
result['pagecount'] = int(pg)
vlist = []
for its in ndata['module_list_datas'][-1]['module_datas'][-1]['item_data_lists']['item_datas']:
id = its.get('item_params', {}).get('cid')
if id:
p = its['item_params']
tag = json.loads(p.get('uni_imgtag', '{}') or p.get('imgtag', '{}') or '{}')
name = p.get('mz_title') or p.get('title')
pic = p.get('new_pic_hz') or p.get('new_pic_vt')
vlist.append({
'vod_id': id,
'vod_name': name,
'vod_pic': pic,
'vod_year': tag.get('tag_2', {}).get('text'),
'vod_remarks': tag.get('tag_4', {}).get('text')
})
result['list'] = vlist
result['page'] = pg
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
vbody = {"page_params":{"req_from":"web","cid":ids[0],"vid":"","lid":"","page_type":"detail_operation","page_id":"detail_page_introduction"},"has_cache":1}
body = {"page_params":{"req_from":"web_vsite","page_id":"vsite_episode_list","page_type":"detail_operation","id_type":"1","page_size":"","cid":ids[0],"vid":"","lid":"","page_num":"","page_context":"","detail_page_type":"1"},"has_cache":1}
with ThreadPoolExecutor(max_workers=2) as executor:
future_detail = executor.submit(self.get_vdata, vbody)
future_episodes = executor.submit(self.get_vdata, body)
vdata = future_detail.result()
data = future_episodes.result()
pdata = self.process_tabs(data, body, ids)
if not pdata:
return self.handle_exception(None, "No pdata available")
try:
star_list = vdata['data']['module_list_datas'][0]['module_datas'][0]['item_data_lists']['item_datas'][
0].get('sub_items', {}).get('star_list', {}).get('item_datas', [])
actors = [star['item_params']['name'] for star in star_list]
names = ['腾讯视频', '预告片']
plist, ylist = self.process_pdata(pdata, ids)
if not plist:
del names[0]
if not ylist:
del names[1]
vod = self.build_vod(vdata, actors, plist, ylist, names)
return {'list': [vod]}
except Exception as e:
return self.handle_exception(e, "Error processing detail")
def searchContent(self, key, quick, pg="1"):
params = {
"query": key,
"appID": "3172",
"appKey": "lGhFIPeD3HsO9xEp",
"pageNum": int(pg) - 1,
"pageSize": "10"
}
data = self.fetch(f"{self.apihost}/trpc.videosearch.smartboxServer.HttpRountRecall/Smartbox", params=params,headers=self.headers).json()
vlist = []
for k in data['data']['smartboxItemList']:
if k.get('basicDoc') and k['basicDoc'].get('id'):
img_tag = k.get('videoInfo', {}).get('imgTag')
if img_tag is not None and isinstance(img_tag, str):
try:
tag = json.loads(img_tag)
except json.JSONDecodeError as e:
tag = {}
else:
tag = {}
vlist.append({
'vod_id': k['basicDoc']['id'],
'vod_name': self.removeHtmlTags(k['basicDoc']['title']),
'vod_pic': k['videoInfo']['imgUrl'],
'vod_year': k['videoInfo'].get('typeName') + ' ' + tag.get('tag_2', {}).get('text', ''),
'vod_remarks': tag.get('tag_4', {}).get('text', '')
})
return {'list': vlist, 'page': pg}
def playerContent(self, flag, id, vipFlags):
ids = id.split('@')
url = f"{self.host}/x/cover/{ids[0]}/{ids[1]}.html"
return {'jx':1,'parse': 1, 'url': url, 'header': ''}
def localProxy(self, param):
pass
def get_filter_data(self, cid):
hbody = self.dbody.copy()
hbody['page_params']['channel_id'] = cid
data = self.post(
f'{self.apihost}/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=1000005&vplatform=2&vversion_name=8.9.10&new_mark_label_enabled=1',
json=hbody, headers=self.headers).json()
return cid, data
def get_vdata(self, body):
try:
vdata = self.post(
f'{self.apihost}/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=3000010&vplatform=2&vversion_name=8.2.96',
json=body, headers=self.headers
).json()
return vdata
except Exception as e:
print(f"Error in get_vdata: {str(e)}")
return {'data': {'module_list_datas': []}}
def process_pdata(self, pdata, ids):
plist = []
ylist = []
for k in pdata:
if k.get('item_id'):
pid = f"{k['item_params']['union_title']}${ids[0]}@{k['item_id']}"
if '预告' in k['item_params']['union_title']:
ylist.append(pid)
else:
plist.append(pid)
return plist, ylist
def build_vod(self, vdata, actors, plist, ylist, names):
d = vdata['data']['module_list_datas'][0]['module_datas'][0]['item_data_lists']['item_datas'][0]['item_params']
urls = []
if plist:
urls.append('#'.join(plist))
if ylist:
urls.append('#'.join(ylist))
vod = {
'type_name': d.get('sub_genre', ''),
'vod_name': d.get('title', ''),
'vod_year': d.get('year', ''),
'vod_area': d.get('area_name', ''),
'vod_remarks': d.get('holly_online_time', '') or d.get('hotval', ''),
'vod_actor': ','.join(actors),
'vod_content': d.get('cover_description', ''),
'vod_play_from': '$$$'.join(names),
'vod_play_url': '$$$'.join(urls)
}
return vod
def handle_exception(self, e, message):
print(f"{message}: {str(e)}")
return {'list': [{'vod_play_from': '哎呀翻车啦', 'vod_play_url': '翻车啦#555'}]}
def process_tabs(self, data, body, ids):
try:
pdata = data['data']['module_list_datas'][-1]['module_datas'][-1]['item_data_lists']['item_datas']
tabs = data['data']['module_list_datas'][-1]['module_datas'][-1]['module_params'].get('tabs')
if tabs and len(json.loads(tabs)):
tabs = json.loads(tabs)
remaining_tabs = tabs[1:]
task_queue = []
for tab in remaining_tabs:
nbody = copy.deepcopy(body)
nbody['page_params']['page_context'] = tab['page_context']
task_queue.append(nbody)
with ThreadPoolExecutor(max_workers=10) as executor:
future_map = {executor.submit(self.get_vdata, task): idx for idx, task in enumerate(task_queue)}
results = [None] * len(task_queue)
for future in as_completed(future_map.keys()):
idx = future_map[future]
results[idx] = future.result()
for result in results:
if result:
page_data = result['data']['module_list_datas'][-1]['module_datas'][-1]['item_data_lists'][
'item_datas']
pdata.extend(page_data)
return pdata
except Exception as e:
print(f"Error processing episodes: {str(e)}")
return []
def josn_to_params(self, params, skip_empty=False):
query = []
for k, v in params.items():
if skip_empty and not v:
continue
query.append(f"{k}={v}")
return "&".join(query)

View File

@ -0,0 +1,205 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import sys
import time
from concurrent.futures import ThreadPoolExecutor, as_completed
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
rhost='https://www.mgtv.com'
host='https://pianku.api.mgtv.com'
vhost='https://pcweb.api.mgtv.com'
mhost='https://dc.bz.mgtv.com'
shost='https://mobileso.bz.mgtv.com'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6478.61 Chrome/126.0.6478.61 Not/A)Brand/8 Safari/537.36',
'origin': rhost,
'referer': f'{rhost}/'
}
def homeContent(self, filter):
result = {}
cateManual = {
"电影": "3",
"电视剧": "2",
"综艺": "1",
"动画": "50",
"少儿": "10",
"纪录片": "51",
"教育": "115"
}
classes = []
filters = {}
for k in cateManual:
classes.append({
'type_name': k,
'type_id': cateManual[k]
})
with ThreadPoolExecutor(max_workers=len(classes)) as executor:
results = executor.map(self.getf, classes)
for id, ft in results:
if len(ft):filters[id] = ft
result['class'] = classes
result['filters'] = filters
return result
def homeVideoContent(self):
data=self.fetch(f'{self.mhost}/dynamic/v1/channel/index/0/0/0/1000000/0/0/17/1354?type=17&version=5.0&t={str(int(time.time()*1000))}&_support=10000000', headers=self.headers).json()
videoList = []
for i in data['data']:
if i.get('DSLList') and len(i['DSLList']):
for j in i['DSLList']:
if j.get('data') and j['data'].get('items') and len(j['data']['items']):
for k in j['data']['items']:
videoList.append({
'vod_id': k["videoId"],
'vod_name': k['videoName'],
'vod_pic': k['img'],
'vod_year': k.get('cornerTitle'),
'vod_remarks': k.get('time') or k.get('desc'),
})
return {'list':videoList}
def categoryContent(self, tid, pg, filter, extend):
body={
'allowedRC': '1',
'platform': 'pcweb',
'channelId': tid,
'pn': pg,
'pc': '80',
'hudong': '1',
'_support': '10000000'
}
body.update(extend)
data=self.fetch(f'{self.host}/rider/list/pcweb/v3', params=body, headers=self.headers).json()
videoList = []
for i in data['data']['hitDocs']:
videoList.append({
'vod_id': i["playPartId"],
'vod_name': i['title'],
'vod_pic': i['img'],
'vod_year': (i.get('rightCorner',{}) or {}).get('text') or i.get('year'),
'vod_remarks': i['updateInfo']
})
result = {}
result['list'] = videoList
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
vbody={'allowedRC': '1', 'vid': ids[0], 'type': 'b', '_support': '10000000'}
vdata=self.fetch(f'{self.vhost}/video/info', params=vbody, headers=self.headers).json()
d=vdata['data']['info']['detail']
vod = {
'vod_name': vdata['data']['info']['title'],
'type_name': d.get('kind'),
'vod_year': d.get('releaseTime'),
'vod_area': d.get('area'),
'vod_lang': d.get('language'),
'vod_remarks': d.get('updateInfo'),
'vod_actor': d.get('leader'),
'vod_director': d.get('director'),
'vod_content': d.get('story'),
'vod_play_from': '芒果TV',
'vod_play_url': ''
}
data,pdata=self.fetch_page_data('1', ids[0],True)
pagecount=data['data'].get('total_page') or 1
if int(pagecount)>1:
pages = list(range(2, pagecount+1))
page_results = {}
with ThreadPoolExecutor(max_workers=10) as executor:
future_to_page = {
executor.submit(self.fetch_page_data, page, ids[0]): page
for page in pages
}
for future in as_completed(future_to_page):
page = future_to_page[future]
try:
result = future.result()
page_results[page] = result
except Exception as e:
print(f"Error fetching page {page}: {e}")
for page in sorted(page_results.keys()):
pdata.extend(page_results[page])
vod['vod_play_url'] = '#'.join(pdata)
return {'list':[vod]}
def searchContent(self, key, quick, pg="1"):
data=self.fetch(f'{self.shost}/applet/search/v1?channelCode=mobile-wxap&q={key}&pn={pg}&pc=10&_support=10000000', headers=self.headers).json()
videoList = []
for i in data['data']['contents']:
if i.get('data') and len(i['data']):
k = i['data'][0]
if k.get('vid') and k.get('img'):
try:
videoList.append({
'vod_id': k['vid'],
'vod_name': k['title'],
'vod_pic': k['img'],
'vod_year': (i.get('rightTopCorner',{}) or {}).get('text') or i.get('year'),
'vod_remarks': '/'.join(i.get('desc',[])),
})
except:
print(k)
return {'list':videoList,'page':pg}
def playerContent(self, flag, id, vipFlags):
id=f'{self.rhost}{id}'
return {'jx':1,'parse': 1, 'url': id, 'header': ''}
def localProxy(self, param):
pass
def getf(self, body):
params = {
'allowedRC': '1',
'channelId': body['type_id'],
'platform': 'pcweb',
'_support': '10000000',
}
data = self.fetch(f'{self.host}/rider/config/channel/v1', params=params, headers=self.headers).json()
ft = []
for i in data['data']['listItems']:
try:
value_array = [{"n": value['tagName'], "v": value['tagId']} for value in i['items'] if
value.get('tagName')]
ft.append({"key": i['eName'], "name": i['typeName'], "value": value_array})
except:
print(i)
return body['type_id'], ft
def fetch_page_data(self, page, id, b=False):
body = {'version': '5.5.35', 'video_id': id, 'page': page, 'size': '30',
'platform': '4', 'src': 'mgtv', 'allowedRC': '1', '_support': '10000000'}
data = self.fetch(f'{self.vhost}/episode/list', params=body, headers=self.headers).json()
ldata = [f'{i["t3"]}${i["url"]}' for i in data['data']['list']]
if b:
return data, ldata
else:
return ldata

View File

@ -0,0 +1,111 @@
import re
import asyncio
from urllib.parse import unquote
import aiohttp
from pyquery import PyQuery as pq
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'Accept-Language': 'zh-CN,zh;q=0.9'
}
async def fetch(session, url):
async with session.get(url, headers=headers) as response:
return await response.text()
def grtclass(data):
classes = []
vdata = []
for i in data.items():
j = i('a').attr('href')
if j and ('type' in j or 'show' in j):
id = re.search(r'\d+', j)
if id:
id = id.group(0)
else:
id = j.split('/')[-1].split('.')[0]
if id not in vdata:
vdata.append(id)
classes.append({
'type_name': i('a').text(),
'type_id': id
})
return classes
def get_k(text,type):
key = ''
cates={"class": "类型,剧情", "area": "地区", "lang": "语言", "year": "年份,时间", "letter": "字母", "by": "排序","sort": "排序"}
for i,x in cates.items():
if type== 'wobg' and i in text:
key = i
break
elif type == 'wogg':
for j in x.split(','):
if j in text:
key = i
break
if type == 'wobg':
if not key:
if 'id' in text:
key = 'id'
return key
def get_v(text,key,type):
if type == 'wobg':
return text.split(f'{key}/')[-1].split('/')[0].split('.')[0]
else:
v=text.split('/',-1)[-1].split('.')[0][1:].replace('-','')
if v=='09':v='0-9'
return v
async def c(session, host):
html = await fetch(session, host)
data = pq(html)
classes = grtclass(data('.drop-content-items li'))
if not len(classes): classes = grtclass(data('.nav-menu-items li'))
return classes
async def get_ft(session, url,type):
print(f"请求: {url}")
html = await fetch(session, url)
data = pq(html)
ft = []
for i in list(data('div.library-box.scroll-box').items())[1:]:
n = i('a.library-item-first').text()
c = i('.library-list a')
if type == 'wobg':
key = get_k(c.eq(0).attr('href'), type)
else:
key = get_k(n,type)
ft.append({
'name': n or key,
'key': key,
'value': [{'v': unquote(get_v(j.attr('href'),key,type)), 'n': j.text()} for j in c.items()]
})
return ft
async def main(host,type):
async with aiohttp.ClientSession() as session:
categories = await c(session, host)
print(f"分类: {categories}")
tasks = []
fts = {}
if len(categories):
for i in categories:
path=f"/index.php/vod/show/id/{i['type_id']}.html" if type == 'wobg' else f"/vodtype/{i['type_id']}.html"
task = asyncio.create_task(get_ft(session, f"{host}{path}",type))
tasks.append((i['type_id'], task))
for type_id, task in tasks:
fts[type_id] = await task
return {'class': categories, 'filters': fts}
if __name__ == '__main__':
# url = 'http://wogg.xxooo.cf'
url = 'http://2xiaopan.fun'
types = ['wobg','wogg']
loop = asyncio.get_event_loop()
result = loop.run_until_complete(main(url, types[0]))
print('分类筛选生成结果:')
print(result)

19
js/s/7点.json Normal file
View File

@ -0,0 +1,19 @@
{
"数组": "<li&&</p>",
"链接": "href=\"&&\"",
"标题": "title=\"&&\"",
"图片": "data-original=\"&&\"[替换:amp;>>空]",
"简介": "+pt-10 pb-10\" style=*>&&</p>",
"分类url": "https://www.7.movie/vodshow/{cateId}-{area}--{class}-----{catePg}---{year}.html",
"分类": "短剧$24#电视剧$21#电影$20#动漫$22#综艺$23",
"副标题": "class=\"item-status text-overflow\">&&<",
"分类url": "https://www.7.movie/vodtype/{cateId}.html",
"搜索数组": "<a&&</a>",
"搜索二次截取": "<ul class=\"ewave-page&&href\"&&\">",
"搜索": "https://www.7.movie/vodsearch/-------------.html?wd={wd}",
"搜索图片": "class=\"pic\">*data-original=\"&&\"",
"搜索链接": "class=\"btn-box\">\"&&\"</",
"播放数组": "class=\"episode-box scrollbar\"&&</ul>",
"线路数组": "#ewave-playlist-&&</li>",
"线路标题": ">&&<em></em>"
}

81
js/s/996影视.json Normal file
View File

@ -0,0 +1,81 @@
{
"规则名": "996影视",
"规则作者": "",
"请求头参数": "手机",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
"首页推荐链接": "https://www.cs1369.com",
"首页列表数组规则": "body&&.stui-vodlist:has(h4)",
"首页片单列表数组规则": "li",
"首页片单是否Jsoup写法": "1",
"分类起始页码": "1",
"分类链接": "https://www.cs1369.com/show/by/{by}/id/{cateId}/page/{catePg}.html",
"分类名称": "电影&电视剧&动漫",
"分类名称替换词": "1&2&3",
//"筛选数据": {},
"筛选数据": "ext",
//{cateId}
"筛选子分类名称": "动作片&喜剧片&爱情片&科幻片&恐怖片&剧情片&战争片&动画片&纪录片||内地&美国&英国&韩国&泰国&日本&中国香港&中国台湾&其他||内地&日本&欧美&其他",
"筛选子分类替换词": "6&7&8&9&10&11&12&13&14||15&16&17&18&20&21&22&23&24||25&26&27&28",
//{class}
"筛选类型名称": "",
"筛选类型替换词": "*",
//{area}
"筛选地区名称": "",
"筛选地区替换词": "*",
//{year}
"筛选年份名称": "",
"筛选年份替换词": "*",
//{lang}
"筛选语言名称": "",
"筛选语言替换词": "*",
//{by}
"筛选排序名称": "时间&人气&评分",
"筛选排序替换词": "time&hits&score",
"分类截取模式": "1",
"分类列表数组规则": ".stui-vodlist&&li",
"分类片单是否Jsoup写法": "1",
"分类片单标题": "h4&&a&&Text",
"分类片单链接": "h4&&a&&href",
"分类片单图片": ".lazyload&&data-original",
"分类片单副标题": ".pic-text&&Text",
"分类片单链接加前缀": "https://www.cs1369.com",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机#Cookie$searchneed=ok",
"搜索链接": "https://www.cs1369.com/search.html?wd={wd}",
"POST请求数据": "searchword={wd}",
"搜索截取模式": "1",
"搜索列表数组规则": ".stui-vodlist__media&&li",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": ".lazyload&&data-original",
"搜索片单标题": "h3&&a&&Text",
"搜索片单链接": "h3&&a&&href",
"搜索片单副标题": ".pic-text&&Text",
"搜索片单链接加前缀": "https://www.cs1369.com",
"搜索片单链接加后缀": "",
"链接是否直接播放": "0",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法": "0",
"类型详情": "类型:</span>&&</a>",
"年代详情": "年份:</span>&&</a>",
"地区详情": "地区:</span>&&</a>",
"演员详情": "主演:</span>&&</p>",
"简介详情": "简介:</span>&&</p>",
"线路列表数组规则": "body&&.playlist",
"线路标题": "h3&&Text",
"播放列表数组规则": "body&&.stui-content__playlist",
"选集列表数组规则": "li",
"选集标题链接是否Jsoup写法": "1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "0",
"选集链接加前缀": "https://www.cs1369.com",
"选集链接加后缀": "",
"分析MacPlayer": "0",
"是否开启手动嗅探": "1",
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos#/xg.php?id=",
"手动嗅探视频链接过滤词": "m3u88.com#.html#?url=http"
}

71
js/s/BT天堂.json Normal file
View File

@ -0,0 +1,71 @@
{
"规则名": "BT天堂",
"规则作者": "",
"请求头参数": "PC_UA",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
"首页推荐链接": "https://www.bttt11.com",
"首页列表数组规则": "body&&.ul-imgtxt1",
"首页片单列表数组规则": "li",
"首页片单是否Jsoup写法": "1",
"首页片单标题": "h3&&Text",
"首页片单链接": "a&&href",
"首页片单图片": "img&&src",
"首页片单副标题": "span,-1&&Text",
"首页片单链接加前缀": "https://www.bttt11.com",
"首页片单链接加后缀": "",
"分类起始页码": "0",
"分类链接": "https://www.bttt11.com/html/{cateId}-{catePg}.html",
//"分类链接": "https://www.clgod.xyz/list/{catePg}-{cateId}-0-0.html",
"分类名称": "欧美电影&日韩电影&港台电影&大陆电影&亚太电影&欧美剧&日韩剧&港台剧&国产剧&亚太剧&动漫&综艺&纪录片",
"分类名称替换词": "1&2&3&4&5&6&7&8&9&10&11&12&13",
//"分类名称": "电影&动作&灵异&奇幻&宗教&励志&犯罪&功夫&喜剧&黑色&幽默&爱情&香港&纪录片&灾难&亲情&暴力&僵尸&丧尸&悬疑&人性&惊悚&血腥&武侠&剧情&历史&战争&经典&漫画&改编&恐怖&穿越&青春&黑帮&文艺&浪漫&同志&冒险&动画&演唱会",
//"分类名称替换词": "0&1&2&3&4&5&6&7&8&10&11&12&1315&16&17&18&19&20&21&22&23&24&25&27&28&29&30&31&32&33&34&35&36&37&38&39&40&41&42",
"筛选数据": {},
"分类截取模式": "1",
"分类列表数组规则": ".ul-imgtxt2&&li",
"分类片单是否Jsoup写法": "1",
"分类片单标题": "h3&&Text",
"分类片单链接": "a&&href",
"分类片单图片": "img&&src",
"分类片单副标题": "span,-1--a&&Text!更新时间:",
"分类片单链接加前缀": "https://www.bttt11.com",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$PC_UA",
"搜索链接": "https://www.bttt11.com/e/search/;post",
"POST请求数据": "show=title,newstext&keyboard={wd}&searchtype=影视搜索",
"搜索截取模式": "1",
"搜索列表数组规则": ".ul-imgtxt2&&li",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": "img&&src",
"搜索片单标题": "h3&&Text",
"搜索片单链接": "a&&href",
"搜索片单副标题": "span,-1--a&&Text!更新时间:",
"搜索片单链接加前缀": "https://www.bttt11.com",
"搜索片单链接加后缀": "",
"链接是否直接播放": "0",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法": "0",
"类型详情": "<p>◎类  别&&</p>",
"年代详情": "<p>◎年  代&&</p>",
"地区详情": "<p>◎产  地&&</p>",
"演员详情": "",
"简介详情": "",
"线路列表数组规则": "",
"线路标题": "",
"播放列表数组规则": "body&&.container",
"选集列表数组规则": "a[href^=magnet]||a[href^=ed2K]",
"选集标题链接是否Jsoup写法": "1",
"选集标题": "Text",
"选集链接": "a&&href",
"是否反转选集序列": "0",
"选集链接加前缀": "",
"选集链接加后缀": "",
"分析MacPlayer": "0",
"是否开启手动嗅探": "0",
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv",
"手动嗅探视频链接过滤词": ".html"
}

5
js/s/free.json Normal file
View File

@ -0,0 +1,5 @@
{
"简介": "剧情介绍:+module-info-introduction-content\">&&</div>",
"分类url": "https://freeok.one/type/{cateId}.html",
"分类": "短剧$shuangju#电视剧$juji#电影$dianying#动漫$dongman#综艺$zongyi"
}

9
js/s/mx.json Normal file
View File

@ -0,0 +1,9 @@
{
"简介": "简介:&&</p >",
"链接": "href=\"&&\"",
"搜索模式": "1",
"搜索url": "https://www.mxdm9.cc/search/{wd}----------{pg}---.html",
"分类url": "https://www.mxdm9.cc/show/{cateId}--{class}------{catePg}---{year}.html",
"分类": "国漫&日漫&动漫电影&欧美动漫",
"分类值": "guoman&riman&dmdianying&oman"
}

7
js/s/一帆.json Normal file
View File

@ -0,0 +1,7 @@
{
"标题": "title=\"&&\"",
"链接": "href=\"&&\"",
"简介": "剧情介绍:+details-content-all\">&&</span>",
"分类url": "https://aiyf.pages.dev/ayf_show/{cateId}-{area}--{class}-----{catePg}---{year}.html;;d0",
"分类": "电视剧$2#电影$1#动漫$4#综艺$3"
}

5
js/s/七七影视.json Normal file
View File

@ -0,0 +1,5 @@
{
"简介": "detail-content\" style=*>&&</span>",
"分类url": "https://www.sheyit.com/show/{cateId}-{area}--{class}-----{catePg}---{year}.html",
"分类": "短剧$33#电视剧$2#电影$1#动漫$4#综艺$3"
}

81
js/s/七新影视.json Normal file
View File

@ -0,0 +1,81 @@
{
"规则名": "七新影视",
"规则作者": "",
"请求头参数": "手机",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
"首页推荐链接": "http://www.7xdy.com",
"首页列表数组规则": "body&&.stui-vodlist:has(h4)",
"首页片单列表数组规则": "li",
"首页片单是否Jsoup写法": "1",
"分类起始页码": "1",
"分类链接": "http://www.7xdy.com/{cateId}/index{catePg}.html[firstPage=http://www.7xdy.com/{cateId}/index.html]",
"分类名称": "电影&电视剧&综艺&动漫",
"分类名称替换词": "dianyingpian&dianshiju&zongyi&dongman",
//"筛选数据": {},
"筛选数据": "ext",
//{cateId}
"筛选子分类名称": "动作片&爱情片&科幻片&恐怖片&战争片&喜剧片&一直播&剧情片||国产剧&港台剧&欧美剧&日韩剧",
"筛选子分类替换词": "dongzuopian&aiqingpian&kehuanpian&kongbupian&zhanzhengpian&xijupian&jilupian&juqingpian||guocanju&gangtaiju&oumeiju&rihanju",
//{class}
"筛选类型名称": "",
"筛选类型替换词": "*",
//{area}
"筛选地区名称": "",
"筛选地区替换词": "*",
//{year}
"筛选年份名称": "",
"筛选年份替换词": "*",
//{lang}
"筛选语言名称": "",
"筛选语言替换词": "*",
//{by}
"筛选排序名称": "时间&人气&评分",
"筛选排序替换词": "time&hits&score",
"分类截取模式": "1",
"分类列表数组规则": ".stui-vodlist&&li",
"分类片单是否Jsoup写法": "1",
"分类片单标题": "h4&&a&&Text",
"分类片单链接": "h4&&a&&href",
"分类片单图片": ".lazyload&&data-original",
"分类片单副标题": ".pic-text&&Text",
"分类片单链接加前缀": "http://www.7xdy.com",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机",
"搜索链接": "http://www.7xdy.com/search.php?page=1&searchword={wd}&searchtype=",
"POST请求数据": "searchword={wd}",
"搜索截取模式": "1",
"搜索列表数组规则": ".stui-vodlist__media&&li",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": ".lazyload&&data-original",
"搜索片单标题": "h3&&a&&Text",
"搜索片单链接": "h3&&a&&href",
"搜索片单副标题": ".pic-text&&Text",
"搜索片单链接加前缀": "http://www.7xdy.com",
"搜索片单链接加后缀": "",
"链接是否直接播放": "0",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法": "0",
"类型详情": "类型:</span>&&</a>",
"年代详情": "年份:</span>&&</a>",
"地区详情": "地区:</span>&&</a>",
"演员详情": "主演:</span>&&</p>",
"简介详情": "简介:</span>&&</p>",
"线路列表数组规则": "body&&#playlist",
"线路标题": "h3&&Text",
"播放列表数组规则": "body&&.stui-content__playlist",
"选集列表数组规则": "li",
"选集标题链接是否Jsoup写法": "1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "1",
"选集链接加前缀": "http://www.7xdy.com",
"选集链接加后缀": "",
"分析MacPlayer": "0",
"是否开启手动嗅探": "1",
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos#pt=m3u8#obj/tos-#video/tos#mime_type=video#x-oss-signature=",
"手动嗅探视频链接过滤词": ".html#=http"
}

7
js/s/七点影视.json Normal file
View File

@ -0,0 +1,7 @@
{
"简介": "+pt-10 pb-10\" style=*>&&</p>",
"图片": "data-original=\"&&\"[替换:amp;>>空]",
"线路数组": "#ewave-playlist-&&</li>",
"分类url": "https://www.7.movie/vodshow/{cateId}-{area}--{class}-----{catePg}---{year}.html",
"分类": "短剧$24#电视剧$21#电影$20#动漫$22#综艺$23"
}

5
js/s/三九影视.json Normal file
View File

@ -0,0 +1,5 @@
{
"简介": "+detail-content\" style=*>&&</span>",
"分类url": "https://www.539539.xyz/index.php/vod/show/area/{area}/class/{class}/id/{cateId}/page/{catePg}/year/{year}.html",
"分类": "短剧$25#电视剧$2#电影$1#动漫$4#综艺$3"
}

5
js/s/三四影视.json Normal file
View File

@ -0,0 +1,5 @@
{
"简介": "+col-pd\">&&</p>",
"分类url": "https://ikan234.com/show/{cateId}-{area}--{class}-----{catePg}---{year}.html",
"分类": "短剧$5#电视剧$2#电影$1#动漫$4#综艺$3"
}

82
js/s/九八影视.json Normal file
View File

@ -0,0 +1,82 @@
{
"规则名": "九八剧",
"规则作者": "香雅情",
"请求头参数": "User-Agent$手机#Referer$http://www.98wap.com/",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
//
"首页推荐链接": "http://www.98wap.com",
//
"首页列表数组规则": "body&&.stui-vodlist:has(h4)",
//
"首页片单列表数组规则": "li",
//jsouphtml1jsoup()0
"首页片单是否Jsoup写法":"1",
//
"首页片单标题": "h4&&a&&Text",
//
"首页片单链接": "h4&&a&&href",
//
"首页片单图片": ".lazyload&&data-original",
//
"首页片单副标题":".pic-text&&Text",
//
"首页片单链接加前缀": "http://www.98wap.com",
//
"首页片单链接加后缀": "",
"分类起始页码": "1",
"分类链接": "http://www.98wap.com/{cateId}/index{catePg}.html[firstPage=http://www.98wap.com/{cateId}/index.html]",
"分类名称": "电影&电视剧&综艺&动漫",
"分类名称替换词": "dianyingpian&dianshiju&zongyi&dongman",
"筛选数据": "ext",
//{cateId}
"筛选子分类名称": "动作片&爱情片&科幻片&恐怖片&战争片&喜剧片&纪录片&剧情片||国产剧&港台剧&欧美剧&日韩剧&短剧",
"筛选子分类替换词": "dongzuopian&aiqingpian&kehuanpian&kongbupian&zhanzhengpian&xijupian&jilupian&juqingpian||guocanju&gangtaiju&oumeiju&rihanju&duanju",
"分类截取模式": "1",
"分类列表数组规则": ".stui-vodlist&&li",
"分类片单是否Jsoup写法": "1",
"分类片单标题": "h4&&a&&Text",
"分类片单链接": "h4&&a&&href",
"分类片单图片": ".lazyload&&data-original",
"分类片单副标题": ".pic-text&&Text",
"分类片单链接加前缀": "http://www.98wap.com",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机#Referer$http://www.98wap.com/",
"搜索链接": "http://www.98wap.com/search.php;post",
"POST请求数据": "searchword={wd}",
"搜索截取模式": "1",
"搜索列表数组规则": ".stui-vodlist__media&&li",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": ".lazyload&&data-original",
"搜索片单标题": "h3&&a&&Text",
"搜索片单链接": "h3&&a&&href",
"搜索片单副标题": ".pic-text&&Text",
"搜索片单链接加前缀": "http://www.98wap.com",
"搜索片单链接加后缀": "",
"链接是否直接播放": "0",
"直接播放链接加前缀": "https://live.52sf.ga/huya/",
"直接播放链接加后缀": "#isVideo=true#",
"直接播放直链视频请求头": "authority$ku.peizq.online#Referer$https://play.peizq.online",
"详情是否Jsoup写法": "0",
"类型详情": "类型:</span>&&</a",
"年代详情": "",
"地区详情": "",
"演员详情": "主演:</span>&&</p>",
"简介详情": "简介:</span>&&</p>",
"线路列表数组规则": "body&&#playlist",
"线路标题": "h3&&Text",
"播放列表数组规则": "body&&.stui-content__playlist",
"选集列表数组规则": "li",
"选集标题链接是否Jsoup写法": "1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "0",
"选集链接加前缀": "http://www.98wap.com",
"选集链接加后缀": "",
"分析MacPlayer": "0",
"是否开启手动嗅探": "1",
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos#obj/tos-#pt=m3u8#mime_type=video",
"手动嗅探视频链接过滤词": ".html#=http"
}

21
js/s/云盘资源.json Normal file
View File

@ -0,0 +1,21 @@
{
"搜索请求头参数": "User-Agent$MOBILE_UA#Referer$https://res.yunpan.win/",
"搜索链接": "https://res.yunpan.win/?PageIndex={SearchPg}&PageSize=12&Keyword={wd}&Type=&Tag=",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": "body&&.card",
"搜索片单是否Jsoup写法": "0",
"搜索片单图片": "img src=\"&&\"",
"搜索片单标题": "alt=\"&&\"",
"搜索片单链接": "window.open('&&')",
"搜索片单副标题": "",
"搜索片单链接加前缀": "",
"搜索片单链接加后缀": "",
"详情是否Jsoup写法": "1",
"类型详情": "",
"年代详情": "",
"地区详情": "",
"演员详情": "",
"简介详情": "",
"链接是否直接播放": "1"
}

6
js/s/人人.json Normal file
View File

@ -0,0 +1,6 @@
{
"请求头": "手机",
"简介": "剧情介绍:+module-info-introduction-content\">&&</div>",
"分类url": "https://svip1.fun/index.php/vod/show/area/{area}/class/{class}/id/{cateId}/page/{catePg}/year/{year}.html",
"分类": "短剧$24#电视剧$21#电影$20#动漫$22#综艺$23"
}

15
js/s/修罗影视.json Normal file
View File

@ -0,0 +1,15 @@
{
"数组": "card card-sm card-link&&</div>",
"图片": "src=\"&&\"",
"标题": "mb-0 card-title text-truncate\">&&<",
"副标题": "start-0 text-red-fg\">&&</span>",
"链接": "href=\"&&\"",
"简介": "剧情简介:&&\"",
"线路标题": "磁力+>&&<",
"播放数组": "download-list&&</tbody>",
"播放列表": "<tr&&</tr>",
"播放标题": "text-muted\">&&</td>[不包含:网盘下载]",
"跳转播放链接": "href=\"&&\"",
"分类url": "https://v.xlys.ltd.ua/s/all/{catePg}?type={cateId};;d0",
"分类": "电影$0#电视剧$1"
}

20
js/s/免费影视.json Normal file
View File

@ -0,0 +1,20 @@
{
"站名": "",
"主页url": "https://www.freeok.ac",
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"数组": "",
"图片": "data-original=\"&&\"",
"标题": "",
"链接": "href=\"&&\"",
"副标题": "",
"线路数组": "module-tab-item&&</div>",
"线路标题": "data-dropdown-value=\"&&\"",
"播放数组": "",
"播放标题": "",
"跳转播放链接": "urlDecode(Base64(var player_*url\":\"&&\"))",
"搜索url": "https://www.freeok.ac/vodsearch/-------------.html?wd={wd}",
"简介": "<p>&&</p>",
"分类url": "https://www.freeok.ac/type/{cateId}.html",
"分类": "电影$1#连续剧$2#动漫$3#综艺$4#短剧$24"
}

53
js/s/兔小贝.json Normal file
View File

@ -0,0 +1,53 @@
{
"规则名": "兔小贝",
"规则作者": "香雅情",
"请求头参数": "手机",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"分类起始页码": "1",
"分类链接": "https://www.tuxiaobei.com/list/mip-data?typeId={cateId}&page={catePg}&callback=jsonp",
"分类名称": "儿歌&故事&国学&启蒙",
"分类名称替换词": "2&3&4&25",
"筛选数据": {},
"筛选子分类名称": "",
"筛选子分类替换词": "",
"分类截取模式": "0",
"分类Json数据二次截取": "jsonp(&&);",
"分类列表数组规则": "data.items",
"分类片单是否Jsoup写法": "0",
"分类片单标题": "name",
"分类片单链接": "video_id",
"分类片单图片": "image",
"分类片单副标题": "duration_string",
"分类片单链接加前缀": "https://www.tuxiaobei.com/play/",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机",
"搜索链接": "https://www.tuxiaobei.com/search/index?key={wd}",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": ".list-con&&.items",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": "mip-img&&src",
"搜索片单标题": ".title&&Text",
"搜索片单链接": "a&&href",
"搜索片单副标题": ".time&&Text",
"搜索片单链接加前缀": "https://www.tuxiaobei.com",
"搜索片单链接加后缀": "",
"链接是否直接播放": "2",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "#isVideo=true#",
"直接播放直链视频请求头": "",
"线路列表数组规则": "",
"线路标题": "",
"播放列表数组规则": "body",
"选集列表数组规则": ".video",
"选集标题链接是否Jsoup写法": "1",
"选集标题": "'立即播放'",
"选集链接": "mip-search-video&&video-src",
"是否反转选集序列": "0",
"选集链接加前缀": "",
"选集链接加后缀": "",
"是否开启手动嗅探": "0",
"手动嗅探视频链接关键词": ".mp4",
"手动嗅探视频链接过滤词": ".html#=http"
}

52
js/s/兔小贝2.json Normal file
View File

@ -0,0 +1,52 @@
{
"规则名": "兔小贝",
"规则作者": "香雅情",
"请求头参数": "手机",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"分类起始页码": "1",
"分类链接": "https://www.tuxiaobei.com/subject/{cateId}",
"分类名称": "兔小贝原创儿歌&睡前儿歌&Everybody动起来&爸爸妈妈小时候的儿歌&宝宝吃饭香&乖宝宝不哭闹&好宝宝爱上学&欢快儿歌&经典儿歌&快乐的节日&快乐的童年&流行儿歌&美丽四季&男孩最爱&女孩最爱&我爱爸爸妈妈&我的动物朋友&我的祖国和我&舞蹈音乐&英文儿歌&粤语儿歌&早教好习惯&放暑假啦&我能照顾好自己&画一个梦&哆啦A梦的神奇口袋&你是我的小天使&最动听的笑声&许个愿吧&阳光下的我们&智慧成语故事&名人成语故事&励志成语故事&神话成语故事&古诗启蒙&三字经&弟子规&千字文&十万个为什么&神奇的大自然&英语宝典&数学课堂&动物奇缘&安全教育",
"分类名称替换词": "17&16&1&2&3&4&5&6&9&10&11&12&13&14&15&19&20&21&22&23&24&25&56&57&58&59&60&61&62&63&89&90&88&87&39&43&46&48&54&55&50&51&53&84",
"筛选数据": {},
"筛选子分类名称": "",
"筛选子分类替换词": "",
"分类截取模式": "1",
"分类列表数组规则": ".list-con&&.items",
"分类片单是否Jsoup写法": "1",
"分类片单标题": ".title&&Text",
"分类片单链接": "a&&href",
"分类片单图片": "mip-img&&src",
"分类片单副标题": ".time&&Text",
"分类片单链接加前缀": "https://www.tuxiaobei.com",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机",
"搜索链接": "https://www.tuxiaobei.com/search/index?key={wd}",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": ".list-con&&.items",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": "mip-img&&src",
"搜索片单标题": ".title&&Text",
"搜索片单链接": "a&&href",
"搜索片单副标题": ".time&&Text",
"搜索片单链接加前缀": "https://www.tuxiaobei.com",
"搜索片单链接加后缀": "",
"链接是否直接播放": "2",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "#isVideo=true#",
"直接播放直链视频请求头": "",
"线路列表数组规则": "",
"线路标题": "",
"播放列表数组规则": "body",
"选集列表数组规则": ".video",
"选集标题链接是否Jsoup写法": "1",
"选集标题": "'立即播放'",
"选集链接": "mip-search-video&&video-src",
"是否反转选集序列": "0",
"选集链接加前缀": "",
"选集链接加后缀": "",
"是否开启手动嗅探": "0",
"手动嗅探视频链接关键词": ".mp4",
"手动嗅探视频链接过滤词": ".html#=http"
}

7
js/s/全网看.json Normal file
View File

@ -0,0 +1,7 @@
{
"请求头": "手机",
"简介": "剧情介绍:+stui-content__desc col-pd clearfix\">&&</div>",
"数组": "stui-vodlist__thumb lazyload&&</a>",
"分类url": "https://www.qkw1.com/qkwshow/{cateId}-{area}--{class}-----{catePg}---{year}.html",
"分类": "短剧$duanju#电视剧$tv#电影$dy#动漫$dm#综艺$zy"
}

81
js/s/八号影视.json Normal file
View File

@ -0,0 +1,81 @@
{
"规则名": "八号影视",
"规则作者": "",
"请求头参数": "User-Agent$手机#accept$text/html",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "0",
"首页推荐链接": "http://www.bahaotv.com",
"首页列表数组规则": "body&&.show-vod-list",
"首页片单列表数组规则": ".myui-vodbox-content",
"首页片单是否Jsoup写法": "1",
"分类起始页码": "1",
"分类链接": "http://www.bahaotv.com/vodshow/{cateId}--------{catePg}---.html",
"分类名称": "电影&电视剧&动漫",
"分类名称替换词": "movie&tvseries&anime",
"筛选数据": {},
//"筛选数据": "ext",
//{cateId}
"筛选子分类名称": "",
"筛选子分类替换词": "",
//{class}
"筛选类型名称": "",
"筛选类型替换词": "*",
//{area}
"筛选地区名称": "",
"筛选地区替换词": "*",
//{year}
"筛选年份名称": "",
"筛选年份替换词": "*",
//{lang}
"筛选语言名称": "",
"筛选语言替换词": "*",
//{by}
"筛选排序名称": "时间&人气&评分",
"筛选排序替换词": "time&hits&score",
"分类截取模式": "1",
"分类列表数组规则": ".show-vod-list&&.myui-vodbox-content",
"分类片单是否Jsoup写法": "1",
"分类片单标题": ".title&&Text",
"分类片单链接": "a&&href",
"分类片单图片": "img&&src",
"分类片单副标题": ".right&&Text",
"分类片单链接加前缀": "http://www.bahaotv.com",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机#accept$text/html",
"搜索链接": "http://www.bahaotv.com/vodsearch/-------------.html?wd={wd}",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": ".show-vod-list&&.myui-vodbox-content",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": "img&&src",
"搜索片单标题": ".title&&Text",
"搜索片单链接": "a&&href",
"搜索片单副标题": ".right&&Text",
"搜索片单链接加前缀": "http://www.bahaotv.com",
"搜索片单链接加后缀": "",
"链接是否直接播放": "0",
"直接播放链接加前缀": "https://live.52sf.ga/huya/",
"直接播放链接加后缀": "#isVideo=true#",
"直接播放直链视频请求头": "authority$ku.peizq.online#Referer$https://play.peizq.online",
"详情是否Jsoup写法": "1",
"类型详情": "",
"年代详情": "",
"地区详情": "",
"演员详情": ".detail-box&&.director,1&&Text!主演:",
"简介详情": ".intro&&Text",
"线路列表数组规则": ".nav-btn&&li",
"线路标题": "Text",
"播放列表数组规则": "body&&[id^=playlist]",
"选集列表数组规则": "a",
"选集标题链接是否Jsoup写法": "1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "0",
"选集链接加前缀": "http://www.bahaotv.com",
"选集链接加后缀": "",
"分析MacPlayer": "0",
"是否开启手动嗅探": "0",
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
"手动嗅探视频链接过滤词": ".html#=http"
}

17
js/s/养生堂.json Normal file
View File

@ -0,0 +1,17 @@
{
"首页": "0",
// "播放链接前缀": "https://www.gyf.lol",
"数组": "data\":{\"tit&&s_log",
"图片": "https://p0.ssl.cdn.btime.com/+ssl.cdn.btime.com/&&\"",
"副标题": "le\":\"&&\"",
"标题": "text\":\"&&\"",
"链接": "item.btime.com/&&\"",
"链接前缀": "https://app.api.btime.com/video/play?callback=jQuery36009651202523243325_1747927554988&id=",
// "线路标题": "</i>&&<span",
"播放数组": "video_streams&&audio_streams",
"播放列表": "stream&&duration",
"播放标题": "stream_vbt\":\"&&\"",
"播放链接": "url\":\"&&\"",
"分类url": "https://pc.api.btime.com/btimeweb/infoFlow?callback=jQuery36002244958011106073_1747920210579&list_id={cateId}&refresh={catePg}&count=2000&expands=pageinfo&_=1747920210580",
"分类": "2025$btv_08da67cea600bf3c78973427bfaba12d_s0_2025#2024$btv_08da67cea600bf3c78973427bfaba12d_s0_2024#2023$btv_08da67cea600bf3c78973427bfaba12d_s0_2023#2022$btv_08da67cea600bf3c78973427bfaba12d_s0_2022#2021$btv_08da67cea600bf3c78973427bfaba12d_s0_2021#2020$btv_08da67cea600bf3c78973427bfaba12d_s0_2020#2019$btv_08da67cea600bf3c78973427bfaba12d_s0_2019#2018$btv_08da67cea600bf3c78973427bfaba12d_s0_2018"
}

10
js/s/农民.json Normal file
View File

@ -0,0 +1,10 @@
{
"请求头": "手机",
"编码": "UTF-8",
"简介": "剧情介绍:+简&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;介:&&</p>",
"线路数组": "javascript:;\">&&</a>",
"数组": "<li>&&</li>",
"图片": "data-echo=\"&&\"",
"分类url": "https://www.wwgz.cn/vod-list-id-{cateId}-pg-{catePg}-order--by-time-class-0-year-{year}-letter--area-{area}-lang-.html",
"分类": "短剧$26#电视剧$2#电影$1#动漫$4#综艺$3"
}

10
js/s/农民影视.json Normal file
View File

@ -0,0 +1,10 @@
{
"请求头": "手机",
"编码": "UTF-8",
"简介": "简&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;介:&&</p>",
"线路数组": "javascript:;\">&&</a>",
"数组": "<li>&&</li>",
"图片": "data-echo=\"&&\"",
"分类url": "https://vip.wwgz.cn:5200/vod-list-id-{cateId}-pg-{catePg}-order--by-time-class-0-year-{year}-letter--area-{area}-lang-.html",
"分类": "电影$1#电视剧$2#动漫$4#综艺$3#短剧$26"
}

18
js/s/可可.json Normal file
View File

@ -0,0 +1,18 @@
{
"请求头": "电脑",
"主页url": "https://www.keke1.app/",
"标题": "class=\"v-item-title\">&&</div>",
"副标题": "<span>&&<",
"图片": "https+://vres.cfaqcgj.com/vod1/+data-original=\"/vod1/&&\"",
"数组": "<div class=\"module-item&&</a>",
"链接": "href=\"&&\"",
"搜索二次截取": "<div class=\"form-box&&pagenation-box fs-margin-section",
"搜索数组": "<div&&</div>",
"搜索请求头参数": "User-Agent$MOBILE_UA",
"搜索url": "'https://www.keke1.app/search?os=pc&k={wd}&t='<input&&value=\"&&\"/>",
"搜索图片": "https+://vres.wxwoq.com/vod1/+data-original=\"/vod1/&&\"",
"搜索标题": "class=\"title\">&&</",
"线路标题": "class=\"source-item-label\">&&</span>[不包含:高峰不卡]",
"分类": "电影$1#电视剧$2#动漫$3#综艺$4#短剧$6",
"分类url": "https://www.keke1.app/show/{cateId}-{class}-{area}-{lang}-{year}-{by}.html"
}

43
js/s/可可影视.json Normal file
View File

@ -0,0 +1,43 @@
{
"站名": "可可影视",
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"图片代理": "0",
"主页url": "https://www.kkys01.com",
"首页": "120",
"起始页": "1",
"分类url": "/show/{cateId}-{class}-{area}-{lang}-{year}-{by}-{catePg}.html;;mrcd0",
"分类": "电影&剧集&综艺&动漫&短剧",
"分类值": "1&2&4&3&6",
"数组": "默认--<div class=\"module-item&&</a>||搜索--/detail&&</a>",
"标题": "title\">&&</div",
"图片":"默认--https://vres1.ipvav.cn/+data-original=\"/&&\"||搜索--https://vres1.ipvav.cn/vod1/vod/+/vod1/vod/&&\"",
"副标题": "bottom\">&&</span||搜索--tags\">&&</div",
"链接": "默认--href=\"&&\"||搜索--/detail/+/&&.html\"+.html",
"影片年代": "--.html\"*>&&</a",
"影片地区": "----.html*>&&</a",
"影片类型": "-----.html*>&&</div",
"状态": "备注:</div>&&</div",
"导演": "导演:</div>&&</div",
"主演": "演员:</div>&&</div",
"简介": "detail-desc\">&&</p",
"线路数组": "source-item\">&&</a>[不包含:4K(高峰不卡)]",
"线路标题": "label\">&&<",
"播放数组": "episode-list&&</div",
"播放列表": "<a&&/a>",
"播放标题": ">&&<",
"播放链接": "href=\"&&\"",
"嗅探词": ".mp4#.m3u8",
"搜索请求头": "User-Agent$MOBILE_UA",
"搜索url": "/search?k={wd}&page={pg}",
"搜索模式": "1",
"筛选": "1",
"剧情": "Netflix&剧情&喜剧&动作&爱情&恐怖&惊悚&犯罪&科幻&悬疑&奇幻&冒险&战争&历史&古装&家庭&传记&武侠&歌舞&短片&动画&儿童&职场||Netflix&剧情&爱情&喜剧&犯罪&悬疑&古装&动作&家庭&惊悚&奇幻&美剧&科幻&历史&战争&韩剧&武侠&言情&恐怖&冒险&都市&职场||纪录&真人秀&记录&脱口秀&剧情&历史&喜剧&传记&相声&节目&歌舞&冒险&运动&Season&犯罪&短片&搞笑&晚会||Netflix&动态漫画&剧情&动画&喜剧&冒险&动作&奇幻&科幻&儿童&搞笑&爱情&家庭&短片&热血&益智&悬疑&经典&校园&Anime&运动&亲子&青春&恋爱&武侠&惊悚||逆袭&甜宠&虐恋&穿越&重生&剧情&科幻&武侠&爱情&动作&战争&冒险&其它",
"剧情值": "*",
"地区": "中国大陆&中国香港&中国台湾&美国&日本&韩国&英国&法国&德国&印度&泰国&丹麦&瑞典&巴西&加拿大&俄罗斯&意大利&比利时&爱尔兰&西班牙&澳大利亚&其他||中国大陆&中国香港&韩国&美国&日本&法国&英国&德国&中国台湾&泰国&印度&其他||中国大陆&中国香港&中国台湾&美国&日本&韩国&其他||日本&中国大陆&中国台湾&美国&中国香港&韩国&英国&法国&德国&印度&泰国&丹麦&瑞典&巴西&加拿大&俄罗斯&意大利&比利时&爱尔兰&西班牙&澳大利亚&其他||空",
"地区值": "*",
"语言": "国语&粤语&英语&日语&韩语&法语||国语&粤语&英语&日语&韩语&法语||国语&粤语&英语&日语&韩语&法语||国语&粤语&英语&日语&韩语&法语||空",
"语言值": "*",
"排序": "综合&最新&最热&评分",
"排序值": "1&2&3&4"
}

8
js/s/可可影视1.json Normal file
View File

@ -0,0 +1,8 @@
{
"简介": "detail-content\" style=*>&&</span>",
"数组": "stui-vodlist__box\">&&</div></div>",
"副标题": "pic-text text-right\">&&</span>",
"播放列表": "<a&&</a>",
"分类url": "https://www.kmxibanyayu.com/vs/{cateId}-{area}--{class}-----{catePg}---{year}.html",
"分类": "短剧$duanju#电视剧$dianshiju#电影$dianying#动漫$dongman#综艺$zongyi"
}

4
js/s/吉吉短剧.json Normal file
View File

@ -0,0 +1,4 @@
{
"分类": "短剧$1#电视剧$2",
"分类url": "https://www.jjduanju.com/sort/{cateId}/page/{catePg}.html"
}

18
js/s/哆啦新番社.json Normal file
View File

@ -0,0 +1,18 @@
{
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"主页url": "https://dora.xiaoxinbk.com/",
"数组": "class=\"card-img-bili\"&&</a>",
"标题": "alt=\"&&\"",
"图片": "data-url=\"&&\"",
"链接": "href=\"&&\"",
"线路标题": "mt-0\">&&</h3>",
"播放数组": "class=\"card-body button-list\"&&</div>",
"播放列表": "<a&&a>",
"播放链接": "href=\"&&\"",
"播放标题": ">&&</",
"分类url": "https://www.dora-video.cn/search/sy/?niandai={year}&cat={class}&tag={cateId}&gaojijiansuo=1&zhuangtai={by}",
"分类": "全部$0#动画$20#剧场版$21#MV$22#预告片$23#直播$27#同人$25#民间$26#目录$28#中篇$30",
"剧情": "哆啦A梦新番$1#新哆啦A梦 台湾配音$2#哆啦A梦剧场版$3#最新预告片$6#剧场版集合$7#哆啦A梦MV$4#哆啦A梦七小子集合$11#生日特别篇$19#哆啦A梦生日特别篇$12#哆啦美生日特别篇$14#大雄生日特别篇$13#静香生日特别篇$15#胖虎生日特别篇$16#小夫生日特别篇$17#24小时直播$24#哆啦A梦中篇附映$29#哆啦A梦大山版 - 哆啦a梦1979版国语旧版 - 旧版$31#哆啦A梦大山修复&补档区$32#藤子·F·不二雄【其它动画】$33",
"排序": "全部$0#完结$2#连载$1#待定$-1"
}

93
js/s/哔嘀影视.json Normal file
View File

@ -0,0 +1,93 @@
{
"规则名": "哔嘀影视",
"规则作者": "",
"请求头参数": "User-Agent$电脑#Referer$https://www.yjys02.com",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
"首页推荐链接": "https://www.yjys02.com",
"首页列表数组规则": "body",
"首页片单列表数组规则": ".card-link",
"首页片单是否Jsoup写法": "1",
//
"首页片单标题": "h3&&Text",
//
"首页片单链接": "a&&href",
//
"首页片单图片": "img&&data-src",
//
"首页片单副标题":".badge||.ribbon&&Text",
//
"首页片单链接加前缀": "https://www.yjys02.com",
//
"首页片单链接加后缀": "",
"分类起始页码": "1",
"分类链接": "https://www.yjys02.com/s/{cateId}/{catePg}?type={class}&year={year}&order={by}",
"分类名称": "不限&动作&爱情&喜剧&科幻&恐怖&战争&武侠&魔幻&剧情&动画&惊悚&3D&灾难&悬疑&警匪&文艺&青春&冒险&犯罪&纪录&古装&奇幻&国语&综艺&历史&运动&原创压制&美剧&韩剧&国产电视剧&日剧&英剧&德剧&俄剧&巴剧&加剧&西剧&意大利剧&泰剧&港台剧&法剧&澳剧",
"分类名称替换词": "all&dongzuo&aiqing&xiju&kehuan&kongbu&zhanzheng&wuxia&mohuan&juqing&donghua&jingsong&3D&zainan&xuanyi&jingfei&wenyi&qingchun&maoxian&fanzui&jilu&guzhuang&qihuan&guoyu&zongyi&lishi&yundong&yuanchuang&meiju&hanju&guoju&riju&yingju&deju&eju&baju&jiaju&spanish&yidaliju&taiju&gangtaiju&faju&aoju",
//"筛选数据": {},
"筛选数据": "ext",
//{cateId}
"筛选子分类名称": "",
"筛选子分类替换词": "",
//{class}
"筛选类型名称": "全部&电影&电视剧",
"筛选类型替换词": "&0&1",
//{area}
"筛选地区名称": "",
"筛选地区替换词": "*",
//{year}
"筛选年份名称": "2023&2022&2021&2020&2019&2018&2017&2016&2015&2014&2013&2012&2011&2010&2009&2008&2007&2006&2005&2004&2003&2002&2001",
"筛选年份替换词": "*",
//{lang}
"筛选语言名称": "",
"筛选语言替换词": "*",
//{by}
"筛选排序名称": "更新时间&豆瓣评分",
"筛选排序替换词": "0&1",
"分类截取模式": "1",
"分类列表数组规则": ".row-cards&&.card",
"分类片单是否Jsoup写法": "1",
"分类片单标题": "h3&&Text",
"分类片单链接": "a&&href",
"分类片单图片": "img&&data-src||src",
"分类片单副标题": ".badge||p&&Text",
"分类片单链接加前缀": "https://www.yjys02.com",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机#Referer$https://cn.bing.com/",
"搜索链接": "https://cn.bing.com/search?q=site:www.yjys02.com/ {wd}&qs=ds&form=QBRE",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": "ol#b_results&&li.b_algo",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": "",
"搜索片单标题": "h2&&Text",
"搜索片单链接": "a&&href",
"搜索片单副标题": "",
"搜索片单链接加前缀": "",
"搜索片单链接加后缀": "",
"链接是否直接播放": "0",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法": "1",
"类型详情": "",
"年代详情": "",
"地区详情": "div.mb-2&&p,5&&Text!制片国家/地区:",
"演员详情": "div.mb-2&&p,3&&Text!主演:",
"简介详情": "#synopsis&&Text!剧情简介",
"线路列表数组规则": "body&&.card:has(#download-list)||.card:has(#torrent-list)||.card:has(#play-list)",
"线路标题": "h3&&Text",
"播放列表数组规则": "body&&#download-list||#torrent-list||#play-list",
"选集列表数组规则": "a:not([href^=http])",
"选集标题链接是否Jsoup写法": "1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "0",
"选集链接加前缀": "https://www.yjys02.com",
"选集链接加后缀": "",
"分析MacPlayer": "0",
"是否开启手动嗅探": "1",
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos#item/video#video_mp4",
"手动嗅探视频链接过滤词": ".html#=http"
}

6
js/s/喝茶.json Normal file
View File

@ -0,0 +1,6 @@
{
"播放标题": "📹+>&&</a>",
"分类url": " https://www.shpdchysc.com/vodshow/{cateId}-{area}-{by}-{class}-----{catePg}---{year}.html",
"分类": "电视剧&电影&综艺&动漫&动画片&短剧&香港电影",
"分类值": "2&1&3&4&36&40&37"
}

21
js/s/大白鲨.json Normal file
View File

@ -0,0 +1,21 @@
{
"站名": "大白鲨",
"主页url": "https://dabaisha.tv/",
"编码": "UTF-8",
"分类url": "https://dabaisha.tv/{cateId}/explore/page-{catePg}-area-{area}-by-{by}-class-{class}-year-{year}.html",
"分类": "电影$movie#剧集$tv#综艺$variety#动漫$cartoon#短剧$mini-drama",
"数组": "class=\"public-list-exp\"&&</div>",
"图片": "https+://dabaisha.tv/upload/+data-src=\"/upload/&&\"",
"标题": "title=\"&&\"",
"副标题": "class=\"public-list-prb hide ft2\">&&<",
"链接": "href=\"&&\"",
"线路数组": "<h2&&</h2>",
"播放数组": "class=\"anthology-list-play&&</ul>",
"播放列表": "<li&&</li>",
"播放标题": "\">&&</a>",
"播放链接": "href=\"&&\"",
"搜索url": "https://dabaisha.tv/search?wd={wd}",
"搜索模式": "1",
"搜索数组": "class=\"cover\"&&</a>",
"搜索图片": "https+://dabaisha.tv/upload/+data-src=\"/upload/&&\""
}

14
js/s/奇迹.json Normal file
View File

@ -0,0 +1,14 @@
{
"二次截取": "module-items\"&&id=\"page[替换:module-footer>>module-item]",
"数组": "module-item-pic&&module-item module-item-go w16",
"图片": "data-src=\"&&\"",
"副标题": "module-item-text\">&&</div>",
"线路数组": "data-dropdown-value=&&</div>",
"线路标题": "<span>&&</small>[替换:</span><small>>>【]+集】",
"播放数组": "scroll-content&&</div>",
"播放列表": "<a&&</a>",
"播放标题": "<span>&&</span>",
"简介": "剧情:&&</div>",
"分类url": "https://qiji.91by.top/index.php/vod/show/area/{area}/by/{by}/class/{class}/id/{cateId}/page/{catePg}/year/{year}.html",
"分类": "电影$1#电视剧$2#综艺$3#动漫$4#短剧$20"
}

14
js/s/奇迹影视.json Normal file
View File

@ -0,0 +1,14 @@
{
"二次截取": "module-items\"&&id=\"page[替换:module-footer>>module-item]",
"数组": "module-item-pic&&module-item module-item-go w16",
"图片": "data-src=\"&&\"",
"副标题": "module-item-text\">&&</div>",
"线路数组": "data-dropdown-value=&&</div>",
"线路标题": "<span>&&</small>[替换:</span><small>>>【]+集】",
"播放数组": "scroll-content&&</div>",
"播放列表": "<a&&</a>",
"播放标题": "<span>&&</span>",
"简介": "剧情:&&</div>",
"分类url": "https://qiji.91by.top/index.php/vod/show/area/{area}/by/{by}/class/{class}/id/{cateId}/page/{catePg}/year/{year}.html",
"分类": "电影$1#电视剧$2#综艺$3#动漫$4#短剧$20"
}

10
js/s/小枫影视.json Normal file
View File

@ -0,0 +1,10 @@
{
"二次截取": "module-items\"&&id=\"page[替换:module-footer>>module-item]",
"数组": "module-item-pic&&module-item\"",
"图片": "data-src=\"&&\"",
"副标题": "module-item-text\">&&</div>",
"线路数组": "data-dropdown-value=&&</div>[不包含:视频]",
"线路标题": "<span>&&</small>[替换:</span><small>>>【]+集】",
"分类url": "https://kekedy.icu/vodshow/{cateId}-{area}-{by}-{class}-{lang}----{catePg}---{year}.html",
"分类": "电影$1#国产剧$2#综艺$6#短剧$8#纪录片$9"
}

16
js/s/小红.json Normal file
View File

@ -0,0 +1,16 @@
{
"主页url": "https://xiaohys.com/",
"分类url": "https://xiaohys.com/show/{cateId}-{area}--{class}-{lang}----{by}---{year}",
"分类": "电影$movie#电视剧$tv#综艺$variety#动漫$anime",
"数组": "public-list-div public-list-bj&&</div>",
"标题": "class=\"public-list-button\">*>&&</a>",
"副标题": "public-list-prb hide ft2\">&&</span>",
"图片": "data-src=\"&&\"",
"链接": "href=\"&&\"",
"播放数组": "anthology-list-play size&&</ul>",
"播放列表": "<a&&</a>",
"播放标题": ">&&</a>",
"线路数组": "swiper-slide&&</a>",
"线路标题": "</i>&&<span",
"搜索url": "https://xiaohys.com/search/-------------/?wd={wd}"
}

6
js/s/小镇.json Normal file
View File

@ -0,0 +1,6 @@
{
"线路数组": "<a data-toggle=\"tab\"&&/a>",
"线路标题": ">&&<",
"分类url": "http://dyxz.tv/list/{cateId}_{catePg}.html",
"分类": "电影$1#电视剧$2#动漫$3#综艺$4"
}

5
js/s/尼玛影视.json Normal file
View File

@ -0,0 +1,5 @@
{
"简介": "hl-content-text\">&&</span>",
"分类url": "http://nm.xxxc137.top/vodshow/{cateId}-{area}--{class}-----{catePg}---{year}.html",
"分类": "短剧$25#电视剧$2#电影$1#动漫$4#综艺$3"
}

81
js/s/巴士动漫.json Normal file
View File

@ -0,0 +1,81 @@
{
"规则名": "动漫巴士",
"规则作者": "",
"请求头参数": "User-Agent$MOBILE_UA#Accept$text/html#accept-language$zh-CN,zh;q=0.8",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
"首页推荐链接": "https://dm84.net",
"首页列表数组规则": "body&&.v_list",
"首页片单列表数组规则": "li",
"首页片单是否Jsoup写法": "1",
"分类起始页码": "1",
"分类链接": "https://dm84.net/list-{cateId}-{catePg}.html[firstPage=https://dm84.net/list-{cateId}.html]",
"分类名称": "国产动漫&日本动漫&欧美动漫&动漫电影",
"分类名称替换词": "1&2&3&4",
"筛选数据": {},
//"筛选数据": "ext",
//{cateId}
"筛选子分类名称": "",
"筛选子分类替换词": "",
//{class}
"筛选类型名称": "",
"筛选类型替换词": "*",
//{area}
"筛选地区名称": "",
"筛选地区替换词": "*",
//{year}
"筛选年份名称": "",
"筛选年份替换词": "*",
//{lang}
"筛选语言名称": "",
"筛选语言替换词": "*",
//{by}
"筛选排序名称": "时间&人气&评分",
"筛选排序替换词": "time&hits&score",
"分类截取模式": "1",
"分类列表数组规则": ".v_list&&li",
"分类片单是否Jsoup写法": "1",
"分类片单标题": "a&&title!在线观看",
"分类片单链接": "a&&href",
"分类片单图片": ".lazy&&data-bg",
"分类片单副标题": ".desc&&Text",
"分类片单链接加前缀": "https://dm84.net",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机#Accept$text/html#accept-language$zh-CN,zh;q=0.8",
"搜索链接": "https://dm84.net/s-{wd}---------{SearchPg}.html",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": ".v_list&&li",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": ".lazy&&data-bg",
"搜索片单标题": "a&&title!在线观看",
"搜索片单链接": "a&&href",
"搜索片单副标题": ".desc&&Text",
"搜索片单链接加前缀": "https://dm84.net",
"搜索片单链接加后缀": "",
"链接是否直接播放": "0",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法": "1",
"类型详情": "",
"年代详情": "",
"地区详情": "",
"演员详情": "",
"简介详情": ".intro&&-p&&Text",
"线路列表数组规则": ".play_from&&li",
"线路标题": "Text",
"播放列表数组规则": ".tab_content&&.play_list",
"选集列表数组规则": "a",
"选集标题链接是否Jsoup写法": "1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "1",
"选集链接加前缀": "https://dm84.net",
"选集链接加后缀": "",
"分析MacPlayer": "0",
"是否开启手动嗅探": "0",
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
"手动嗅探视频链接过滤词": ".html#=http"
}

11
js/s/巴蜀影视.json Normal file
View File

@ -0,0 +1,11 @@
{
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"图片": "_src=\"&&\"",
"线路标题":"-+>&&<",
"分类": "电影$dianying#电视剧$lianxuju#",
"分类url": "http://www.jsjiyuan.com/t/{cateId}-{catePg}.html",
"简介": "
"
}
},

8
js/s/布卡.json Normal file
View File

@ -0,0 +1,8 @@
{
"标题": "title=\"&&\"",
"链接": "href=\"&&\"",
"主页url": "https://m.ycblcw.com/label/new.html",
"线路数组": "class=\"item\">&&</ul>",
"线路标题": "data-toggle=\"tab\">&&</a>",
"分类url": "https://m.ycblcw.com/bukasw/{cateId}-{area}-{by}-{class}-{lang}-{catePg}------{year}.html;;d0"
}

17
js/s/布谷TV.json Normal file
View File

@ -0,0 +1,17 @@
{
"主页url": "https://www.bugutv.org/",
"搜索url": "https://www.bugutv.org/?cat=&s={wd}",
"搜索数组": "content-area\">&&</div>",
"简介": "◎简*介</p>&&</p>",
"导演": "◎导*演&&<br>",
"主演": "◎主*演&&<br>",
"影片年代": "◎上映 日期&&<br>",
"影片地区": "◎产*地&&<br>",
"线路数组": "entry-content u-text-format u-clearfix&&\"content-template",
"线路标题": "磁力",
"播放数组": "entry-content u-text-format u-clearfix&&\"content-template",
"播放列表": "<p>&&</p>[包含:magnet]",
"播放链接": "*\">&&</a>",
"分类": "4K蓝光原盘$4kuhd#4K电影$4kmovie#4K剧集$4ktv#杜比视界$dolbyvision#4K纪录片$4kdocu#4K演示片$4kdemo/4ktv-4ktv#杜比演示片$4kdemo/dolbydomo#DTS演示片$4kdemo/dtsdomo#8K演示片$4kdemo/8kdemo#蓝光电影$bluraymovie/bluray-movie#蓝光剧集$bluraymovie/bluraytv#3D蓝光$bluraymovie/3dmovie#蓝光纪录片$bluraymovie/documentary#蓝光演唱会$bluraymovie/audiotest",
"分类url": "https://www.bugutv.org/{cateId}/page/{catePg}"
}

13
js/s/影搜.json Normal file
View File

@ -0,0 +1,13 @@
{"搜索请求头参数": "User-Agent$PC_UA#Referer$https://yingso.fun/",
"搜索链接": "https://ys.api.yingso.fun/v3/ali/search;post",
"POST请求数据": "{\"pageNum\":1,\"pageSize\":30,\"title\":\"{wd}\",\"root\":1,\"cat\":\"all\"}",
"搜索截取模式": "0",
"搜索列表数组规则": "data",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": "",
"搜索片单标题": "title",
"搜索片单链接": "key",
"搜索片单副标题": "",
"搜索片单链接加前缀": "https://www.aliyundrive.com/s/",
"搜索片单链接加后缀": ""
}

4
js/s/影院.json Normal file
View File

@ -0,0 +1,4 @@
{
"分类url": "https://www.iysdq.cc/vodshow/{cateId}-{area}-------{catePg}---.html",
"分类": "电影$1#电视剧$2#综艺$3#动漫$4#短剧$5"
}

70
js/s/播视童趣.json Normal file
View File

@ -0,0 +1,70 @@
{
"规则名": "播视童趣",
"规则作者": "香雅情",
"请求头参数": "电脑",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
"首页推荐链接": "https://www.boosj.com/baby/",
"首页列表数组规则": "body&&.pub-hotplay-main||.pub-child-dance||.pub-toy-play||.pub-describe-story||.pub-child-song||.pub-child-eduction",
"首页片单列表数组规则": "a:has(img)",
"首页片单是否Jsoup写法": "1",
"首页片单标题": "img&&alt",
"首页片单链接": "a&&href",
"首页片单图片": "img&&src",
"首页片单副标题": "",
"首页片单链接加前缀": "",
"首页片单链接加后缀": "",
"分类起始页码": "1",
"分类链接": "https://www.boosj.com/search_res_3362__{cateId}_{catePg}_.html",
"分类名称": "全部&辅食&动画&儿童舞蹈&少儿英语&儿童歌曲&才艺&播视自制&故事&亲子教育&美术&其他&儿童游戏&识物&绘本&古诗&科普&儿童玩具&播视童趣儿童玩具",
"分类名称替换词": "&28&582&3364&3366&3367&3622&3782&3822&3842&4402&4583&4762&4842&4843&4844&4845&5102&5142",
"筛选数据": {},
//"筛选数据": "ext",
//{cateId}
"筛选子分类名称": "",
"筛选子分类替换词": "",
//{class}
"筛选类型名称": "",
"筛选类型替换词": "*",
//{area}
"筛选地区名称": "",
"筛选地区替换词": "*",
//{year}
"筛选年份名称": "",
"筛选年份替换词": "*",
//{lang}
"筛选语言名称": "",
"筛选语言替换词": "*",
//{by}
"筛选排序名称": "",
"筛选排序替换词": "",
"分类截取模式": "1",
"分类列表数组规则": "body&&.bj-col4:has(img)",
"分类片单是否Jsoup写法": "1",
"分类片单标题": "a&&title",
"分类片单链接": "a&&href",
"分类片单图片": "img&&data-original",
"分类片单副标题": "",
"分类片单链接加前缀": "",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机",
"搜索链接": "{wd}",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": "",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": "",
"搜索片单标题": "",
"搜索片单链接": "",
"搜索片单副标题": "",
"搜索片单链接加前缀": "",
"搜索片单链接加后缀": "",
"链接是否直接播放": "1",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"是否开启手动嗅探": "0",
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
"手动嗅探视频链接过滤词": ".html#=http"
}

43
js/s/斗鱼直播.json Normal file

File diff suppressed because one or more lines are too long

7
js/s/星空影视.json Normal file
View File

@ -0,0 +1,7 @@
{
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"分类": "电影$1#电视剧$2#综艺$3#动漫$4#",
"分类url": "http://www.ipcname.cn/search.php?page={catePg}&searchtype=5&tid={cateId}&area={area}&yuyan={lang}",
"简介": "己所不欲,勿施于人"
}

7
js/s/星辰.json Normal file
View File

@ -0,0 +1,7 @@
{
"请求头": "手机",
"简介": "剧情介绍:+detail-content\" style=*>&&</span>",
"播放标题": ">&&<[不包含:鉴飽#視频]",
"分类url": "http://www.grjsm.com/show/{cateId}-{area}--{class}-----{catePg}---{year}.html",
"分类": "短剧$25#电视剧$2#电影$1#动漫$4#综艺$3"
}

8
js/s/星辰影视.json Normal file
View File

@ -0,0 +1,8 @@
{
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"分类": "电影$1#连续剧$2#综艺$3#动漫$4#",
"分类url": "http://ljmovie.com/list/{cateId}-{catePg}.html",
"简介": "
"
}

11
js/s/来看.json Normal file
View File

@ -0,0 +1,11 @@
{
"简介": "剧情介绍:+check selected\">&&</div>",
"数组": "public-list-div public-list-bj\">&&</div></div>",
"图片": "data-src=\"&&\"",
"标题": "time-title hide ft4\" href=*>&&</a>",
"副标题": "public-list-subtitle cor5 hide ft2\">&&",
"线路数组": "<a class=\"swiper-slide&&</span>",
"播放数组": "anthology-list-play&&</ul>",
"分类url": "https://lkvod.me/show/{cateId}-{area}--{class}-----{catePg}---{year}.html",
"分类": "电视剧$2#电影$1#动漫$4#综艺$3"
}

1
js/s/桃子影视.json Normal file
View File

@ -0,0 +1 @@
{"请求头":"手机","简介":"剧情介绍:+detail-content\" style=*>&&</span>","分类url":"http://www.mpfpj.com/vodshow/{cateId}-{area}--{class}-----{catePg}---{year}.html","分类":"短剧$39#电视剧$2#电影$1#动漫$4#综艺$3"}},

6
js/s/樱花动漫.json Normal file
View File

@ -0,0 +1,6 @@
{
"简介": "",
"数组": "",
"分类url": "http://www.yinghuadm.cn/show_{cateId}--{by}-{class}-----{catePg}---{year}.html",
"分类": "日本动漫$ribendongman#国产动漫$guochandongman#动漫电影$dongmandianying#欧美动漫$oumeidongman"
}

5
js/s/樱花影视.json Normal file
View File

@ -0,0 +1,5 @@
{
"线路标题": "<h3 class=\"title\">&&</h3>",
"分类url": "https://yinghuadm.fun/vodshow/{cateId}-{area}--{class}-----{catePg}---{year}.html",
"分类": "电影$1#剧集$2#综艺$3#动漫$4"
}

10
js/s/欧乐.json Normal file
View File

@ -0,0 +1,10 @@
{
"简介": "剧情介绍:+fed-part-both fed-text-muted\">&&</p>",
"数组": "fed-col-xs4 fed-col-sm3 fed-col-md2\">&&</li>",
"图片": "data-original=\"&&\"",
"标题": "fed-part-eone\" href=*>&&</a>",
"副标题": "fed-text-center\">&&</span>",
"线路数组": "fed-btns-info fed-rims-info fed-part-eone&&</a>",
"分类url": "https://www.ifuntv.cc/f/area/{area}/class/{class}/id/{cateId}/page/{catePg}/year/{year}.html",
"分类": "短剧$32#电视剧$2#电影$1#动漫$4#综艺$3"
}

14
js/s/歪片影视.json Normal file
View File

@ -0,0 +1,14 @@
{
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"主页url": "https://www.waipian30.com/",
"数组": "/video/&&</a>",
"标题": "title=\"&&\"",
"图片": "data-original=\"&&\"",
"副标题": "item-note\">&&<",
"链接": "/video/+&&\"",
"跳转播放链接": "urlDecode(var player_*\"url\":\"&&%26)",
"分类": "电影$dianying#电视剧$juji#短剧$duanju#综艺$zongyi#动漫$dongman#纪录片$jilupian",
"分类url": "https://waipian30.com/show-{cateId}-{area}-{by}-{class}-----{catePg}---{year}/",
"简介": "introduction-content\">&&</div>"
}

13
js/s/毒舌.json Normal file
View File

@ -0,0 +1,13 @@
{
"数组": "/detail&&</a>",
"标题": "</div>*title\">&&<",
"简介": "detail-desc\">&&</div>",
"图片": "https://vres.wbadl.cn/vod1/vod/cover/+vod1/vod/cover/&&\"",
"链接": "/detail/+/&&\"",
"导演": "导演:</div>&&</a>",
"演员": "演员:</div>&&</div>",
"线路数组": "source-item-label&&</span>",
"播放数组": "episode-list&&</div>",
"分类url": "https://www.dushe03.com/show/{cateId}-{area}-{class}--{year}-2-{catePg}.html;;d0",
"分类": "电视剧$2#电影$1#动漫$3#综艺$4#短剧$6"
}

52
js/s/毒舌影视.json Normal file
View File

@ -0,0 +1,52 @@
{
"作者": "",
"站名": "XBPQ影视",
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"主页url": "https://www.thshic.com/",
"首页": "120",
"起始页": "1",
"分类url": "/thssw/{cateId}-{area}-{by}-{class}-{lang}-{letter}---{catePg}---{year}.html;;mrc",
"分类": "电影$1#电视剧$2#综艺$3#动漫$4#短剧$5",
"二次截取": "",
"数组": "cover-img\"&&</li",
"标题": "title=\"&&\"",
"图片": "data-original=\"&&\"",
"副标题": "text\">&&</",
"链接": "href=\"&&\"[替换:thsdetail>>thsplay#.html>>-1-1.html]",
"影片年代": "-------------*.html\" target=\"_blank\">&&</a >",
"影片地区": "--*-----------.html\" target=\"_blank\">&&</a",
"影片类型": "vod_class\":\"&&\"",
"状态": "状态:&&</p",
"导演": "vod_director\":\"&&\"",
"主演": "vod_actor\":\"&&\"",
"简介": "description\" content=\"&&\"",
"多线二次截取": "active col-flex wrap&&</ul>",
"多线数组": "<li>&&</li>",
"多线链接": "href=\"&&\"",
"线路二次截取": "active col-flex wrap&&</ul>",
"线路数组": "<li&&/li>",
"线路标题": ">&&</",
"播放二次截取": "",
"播放数组": "sort-list&&</ul>",
"倒序": "0",
"播放列表": "<a&&/a>[不包含:дрр滈凊]",
"播放标题": ">&&<",
"播放链接": "href=\"&&\"",
"跳转播放链接": "var player_*\"url\":\"&&\"",
"搜索请求头": "User-Agent$MOBILE_UA",
"搜索url": "https://www.thshic.com/thssc/{wd}----------{pg}---.html",
"搜索模式": "1",
"搜索后缀": "",
"搜索二次截取": "",
"搜索数组": "cover-img\"&&</li",
"搜索标题": "title=\"&&\"",
"搜索图片": "data-original=\"&&\"",
"搜索副标题": "text\">&&</",
"搜索链接": "href=\"&&\"",
"排序": "最新上映&超高人气&全网热播&高分好评",
"排序值": "time&hits&up&score",
"筛选": "1",
"类型": "动作片$6#喜剧片$7#爱情片$8#科幻片$9#恐怖片$10#剧情片$11#战争片$12#纪录片$13#悬疑片$14#犯罪片$15#奇幻片$16#动画片$31#预告片$32||国产剧$17#港台剧$18#日韩剧$20#欧美剧$21#海外剧$22||大陆综艺$23#日韩综艺$24#欧美综艺$25#港台综艺$26||国产动漫$27#日韩动漫$28#欧美动漫$29#其他动漫$30||空"
}
},

7
js/s/永乐影视.json Normal file
View File

@ -0,0 +1,7 @@
{
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"分类": "电影$1#电视剧$2#综艺$3#动漫$4",
"类型": "动作片$6#喜剧片$7#爱情片$8#科幻片$9#奇幻片$10#恐怖片$11#剧情片$12#战争片$20#动画片$26#悬疑片$22#冒险片$23#犯罪片$24#惊悚片$45#歌舞片$46#灾难片$47#网络片$48||国产剧$13#港台剧$14#日剧$15#韩剧$33#欧美剧$16#泰剧$34#新马剧$35#其他剧$25||内地综艺$27#港台综艺$28#日本综艺$29#韩国综艺$36#欧美综艺$30#新马泰综艺$37#其他综艺$38||国产动漫$31#日本动漫$32#韩国动漫$39#港台动漫$40#新马泰动漫$41#欧美动漫$42#其他动漫$43",
"分类url": "https://www.ylys.tv/vodshow/{cateId}-{area}-{by}-{class}-{lang}-{letter}---{catePg}---{year}.html"
}

81
js/s/河马短剧.json Normal file
View File

@ -0,0 +1,81 @@
{
"规则名": "河马短剧",
"规则作者": "香雅情",
"请求头参数": "MOBILE_UA",
"网页编码格式": "UTF-8",
"图片是否需要代理": "否",
"是否开启获取首页数据": "否",
"首页推荐链接": "https://www.kuaikaw.cn",
"首页列表数组规则": "body&&.module-items",
"首页片单列表数组规则": ".module-item:lt(12)",
"首页片单是否Jsoup写法": "1",
"分类起始页码": "1",
"分类链接": "https://www.kuaikaw.cn/browse/{cateId}/{catePg}[firstPage=https://www.kuaikaw.cn/browse/{cateId}]",
"分类名称": "全部",
"分类名称替换词": "0",
//"筛选数据": {},
"筛选数据": "ext",
//{cateId}
"筛选子分类名称": "全部&民国&萌宝&动漫&超能&甜宠&豪门恩怨&长生&神医&寻亲&抗战谍战&电视剧&奇幻&闪婚&职场商战&权谋&高手下山&神话&时空之旅&欢喜冤家&都市&体育&家庭&喜剧&都市修仙&神豪&科幻&致富&奇幻脑洞&强者回归&励志&复仇&电影&马甲&亲情&小人物&无敌&现实&重生&穿越&年代&悬疑&婚姻&家国情仇&虐恋&古装&仙侠&玄幻仙侠&传承觉醒&功夫武打&戏曲歌舞&情感&逆袭&战争",
"筛选子分类替换词": "0&590-839&589&1115&442&462&585&1073&438&1125&1093&1092-1097&715&713&943&840-1101&474&1094&718&717&1129&1128&714-1126&917&1124&475&1130&918&721&476&1076-1100&416-463&1091-1096&719&835-837&472&1074&441-469&439-465&916&716-722&445-470&1127&915&466&444-468&1102&720&473&1095&1098&838&417-464&1099",
//{class}
"筛选类型名称": "",
"筛选类型替换词": "*",
//{area}
"筛选地区名称": "",
"筛选地区替换词": "*",
//{year}
"筛选年份名称": "",
"筛选年份替换词": "*",
//{lang}
"筛选语言名称": "",
"筛选语言替换词": "*",
//{by}
"筛选排序名称": "时间&人气&评分",
"筛选排序替换词": "time&hits&score",
"分类截取模式": "1",
"分类列表数组规则": ".BrowseList_listBox__MyeBa&&.BrowseList_listItem__h7lD4",
"分类片单是否Jsoup写法": "是",
"分类片单标题": "img&&alt",
"分类片单链接": "a&&href",
"分类片单图片": "img&&src",
"分类片单副标题": ".BrowseList_lastChapter__dkL54&&Text",
"分类片单链接加前缀": "https://www.kuaikaw.cn",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$MOBILE_UA",
"搜索链接": "https://www.kuaikaw.cn/search/{SearchPg}?searchValue={wd}",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": ".search_searchList__AvbeR&&.MTagBookList_tagBookItem__C_038",
"搜索片单是否Jsoup写法": "是",
"搜索片单图片": "img&&src",
"搜索片单标题": "img&&alt",
"搜索片单链接": "a&&href",
"搜索片单副标题": "",
"搜索片单链接加前缀": "https://www.kuaikaw.cn",
"搜索片单链接加后缀": "",
"链接是否直接播放": "否",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法": "是",
"类型详情": "",
"年代详情": "",
"地区详情": "",
"演员详情": "",
"简介详情": ".introduction_introBox__t4Bbz&&Text",
"线路列表数组规则": "",
"线路标题": "Text",
"播放列表数组规则": "body&&.CatalogList_swiperBox__5kdPs",
"选集列表数组规则": "a:not(:has(img))",
"选集标题链接是否Jsoup写法": "是",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "否",
"选集链接加前缀": "https://www.kuaikaw.cn",
"选集链接加后缀": "",
"分析MacPlayer": "否",
"是否开启手动嗅探": "否",
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
"手动嗅探视频链接过滤词": ".html#=http"
}

8
js/s/泥巴影视.json Normal file
View File

@ -0,0 +1,8 @@
{
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"分类": "电影$1#连续剧$2#综艺$3#动漫$4#",
"分类url": "https://www.niuxiongdi.com/nivodshow/{cateId}--{by}------{catePg}---.html",
"简介": "
"
}

9
js/s/流光影视.json Normal file
View File

@ -0,0 +1,9 @@
{
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"线路标题":"河马-+>&&<",
"分类": "电影$1#连续剧$2#综艺$4#动漫$3#",
"分类url": "http://www.hemaqi.com/tags/{cateId}-{area}-------{catePg}---{year}.html",
"简介": "
"
}

9
js/s/流星影视.json Normal file
View File

@ -0,0 +1,9 @@
{
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"线路标题":"河马-+>&&<",
"分类": "电影$1#连续剧$2#综艺$4#动漫$3#",
"分类url": "http://www.hemaqi.com/tags/{cateId}-{area}-------{catePg}---{year}.html",
"简介": "
"
}

6
js/s/海纳影视.json Normal file
View File

@ -0,0 +1,6 @@
{
"简介": "简介:</em>&&",
"数组": "row\">&&</div></div>",
"分类url": "https://www.hainatv.net/index.php/vod/show/area/{area}/id/{cateId}/lang/{lang}/page/{catePg}/year/{year}.html",
"分类": "电影$1#电视剧$2#综艺$3#动漫$4#短剧$59"
}

9
js/s/熊猫.json Normal file
View File

@ -0,0 +1,9 @@
{
"请求头": "手机",
"简介": "剧情介绍:+description\">&&</div>",
"数组": "module-item\">&&module-item-text",
"图片": "data-src=\"&&\"",
"副标题": "video-class\">&&</span>",
"分类url": "https://jxhwsl.com/index.php/vod/show/area/{area}/class/{class}/id/{cateId}/page/{catePg}/year/{year}.html",
"分类": "短剧$99#电视剧$79#电影$61#动漫$93#综艺$88"
}

81
js/s/爱你短剧.json Normal file
View File

@ -0,0 +1,81 @@
{
"规则名": "爱你短剧",
"规则作者": "香雅情",
"请求头参数": "MOBILE_UA",
"网页编码格式": "UTF-8",
"图片是否需要代理": "否",
"是否开启获取首页数据": "是",
"首页推荐链接": "https://ainidj.com/",
"首页列表数组规则": "body&&.module-items",
"首页片单列表数组规则": ".module-item:lt(12)",
"首页片单是否Jsoup写法": "1",
"分类起始页码": "1",
"分类链接": "https://ainidj.com/vodshwo/{cateId}--------{catePg}---.html",
"分类名称": "穿越&战神&重生&爱情&萌娃&神医&古代&玄幻&言情",
"分类名称替换词": "fenle&fenlei2&fenlei3&fenlei4&guda&shenyi&gudai&xuanhuan&yanqing",
"筛选数据": {},
//"筛选数据": "ext",
//{cateId}
"筛选子分类名称": "",
"筛选子分类替换词": "",
//{class}
"筛选类型名称": "",
"筛选类型替换词": "*",
//{area}
"筛选地区名称": "",
"筛选地区替换词": "*",
//{year}
"筛选年份名称": "",
"筛选年份替换词": "*",
//{lang}
"筛选语言名称": "",
"筛选语言替换词": "*",
//{by}
"筛选排序名称": "时间&人气&评分",
"筛选排序替换词": "time&hits&score",
"分类截取模式": "1",
"分类列表数组规则": ".module-items&&.module-item",
"分类片单是否Jsoup写法": "是",
"分类片单标题": ".video-name&&Text",
"分类片单链接": "a&&href",
"分类片单图片": ".lazy&&data-src",
"分类片单副标题": ".module-item-text&&Text",
"分类片单链接加前缀": "https://ainidj.com",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$MOBILE_UA",
"搜索链接": "https://ainidj.com/vodsearch/{wd}----------{SearchPg}---.html",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": ".module-items&&.module-search-item",
"搜索片单是否Jsoup写法": "是",
"搜索片单图片": ".lazyload&&data-src",
"搜索片单标题": ".video-info&&h3&&Text",
"搜索片单链接": "a&&href",
"搜索片单副标题": ".video-serial&&Text",
"搜索片单链接加前缀": "https://ainidj.com",
"搜索片单链接加后缀": "",
"链接是否直接播放": "否",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法": "是",
"类型详情": "",
"年代详情": "",
"地区详情": "",
"演员详情": "",
"简介详情": ".video-info-main&&.video-info-content&&Text",
"线路列表数组规则": ".module-tab-items&&.module-tab-item",
"线路标题": "Text",
"播放列表数组规则": "body&&.module-player-list",
"选集列表数组规则": ".scroll-content&&a",
"选集标题链接是否Jsoup写法": "是",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "否",
"选集链接加前缀": "https://ainidj.com",
"选集链接加后缀": "",
"分析MacPlayer": "否",
"是否开启手动嗅探": "否",
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
"手动嗅探视频链接过滤词": ".html#=http"
}

25
js/s/爱我短剧.json Normal file
View File

@ -0,0 +1,25 @@
{
"请求头": "User-Agent$MOBILE_UA",
"主页url": "https://www.aiwodj.com",
"数组": "lazy lazyloaded&&</a[替换:amp;>>]",
"图片": "data-src=\"&&\"",
"标题": "title=\"&&\"",
"链接": "href=\"&&\"",
"副标题": "+module-item-caption\">&&</div",
"简介": "description\" content=\"&&,这里",
"线路数组": "module-tab-item tab-item&&</div",
"线路标题": "+span>&&</span",
"播放数组": "module-blocklist&&</div>",
"播放列表": "<a&&</a>",
"播放标题": "span>&&</span>",
"播放链接": "href=\"&&\"",
"跳转播放链接": "urlDecode(var player_*\"url\":\"&&\")",
"搜索url": "https://www.aiwodj.com/vodsearch/{wd}----------{pg}---.html",
"搜索数组": "lazy lazyload&&</a[替换:amp;>>]",
"搜索图片": "data-src=\"&&\"",
"搜索标题": "+title=\"&&\"",
"搜索链接": "href=\"&&\"",
"分类url": "https://www.aiwodj.com/vodshow/{cateId}--{by}-{class}-{lang}----{catePg}---{year}.html",
"分类": "穿越&战神&重生&爱情&萌娃&神医&古代&玄幻&言情",
"分类值": "fenle&fenlei2&fenlei3&fenlei4&guda&shenyi&gudai&xuanhuan&yanqing"
}

21
js/s/狐狸君.json Normal file
View File

@ -0,0 +1,21 @@
{
"搜索模式": "1",
"搜索url": "https://www.foxjun.com/s/?q={wd}",
"搜索数组": "class=\"media\">&&/div>",
"搜索图片": "src=\"&&\"",
"搜索标题": "《&&》",
"搜索副标题": "》&&\"",
"搜索链接": "href=\"&&\"",
"标题": "《&&》",
"副标题": "》&&\"",
"影片年代": "上映日期:&&</p>",
"影片类型": "类型:&&</p>",
"主演": "主演:&&</p>",
"简介": "简介:&&</p>",
"播放数组": "<tbody>&&</tbody>",
"播放列表": "<a&&/a>[包含:magnet]",
"播放标题": ">&&<",
"播放链接": "href=\"&&\"",
"分类url": "https://www.foxjun.com/channel/{cateId}.html?apage1={catepg}",
"分类": "国产剧$guochanju#电影$dianying#动画$donghua#美欧剧$meiouju#日韩剧$rihanju"
}

84
js/s/玩偶哥哥.json Normal file
View File

@ -0,0 +1,84 @@
{
"规则名": "玩偶哥哥",
//"DEBUG":"1",
"规则作者": "香雅情",
"请求头参数": "MOBILE_UA",
"网页编码格式": "UTF-8",
"图片是否需要代理": "否",
"是否开启获取首页数据": "是",
"首页推荐链接": "https://www.wogg.net",
"首页列表数组规则": "body&&.module-items",
"首页片单列表数组规则": ".module-item:not(:matches(饭太硬|公众号))",
"首页片单是否Jsoup写法": "1",
"分类起始页码": "1",
//"分类链接": "https://www.wogg.net/index.php/vodshow/{cateId}--{by}------{catePg}---{year}.html",
"分类链接": "https://www.wogg.net/vodshow/{cateId}--{by}------{catePg}---{year}.html",
"分类名称": "电影&电视剧&综艺&动漫&短剧&音乐空间",
"分类名称替换词": "1&2&4&3&6&5",
//"筛选数据": {},
"筛选数据": "ext",
//{cateId}
"筛选子分类名称": "",
"筛选子分类替换词": "",
//{class}
"筛选类型名称": "",
"筛选类型替换词": "*",
//{area}
"筛选地区名称": "",
"筛选地区替换词": "*",
//{year}
"筛选年份名称": "",
"筛选年份替换词": "*",
//{lang}
"筛选语言名称": "",
"筛选语言替换词": "*",
//{by}
"筛选排序名称": "时间&人气&评分",
"筛选排序替换词": "time&hits&score",
"分类截取模式": "1",
"分类列表数组规则": ".module-items&&.module-item:not(:matches(饭太硬|公众号))",
"分类片单是否Jsoup写法": "是",
"分类片单标题": "a&&title",
"分类片单链接": "a&&href",
"分类片单图片": ".module-item-pic&&img&&data-src",
"分类片单副标题": ".module-item-text&&Text",
"分类片单链接加前缀": "https://www.wogg.net",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$MOBILE_UA",
//"搜索链接": "https://www.wogg.net/index.php/vodsearch/{wd}----------{SearchPg}---.html",
"搜索链接": "https://www.wogg.net/vodsearch/{wd}----------{SearchPg}---.html",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": ".module-items&&.module-search-item",
"搜索片单是否Jsoup写法": "是",
"搜索片单图片": ".lazyload&&data-src",
"搜索片单标题": "h3&&Text",
"搜索片单链接": "h3&&a&&href",
"搜索片单副标题": ".video-info&&a&&Text",
"搜索片单链接加前缀": "https://www.wogg.net",
"搜索片单链接加后缀": "",
"链接是否直接播放": "否",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法": "是",
"类型详情": "",
"年代详情": "",
"地区详情": "",
"演员详情": ".video-info-main&&.video-info-actor,1&&Text",
"简介详情": ".video-info-content&&p,-1&&Text",
"线路列表数组规则": ".module-player-tab&&.module-tab-item",
"线路标题": "span&&Text",
"播放列表数组规则": "body&&.module-player-list",
"选集列表数组规则": ".module-row-one:matches(https://www.ali(pan|yundrive).com/s/)",
"选集标题链接是否Jsoup写法": "是",
"选集标题": "h4&&Text",
"选集链接": ".btn-down&&a&&href",
"是否反转选集序列": "否",
"选集链接加前缀": "",
"选集链接加后缀": "",
"分析MacPlayer": "",
"是否开启手动嗅探": "否",
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
"手动嗅探视频链接过滤词": ".html#=http"
}

9
js/s/瓜籽.json Normal file
View File

@ -0,0 +1,9 @@
{
"简介": "简介:</strong>&&</p>",
"图片": "data-src=\"&&\"",
"播放链接": "href=\"&&\"",
"二次播放链接": "data-video-url=\"&&\"",
"线路标题": "<div class=\"playerxq\">&&</h2>",
"分类url": "http://www.guaziyingyuan.com/Show/{cateId}-{area}--{class}-----{catePg}---{year}/",
"分类": "电视剧$2#电影$1#动漫$4#综艺$3"
}

131
js/s/电影港.json Normal file
View File

@ -0,0 +1,131 @@
//xpathjsoup2022917
//jsoupjs
//
{
//
"title": "电影港",
//
"author": "香雅情",
//UA,$#okhttp/3.12.11MOBILE_UAPC_UA使UA
//"User-Agent$PC_UA#Referer$http://ww.baidu.com#Cookie$ser=ok",#
//UAPCUA
"Headers":"PC_UA",
//UTF-8UTF-8GBKGB2312
"Coding_format":"gb2312",
//
"PicNeedProxy":"0",
//01
"homeContent":"0",
//,
"firstpage": "1",
//,{cateId}{catePg}, [firstPage=]
"class_url": "https://www.dygang.tv/{cateId}/index_{catePg}.htm[firstPage=https://www.dygang.cc/{cateId}/index.htm]",
//1&2&3
"class_name": "最新电影&经典高清&国配电影&经典港片&国剧&日韩剧&美剧&综艺&动漫&纪录片&高清原盘&4K高清区&3D电影&电影专题",
//1&2&3&id=0&id=1
"class_value": "ys&bd&gy&gp&dsj&dsj1&yx&zy&dmq&jilupian&1080p&4K&3d&dyzt",
//jsonxpath
"filterdata":{},
//0json
"cat_mode": "1",
//3
"cat_arr_rule": "body&&table[width=388]",
//jsoupxbhtml1jsoup()0xb
"cat_is_jsoup":"1",
//
"cat_title": "img&&alt",
//
"cat_url": "a&&href",
//
"cat_pic": "img&&src",
//
"cat_subtitle":"[align=center]&&Text",
//
"cat_prefix": "https://www.dygang.tv",
//
"cat_suffix": "",
//,okhttp/3.12.11MOBILE_UAPC_UA使UA
//$#"User-Agent$PC_UA#Referer$http://ww.baidu.com#Cookie$ser=ok"
"SHeaders":"User-Agent$PC_UA#Content-Type$charset=gb2312",
//{wd}post;post
//POST http://www.lezhutv.com/index.php?m=vod-search;post
"search_url": "https://www.dygang.tv/e/search/index123.php;post",
//POSTbodysearchwordwdPOST
"sea_PtBody":"keyboard={wd}&submit=搜+索&show=title,smalltext&tempid=1&tbname=article",
//,0jsonlist
"search_mode": "1",
//list3
"sea_arr_rule": "body&&table[width=388]",
//jsoupxbhtml1jsoup()0xb
"sea_is_jsoup":"1",
//
"sea_pic": "img&&src",
//
"sea_title": "img&&alt",
//
"sea_url": "a&&href",
//
"sea_subtitle":"",
//
"search_prefix": "https://www.dygang.tv",
//json
"search_suffix": "",
//012
//3
"force_play": "0",
//
"play_prefix": "",
//#isVideo=true#
"play_suffix": "",
//#
"play_header": "",
//jsoupxb1jsoup()0xb
"proj_is_jsoup":"0",
//&&
"proj_cate": "",
//&&
"proj_year": "",
//&&
"proj_area": "",
//&&
"proj_actor": "演  员&&</",
//&&
"proj_plot": "简  介&&</",
//线tab_titletab_arr_rule
//线
"tab_arr_rule": "#dede_content",
//线&&
"tab_title": "strong&&Text",
//
"list_arr_rule": "#dede_content",
//
"epi_arr_rule": "table&&[href*=magnet]",
//&&
"epi_title": "a&&Text",
//&&
"epi_url": "a&&href",
//
"epi_reverse": "0",
//
"epiurl_prefix": "",
//
"epiurl_suffix": "",
//
//<script type="text/javascript">var player_aaaa={"flag":"play","encrypt
//0
"Anal_MacPlayer":"0",
//01
"ManualSniffer":"0",
//#
"VideoFormat":".mp4#.m3u8#.flv",
//,#
"VideoFilter":".html#=http"
}

71
js/s/电影牛.json Normal file
View File

@ -0,0 +1,71 @@
{
"规则名": "电影牛影院",
"规则作者": "香雅情",
"请求头参数": "手机",
"网页编码格式": "UTF-8",
"图片是否需要代理": "1",
"是否开启获取首页数据": "1",
"首页推荐链接": "https://www.dianyingn.cc",
"首页列表数组规则": "body&&.fed-list-info:has(.fed-list-remarks)",
"首页片单列表数组规则": "li",
"首页片单是否Jsoup写法": "1",
"首页片单标题": ".fed-list-title&&Text",
"首页片单链接": "a&&href",
"首页片单图片": ".fed-list-pics&&data-original",
"首页片单副标题": ".fed-list-remarks&&Text",
"首页片单链接加前缀": "https://www.dianyingn.cc",
"首页片单链接加后缀": "",
"分类起始页码": "1",
"分类链接": "https://www.dianyingn.cc/vodtype/{cateId}-{catePg}.html",
"分类名称": "电影&电视剧&综艺&动漫",
"分类名称替换词": "dianying&dianshiju&zongyi&dongman",
"筛选数据": "ext",
"筛选子分类名称": "动作片&喜剧片&爱情片&科幻片&恐怖片&剧情片&战争片&纪录片||国产剧&港台剧&日韩剧&欧美剧",
"筛选子分类替换词": "dongzuopian&xijupian&aiqingpian&kehuanpian&kongbupian&juqingpian&zhanzhengpian&jilupian||guochanju&gangtaiju&rihanju&oumeiju",
"分类截取模式": "1",
"分类列表数组规则": "body&&.fed-list-item:has(.fed-list-remarks)",
"分类片单是否Jsoup写法": "1",
"分类片单标题": ".fed-list-title&&Text",
"分类片单链接": "a&&href",
"分类片单图片": ".fed-list-pics&&data-original",
"分类片单副标题": ".fed-list-remarks&&Text",
"分类片单链接加前缀": "https://www.dianyingn.cc",
"分类片单链接加后缀": "",
"搜索请求头参数": "手机",
"搜索链接": "https://www.dianyingn.cc/index.php/ajax/suggest.html?mid=1&wd={wd}",
"POST请求数据": "",
"搜索截取模式": "0",
"搜索列表数组规则": "list",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": "pic",
"搜索片单标题": "name",
"搜索片单链接": "id",
"搜索片单副标题": "",
"搜索片单链接加前缀": "https://www.dianyingn.cc/voddetail/",
"搜索片单链接加后缀": ".html",
"链接是否直接播放": "0",
"直接播放链接加前缀": "https://live.52sf.ga/huya/",
"直接播放链接加后缀": "#isVideo=true#",
"直接播放直链视频请求头": "authority$ku.peizq.online#Referer$https://play.peizq.online",
"详情是否Jsoup写法": "0",
"类型详情": "",
"年代详情": "",
"地区详情": "",
"演员详情": "主演:</span>&&</li>",
"简介详情": "简介:</span>&&</li>",
"线路列表数组规则": ".fed-tabs-item&&ul&&li",
"线路标题": "Text",
"播放列表数组规则": "body&&.fed-play-item",
"选集列表数组规则": ".fed-btns-info",
"选集标题链接是否Jsoup写法": "1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "0",
"选集链接加前缀": "https://www.dianyingn.cc",
"选集链接加后缀": "",
"分析MacPlayer": "0",
"是否开启手动嗅探": "0",
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv",
"手动嗅探视频链接过滤词": ".html#=http"
}

6
js/s/白嫖1.json Normal file
View File

@ -0,0 +1,6 @@
{
"分类url": "https://www.6699z.cn/vodshow/{cateId}-{area}-{by}-{class}-{lang}-{letter}---{catePg}---{year}.html",
"分类": "电影&剧集&综艺&动漫&短剧",
"分类值": "1&2&3&4&58",
"类型": "动作片$6#喜剧片$7#爱情片$8#高分经典科幻片$9#恐怖片$10#剧情片$11#战争片$12||国产剧$13#香港剧$28#恋爱不分国度$29#台湾剧$27#美国剧$31#泰国剧$33#其它剧$35||无||无||无"
}

6
js/s/白嫖2.json Normal file
View File

@ -0,0 +1,6 @@
{
"分类url": "https://www.qyzf88.com/qyvodtype/{cateId}-{area}-{by}-{class}-----{catePg}---{year}.html",
"分类": "电影$1#电视剧$2#樱花动漫$4#综艺$3",
"副标题": "class=\"pic-text text-right\"&&</span>",
"简介": "寒+剧情介绍:&&</p >"
}

8
js/s/白嫖3.json Normal file
View File

@ -0,0 +1,8 @@
{
"简介": "剧情介绍:+module-item-style video-text\">&&</div>",
"数组": "<a&&module-item-pic",
"副标题": "module-item-text\">&&</div>",
"播放数组": "module-blocklist\">&&</div></div>",
"分类url": "https://ys.51baipiao.net/index.php/vod/show/area/{area}/class/{class}/id/{cateId}/page/{catePg}/year/{year}.html",
"分类": "电视剧$2#电影$1#动漫$29#综艺$3"
}

4
js/s/百思.json Normal file
View File

@ -0,0 +1,4 @@
{
"分类url": "https://www.bestpipe.cn/vodshow/{cateId}-{area}-------{catePg}---.html",
"分类": "电影$20#剧集$21#短剧$24#综艺$23#动漫$22"
}

60
js/s/百思派.json Normal file
View File

@ -0,0 +1,60 @@
{
"规则名": "百思派电影网",
"请求头参数": "手机",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
"首页推荐链接": "https://www.bestpipe.cn",
"首页列表数组规则": "body&&.stui-vodlist",
"首页片单列表数组规则": "li",
"首页片单是否Jsoup写法": "1",
"分类起始页码": "1",
"分类链接": "https://www.bestpipe.cn/vodshow/{cateId}-{area}-{by}-{class}-{lang}----{catePg}---{year}.html",
"分类名称": "电影&剧集&短剧&动漫&综艺",
"分类名称替换词": "20&21&24&22&23",
"筛选数据": "ext",
"筛选类型名称": "Netflix&剧情&科幻&动作&喜剧&爱情&冒险&儿童&歌舞&音乐&奇幻&动画&恐怖&惊悚&战争&传记&纪录&犯罪&悬疑&西部&灾难&古装&武侠&家庭&短片&校园&文艺&运动&青春&同性&励志&历史||Netflix&欧美&短剧&古装&武侠&励志&家庭&剧情&喜剧&战争&科幻&惊悚&恐怖&悬疑&犯罪&动作&冒险&历史&同性||古代&现代&穿越&玄幻&霸总&英雄救美&未婚妻&师姐&绝美&逆袭&美女&爱情&甜宠&虐恋&爽剧&搞笑&情感&动漫&萌宝&都市&言情&重生&乡村&神医&幻想&反转&复仇&修仙&古装&男频||Netflix&热血&科幻&美少女&魔幻&经典&励志&少儿&冒险&搞笑&推理&恋爱&治愈&幻想&校园&动物&机战&亲子&儿歌&运动&悬疑&怪物&战争&益智&青春&童话&竞技&动作&社会&友情&真人版&电影版&OVA版&TV版&新番动画&完结动画||Netflix&脱口秀&真人秀&选秀&八卦&访谈&情感&生活&晚会&搞笑&音乐&时尚&游戏&少儿&体育&纪实&科教&曲艺&歌舞&财经&汽车&播报&其他",
"筛选类型替换词": "*",
"筛选地区名称": "大陆&香港&台湾&美国&日本&韩国&英国&法国&德国&印度&泰国&丹麦&瑞典&巴西&加拿大&俄罗斯&意大利&比利时&爱尔兰&西班牙&澳大利亚&其它||大陆&香港&韩国&美国&日本&法国&英国&德国&台湾&泰国&印度&其他||大陆&香港&韩国&美国&日本&法国&英国&德国&台湾&泰国&印度&其他||大陆&日本&欧美&其他||大陆&韩国&香港&台湾&美国&其它",
"筛选地区替换词": "*",
"筛选语言名称": "英语&法语&国语&粤语&日语&韩语&泰语&德语&俄语&闽南语&丹麦语&波兰语&瑞典语&印地语&挪威语&意大利语&西班牙语||空||空||国语&英语&粤语&闽南语&韩语&日语&其它||国语&英语&粤语&闽南语&韩语&日语&其它",
"筛选语言替换词": "*",
"详情是否Jsoup写法": "是",
"类型详情": ".stui-content__detail&&.data,1&&Text!状态:",
"年代详情": ".stui-content__detail&&.data,4&&Text!年份:",
"地区详情": ".stui-content__detail&&.data,2&&Text!地区:",
"演员详情": ".stui-content__detail&&.data,6&&Text!主演:",
"简介详情": ".stui-content__detail&&.detail-content&&Text",
"分类截取模式": "1",
"分类列表数组规则": "body&&.stui-vodlist__box",
"分类片单是否Jsoup写法": "1",
"分类片单标题": "a&&title",
"分类片单链接": "a&&href",
"分类片单图片": ".stui-vodlist__thumb&&data-original",
"分类片单副标题": ".pic-text&&Text",
"分类片单链接加前缀": "https://www.bestpipe.cn",
"搜索请求头参数": "User-Agent$手机",
"搜索链接": "https://www.bestpipe.cn/vodsearch/{wd}----------1---.html",
"搜索截取模式": "1",
"搜索列表数组规则": "body&&.stui-vodlist__box",
"搜索片单是否Jsoup写法": "1",
"搜索片单标题": "a&&title",
"搜索片单链接": "a&&href",
"搜索片单图片": ".stui-vodlist__thumb&&data-original",
"搜索片单副标题": ".pic-text&&Text",
"搜索片单链接加前缀": "https://www.bestpipe.cn",
"线路列表数组规则": "body&&.nav-tabs&&a",
"线路标题": "Text",
"播放列表数组规则": "body&&.stui-content__playlist",
"选集列表数组规则": "a",
"选集标题链接是否Jsoup写法": "1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "0",
"选集链接加前缀": "https://www.bestpipe.cn",
"选集链接加后缀": "",
"分析MacPlayer": "2",
"是否开启手动嗅探": "0",
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
"手动嗅探视频链接过滤词": ".html#=http"
}

6
js/s/皮皮虾.json Normal file
View File

@ -0,0 +1,6 @@
{
"首页": "0",
"线路标题": "module-tab-value\">&&</span>",
"分类url": "http://www.ppxys.vip/s/{cateId}/area/{area}/by/{by}/class/{class}/lang/{lang}/letter/{letter}/page/{catePg}/year/{year}.html",
"分类": "剧集$1#电影$2#动漫番剧$3"
}

81
js/s/盒子影视.json Normal file
View File

@ -0,0 +1,81 @@
{
"规则名": "电影盒子",
"规则作者": "",
"请求头参数": "手机",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "0",
"首页推荐链接": "http://80kp.com",
"首页列表数组规则": "body&&.stui-vodlist:has(h4)",
"首页片单列表数组规则": "li",
"首页片单是否Jsoup写法": "1",
"分类起始页码": "1",
"分类链接": "http://80kp.com/films/{cateId}_{catePg}.html[firstPage=http://80kp.com/films/{cateId}.html]",
"分类名称": "电影&电视剧&综艺&动漫",
"分类名称替换词": "1&2&4&3",
"筛选数据": {},
//"筛选数据": "ext",
//{cateId}
"筛选子分类名称": "",
"筛选子分类替换词": "",
//{class}
"筛选类型名称": "",
"筛选类型替换词": "*",
//{area}
"筛选地区名称": "",
"筛选地区替换词": "*",
//{year}
"筛选年份名称": "",
"筛选年份替换词": "*",
//{lang}
"筛选语言名称": "",
"筛选语言替换词": "*",
//{by}
"筛选排序名称": "时间&人气&评分",
"筛选排序替换词": "time&hits&score",
"分类截取模式": "1",
"分类列表数组规则": ".stui-vodlist&&li",
"分类片单是否Jsoup写法": "1",
"分类片单标题": "h4&&a&&Text",
"分类片单链接": "h4&&a&&href",
"分类片单图片": ".lazyload&&data-original",
"分类片单副标题": ".pic-text&&Text",
"分类片单链接加前缀": "http://80kp.com",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机",
"搜索链接": "http://80kp.com/search.php;post",
"POST请求数据": "searchword={wd}",
"搜索截取模式": "1",
"搜索列表数组规则": ".stui-vodlist__media&&li",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": ".lazyload&&data-original",
"搜索片单标题": "h3&&a&&Text",
"搜索片单链接": "h3&&a&&href",
"搜索片单副标题": ".pic-text&&Text",
"搜索片单链接加前缀": "http://80kp.com",
"搜索片单链接加后缀": "",
"链接是否直接播放": "0",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法": "0",
"类型详情": "类型:</span>&&</a>",
"年代详情": "年份:</span>&&</a>",
"地区详情": "地区:</span>&&</a>",
"演员详情": "主演:</span>&&</p>",
"简介详情": "简介:</span>&&</p>",
"线路列表数组规则": ".nav-tabs&&li",
"线路标题": "Text",
"播放列表数组规则": "body&&.stui-content__playlist",
"选集列表数组规则": "li",
"选集标题链接是否Jsoup写法": "1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "0",
"选集链接加前缀": "http://80kp.com",
"选集链接加后缀": "",
"分析MacPlayer": "0",
"是否开启手动嗅探": "1",
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos#obj/tos-#pt=m3u8#mime_type=video_mp4#x-oss-signature=",
"手动嗅探视频链接过滤词": ".html#=http"
}

81
js/s/看看影视.json Normal file
View File

@ -0,0 +1,81 @@
{
"规则名": "看一看",
"规则作者": "",
"请求头参数": "User-Agent$手机#Referer$https://www.kykhd.cc/",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
"首页推荐链接": "https://www.kykhd.cc",
"首页列表数组规则": "body&&.index-area",
"首页片单列表数组规则": "ul&&li",
"首页片单是否Jsoup写法": "1",
"分类起始页码": "1",
"分类链接": "https://www.kykhd.cc/index.php?m=vod-list-id-{cateId}-pg-{catePg}-order--by-{by}-class-0-year-0-letter--area-{area}-lang-.html",
"分类名称": "电影&电视剧&综艺&动漫",
"分类名称替换词": "1&2&3&4",
//"筛选数据": {},
"筛选数据": "ext",
//{cateId}
"筛选子分类名称": "动作片&喜剧片&爱情片&科幻片&恐怖片&剧情片&战争片&纪录片&微电影&惊悚片&悬疑片||国产剧&港台剧&日韩剧&欧美剧&泰剧&海外剧||TV综艺&音乐MV||TV版&电影版&剧场版&国语经典",
"筛选子分类替换词": "5&6&7&8&9&10&11&16&18&20&21||12&13&14&15&19&32||26&31||23&24&25&36",
//{class}
"筛选类型名称": "",
"筛选类型替换词": "*",
//{area}
"筛选地区名称": "大陆&香港&台湾&美国&韩国&日本&泰国&新加坡&马来西亚&印度&英国&法国&加拿大&西班牙&俄罗斯&其它",
"筛选地区替换词": "*",
//{year}
"筛选年份名称": "",
"筛选年份替换词": "*",
//{lang}
"筛选语言名称": "",
"筛选语言替换词": "*",
//{by}
"筛选排序名称": "时间&人气&评分",
"筛选排序替换词": "time&hits&score",
"分类截取模式": "1",
"分类列表数组规则": ".index-area&&li",
"分类片单是否Jsoup写法": "1",
"分类片单标题": "a&&title",
"分类片单链接": "a&&href",
"分类片单图片": "img&&data-original",
"分类片单副标题": ".other&&Text",
"分类片单链接加前缀": "https://www.kykhd.cc",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机#Referer$https://www.kykhd.cc/",
"搜索链接": "https://www.kykhd.cc/index.php?m=vod-search-pg-1-wd-{wd}.html",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": ".index-area&&li",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": "img&&data-original",
"搜索片单标题": "a&&title",
"搜索片单链接": "a&&href",
"搜索片单副标题": ".other&&Text",
"搜索片单链接加前缀": "https://www.kykhd.cc",
"搜索片单链接加后缀": "",
"链接是否直接播放": "0",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法": "1",
"类型详情": "",
"年代详情": "",
"地区详情": "",
"演员详情": "",
"简介详情": ".ct-c&&.js&&Text",
"线路列表数组规则": ".playfrom&&li",
"线路标题": "Text",
"播放列表数组规则": "body&&.playlist",
"选集列表数组规则": "ul&&li",
"选集标题链接是否Jsoup写法": "1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "0",
"选集链接加前缀": "https://www.kykhd.cc",
"选集链接加后缀": "",
"分析MacPlayer": "0",
"是否开启手动嗅探": "0",
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
"手动嗅探视频链接过滤词": ".html#=http"
}

Some files were not shown because too many files have changed in this diff Show More