发布新版本,增加优选源功能

This commit is contained in:
晚风拂柳颜 2023-06-08 11:18:25 +08:00
parent 18fa2459d4
commit cb9275d5b7
12 changed files with 150 additions and 29 deletions

View File

@ -57,3 +57,4 @@ ALI_TOKEN = '' # 适用于初始配置的阿里云token
ENV = '{"bili_cookie":""}' # 自定义环境变量 ENV = '{"bili_cookie":""}' # 自定义环境变量
UPDATE_PROXY = 'https://ghproxy.net/' # 检测升级代理 UPDATE_PROXY = 'https://ghproxy.net/' # 检测升级代理
Thread = True # 开启windows多线程调用 Thread = True # 开启windows多线程调用
SPECIAL = '腾云驾雾:腾讯&奇珍异兽:爱奇艺&百忙无果:芒果&优酷&哔哩影视&Alist' # 特殊优选

View File

@ -235,6 +235,7 @@ def config_render(mode):
tt = time() tt = time()
UA = request.headers['User-Agent'] UA = request.headers['User-Agent']
ver = getParmas('ver') ver = getParmas('ver')
sp = getParmas('sp') # 优选
logger.info(f'ver:{ver},UA:{UA}') logger.info(f'ver:{ver},UA:{UA}')
if ver not in ['1','2']: if ver not in ['1','2']:
ISTVB = 'okhttp/3' in UA ISTVB = 'okhttp/3' in UA
@ -279,8 +280,12 @@ def config_render(mode):
merged_hide(merged_config) merged_hide(merged_config)
# response = make_response(html) # response = make_response(html)
# print(len(merged_config['sites'])) # print(len(merged_config['sites']))
print(merged_config['sites']) # print(merged_config['sites'])
merged_config['sites'] = sort_sites_by_order(merged_config['sites'],js_mode) merged_config['sites'] = sort_sites_by_order(merged_config['sites'],js_mode)
# print(merged_config['sites'])
if sp: # 执行动态优选源
special_rule(merged_config,lsg)
# print(merged_config['parses']) # print(merged_config['parses'])
parses = sort_parses_by_order(merged_config['parses'],host) parses = sort_parses_by_order(merged_config['parses'],host)
# print(parses) # print(parses)
@ -302,6 +307,23 @@ def config_render(mode):
logger.info(f'自动生成动态配置共计耗时:{get_interval(tt)}毫秒') logger.info(f'自动生成动态配置共计耗时:{get_interval(tt)}毫秒')
return response return response
def special_rule(merged_config,lsg):
# print(merged_config['sites'])
special = lsg.getItem('SPECIAL').strip()
# print('SPECIAL',special)
special_dict = {}
for sp in special.split('&'):
special_dict[sp.split(':')[0]] = sp.split(':')[1] if ':' in sp else ''
special_keys = list(special_dict.keys())
special_ft = list(filter(lambda x: x.get('key').replace('dr_', '') in special_keys, merged_config['sites']))
for spf in special_ft:
spf['name'] = special_dict[spf['key'].replace('dr_', '')] or spf['name']
special_st = sorted(special_ft, key=lambda x: special_keys.index(x.get('key').replace('dr_', '')))
merged_config['sites'] = special_st
merged_config['dr_count'] = len(special_st)
def comp(x, y): def comp(x, y):
if x['order'] > y['order']: if x['order'] > y['order']:
return 1 return 1

View File

@ -10,7 +10,8 @@ from models.ruleclass import RuleClass
from models.vipParse import VipParse from models.vipParse import VipParse
from utils.cfg import cfg from utils.cfg import cfg
from base.database import db from base.database import db
from datetime import datetime,timedelta from datetime import datetime, timedelta
class storage_service(object): class storage_service(object):
@ -21,8 +22,11 @@ class storage_service(object):
return copy_utils.obj_to_list(res) return copy_utils.obj_to_list(res)
def __init__(self): def __init__(self):
conf_list = ['LIVE_URL', 'USE_PY', 'JS_MODE','JS0_DISABLE','JS0_PASSWORD','PLAY_URL', 'PLAY_DISABLE', 'LAZYPARSE_MODE', 'WALL_PAPER_ENABLE', conf_list = ['LIVE_URL', 'USE_PY', 'JS_MODE', 'JS0_DISABLE', 'JS0_PASSWORD', 'PLAY_URL', 'PLAY_DISABLE',
'WALL_PAPER', 'UNAME', 'PWD', 'LIVE_MODE', 'CATE_EXCLUDE', 'TAB_EXCLUDE','SEARCH_TIMEOUT','SEARCH_LIMIT','MULTI_MODE','XR_MODE','JS_PROXY','UPDATE_PROXY','ENV','ALI_TOKEN','OCR_API'] 'LAZYPARSE_MODE', 'WALL_PAPER_ENABLE',
'WALL_PAPER', 'UNAME', 'PWD', 'LIVE_MODE', 'CATE_EXCLUDE', 'TAB_EXCLUDE', 'SEARCH_TIMEOUT',
'SEARCH_LIMIT', 'MULTI_MODE', 'XR_MODE', 'JS_PROXY', 'UPDATE_PROXY', 'ENV', 'ALI_TOKEN', 'OCR_API',
'SPECIAL']
for conf in conf_list: for conf in conf_list:
if not self.hasItem(conf): if not self.hasItem(conf):
print(f'开始初始化{conf}') print(f'开始初始化{conf}')
@ -31,10 +35,14 @@ class storage_service(object):
@classmethod @classmethod
def getStoreConf(self): def getStoreConf(self):
# MAX_CONTENT_LENGTH 最大上传和端口ip一样是顶级配置,无法外部修改的 # MAX_CONTENT_LENGTH 最大上传和端口ip一样是顶级配置,无法外部修改的
conf_list = ['LIVE_URL', 'LIVE_MODE','PLAY_URL', 'PID_URL','USE_PY','JS_MODE', 'JS0_DISABLE','JS0_PASSWORD','PLAY_DISABLE', 'LAZYPARSE_MODE', 'WALL_PAPER_ENABLE', conf_list = ['LIVE_URL', 'LIVE_MODE', 'PLAY_URL', 'PID_URL', 'USE_PY', 'JS_MODE', 'JS0_DISABLE', 'JS0_PASSWORD',
'WALL_PAPER', 'UNAME', 'PWD', 'CATE_EXCLUDE', 'TAB_EXCLUDE','SEARCH_TIMEOUT','SEARCH_LIMIT','MULTI_MODE','XR_MODE','JS_PROXY','UPDATE_PROXY','ENV','ALI_TOKEN','OCR_API'] 'PLAY_DISABLE', 'LAZYPARSE_MODE', 'WALL_PAPER_ENABLE',
conf_name_list = ['直播地址', '直播模式','远程地址', '进程管理链接','启用py源', 'js模式','禁用js0','js0密码','禁用免嗅', '免嗅模式', '启用壁纸', '壁纸链接', '管理账号', 'WALL_PAPER', 'UNAME', 'PWD', 'CATE_EXCLUDE', 'TAB_EXCLUDE', 'SEARCH_TIMEOUT', 'SEARCH_LIMIT',
'管理密码', '分类排除', '线路排除','聚搜超时','搜索条数','多源模式','仙人模式','源代理','升级代理','环境变量','阿里tk','OCR接口'] 'MULTI_MODE', 'XR_MODE', 'JS_PROXY', 'UPDATE_PROXY', 'ENV', 'SPECIAL', 'ALI_TOKEN', 'OCR_API']
conf_name_list = ['直播地址', '直播模式', '远程地址', '进程管理链接', '启用py源', 'js模式', '禁用js0',
'js0密码', '禁用免嗅', '免嗅模式', '启用壁纸', '壁纸链接', '管理账号',
'管理密码', '分类排除', '线路排除', '聚搜超时', '搜索条数', '多源模式', '仙人模式', '源代理',
'升级代理', '环境变量', '优选源', '阿里tk', 'OCR接口']
conf_lists = [] conf_lists = []
for i in range(len(conf_list)): for i in range(len(conf_list)):
conf = conf_list[i] conf = conf_list[i]
@ -55,7 +63,7 @@ class storage_service(object):
@classmethod @classmethod
def getItem(self, key, value=''): def getItem(self, key, value=''):
res = Storage.getItem(key,value) res = Storage.getItem(key, value)
if str(res) == '0' or str(res) == 'false' or str(res) == 'False': if str(res) == '0' or str(res) == 'false' or str(res) == 'False':
return 0 return 0
return res return res
@ -65,19 +73,20 @@ class storage_service(object):
return Storage.hasItem(key) return Storage.hasItem(key)
@classmethod @classmethod
def setItem(self,key, value): def setItem(self, key, value):
return Storage.setItem(key, value) return Storage.setItem(key, value)
@classmethod @classmethod
def clearItem(self,key): def clearItem(self, key):
return Storage.clearItem(key) return Storage.clearItem(key)
class rules_service(object): class rules_service(object):
@staticmethod @staticmethod
def query_all(): def query_all():
# 查询所有 # 查询所有
res = RuleClass.query.order_by(RuleClass.order.asc(),RuleClass.write_date.desc()).all() res = RuleClass.query.order_by(RuleClass.order.asc(), RuleClass.write_date.desc()).all()
# print(res) # print(res)
# res = RuleClass.query.order_by(RuleClass.write_date.asc()).all() # res = RuleClass.query.order_by(RuleClass.write_date.asc()).all()
return copy_utils.obj_to_list(res) return copy_utils.obj_to_list(res)
@ -86,7 +95,7 @@ class rules_service(object):
def hasItem(self, key): def hasItem(self, key):
return RuleClass.hasItem(key) return RuleClass.hasItem(key)
def getState(self,key): def getState(self, key):
res = RuleClass.query.filter(RuleClass.name == key).first() res = RuleClass.query.filter(RuleClass.name == key).first()
if not res: if not res:
return 1 return 1
@ -96,8 +105,7 @@ class rules_service(object):
state = 1 state = 1
return state or 0 return state or 0
def setState(self, key, state=0):
def setState(self,key,state=0):
res = RuleClass.query.filter(RuleClass.name == key).first() res = RuleClass.query.filter(RuleClass.name == key).first()
if res: if res:
res.state = state res.state = state
@ -113,7 +121,7 @@ class rules_service(object):
print(f'发生了错误:{e}') print(f'发生了错误:{e}')
return None return None
def setOrder(self,key,order=0): def setOrder(self, key, order=0):
res = RuleClass.query.filter(RuleClass.name == key).first() res = RuleClass.query.filter(RuleClass.name == key).first()
if res: if res:
res.order = order res.order = order
@ -138,12 +146,13 @@ class rules_service(object):
res = RuleClass.query.filter(RuleClass.state == 0).all() res = RuleClass.query.filter(RuleClass.state == 0).all()
return copy_utils.obj_to_list(res) return copy_utils.obj_to_list(res)
class parse_service(object): class parse_service(object):
@staticmethod @staticmethod
def query_all(): def query_all():
# 查询所有 # 查询所有
res = VipParse.query.order_by(VipParse.order.asc(),VipParse.write_date.desc()).all() res = VipParse.query.order_by(VipParse.order.asc(), VipParse.write_date.desc()).all()
# print(res) # print(res)
# res = RuleClass.query.order_by(RuleClass.write_date.asc()).all() # res = RuleClass.query.order_by(RuleClass.write_date.asc()).all()
return copy_utils.obj_to_list(res) return copy_utils.obj_to_list(res)
@ -152,7 +161,7 @@ class parse_service(object):
def hasItem(self, key): def hasItem(self, key):
return VipParse.hasItem(key) return VipParse.hasItem(key)
def getState(self,key): def getState(self, key):
res = VipParse.query.filter(VipParse.url == key).first() res = VipParse.query.filter(VipParse.url == key).first()
if not res: if not res:
return 1 return 1
@ -162,8 +171,7 @@ class parse_service(object):
state = 1 state = 1
return state or 0 return state or 0
def setState(self, key, state=0):
def setState(self,key,state=0):
res = VipParse.query.filter(VipParse.url == key).first() res = VipParse.query.filter(VipParse.url == key).first()
if res: if res:
res.state = state res.state = state
@ -179,7 +187,7 @@ class parse_service(object):
print(f'发生了错误:{e}') print(f'发生了错误:{e}')
return None return None
def setOrder(self,key,order=0): def setOrder(self, key, order=0):
res = VipParse.query.filter(VipParse.url == key).first() res = VipParse.query.filter(VipParse.url == key).first()
if res: if res:
res.order = order res.order = order
@ -199,7 +207,7 @@ class parse_service(object):
print(f'发生了错误:{e}') print(f'发生了错误:{e}')
return None return None
def setEverything(self,key,name,state,typeno,order,ext,header): def setEverything(self, key, name, state, typeno, order, ext, header):
res = VipParse.query.filter(VipParse.url == key).first() res = VipParse.query.filter(VipParse.url == key).first()
if res: if res:
res.name = name res.name = name
@ -211,7 +219,7 @@ class parse_service(object):
res.write_date = datetime.now() res.write_date = datetime.now()
db.session.add(res) db.session.add(res)
else: else:
res = VipParse(name=name,url=key,state=state,type=typeno,order=order,ext=ext,header=header) res = VipParse(name=name, url=key, state=state, type=typeno, order=order, ext=ext, header=header)
db.session.add(res) db.session.add(res)
db.session.flush() # 获取id db.session.flush() # 获取id
try: try:
@ -221,7 +229,7 @@ class parse_service(object):
print(f'发生了错误:{e}') print(f'发生了错误:{e}')
return None return None
def saveData(self,obj): def saveData(self, obj):
""" """
db.session.add_all([]) 可以一次性保存多条数据,但是这里用不到,因为涉及修改和新增一起的 db.session.add_all([]) 可以一次性保存多条数据,但是这里用不到,因为涉及修改和新增一起的
:param obj: :param obj:

View File

@ -1,3 +1,12 @@
###### 2023/06/08
- [X] 后台管理增加优选源功能。参考config.py进行配置优选源参数
配置好优选源后在动态的在线配置链接ver=2后面添加参数 &sp=1 可以开启优选结果
填写示例:
```text
腾云驾雾:腾讯&奇珍异兽:爱奇艺&百忙无果:芒果&优酷&哔哩影视&Alist
```
说明,每个源按&分开,按:起别名。如果没:就按原名称显示。
###### 2023/06/07 ###### 2023/06/07
- [X] 后台管理增加p2p播放器 - [X] 后台管理增加p2p播放器
- [X] 3.9.43beta1 drpy新增hostJs属性可以用js动态捕捉网页根地址下面是一个示例 - [X] 3.9.43beta1 drpy新增hostJs属性可以用js动态捕捉网页根地址下面是一个示例

View File

@ -1 +1 @@
3.9.43beta2 3.9.43beta3

29
js/咕噜.js Normal file
View File

@ -0,0 +1,29 @@
var rule = {
title: '咕噜', // csp_AppYsV2
host: 'https://w.996w.top',
homeUrl:'/api.php/app/index_video',
// url: '/api.php/app/video?tid=fyclass&class=&area=&lang=&year=&limit=20&pg=fypage',
url: '/api.php/app/video?tid=fyclassfyfilter&limit=20&pg=fypage',
filter_url:'&class={{fl.class}}&area={{fl.area}}&lang={{fl.lang}}&year={{fl.year}}',
filter: {
"1":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"喜剧","v":"喜剧"},{"n":"爱情","v":"爱情"},{"n":"恐怖","v":"恐怖"},{"n":"动作","v":"动作"},{"n":"科幻","v":"科幻"},{"n":"剧情","v":"剧情"},{"n":"战争","v":"战争"},{"n":"警匪","v":"警匪"},{"n":"犯罪","v":"犯罪"},{"n":"动画","v":"动画"},{"n":"奇幻","v":"奇幻"},{"n":"武侠","v":"武侠"},{"n":"冒险","v":"冒险"},{"n":"枪战","v":"枪战"},{"n":"恐怖","v":"恐怖"},{"n":"悬疑","v":"悬疑"},{"n":"惊悚","v":"惊悚"},{"n":"经典","v":"经典"},{"n":"青春","v":"青春"},{"n":"文艺","v":"文艺"},{"n":"微电影","v":"微电影"},{"n":"古装","v":"古装"},{"n":"历史","v":"历史"},{"n":"运动","v":"运动"},{"n":"农村","v":"农村"},{"n":"儿童","v":"儿童"},{"n":"网络电影","v":"网络电影"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"美国","v":"美国"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"意大利","v":"意大利"},{"n":"西班牙","v":"西班牙"},{"n":"加拿大","v":"加拿大"},{"n":"其他","v":"其他"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"法语","v":"法语"},{"n":"德语","v":"德语"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"}]}],
"2":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"古装","v":"古装"},{"n":"战争","v":"战争"},{"n":"青春偶像","v":"青春偶像"},{"n":"喜剧","v":"喜剧"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"动作","v":"动作"},{"n":"奇幻","v":"奇幻"},{"n":"剧情","v":"剧情"},{"n":"历史","v":"历史"},{"n":"经典","v":"经典"},{"n":"乡村","v":"乡村"},{"n":"情景","v":"情景"},{"n":"商战","v":"商战"},{"n":"网剧","v":"网剧"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"韩国","v":"韩国"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"日本","v":"日本"},{"n":"美国","v":"美国"},{"n":"泰国","v":"泰国"},{"n":"英国","v":"英国"},{"n":"新加坡","v":"新加坡"},{"n":"其他","v":"其他"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"}]}],
"4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"情感","v":"情感"},{"n":"科幻","v":"科幻"},{"n":"热血","v":"热血"},{"n":"推理","v":"推理"},{"n":"搞笑","v":"搞笑"},{"n":"冒险","v":"冒险"},{"n":"萝莉","v":"萝莉"},{"n":"校园","v":"校园"},{"n":"动作","v":"动作"},{"n":"机战","v":"机战"},{"n":"运动","v":"运动"},{"n":"战争","v":"战争"},{"n":"少年","v":"少年"},{"n":"少女","v":"少女"},{"n":"社会","v":"社会"},{"n":"原创","v":"原创"},{"n":"亲子","v":"亲子"},{"n":"益智","v":"益智"},{"n":"励志","v":"励志"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"国产","v":"国产"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"}]}]
},
detailUrl:'/api.php/app/video_detail?id=fyid',
searchUrl: '/api.php/app/search?text=**&pg=fypage',
searchable: 2,
quickSearch: 0,
filterable:1,//是否启用分类筛选,
headers:{'User-Agent':'Dart/2.10 (dart:io)'},
timeout:5000,
class_name:'电影&剧集&综艺&动漫',
class_url:'1&2&3&4',
play_parse:true,
lazy:"js:var html=JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);var url=html.url;if(html.encrypt=='1'){url=unescape(url)}else if(html.encrypt=='2'){url=unescape(base64Decode(url))}if(/m3u8|mp4/.test(url)){input=url}else{input}",
limit:6,
推荐:'json:list[0].vlist;*;*;*;*',
一级:'json:list;vod_name;vod_pic;vod_remarks||vod_score;vod_id',
二级:'js:try{let html=request(input);print(html);html=JSON.parse(html);let node=html.data;VOD={vod_id:node["vod_id"],vod_name:node["vod_name"],vod_pic:node["vod_pic"],type_name:node["vod_class"],vod_year:node["vod_year"],vod_area:node["vod_area"],vod_remarks:node["vod_remarks"],vod_actor:node["vod_actor"],vod_director:node["vod_director"],vod_content:node["vod_content"].strip()};let episodes=node.vod_url_with_player;let playMap={};if(typeof play_url==="undefined"){var play_url="code"}episodes.forEach(function(ep){let source=ep["name"];if(!playMap.hasOwnProperty(source)){playMap[source]=[]}playMap[source].append(ep["url"])});let playFrom=[];let playList=[];Object.keys(playMap).forEach(function(key){playFrom.append(key);playList.append(playMap[key])});let vod_play_from=playFrom.join("$$$");let vod_play_url=playList.join("$$$");VOD["vod_play_from"]=vod_play_from;VOD["vod_play_url"]=vod_play_url}catch(e){log("获取二级详情页发生错误:"+e.message)}',
搜索:'*',
}

25
js/奈飞中文.js Normal file
View File

@ -0,0 +1,25 @@
var rule={
title: '奈飞中文',
host: 'https://www.naifei.io',
url: '/vodshow/id/fyclass/page/fypage.html',
searchUrl: '/search/**----------fypage---.html',
searchable: 2,//是否启用全局搜索,
quickSearch: 0,//是否启用快速搜索,
filterable: 0,//是否启用分类筛选,
class_parse: '.nav-menu-items&&li;a&&Text;a&&href;.*/(.*?).html',
play_parse: true,
lazy: '',
limit: 6,
推荐: '.module-list;.module-items&&.module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
double: true, // 推荐内容是否双层定位
一级: '.module-items .module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
二级: {
"title": "h1&&Text;.tag-link&&Text",
"img": ".module-item-pic&&img&&data-src",
"desc": ".video-info-aux&&.tag-link&&Text;.video-info-aux&&a:eq(1)&&Text;.video-info-items:eq(2)&&Text;.video-info-items:eq(5)&&Text",
"content": ".vod_content&&Text",
"tabs": ".module-tab-item",
"lists": ".module-player-list:eq(#id)&&.scroll-content&&a"
},
搜索: '.module-items .module-search-item;a&&title;img&&data-src;.video-serial&&Text;a&&href',
}

25
js/西瓜影院.js Normal file
View File

@ -0,0 +1,25 @@
var rule={
title: '西瓜影院',
host: 'https://www.uccomic.com',
url: '/vodshow/fyclass--------fypage---/',
searchUrl: '/index.php/ajax/suggest?mid=1&wd=**',
searchable: 2,//是否启用全局搜索,
quickSearch: 0,//是否启用快速搜索,
filterable: 0,//是否启用分类筛选,
class_parse: '.menulist.hidden-xs li:gt(0):lt(5);a&&Text;a&&href;.*/(.*?)/',
play_parse: true,
lazy: '',
limit: 6,
推荐: 'body&&.col-md-2.col-sm-3.col-xs-4;a&&title;a&&data-original;.note.textbg&&Text;a&&href',
//double: true, // 推荐内容是否双层定位
一级: 'body&&.col-md-2.col-sm-3.col-xs-4;a&&title;a&&data-original;.note.textbg&&Text;a&&href',
二级: {
"title": "h3&&Text",
"img": "",
"desc": "",
"content": "",
"tabs": ".option",
"lists": ".playlistlink-1:eq(#id) li"
},
搜索:'json:list;name;pic;;id',
}

View File

@ -1260,7 +1260,7 @@ function homeVodParse(homeVodObj){
if(p.startsWith('js:')){ if(p.startsWith('js:')){
const TYPE = 'home'; const TYPE = 'home';
var input = MY_URL; var input = MY_URL;
const HOST = rule.host; HOST = rule.host;
eval(p.replace('js:','')); eval(p.replace('js:',''));
d = VODS; d = VODS;
}else { }else {
@ -2148,6 +2148,7 @@ function playParse(playObj){
rule.host = (rule.host||'').rstrip('/'); rule.host = (rule.host||'').rstrip('/');
HOST = rule.host; HOST = rule.host;
if(rule.hostJs){ if(rule.hostJs){
console.log(`检测到hostJs,准备执行...`);
try { try {
eval(rule.hostJs); eval(rule.hostJs);
rule.host = HOST.rstrip('/'); rule.host = HOST.rstrip('/');

2
libs/drpy.min.js vendored

File diff suppressed because one or more lines are too long

View File

@ -1163,7 +1163,7 @@ function homeVodParse(homeVodObj){
if(p.startsWith('js:')){ if(p.startsWith('js:')){
const TYPE = 'home'; const TYPE = 'home';
var input = MY_URL; var input = MY_URL;
const HOST = rule.host; HOST = rule.host;
eval(p.replace('js:','')); eval(p.replace('js:',''));
d = VODS; d = VODS;
}else { }else {
@ -2015,6 +2015,7 @@ function init(ext) {
rule.host = (rule.host||'').rstrip('/'); rule.host = (rule.host||'').rstrip('/');
HOST = rule.host; HOST = rule.host;
if(rule.hostJs){ if(rule.hostJs){
console.log(`检测到hostJs,准备执行...`);
try { try {
eval(rule.hostJs); eval(rule.hostJs);
rule.host = HOST.rstrip('/'); rule.host = HOST.rstrip('/');

2
libs/drpy2.min.js vendored

File diff suppressed because one or more lines are too long