updated drpy
5
JN/dr_py/.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
/tmp/dr_py-main/
|
||||
/tmp/dr_py.zip
|
||||
/logs/dr.log
|
||||
/static/js/.idea/
|
||||
/.idea/
|
BIN
JN/dr_py/404.jpg
Normal file
After Width: | Height: | Size: 201 KiB |
165
JN/dr_py/LICENSE
Normal file
@ -0,0 +1,165 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates
|
||||
the terms and conditions of version 3 of the GNU General Public
|
||||
License, supplemented by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||
General Public License.
|
||||
|
||||
"The Library" refers to a covered work governed by this License,
|
||||
other than an Application or a Combined Work as defined below.
|
||||
|
||||
An "Application" is any work that makes use of an interface provided
|
||||
by the Library, but which is not otherwise based on the Library.
|
||||
Defining a subclass of a class defined by the Library is deemed a mode
|
||||
of using an interface provided by the Library.
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an
|
||||
Application with the Library. The particular version of the Library
|
||||
with which the Combined Work was made is also called the "Linked
|
||||
Version".
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the
|
||||
Corresponding Source for the Combined Work, excluding any source code
|
||||
for portions of the Combined Work that, considered in isolation, are
|
||||
based on the Application, and not on the Linked Version.
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the
|
||||
object code and/or source code for the Application, including any data
|
||||
and utility programs needed for reproducing the Combined Work from the
|
||||
Application, but excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License
|
||||
without being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a
|
||||
facility refers to a function or data to be supplied by an Application
|
||||
that uses the facility (other than as an argument passed when the
|
||||
facility is invoked), then you may convey a copy of the modified
|
||||
version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to
|
||||
ensure that, in the event an Application does not supply the
|
||||
function or data, the facility still operates, and performs
|
||||
whatever part of its purpose remains meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of
|
||||
this License applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from
|
||||
a header file that is part of the Library. You may convey such object
|
||||
code under terms of your choice, provided that, if the incorporated
|
||||
material is not limited to numerical parameters, data structure
|
||||
layouts and accessors, or small macros, inline functions and templates
|
||||
(ten or fewer lines in length), you do both of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the
|
||||
Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that,
|
||||
taken together, effectively do not restrict modification of the
|
||||
portions of the Library contained in the Combined Work and reverse
|
||||
engineering for debugging such modifications, if you also do each of
|
||||
the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that
|
||||
the Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during
|
||||
execution, include the copyright notice for the Library among
|
||||
these notices, as well as a reference directing the user to the
|
||||
copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this
|
||||
License, and the Corresponding Application Code in a form
|
||||
suitable for, and under terms that permit, the user to
|
||||
recombine or relink the Application with a modified version of
|
||||
the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying
|
||||
Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (a) uses at run time
|
||||
a copy of the Library already present on the user's computer
|
||||
system, and (b) will operate properly with a modified version
|
||||
of the Library that is interface-compatible with the Linked
|
||||
Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise
|
||||
be required to provide such information under section 6 of the
|
||||
GNU GPL, and only to the extent that such information is
|
||||
necessary to install and execute a modified version of the
|
||||
Combined Work produced by recombining or relinking the
|
||||
Application with a modified version of the Linked Version. (If
|
||||
you use option 4d0, the Installation Information must accompany
|
||||
the Minimal Corresponding Source and Corresponding Application
|
||||
Code. If you use option 4d1, you must provide the Installation
|
||||
Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
You may place library facilities that are a work based on the
|
||||
Library side by side in a single library together with other library
|
||||
facilities that are not Applications and are not covered by this
|
||||
License, and convey such a combined library under terms of your
|
||||
choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based
|
||||
on the Library, uncombined with any other library facilities,
|
||||
conveyed under the terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it
|
||||
is a work based on the Library, and explaining where to find the
|
||||
accompanying uncombined form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU Lesser General Public License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Library as you received it specifies that a certain numbered version
|
||||
of the GNU Lesser General Public License "or any later version"
|
||||
applies to it, you have the option of following the terms and
|
||||
conditions either of that published version or of any later version
|
||||
published by the Free Software Foundation. If the Library as you
|
||||
received it does not specify a version number of the GNU Lesser
|
||||
General Public License, you may choose any version of the GNU Lesser
|
||||
General Public License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide
|
||||
whether future versions of the GNU Lesser General Public License shall
|
||||
apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the
|
||||
Library.
|
91
JN/dr_py/app.py
Normal file
@ -0,0 +1,91 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# File : app.py
|
||||
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
|
||||
# Date : 2022/9/6
|
||||
|
||||
from flask.app import Flask
|
||||
from flask_migrate import Migrate
|
||||
from base import config
|
||||
from base.database import db
|
||||
from utils.log import logger
|
||||
from utils.system import get_wlan_info, getHost
|
||||
from controllers import *
|
||||
from js.rules import getRuleLists
|
||||
import sys
|
||||
|
||||
|
||||
def create_flask_app():
|
||||
app = Flask(__name__, static_folder='static', static_url_path='/static')
|
||||
app.config.from_object(config) # 单独的配置文件里写了,这里就不用弄json中文显示了
|
||||
app.register_blueprint(home.home, url_prefix='')
|
||||
app.register_blueprint(admin.admin, url_prefix='/admin')
|
||||
app.register_blueprint(vod.vod, url_prefix='')
|
||||
app.register_blueprint(cls.cls, url_prefix='/cls')
|
||||
app.register_blueprint(layui.layui, url_prefix='/layui')
|
||||
app.register_blueprint(parse.parse, url_prefix='/parse')
|
||||
# app.register_blueprint(web.web, url_prefix='/web',template_folder='templates/cmsV10/mxpro/html/index/')
|
||||
app.register_blueprint(web.web, url_prefix='/web')
|
||||
app.logger.name = "drLogger"
|
||||
# lsg = service.storage_service()
|
||||
logger.info(f"默认解析地址:{app.config.get('PLAY_URL')}")
|
||||
# logger.info(f"自定义播放解析地址:{lsg.getItem('PLAY_URL')}")
|
||||
logger.info(f'当前操作系统{sys.platform}')
|
||||
rule_list = getRuleLists()
|
||||
wlan_info, _ = get_wlan_info()
|
||||
logger.info(rule_list)
|
||||
logger.info(
|
||||
f'局域网: {getHost(1, app.config.get("HTTP_PORT"))}/index\n本地: {getHost(0, app.config.get("HTTP_PORT"))}/index\nwlan_info:{wlan_info}')
|
||||
db.init_app(app)
|
||||
db.app = app
|
||||
db.create_all(app=app)
|
||||
return app
|
||||
|
||||
|
||||
app = create_flask_app()
|
||||
migrate = Migrate(app, db)
|
||||
max_version = (3, 11) # 小于3.11的版本(3.6-3.10)
|
||||
max_version_str = ".".join([str(i) for i in max_version])
|
||||
now_python_ver = ".".join([str(i) for i in sys.version_info[:3]])
|
||||
no_error = True
|
||||
if sys.version_info < max_version:
|
||||
try:
|
||||
from gevent.pywsgi import WSGIServer
|
||||
|
||||
# from gevent import monkey
|
||||
# monkey.patch_all() # 多线程,只能放在最开头,import其它包之前
|
||||
|
||||
from gevent import monkey
|
||||
|
||||
monkey.patch_socket() # 开启socket异步
|
||||
print(f'当前python版本{now_python_ver}为{max_version_str}及以下,支持gevent')
|
||||
|
||||
except Exception as e:
|
||||
print(f'gevent使用过程中发生了错误:{e}')
|
||||
no_error = False
|
||||
else:
|
||||
print(f'当前python版本{now_python_ver}为{max_version_str}及以上,不支持gevent')
|
||||
|
||||
if __name__ == "__main__":
|
||||
http_port = int(app.config.get('HTTP_PORT', 5705))
|
||||
http_host = app.config.get('HTTP_HOST', '0.0.0.0')
|
||||
threaded = app.config.get('THREAD')
|
||||
GEVENT = app.config.get('GEVENT')
|
||||
print(GEVENT)
|
||||
if threaded is None:
|
||||
threaded = True
|
||||
if GEVENT is None:
|
||||
debug = False
|
||||
# https://www.zhihu.com/question/64096559
|
||||
print(f'threaded:{threaded},GEVENT:{GEVENT}')
|
||||
# if sys.version_info < (3, 9) and not sys.platform.startswith('win'):
|
||||
use_gevent = sys.version_info < max_version # 是否使用协程
|
||||
is_debug = (not GEVENT) and sys.platform.startswith('win') # windows开调试模式
|
||||
print(f'开启调试模式:{is_debug}')
|
||||
if use_gevent and no_error and not is_debug:
|
||||
# server = WSGIServer(('0.0.0.0', 5705), app, handler_class=WebSocketHandler,log=app.logger)
|
||||
# server = WSGIServer(('0.0.0.0', 5705), app, handler_class=WebSocketHandler,log=None)
|
||||
server = WSGIServer((http_host, http_port), app, log=logger)
|
||||
server.serve_forever()
|
||||
else:
|
||||
app.run(debug=False, host=http_host, port=http_port, threaded=threaded)
|
34
JN/dr_py/app.sh
Normal file
@ -0,0 +1,34 @@
|
||||
#!/bin/bash
|
||||
#kill -9 $(cat supervisord.pid) # 杀掉进程
|
||||
msg='flask或0 ubuntu下自动识别gevent或普通启动flask\nsflask或1 ubuntu下gunicorn启动flask\ntermux或2 termux下自动识别gevent或普通启动flask\nstermux或3 termux下gunicorn启动flask\n'
|
||||
case "$1" in
|
||||
flask)
|
||||
supervisord -c ./super/flask.conf
|
||||
;;
|
||||
0)
|
||||
supervisord -c ./super/flask.conf
|
||||
;;
|
||||
sflask)
|
||||
supervisord -c ./super/sflask.conf
|
||||
;;
|
||||
1)
|
||||
supervisord -c ./super/sflask.conf
|
||||
;;
|
||||
termux)
|
||||
supervisord -c ./super/termux.conf
|
||||
;;
|
||||
2)
|
||||
supervisord -c ./super/termux.conf
|
||||
;;
|
||||
stermux)
|
||||
supervisord -c ./super/stermux.conf
|
||||
;;
|
||||
3)
|
||||
supervisord -c ./super/stermux.conf
|
||||
;;
|
||||
*)
|
||||
echo -e $msg
|
||||
;;
|
||||
esac
|
||||
# 保留一个 bash
|
||||
/bin/bash
|
54
JN/dr_py/base/R.py
Normal file
@ -0,0 +1,54 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# File : R.py
|
||||
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
|
||||
# Date : 2022/9/6
|
||||
|
||||
from flask import jsonify
|
||||
|
||||
class copy_utils:
|
||||
|
||||
@staticmethod
|
||||
def obj_to_dic(obj):
|
||||
'''
|
||||
将传入的data对象转成字典
|
||||
'''
|
||||
result = {}
|
||||
for temp in obj.__dict__:
|
||||
if temp.startswith('_') or temp == 'metadata':
|
||||
continue
|
||||
result[temp] = getattr(obj, temp)
|
||||
return result
|
||||
|
||||
@staticmethod
|
||||
def obj_to_list(list_obj):
|
||||
'''
|
||||
将传入的data对象转成List,list中的元素是字典
|
||||
'''
|
||||
result = []
|
||||
for obj in list_obj:
|
||||
result.append(copy_utils.obj_to_dic(obj))
|
||||
return result
|
||||
|
||||
|
||||
class R(object):
|
||||
|
||||
@classmethod
|
||||
def ok(self,msg='操作成功',data=None):
|
||||
if not data:
|
||||
data = []
|
||||
result = {"code": 200, "msg": msg, "data": data,"count":len(data)}
|
||||
return jsonify(result)
|
||||
|
||||
@classmethod
|
||||
def error(self,msg="系统异常",code=404):
|
||||
result = {"code": code, "msg": msg}
|
||||
return jsonify(result)
|
||||
|
||||
@classmethod
|
||||
def success(self,msg='操作成功', data=None):
|
||||
return self.ok(msg,data)
|
||||
|
||||
@classmethod
|
||||
def failed(self,msg="系统异常", code=404):
|
||||
return self.error(msg,code)
|
9
JN/dr_py/base/__init__.py
Normal file
@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# File : __init__.py
|
||||
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
|
||||
# Date : 2022/9/6
|
||||
|
||||
from . import database
|
||||
from . import config
|
||||
from . import R
|
10
JN/dr_py/base/alist.conf
Normal file
@ -0,0 +1,10 @@
|
||||
# c=[];for(let i in a){c.push(i+','+a[i])}d=c.join('\n');console.log(d);
|
||||
🙋丫仙女,http://alist.xiaoya.pro/
|
||||
🐋一只鱼,https://alist.youte.ml
|
||||
🌊七米蓝,https://al.chirmyram.com
|
||||
🌴非盘,http://www.feifwp.top
|
||||
🥼帅盘,https://hi.shuaipeng.wang
|
||||
🐉神族九帝,https://alist.shenzjd.com
|
||||
☃姬路白雪,https://pan.jlbx.xyz
|
||||
🎧听闻网盘,https://wangpan.sangxuesheng.com
|
||||
✨星梦,https://pan.bashroot.top
|
63
JN/dr_py/base/config.py
Normal file
@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# File : config.py
|
||||
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
|
||||
# Date : 2022/9/6
|
||||
|
||||
DIALECT = 'mysql'
|
||||
DRIVER = 'pymysql'
|
||||
USERNAME = 'gp'
|
||||
PASSWORD = '123456'
|
||||
HOST = '127.0.0.1'
|
||||
PORT = '3306'
|
||||
DATABASE = 'pira'
|
||||
# DB_URI = '{}+{}://{}:{}@{}:{}/{}?charset=utf8'.format(DIALECT, DRIVER, USERNAME, PASSWORD, HOST, PORT, DATABASE)
|
||||
# DB_URI = 'sqlite:///models/rules.db?charset=utf8&check_same_thread=False'
|
||||
DB_URI = 'sqlite:///base/rules.db?charset=utf8&check_same_thread=False'
|
||||
SQLALCHEMY_DATABASE_URI = DB_URI
|
||||
SQLALCHEMY_TRACK_MODIFICATIONS = False
|
||||
SQLALCHEMY_ECHO = False # 打印sql语句
|
||||
JSON_AS_ASCII = False # jsonify返回的中文正常显示
|
||||
PLAY_URL = 'http://cms.nokia.press' # 匹配远程解析服务器链接 远程接口主页地址,后面不能有/
|
||||
PLAY_URL = PLAY_URL.rstrip('/')
|
||||
PID_URL = '' # 自定义的9001进程管理快捷方式
|
||||
PID_URL = PID_URL.rstrip('/')
|
||||
HTTP_HOST = '0.0.0.0'
|
||||
HTTP_PORT = '5705'
|
||||
PLAY_DISABLE = False # 全局禁用播放解析
|
||||
LAZYPARSE_MODE = 1 # 播放解析模式(0 本地 1 局域网 2远程 仅在全局禁用为False的时候生效)
|
||||
WALL_PAPER_ENABLE = True # 启用自定义壁纸
|
||||
# WALL_PAPER = "https://picsum.photos/1280/720/?blur=10" # 自定义壁纸,可注释
|
||||
WALL_PAPER = "https://tuapi.eees.cc/api.php?category=fengjing&type=302" # 自定义壁纸,可注释
|
||||
SUP_PORT = 9001 # supervisord 服务端口
|
||||
RETRY_CNT = 3 # 验证码重试次数
|
||||
# OCR_API = 'http://192.168.3.224:9000/api/ocr_img' # 验证码识别接口,传参数data
|
||||
# OCR_API = 'http://dm.mudery.com:10000' # 验证码识别接口,传参数data
|
||||
OCR_API = 'https://api.nn.ci/ocr/b64/text' # 验证码识别接口,传参数data
|
||||
UNAME = 'admin' # 管理员账号
|
||||
PWD = 'drpy' # 管理员密码
|
||||
USE_PY = 0 # 开启py源
|
||||
JS0_DISABLE = 0 # 禁用js0
|
||||
JS0_PASSWORD = '' # js0密码
|
||||
JS_MODE = 0 # js模式 0 drpy服务器解析 1 pluto本地解析
|
||||
MAX_CONTENT_LENGTH = 1 * 1024 * 100 # 100 kB
|
||||
LIVE_MODE = 0 # 0 本地 1外网
|
||||
# LIVE_URL = 'https://gitcode.net/bd/v/-/raw/main/live/zb.txt' # 初始化外网直播地址(后续在管理界面改)
|
||||
# LIVE_URL = 'https://agit.ai/hu/hcr/raw/commit/f8e9c10309a533e5b06df133f859c45cb91f4731/0ER.txt' # 月光直播接口
|
||||
LIVE_URL = 'https://raw.fastgit.org/zhanghong1983/TVBOXZY/main/TV/live.txt' # 初始化外网直播地址(后续在管理界面改)
|
||||
CATE_EXCLUDE = '首页|留言|APP|下载|资讯|新闻|动态|明星|专题|最新|排行|解析' # 动态分类过滤
|
||||
TAB_EXCLUDE = '猜你|喜欢|下载|剧情|简介|排序' # 动态线路名过滤
|
||||
# {% if config.WALL_PAPER %}"wallpaper":"{{ config.WALL_PAPER }}",{% endif %}
|
||||
SEARCH_TIMEOUT = 5000 # 聚搜超时毫秒
|
||||
SEARCH_LIMIT = 24 # 聚搜限制条数
|
||||
MULTI_MODE = 0 # 多源模式
|
||||
XR_MODE = 1 # 仙人模式
|
||||
JS_PROXY = 'http://localhost:5705/admin/view/=>https://ghproxy.net/https://raw.githubusercontent.com/hjdhnx/dr_py/main/js/' # 源代理
|
||||
ALI_TOKEN = '' # 适用于初始配置的阿里云token
|
||||
ENV = '{"bili_cookie":""}' # 自定义环境变量
|
||||
UPDATE_PROXY = 'https://ghproxy.net/' # 检测升级代理
|
||||
THREAD = True # 开启windows多线程调用
|
||||
GEVENT = True # windows开启此参数就不走gevent,方便调试
|
||||
SPECIAL = '腾云驾雾:腾讯&奇珍异兽:爱奇艺&百忙无果:芒果&优酷&哔哩影视&Alist&CMS_非凡资源:非凡&CMS_量子资源:量子' # 特殊优选
|
||||
SPIDER_JAR = 'custom_spider_qy0627.jar'
|
||||
EXT_FUNC = '[{"host":"ss.rongliren.com","rule":["m3u8?id="]},{"host":"hei17.com","rule":["img.hei17.com","storage/uploads/",".m3u8$"]},{"name":"量子","hosts":["vip.lz","hd.lz"],"regex":["#EXT-X-DISCONTINUITY\\\\r*\\\\n*#EXTINF:6.433333,[\\\\s\\\\S]*?#EXT-X-DISCONTINUITY"]},{"name":"非凡","hosts":["vip.ffzy","hd.ffzy"],"regex":["#EXT-X-DISCONTINUITY\\\\r*\\\\n*#EXTINF:6.666667,[\\\\s\\\\S]*?#EXT-X-DISCONTINUITY"]},{"host":"piaku.cc","rule":[".mp4",".m3u8","?auth_token","m3u8"]},{"host":"v.3412.net.cn","rule":[".mp4","security-token=","aliyuncs.com","m3u8"]},{"host":"jx.jsonplayer.com","rule":[".mp4",".m3u8","?vkey=","110.42.2.115","m3u8"]},{"host":"movie.bulei.cc","rule":[".mp4",".m3u8","?vkey=","1ftn_handler","http://1.71.18.153","mu.dcd1.cn","aliyundrive.net","m3u8"]},{"host":"rebozj.pro","rule":[".mp4",".m3u8","https://p3-sign.douyinpic.com","m3u8"]},{"host":"brovod.com","rule":[".m3u8"]},{"host":"https://www1.gntv.live","rule":[".m3u8","m3u8?","4k.clyjx.cn:97"]},{"host":"renren.pro","rule":[".m3u8"]},{"host":"https://v.3412.net.cn","rule":[".m3u8",".m3u8?",".mp4"]},{"host":"v.t-ui.cn","rule":[".m3u8","m3u8?","vip.ffzy-play4.com"]},{"host":"cj.ffzyapi.com","rule":[".m3u8","m3u8?"]},{"host":"siguyy.com","rule":["mp4",".m3u8","https://ccp-bj29-video-preview.oss-enet.aliyuncs.com","aliyuncs.com"]},{"name":"火山嗅探","hosts":["huoshan.com"],"regex":["item_id="]},{"name":"抖音嗅探","hosts":["douyin.com"],"regex":["is_play_url="]}]'
|
312
JN/dr_py/base/custom.conf
Normal file
@ -0,0 +1,312 @@
|
||||
# 这是一个自定义的额外用户爬虫配置
|
||||
# 自动附加到config/mode 对应的在线源里
|
||||
# 可以使用Python的 # 单行注释
|
||||
|
||||
{
|
||||
# "spider": "{{host}}/libs/jar/custom_spider.jar",
|
||||
"parses":[
|
||||
{"name":"keyu","type":1,"url":"http://newjiexi.gotka.top/keyu3.php?url=","ext":{"flag":["qq","腾讯","qiyi","爱奇艺","奇艺","youku","优酷","mgtv","芒果","letv","乐视","pptv","PPTV","sohu","bilibili","哔哩哔哩","哔哩"],"header":{"User-Agent":"okhttp/4.1.0"}}},
|
||||
],
|
||||
"drives": [{"name":"阿里","password":"43886374072944a2bcc55a0ed129ab48","type":"alidrive"}],
|
||||
# "lives":[{"group":"redirect","channels":[{"name":"我的直播","urls":["proxy://do=live&type=txt&ext={{host}}/txt/直播.txt"]}]}],
|
||||
"sites":[
|
||||
{
|
||||
"key":"t4",
|
||||
"name":"T4",
|
||||
"type":4,
|
||||
"api":"https://t4.secan.icu/vod?sites=all&ali_token={{ali_token}}&timeout=8",
|
||||
"searchable":1,
|
||||
"quickSearch":1,
|
||||
"filterable":0
|
||||
},
|
||||
{"key":"Test_jsapi","name":"Test_jsapi(drpy)","type":3,"api":"{{host}}/libs/drpy2.min.js","searchable":2,"quickSearch":0,"filterable":0,"ext":"{{host}}/js/jsapi.js","jar":"{{host}}/libs/jar/custom_jsapi.jar"},
|
||||
|
||||
# 缓存js
|
||||
# {"key":"js_origin","name":"JS(原始)","type":3,"api":"{{host}}/txt/js/原始JS.js","searchable":1,"quickSearch":1,"filterable":1,"ext":""},
|
||||
{
|
||||
"key": "CMS_非凡资源",
|
||||
"name": "🥗┃非凡┃资源",
|
||||
"type": 1,
|
||||
"api": "http://cj.ffzyapi.com/api.php/provide/vod/",
|
||||
"playurl": "json:http://jx.84jia.com/m3u8ts.php?url=",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"filterable": 1,
|
||||
"categories": [
|
||||
"动作片",
|
||||
"喜剧片",
|
||||
"科幻片",
|
||||
"恐怖片",
|
||||
"爱情片",
|
||||
"剧情片",
|
||||
"战争片",
|
||||
"记录片",
|
||||
"国产剧",
|
||||
"欧美剧",
|
||||
"香港剧",
|
||||
"韩国剧",
|
||||
"台湾剧",
|
||||
"日本剧",
|
||||
"海外剧",
|
||||
"泰国剧",
|
||||
"国产动漫",
|
||||
"日韩动漫",
|
||||
"欧美动漫",
|
||||
"港台动漫",
|
||||
"海外动漫",
|
||||
"大陆综艺",
|
||||
"港台综艺",
|
||||
"日韩综艺",
|
||||
"欧美综艺"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "CMS_量子资源",
|
||||
"name": "🥑┃量子┃资源",
|
||||
"type": 1,
|
||||
"api": "http://cj.lziapi.com/api.php/provide/vod/",
|
||||
"playurl": "json:http://jx.84jia.com/m3u8ts.php?url=",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"filterable": 0,
|
||||
"categories": [
|
||||
"国产剧",
|
||||
"国产动漫",
|
||||
"泰国剧",
|
||||
"台湾剧",
|
||||
"香港剧",
|
||||
"欧美剧",
|
||||
"韩国剧",
|
||||
"日本剧",
|
||||
"动漫",
|
||||
"体育",
|
||||
"剧情片",
|
||||
"动作片",
|
||||
"爱情片",
|
||||
"喜剧片"
|
||||
]
|
||||
},
|
||||
{"key":"Live2Cms","name":"直播转点播V2","type":3,"api":"{{host}}/libs/live2cms.js","searchable":2,"quickSearch":0,"filterable":0,"ext":"{{host}}/txt/json/live2mv_data.json"},
|
||||
{"key":"Live2Mv","name":"直播转点播","type":3,"api":"{{host}}/libs/live2mv.js","searchable":2,"quickSearch":0,"filterable":0,"ext":"{{host}}/txt/json/live2mv_data.json"},
|
||||
{"key":"Alist","name":"Alist","type":3,"api":"{{host}}/libs/alist.min.js","searchable":2,"quickSearch":0,"filterable":0,"ext":"{{host}}/txt/json/alist.json;200;video"},
|
||||
{"key":"Alist_pt","name":"Alist(pluto)","type":3,"api":"{{host}}/libs/alist.min.js","searchable":2,"quickSearch":0,"filterable":0,"ext":"{{host}}/config/2;200;video"},
|
||||
{"key":"Alist_obj","name":"Alist(obj)","type":3,"api":"{{host}}/libs/alist.min.js","searchable":2,"quickSearch":0,"filterable":0,"ext":[
|
||||
{
|
||||
"name": "🙋丫仙女",
|
||||
"server": "http://alist.xiaoya.pro/",
|
||||
"startPage": "/",
|
||||
"showAll": false,
|
||||
"search": true,
|
||||
"headers": {
|
||||
"Authorization": ""
|
||||
},
|
||||
"params": {
|
||||
"/abc": {
|
||||
"password": "123"
|
||||
},
|
||||
"/abc/abc": {
|
||||
"password": "123"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "🐋一只鱼",
|
||||
"server": "https://alist.youte.ml"
|
||||
},
|
||||
{
|
||||
"name": "🌊七米蓝",
|
||||
"server": "https://al.chirmyram.com"
|
||||
},
|
||||
{
|
||||
"name": "🐉神族九帝",
|
||||
"server": "https://alist.shenzjd.com"
|
||||
},
|
||||
{
|
||||
"name": "☃️姬路白雪",
|
||||
"server": "https://pan.jlbx.xyz"
|
||||
},
|
||||
{
|
||||
"name": "✨星梦",
|
||||
"server": "https://pan.bashroot.top"
|
||||
},
|
||||
{
|
||||
"name": "💢repl",
|
||||
"server": "https://ali.liucn.repl.co"
|
||||
},
|
||||
{
|
||||
"name": "💦讯维云盘",
|
||||
"server": "https://pan.xwbeta.com"
|
||||
}
|
||||
]},
|
||||
{"key":"cms_douban","name":"豆瓣(道长)","type":1,"api":"{{ host }}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=drpy","searchable":2,"quickSearch":1,"filterable":1},
|
||||
{"key": "cms_爱看乐看","name": "爱看乐看","type": 1,"api": "https://ikan6.vip/api.php/provide/vod","playerType":1,"playUrl": "https://cms.ikan6.vip/nidasicaibudaowozaina/nicaibudaowozaina.php?url=","searchable": 1,"quickSearch": 1,"filterable": 1,"categories": ["国产剧","综艺频道","动漫频道","日韩剧","港台剧","欧美剧","动作片","科幻片","战争片","喜剧片","爱情片","恐怖片","剧情片"]},
|
||||
{"key":"js_origin_puto","name":"原始JS(pluto)","type":3,"api":"js_origin_test","searchable":1,"quickSearch":1,"filterable":1,"ext":"{{host}}/txt/js/原始JS/origin.js"},
|
||||
{"key":"js_origin_tvb","name":"原始JS(俊tvb)","type":3,"api":"{{host}}/txt/js/origin/原始JS.js","searchable":1,"quickSearch":1,"filterable":1,"ext":"{}"},
|
||||
{"key":"drpy_zbk","name":"真不卡(drpy)","type":3,"api":"js_drpy_zbk","searchable":1,"quickSearch":1,"filterable":1,"ext":"{{host}}/txt/pluto/drpy.js"},
|
||||
# {"key": "dr_MXONE", "name": "MXONE(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=MXONE&ext=txt/js/tg/MXONE.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
|
||||
# {"key": "dr_Nike影视", "name": "Nike影视(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=Nike影视&ext=txt/js/tg/Nike影视.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
|
||||
# {"key": "dr_两个BT", "name": "两个BT(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=两个BT&ext=txt/js/tg/两个BT.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
|
||||
# {"key": "dr_剧迷", "name": "剧迷(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=剧迷&ext=txt/js/tg/剧迷.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
|
||||
# {"key": "dr_天空影视2", "name": "天空影视(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=天空影视&ext=txt/js/tg/天空影视.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
|
||||
# {"key": "dr_快云影院", "name": "快云影院(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=快云影院&ext=txt/js/tg/快云影院.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
|
||||
# {"key": "dr_爱看电影", "name": "爱看电影(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=爱看电影&ext=txt/js/tg/爱看电影.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
|
||||
# {"key": "dr_特狗影视", "name": "特狗影视(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=特狗影视&ext=txt/js/tg/特狗影视.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
|
||||
# {"key": "dr_皮皮泡", "name": "皮皮泡(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=皮皮泡&ext=txt/js/tg/皮皮泡.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
|
||||
# {"key": "dr_胖虎影视", "name": "胖虎影视(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=胖虎影视&ext=txt/js/tg/胖虎影视.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
|
||||
{"key": "dr_18av", "name": "18av(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=18av&ext=txt/js/18/18av.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
|
||||
{"key": "dr_banan", "name": "banan(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=banan&ext=txt/js/18/banan.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
|
||||
{"key": "dr_Missav", "name": "Missav(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=Missav&ext=txt/js/18/Missav.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
|
||||
{"key": "dr_养端", "name": "养端(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=养端&ext=txt/js/18/养端.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
|
||||
{"key": "dr_吸瓜", "name": "吸瓜(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=吸瓜&ext=txt/js/18/吸瓜.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
|
||||
{"key": "dr_朱古力", "name": "朱古力(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=朱古力&ext=txt/js/18/朱古力.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
|
||||
{"key": "dr_玩偶姐姐", "name": "玩偶姐姐(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=玩偶姐姐&ext=txt/js/18/玩偶姐姐.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
|
||||
|
||||
{"key":"csp_SP360","name":"🎾360(SP)","type":3,"api":"csp_SP360","searchable":1,"quickSearch":1,"filterable":1},
|
||||
# {"key":"csp_ZJMiao","name":"追剧喵(SP)","type":3,"api":"csp_ZJMiao","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Zxzj","name":"在线之家(SP)","type":3,"api":"csp_Zxzj","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Zjdr","name":"追剧达人(SP)","type":3,"api":"csp_Zjdr","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Ysgc","name":"影视工厂(SP)","type":3,"api":"csp_Ysgc","searchable":1,"quickSearch":1,"filterable":1},
|
||||
# {"key":"csp_Zhaozy","name":"找资源(SP)","type":3,"api":"csp_Zhaozy","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Yj1211","name":"just live(SP)","type":3,"api":"csp_Yj1211","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Xiaoh","name":"小宝影院[飞](SP)","type":3,"api":"csp_Xiaoh","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Wmkk","name":"完美看看(SP)","type":3,"api":"csp_Wmkk","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Tkys","name":"天空影视(SP)","type":3,"api":"csp_Tkys","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Tangrenjie","name":"唐人街[飞](SP)","type":3,"api":"csp_Tangrenjie","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Smdyy","name":"神马电影(SP)","type":3,"api":"csp_Smdyy","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_QQ","name":"QQ(SP)","type":3,"api":"csp_QQ","searchable":1,"quickSearch":1,"filterable":1},
|
||||
# {"key":"csp_Nmys","name":"柠檬影视(SP)","type":3,"api":"csp_Nmys","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Nkdy","name":"南柯电影(SP)","type":3,"api":"csp_Nkdy","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Nbys","name":"牛逼影视(SP)","type":3,"api":"csp_Nbys","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Mgtv","name":"MGTV(SP)","type":3,"api":"csp_Mgtv","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_LiteApple","name":"小苹果(SP)","type":3,"api":"csp_LiteApple","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Lezhu","name":"乐猪(SP)","type":3,"api":"csp_Lezhu","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Lgyy","name":"蓝光影院(SP)","type":3,"api":"csp_Lgyy","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Juhuang","name":"剧荒TV(SP)","type":3,"api":"csp_Juhuang","searchable":1,"quickSearch":1,"filterable":1},
|
||||
# {"key":"csp_JianYing","name":"简影(SP)","type":3,"api":"csp_JianYing","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_IQIYI","name":"IQIYI(SP)","type":3,"api":"csp_IQIYI","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Fantuan","name":"饭团(SP)","type":3,"api":"csp_Fantuan","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Dy555","name":"555电影(SP)","type":3,"api":"csp_Dy555","searchable":1,"quickSearch":1,"filterable":1},
|
||||
# {"key":"csp_Bili","name":"哔哩哔哩(SP)","type":3,"api":"csp_Bili","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Alist","name":"Alist(SP)","type":3,"api":"csp_Alist","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Anfuns","name":"Anfuns(SP)","type":3,"api":"csp_Anfuns","searchable":1,"quickSearch":1,"filterable":1},
|
||||
# {"key":"csp_Bdys","name":"哔滴影视(SP)","type":3,"api":"csp_Bdys","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Bttoo","name":"两个BT(SP)","type":3,"api":"csp_Bttoo","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Ddrk","name":"低端影视(SP)","type":3,"api":"csp_Ddrk","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Dm84","name":"动漫巴士(SP)","type":3,"api":"csp_Dm84","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Dy1010","name":"双十电影(SP)","type":3,"api":"csp_Dy1010","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_EEEDY","name":"3e电影(SP)","type":3,"api":"csp_EEEDY","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Kuaikan","name":"👀快看(SP)","type":3,"api":"csp_Kuaikan","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Kunyu77","name":"👒七七(SP)","type":3,"api":"csp_Kunyu77","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_CZSPP","name":"🚬厂长资源(SP)","type":3,"api":"csp_CZSPP","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"mjxq_spider","name":"🌏美剧星球(SP)","type":3,"api":"csp_Mjxq","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Nbys","name":"📺泥巴(SP需翻墙)","type":3,"api":"csp_Nbys","searchable":1,"quickSearch":1,"filterable":1},
|
||||
{"key":"csp_Cokemv","name":"🚗Cokemv(SP)","type":3,"api":"csp_Cokemv","searchable":1,"quickSearch":1,"filterable":1},
|
||||
# {"key":"if101资源","name":"✈️if101(海外推荐)","type":0,"api":"https://demo.if101.tv/api.php/provide/vod/at/xml","searchable":1,"quickSearch":0,"filterable":0},
|
||||
{"key":"海外看资源","name":"海外看(海外推荐)","type":0,"api":"https://haiwaikan.com/api.php/provide/vod/at/xml","searchable":1,"quickSearch":0,"filterable":0},
|
||||
# {"key":"push_agent","name":"🍭推送(阿里)","type":3,"api":"csp_PushAgent","searchable":0,"quickSearch":0,"filterable":0,"ext":"{{ali_token}}"},
|
||||
# {"key": "push_agent","name": "推送(爱优腾/阿里云盘/磁力链接)","type": 3,"api": "csp_PushAgent","searchable":0,"quickSearch": 0,"filterable":0,"ext": "{{ali_token}}","plugin":"{{host}}/txt/jar/0906.jar"},
|
||||
{
|
||||
"key": "push_agent",
|
||||
"name": "📽推送",
|
||||
"type": 3,
|
||||
"api": "csp_PushAgent",
|
||||
"searchable": 0,
|
||||
"quickSearch": 0,
|
||||
"filterable": 0,
|
||||
"ext": "{{ali_token}}"
|
||||
},
|
||||
{"key":"csp_GitCafe","name":"小纸条","type":3,"api":"csp_Gitcafe","searchable":1,"quickSearch":1,"filterable":0,"ext":"{{ali_token}}"},
|
||||
# {"key":"push_agent","name":"阿里","type":3,"api":"py_ali","searchable":0,"quickSearch":0,"filterable":0,"ext":"{{ali_token}}"},
|
||||
{"key":"阿里盤搜","name":"阿里盤搜","type":3,"api":"csp_AliPanSou","searchable":1,"quickSearch":1,"filterable":1,"ext":"{{ali_token}}","plugin":"https://ghproxy.net/https://github.com/FongMi/CatVodSpider/raw/main/jar/custom_spider.jar"},
|
||||
# {"key":"push_agent","name":"推送","type":3,"api":"csp_Push","searchable":1,"quickSearch":1,"filterable":1,"ext":"{{ali_token}}","plugin":"https://ghproxy.net/https://github.com/FongMi/CatVodSpider/raw/main/jar/custom_spider.jar"},
|
||||
## M浏览器中APP影视规则支持(AppYsV2)
|
||||
#萝卜/白菜/木白/绿豆
|
||||
{"key":"csp_appysv2_渔渔影视","name":"渔渔影视(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://luobo.yugenye.site/api.php/v1.vod"},
|
||||
{"key":"csp_appysv2_月儿影视","name":"月儿影视(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://yue52.xyz/api.php/v1.vod"},
|
||||
{"key":"csp_appysv2_小鸟动漫","name":"小鸟动漫(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://xydm.baicai.buzz/mogai_api.php/v1.vod"},
|
||||
{"key":"csp_appysv2_蜗牛动漫","name":"蜗牛动漫(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://woniudm.woniu.cyou:20000/mogai_api.php/v1.vod"},
|
||||
{"key":"csp_appysv2_天天视频","name":"天天视频(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://app.qianju.cc/api.php/v1.vod"},
|
||||
{"key":"csp_appysv2_淘剧社","name":"淘剧社(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://app.shuhai99.com/api.php/v1.vod"},
|
||||
{"key":"csp_appysv2_冷视TV","name":"冷视TV(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://len.tv/api.php/v1.vod"},
|
||||
{"key":"csp_appysv2_龙猫追剧","name":"龙猫追剧(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://lb.ybnxcx.com/api.php/v1.vod"},
|
||||
{"key":"csp_appysv2_看剧吧","name":"看剧吧(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://app.ishen520.com/api.php/v1.vod"},
|
||||
{"key":"csp_appysv2_百淘影视","name":"百淘影视(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://ys.58g8.com/lvdou_api.php/v1.vod"},
|
||||
{"key":"csp_appysv2_阿里影视","name":"阿里影视(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://aliys.cn:90/api.php/v1.vod"},
|
||||
{"key":"csp_appysv2_爱电影","name":"爱电影(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.idianying.com.cn/mogai_api.php/v1.vod"},
|
||||
{"key":"csp_appysv2_OK影视","name":"OK影视(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://123.ok00.xyz/api.php/v1.vod"},
|
||||
{"key":"csp_appysv2_MX影视","name":"MX影视(萝卜)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://mkk.gotka.top/api.php/v1.vod"},
|
||||
#
|
||||
#神马
|
||||
{"key":"csp_appysv2_天空TV","name":"天空TV(神马)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://tv.tkys.tv/api.php/iptv/vod/"},
|
||||
{"key":"csp_appysv2_嘿荼锋","name":"嘿荼锋(神马)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://tv.hfys8.vip/api.php/Sntv/vod/"},
|
||||
{"key":"csp_appysv2_贵宾影院","name":"贵宾影院(神马)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://vipdytv.com/api.php/iptv/vod/"},
|
||||
{"key":"csp_appysv2_独优影视","name":"独优影视(神马)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://121.205.88.71:218/api.php/Chengcheng/vod/"},
|
||||
{"key":"csp_appysv2_CV影视","name":"CV影视(神马)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://www.cccvvv.top/api.php/iptv/vod/"},
|
||||
{"key":"csp_appysv2_2号币","name":"2号币(神马)","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://phoebe.cf/api.php/iptv/vod/"},
|
||||
#
|
||||
|
||||
|
||||
## 广大侠 资源网采集
|
||||
#官方解析
|
||||
{"key":"诺讯资源","name":"诺讯资源(官)","type":1,"api":"http://caiji.nxflv.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"6U资源","name":"6U资源(官)","type":1,"api":"http://www.6uzy.cc/inc/apijson_vod.php","searchable":0,"quickSearch":0},
|
||||
{"key":"天堂资源","name":"天堂资源(官)","type":1,"api":"http://vipmv.cc/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"土狗2345","name":"土狗2345(官)","type":1,"api":"http://2345.tgzy.cc/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"土狗360","name":"土狗360(官)","type":1,"api":"http://360.tgzy.cc/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"云海官采","name":"云海官采(官)","type":1,"api":"http://101.34.7.151:600/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"忆梦","name":"忆梦(官)","type":1,"api":"http://anltv.cn/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
#
|
||||
#切片资源
|
||||
{"key":"金鹰资源","name":"金鹰资源(切)","type":1,"api":"http://jinyingzy.com/provide/vod","searchable":1,"quickSearch":1},
|
||||
{"key":"冠军资源","name":"冠军资源(切)","type":1,"api":"https://www.cmpzy.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"1080资源库","name":"1080资源库(切)","type":1,"api":"https://api.1080zyku.com/inc/api_mac10.php","searchable":0,"quickSearch":0},
|
||||
{"key":"TOM资源","name":"TOM资源(切)","type":1,"api":"https://api.tomcaiji.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"快车资源","name":"快车资源(切)","type":1,"api":"https://caiji.kczyapi.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"松鼠资源","name":"松鼠资源(切)","type":1,"api":"https://m3u8.songshuzy.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"多多资源","name":"多多资源(切)","type":1,"api":"https://www.ddzyz1.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"FOX资源","name":"FOX资源(切)","type":1,"api":"https://api.foxzyapi.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"量子资源","name":"量子资源(切)","type":1,"api":"http://cj.lziapi.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"番茄资源","name":"番茄资源(切)","type":1,"api":"http://api.fqzy.cc/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"卧龙资源","name":"卧龙资源(切)","type":1,"api":"https://collect.wolongzyw.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"红牛资源","name":"红牛资源(切)","type":1,"api":"https://www.hongniuzy2.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"樱花资源","name":"樱花资源(切)","type":1,"api":"https://m3u8.apiyhzy.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"易看资源","name":"易看资源(切)","type":1,"api":"https://api.yikanapi.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"酷点资源","name":"酷点资源(切)","type":1,"api":"https://kudianzy.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"速更资源","name":"速更资源(切)","type":1,"api":"https://sugengzy.cn/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"闪电资源","name":"闪电资源(切)","type":1,"api":"http://sdzyapi.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"飞速资源","name":"飞速资源(切)","type":1,"api":"https://www.feisuzy.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"光速资源","name":"光速资源(切)","type":1,"api":"https://api.guangsuapi.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"新浪资源","name":"新浪资源(切)","type":1,"api":"http://api.xinlangapi.com/xinlangapi.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"鱼乐资源","name":"鱼乐资源(切)","type":1,"api":"https://api.ylzy1.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"韩剧资源","name":"韩剧资源(切)","type":1,"api":"http://www.hanjuzy.com/inc/apijson_vod.php","searchable":0,"quickSearch":0},
|
||||
{"key":"快播资源","name":"快播资源(切)","type":1,"api":"http://www.kuaibozy.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"八戒资源","name":"八戒资源(切)","type":1,"api":"http://cj.bajiecaiji.com/inc/apijson_vod.php","searchable":0,"quickSearch":0},
|
||||
{"key":"百度资源","name":"百度资源(切)","type":1,"api":"https://api.apibdzy.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"天空资源","name":"天空资源(切)","type":1,"api":"https://api.tiankongapi.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"南国影源","name":"南国影源(切)","type":1,"api":"http://api.nguonphim.tv/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
#
|
||||
#优质资源
|
||||
{"key":"U酷资源","name":"U酷资源(优)","type":1,"api":"https://api.ukuapi.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"看看资源","name":"看看资源(优)","type":1,"api":"https://zy.hikan.xyz/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
# {"key":"一帆资源(VPN)","name":"一帆资源(VPN)(优)","type":1,"api":"http://api.if101.tv/v1/vod?ac=list","searchable":0,"quickSearch":0},
|
||||
{"key":"789盘","name":"789盘(优)","type":1,"api":"https://www.rrvipw.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"多多资源2","name":"多多资源2(优)","type":1,"api":"https://a.7dyu.cn/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"土剧TV","name":"土剧TV(优)","type":1,"api":"http://tujutv.top/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"XYUI","name":"XYUI(优)","type":1,"api":"http://jx4.xyui.top:7001/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"考拉TV","name":"考拉TV(优)","type":1,"api":"https://ikaola.tv/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"每天看看","name":"每天看看(优)","type":1,"api":"http://47.113.126.237:1234/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"乐活影视","name":"乐活影视(优)","type":1,"api":"https://lehootv.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
#
|
||||
#三方聚合
|
||||
{"key":"影图","name":"影图(聚)","type":1,"api":"https://cj.vodimg.top/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"随缘电影","name":"随缘电影(聚)","type":1,"api":"https://baobei666.com/inc/apijson_vod.php","searchable":0,"quickSearch":0},
|
||||
{"key":"飘零影院","name":"飘零影院(聚)","type":1,"api":"https://p2100.net/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"艾旦影视","name":"艾旦影视(聚)","type":1,"api":"https://lovedan.net/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"趣看","name":"趣看(聚)","type":1,"api":"https://qkmp4.cn/api.php/provide/vod/","searchable":0,"quickSearch":0},
|
||||
{"key":"39影视","name":"39影视(聚)","type":1,"api":"https://www.39kan.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"飘花电影","name":"飘花电影(聚)","type":1,"api":"http://www.zzrhgg.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"千寻时光","name":"千寻时光(聚)","type":1,"api":"http://wy.dqyhg.cn/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"网民电影","name":"网民电影(聚)","type":1,"api":"https://www.prinevillesda.org/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
||||
{"key":"MBO影视","name":"MBO影视(聚)","type":0,"api":"https://www.mbomovie.com/api.php/provide/vod/at/xml/","searchable":0,"quickSearch":0}
|
||||
]
|
||||
}
|
8
JN/dr_py/base/database.py
Normal file
@ -0,0 +1,8 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# File : databse.py
|
||||
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
|
||||
# Date : 2022/9/6
|
||||
|
||||
from flask_sqlalchemy import SQLAlchemy
|
||||
db = SQLAlchemy()
|
1
JN/dr_py/base/live.txt
Normal file
BIN
JN/dr_py/base/rules.db
Normal file
3061
JN/dr_py/base/直播.txt
Normal file
35
JN/dr_py/base/解析.conf
Normal file
@ -0,0 +1,35 @@
|
||||
# 这是用户自定义解析列表,不会被系统升级覆盖
|
||||
# 0123,对应,普通解析,json解析,并发多json解析,聚合解析,参数3不填默认0
|
||||
# flags是线路名称标识,会自动拦截并走以下的解析
|
||||
# 名称,链接,类型,ua (ua不填默认 Mozilla/5.0) 可以手动填 Dart/2.14 (dart:io)
|
||||
# 168,{{host}}/parse/api/168.js?url=,1
|
||||
解析13,http://api.wpsseo.cn/?v=,0
|
||||
解析14,https://go.yh0523.cn/y.cy?url=,0
|
||||
B站1,https://jx.bozrc.com:4433/player/?url=,0
|
||||
爱豆,https://jx.aidouer.net/?url=,0
|
||||
H8,https://www.h8jx.com/jiexi.php?url=,0
|
||||
解析,https://ckmov.ccyjjd.com/ckmov/?url=,0
|
||||
思古3,https://jsap.attakids.com/?url=,0
|
||||
云端1,https://js.52jx.top:2525/?url=,0
|
||||
云端2,https://sb.5gseo.net/?url=,0
|
||||
m3u8tv高清,https://jx.m3u8.tv/jiexi/?url=,0
|
||||
搬运,https://jx.bynote.top/API.php?url=,1
|
||||
解析第一,http://27.124.4.42:4567/jhjson/ceshi.php?url=,0
|
||||
纯净1,https://z1.m1907.cn/?jx=,0
|
||||
BL,https://vip.bljiex.com/?v=,0
|
||||
CK,https://www.ckplayer.vip/jiexi/?url=,0
|
||||
解析,https://ckmov.ccyjjd.com/ckmov/?url=,0
|
||||
解析la,https://api.jiexi.la/?url=,0
|
||||
老板,https://vip.laobandq.com/jiexi.php?url=,0
|
||||
诺讯,https://www.nxflv.com/?url=,0
|
||||
PM,https://www.playm3u8.cn/jiexi.php?url=,0
|
||||
盘古,https://www.pangujiexi.cc/jiexi.php?url=,0
|
||||
全民,https://jx.blbo.cc:4433/?url=,0
|
||||
七哥,https://jx.mmkv.cn/tv.php?url=,0
|
||||
RDHK,https://jx.rdhk.net/?v=,0
|
||||
云析,https://jx.yparse.com/index.php?url=,0
|
||||
180,https://jx.000180.top/jx/?url=,0
|
||||
七彩,https://www.xymav.com/?url=,0
|
||||
夜幕,https://www.yemu.xyz/?url=,0
|
||||
1717云,https://www.1717yun.com/jx/ty.php?url=,0
|
||||
8090,https://www.8090g.cn/?url=,0
|
25
JN/dr_py/commands.txt
Normal file
@ -0,0 +1,25 @@
|
||||
. ./app.sh
|
||||
source ./app.sh
|
||||
. <(cat app.sh)
|
||||
# supervisord -c manager.conf
|
||||
flask db init
|
||||
flask db migrate
|
||||
flask db upgrade
|
||||
|
||||
pip install -i https://mirrors.cloud.tencent.com/pypi/simple --upgrade pip
|
||||
pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple
|
||||
|
||||
可能会用到:
|
||||
ddddocr==1.1.0 ; sys_platform == 'win32'
|
||||
ddddocr==1.0.8 ; sys_platform != 'win32'
|
||||
|
||||
废弃操作仅限 flask-migrate==2.7.0:
|
||||
# # 导入数据迁移核心类
|
||||
# from flask_migrate import Migrate
|
||||
# from flask_script import Manager
|
||||
# manager = Manager(app)
|
||||
# 初始化数据迁移
|
||||
# migrate = Migrate(app, db)
|
||||
# manager.add_command('sql', MigrateCommand)
|
||||
# python app.py sql migrate -m “init”
|
||||
# python app.py sql upgrade
|
16
JN/dr_py/controllers/__init__.py
Normal file
@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# File : __init__.py
|
||||
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
|
||||
# Date : 2022/9/6
|
||||
|
||||
from . import home
|
||||
from . import admin
|
||||
from . import service
|
||||
from . import vod
|
||||
from . import cms
|
||||
from . import cls
|
||||
from . import classes
|
||||
from . import layui
|
||||
from . import parse
|
||||
from . import web
|
502
JN/dr_py/controllers/admin.py
Normal file
@ -0,0 +1,502 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# File : admin.py
|
||||
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
|
||||
# Date : 2022/9/6
|
||||
import os
|
||||
|
||||
import ujson
|
||||
from flask import Blueprint, request, render_template, render_template_string, jsonify, make_response, redirect
|
||||
from controllers.service import storage_service, rules_service, parse_service
|
||||
from base.R import R
|
||||
from base.database import db
|
||||
from utils.log import logger
|
||||
import shutil
|
||||
from utils.update import getLocalVer, getOnlineVer, download_new_version, download_lives, copy_to_update
|
||||
from utils import parser
|
||||
from utils.env import get_env, update_env
|
||||
from utils.web import getParmas, verfy_token
|
||||
from js.rules import getRules, getCacheCount
|
||||
from utils.parser import runJScode
|
||||
from werkzeug.utils import secure_filename
|
||||
from utils.web import md5
|
||||
from utils.common_api import js_render
|
||||
from utils.files import get_jar_list, get_jsd_list, get_drop_js
|
||||
from quickjs import Function, Context
|
||||
|
||||
admin = Blueprint("admin", __name__)
|
||||
|
||||
|
||||
# @admin.route("/",methods=['get'])
|
||||
# def index():
|
||||
# return R.ok(msg='欢迎进入首页',data=None)
|
||||
|
||||
# @admin.route("/info",methods=['get'])
|
||||
# def info_all():
|
||||
# data = storage_service.query_all()
|
||||
# return R.ok(data=data)
|
||||
|
||||
@admin.route('/')
|
||||
def admin_index(): # 管理员界面
|
||||
if not verfy_token():
|
||||
return render_template('login.html')
|
||||
lsg = storage_service()
|
||||
live_url = lsg.getItem('LIVE_URL')
|
||||
use_py = lsg.getItem('USE_PY')
|
||||
js0_password = lsg.getItem('JS0_PASSWORD')
|
||||
# print(f'live_url:', live_url)
|
||||
rules = getRules('js')
|
||||
# print(rules)
|
||||
cache_count = getCacheCount()
|
||||
# print(cache_count)
|
||||
return render_template('admin.html', js0_password=js0_password, pystate=use_py, rules=rules,
|
||||
cache_count=cache_count, ver=getLocalVer(), live_url=live_url)
|
||||
|
||||
|
||||
@admin.route('/settings')
|
||||
def admin_settings(): # 管理员界面
|
||||
if not verfy_token():
|
||||
return render_template('login.html')
|
||||
lsg = storage_service()
|
||||
# conf_list = 'LIVE_URL|USE_PY|PLAY_URL|PLAY_DISABLE|LAZYPARSE_MODE|WALL_PAPER_ENABLE|WALL_PAPER|UNAME|PWD|LIVE_MODE|LIVE_URL|CATE_EXCLUDE|TAB_EXCLUDE'.split('|')
|
||||
conf_lists = lsg.getStoreConf()
|
||||
# print(conf_lists)
|
||||
jar_lists = get_jar_list()
|
||||
SPIDER_JAR = lsg.getItem('SPIDER_JAR', 'custom_spider.jar')
|
||||
return render_template('settings.html', conf_lists=conf_lists, jar_lists=jar_lists, jar_now=SPIDER_JAR,
|
||||
ver=getLocalVer())
|
||||
|
||||
|
||||
@admin.route('/save_conf', methods=['POST'])
|
||||
def admin_save_conf(): # 管理员界面
|
||||
if not verfy_token():
|
||||
# return render_template('login.html')
|
||||
return R.error('请登录后再试')
|
||||
key = getParmas('key')
|
||||
value = getParmas('value')
|
||||
print(f'key:{key},value:{value}')
|
||||
lsg = storage_service()
|
||||
res_id = lsg.setItem(key, value)
|
||||
return R.success(f'修改成功,记录ID为:{res_id}')
|
||||
|
||||
|
||||
@admin.route('/update_env', methods=['POST'])
|
||||
def admin_update_env(): # 更新环境变量中的某个值
|
||||
if not verfy_token():
|
||||
# return render_template('login.html')
|
||||
return R.error('请登录后再试')
|
||||
key = getParmas('key')
|
||||
value = getParmas('value')
|
||||
print(f'key:{key},value:{value}')
|
||||
ENV = update_env(key, value)
|
||||
return R.success(f'修改成功,最新的完整ENV见data', data=ENV)
|
||||
|
||||
|
||||
@admin.route("/edit/<name>", methods=['GET'])
|
||||
def admin_edit_rule(name):
|
||||
# print(name)
|
||||
if not verfy_token():
|
||||
return render_template('login.html')
|
||||
return render_template('edit_rule.html', name=name)
|
||||
|
||||
|
||||
@admin.route("/edit2/<name>", methods=['GET'])
|
||||
def admin_edit2_rule(name):
|
||||
# print(name)
|
||||
if not verfy_token():
|
||||
return render_template('login.html')
|
||||
return render_template('edit_rule_mobile.html', name=name)
|
||||
|
||||
|
||||
@admin.route("/save_edit/<name>", methods=['POST'])
|
||||
def admin_save_edit_rule(name):
|
||||
# print(name)
|
||||
if not verfy_token():
|
||||
return R.error('请登录后再试')
|
||||
|
||||
code = getParmas('code')
|
||||
file_path = os.path.abspath(f'js/{name}')
|
||||
if 'var rule' not in code and name != '模板.js':
|
||||
return R.error(f'文件{name}保存失败,未检测到关键词:var rule')
|
||||
if not os.path.exists(file_path):
|
||||
return R.error('服务端没有此文件!' + file_path)
|
||||
|
||||
logger.info(f'待保存文件路径:{file_path}')
|
||||
with open(file_path, mode='w+', encoding='utf-8') as f:
|
||||
f.write(code)
|
||||
|
||||
return R.success(f'保存成功')
|
||||
|
||||
|
||||
@admin.route("/view/<name>", methods=['GET'])
|
||||
def admin_view_rule(name):
|
||||
return js_render(name)
|
||||
# if not name or not name.split('.')[-1] in ['js','txt','py','json']:
|
||||
# return R.error(f'非法猥亵,未指定文件名。必须包含js|txt|json|py')
|
||||
# try:
|
||||
# env = get_env()
|
||||
# # print(env)
|
||||
# if env.get('js_proxy'):
|
||||
# js_proxy = env['js_proxy']
|
||||
# burl = request.base_url
|
||||
# if '=>' in js_proxy:
|
||||
# oldsrc = js_proxy.split('=>')[0]
|
||||
# if oldsrc in burl:
|
||||
# newsrc = js_proxy.split('=>')[1]
|
||||
# # print(f'js1源代理已启用,全局替换{oldsrc}为{newsrc}')
|
||||
# rurl = burl.replace(oldsrc, newsrc)
|
||||
# if burl != rurl:
|
||||
# jscode = parser.getJs(name, 'js')
|
||||
# # rjscode = render_template_string(jscode, env=env)
|
||||
# rjscode = jscode
|
||||
# for k in env:
|
||||
# # print(f'${k}', f'{env[k]}')
|
||||
# if f'${k}' in rjscode:
|
||||
# rjscode = rjscode.replace(f'${k}', f'{env[k]}')
|
||||
# # rjscode = render_template_string(jscode, **env)
|
||||
# if rjscode.strip() == jscode.strip(): # 无需渲染才代理
|
||||
# return redirect(rurl)
|
||||
# else:
|
||||
# logger.info(f'{name}由于存在环境变量无法被依赖代理')
|
||||
#
|
||||
# return parser.toJs(name,'js',env)
|
||||
# except Exception as e:
|
||||
# return R.error(f'非法猥亵\n{e}')
|
||||
|
||||
|
||||
@admin.route('/clear/<name>')
|
||||
def admin_clear_rule(name):
|
||||
if not name or not name.split('.')[-1] in ['js', 'txt', 'py', 'json']:
|
||||
return R.error(f'非法猥亵,未指定文件名。必须包含js|txt|json|py')
|
||||
if not verfy_token():
|
||||
return render_template('login.html')
|
||||
|
||||
file_path = os.path.abspath(f'js/{name}')
|
||||
print(file_path)
|
||||
if not os.path.exists(file_path):
|
||||
return R.error('服务端没有此文件!' + file_path)
|
||||
os.remove(file_path)
|
||||
return R.ok('成功删除文件:' + file_path)
|
||||
|
||||
|
||||
@admin.route('/get_ver')
|
||||
def admin_get_ver():
|
||||
if not verfy_token():
|
||||
# return render_template('login.html')
|
||||
return R.error('请登录后再试')
|
||||
lsg = storage_service()
|
||||
update_proxy = lsg.getItem('UPDATE_PROXY')
|
||||
online_ver, msg = getOnlineVer(update_proxy)
|
||||
return jsonify({'local_ver': getLocalVer(), 'online_ver': online_ver, 'msg': msg})
|
||||
|
||||
|
||||
@admin.route('/update_db')
|
||||
def admin_update_db():
|
||||
if not verfy_token():
|
||||
# return render_template('login.html')
|
||||
return R.error('请登录后再试')
|
||||
old_dbfile = 'migrations'
|
||||
if os.path.exists(old_dbfile):
|
||||
logger.info(f'开始删除历史数据库迁移文件:{old_dbfile}')
|
||||
shutil.rmtree(old_dbfile)
|
||||
db.session.execute('drop table if exists alembic_version')
|
||||
cmd = 'flask db migrate && flask db upgrade'
|
||||
if not os.path.exists('migrations'):
|
||||
cmd = 'flask db init && ' + cmd
|
||||
logger.info(f'开始执行cmd:{cmd}')
|
||||
result = os.system(cmd)
|
||||
logger.info(f'cmd执行结果:{result}')
|
||||
return R.success('数据库升级完毕')
|
||||
|
||||
|
||||
@admin.route('/update_ver')
|
||||
def admin_update_ver():
|
||||
if not verfy_token():
|
||||
return R.failed('请登录后再试')
|
||||
lsg = storage_service()
|
||||
update_proxy = lsg.getItem('UPDATE_PROXY')
|
||||
msg = download_new_version(update_proxy)
|
||||
return R.success(msg)
|
||||
|
||||
|
||||
@admin.route('/rule_state/<int:state>', methods=['POST'])
|
||||
def admin_rule_state(state=0): # 管理员修改规则状态
|
||||
if not verfy_token():
|
||||
return R.error('请登录后再试')
|
||||
names = getParmas('names')
|
||||
if not names:
|
||||
return R.success(f'修改失败,没有传递names参数')
|
||||
rule_list = names.split(',')
|
||||
rules = rules_service()
|
||||
# print(rules.query_all())
|
||||
# print(rules.getState(rule_list[0]))
|
||||
# print(rule_list)
|
||||
success_list = []
|
||||
for rule in rule_list:
|
||||
try:
|
||||
res_id = rules.setState(rule, state)
|
||||
success_list.append(f'{rule}:{res_id}')
|
||||
except:
|
||||
success_list.append(rule)
|
||||
|
||||
return R.success(f'修改成功,服务器反馈信息为:{success_list}')
|
||||
|
||||
|
||||
@admin.route('/rule_order/<int:order>', methods=['POST'])
|
||||
def admin_rule_order(order=0): # 管理员修改规则顺序
|
||||
if not verfy_token():
|
||||
return R.error('请登录后再试')
|
||||
names = getParmas('names')
|
||||
if not names:
|
||||
return R.success(f'修改失败,没有传递names参数')
|
||||
rule_list = names.split(',')
|
||||
rules = rules_service()
|
||||
# print(rules.query_all())
|
||||
# print(rules.getState(rule_list[0]))
|
||||
# print(rule_list)
|
||||
success_list = []
|
||||
rule_list.reverse() # 倒序解决时间多重排序问题
|
||||
for rule in rule_list:
|
||||
try:
|
||||
res_id = rules.setOrder(rule, order)
|
||||
success_list.append(f'{rule}:{res_id}')
|
||||
except:
|
||||
success_list.append(rule)
|
||||
|
||||
return R.success(f'修改成功,服务器反馈信息为:{success_list}')
|
||||
|
||||
|
||||
@admin.route('/parse/save_data', methods=['POST'])
|
||||
def admin_parse_save_data(): # 管理员保存拖拽排序后的解析数据
|
||||
if not verfy_token():
|
||||
return R.error('请登录后再试')
|
||||
data = getParmas('data')
|
||||
if not data:
|
||||
return R.success(f'修改失败,没有传递data参数')
|
||||
parse = parse_service()
|
||||
success_list = []
|
||||
data = ujson.loads(data)
|
||||
new_list = []
|
||||
new_data = []
|
||||
for nd in data:
|
||||
if not nd.get('url') and nd.get('name') != '🌐Ⓤ':
|
||||
continue
|
||||
if nd['url'] not in new_list:
|
||||
new_data.append(nd)
|
||||
new_list.append(nd['url'])
|
||||
|
||||
print(f'去重前:{len(data)},去重后:{len(new_data)}')
|
||||
for i in range(len(new_data)):
|
||||
d = new_data[i]
|
||||
# if not d.get('url') and d.get('name') != '🌐Ⓤ':
|
||||
# continue
|
||||
obj = {
|
||||
'name': d.get('name', ''),
|
||||
'url': d.get('url', ''),
|
||||
'state': d.get('state', 1),
|
||||
'type': d.get('state', 0),
|
||||
'order': i + 1,
|
||||
'ext': d.get('ext', ''),
|
||||
'header': d.get('header', ''),
|
||||
}
|
||||
# print(obj)
|
||||
try:
|
||||
parse.saveData(obj)
|
||||
success_list.append(f'parse:{d["url"]}')
|
||||
# print(obj)
|
||||
# print(200,obj)
|
||||
except Exception as e:
|
||||
success_list.append(d["url"])
|
||||
print(f'{d["url"]}失败:{e}')
|
||||
# print(len(success_list))
|
||||
return R.success(f'修改成功,服务器反馈信息为:{success_list}')
|
||||
|
||||
|
||||
@admin.route('/force_update')
|
||||
def admin_force_update():
|
||||
if not verfy_token():
|
||||
return R.failed('请登录后再试')
|
||||
ret = copy_to_update()
|
||||
if ret:
|
||||
msg = '升级成功'
|
||||
return R.success(msg)
|
||||
else:
|
||||
msg = '升级失败。具体原因只能去看实时日志(通过9001端口)'
|
||||
return R.failed(msg)
|
||||
|
||||
|
||||
@admin.route('/update_lives')
|
||||
def admin_update_lives():
|
||||
url = getParmas('url')
|
||||
if not url:
|
||||
return R.failed('未提供被同步的直播源远程地址!')
|
||||
if not verfy_token():
|
||||
return R.failed('请登录后再试')
|
||||
live_url = url
|
||||
success = download_lives(live_url)
|
||||
if success:
|
||||
return R.success(f'直播源{live_url}同步成功')
|
||||
else:
|
||||
return R.failed(f'直播源{live_url}同步失败')
|
||||
|
||||
|
||||
@admin.route('/write_live_url')
|
||||
def admin_write_live_url():
|
||||
url = getParmas('url')
|
||||
if not url:
|
||||
return R.failed('未提供修改后的直播源地址!')
|
||||
if not verfy_token():
|
||||
return R.failed('请登录后再试')
|
||||
lsg = storage_service()
|
||||
id = lsg.setItem('LIVE_URL', url)
|
||||
msg = f'已修改的配置记录id为:{id}'
|
||||
return R.success(msg)
|
||||
|
||||
|
||||
@admin.route('/change_use_py')
|
||||
def admin_change_use_py():
|
||||
if not verfy_token():
|
||||
return R.failed('请登录后再试')
|
||||
lsg = storage_service()
|
||||
use_py = lsg.getItem('USE_PY')
|
||||
new_use_py = '' if use_py else '1'
|
||||
state = '开启' if new_use_py else '关闭'
|
||||
id = lsg.setItem('USE_PY', new_use_py)
|
||||
msg = f'已修改的配置记录id为:{id},结果为{state}'
|
||||
return R.success(msg)
|
||||
|
||||
@admin.route('/clear_drop')
|
||||
def admin_clear_drop():
|
||||
if not verfy_token():
|
||||
return R.failed('请登录后再试')
|
||||
|
||||
jsd_list = get_jsd_list()
|
||||
logger.info(f'jsd文件列表:{jsd_list}')
|
||||
js_list = get_drop_js(jsd_list)
|
||||
rm_list = []
|
||||
for i in range(len(js_list)):
|
||||
js_file = js_list[i]
|
||||
# shutil.rmtree(js_file, ignore_errors=False, onerror=None)
|
||||
if os.path.exists(js_file):
|
||||
os.remove(js_file)
|
||||
rm_list.append(jsd_list[i][:-1])
|
||||
logger.info(f'待删除js文件列表:{rm_list}')
|
||||
rm_str = ','.join(rm_list)
|
||||
msg = f'清理完毕,本次共计清理{len(rm_list)}个\n {rm_str}'
|
||||
return R.success(msg)
|
||||
|
||||
# @admin.route('/get_use_py')
|
||||
# def admin_get_use_py():
|
||||
# if not verfy_token():
|
||||
# return R.failed('请登录后再试')
|
||||
# lsg = storage_service()
|
||||
# use_py = lsg.getItem('USE_PY')
|
||||
# state = 1 if use_py else 0
|
||||
# return R.success(state)
|
||||
|
||||
@admin.route('/upload', methods=['POST'])
|
||||
def upload_file():
|
||||
args = request.args
|
||||
force = args.get('force')
|
||||
if not verfy_token():
|
||||
return render_template('login.html')
|
||||
if request.method == 'POST':
|
||||
try:
|
||||
file = request.files['file']
|
||||
filename = secure_filename(file.filename)
|
||||
logger.info(f'推荐安全文件命名:{filename}')
|
||||
savePath = f'js/{file.filename}'
|
||||
# print(savePath)
|
||||
if os.path.exists(savePath) and not force:
|
||||
return R.failed(f'上传失败,文件已存在,请先查看删除再试')
|
||||
with open('js/模板.js', encoding='utf-8') as f2:
|
||||
before = f2.read().split('export')[0]
|
||||
end_code = """\nif (rule.模板 && muban.hasOwnProperty(rule.模板)) {rule = Object.assign(muban[rule.模板], rule);}"""
|
||||
upcode = file.stream.read().decode('utf-8')
|
||||
check_to_run = before + upcode + end_code
|
||||
# print(check_to_run)
|
||||
# try:
|
||||
# loader, _ = runJScode(check_to_run)
|
||||
# rule = loader.eval('rule')
|
||||
# if not rule:
|
||||
# return R.failed('文件上传失败,检测到上传的文件不是drpy框架支持的源代码')
|
||||
# except Exception as e:
|
||||
# logger.info(f'上传文件发生了错误:{e}')
|
||||
# return R.failed('文件上传失败,检测到上传的文件不是drpy框架支持的源代码')
|
||||
|
||||
try:
|
||||
ctx = Context()
|
||||
ctx.eval(check_to_run)
|
||||
js_ret = ctx.get('rule')
|
||||
rule_json = js_ret.json() # 规则的json字符串
|
||||
ruleDict = ujson.loads(rule_json)
|
||||
if not ruleDict:
|
||||
return R.failed('文件上传失败,检测到上传的文件不是drpy框架支持的源代码')
|
||||
except Exception as e:
|
||||
logger.info(f'上传文件发生了错误:{e}')
|
||||
return R.failed('文件上传失败,检测到上传的文件不是drpy框架支持的源代码')
|
||||
|
||||
# print(savePath)
|
||||
file.seek(0) # 读取后变成空文件,重新赋能
|
||||
file.save(savePath)
|
||||
return R.success('文件上传成功')
|
||||
except Exception as e:
|
||||
return R.failed(f'文件上传失败!{e}')
|
||||
else:
|
||||
# return render_template('upload.html')
|
||||
return R.failed('文件上传失败')
|
||||
|
||||
|
||||
@admin.route('/login', methods=['GET', 'POST'])
|
||||
def login_api():
|
||||
username = getParmas('username')
|
||||
password = getParmas('password')
|
||||
autologin = getParmas('autologin')
|
||||
if not all([username, password]):
|
||||
return R.failed('账号密码字段必填')
|
||||
token = md5(f'{username};{password}')
|
||||
check = verfy_token(token=token)
|
||||
if check:
|
||||
# response = make_response(redirect('/admin'))
|
||||
response = make_response(R.success('登录成功'))
|
||||
response.set_cookie('token', token)
|
||||
return response
|
||||
else:
|
||||
return R.failed('登录失败,用户名或密码错误')
|
||||
|
||||
|
||||
@admin.route('/logtail')
|
||||
def admin_logtail():
|
||||
if not verfy_token():
|
||||
return R.failed('请登录后再试')
|
||||
return render_template('logtail.html')
|
||||
|
||||
|
||||
@admin.route('/lives')
|
||||
def admin_lives():
|
||||
if not verfy_token():
|
||||
return R.failed('请登录后再试')
|
||||
# print(dir(request))
|
||||
# 完整地址: request.base_url url
|
||||
# 带http的前缀 host_url root_url
|
||||
# 不带http的前缀 host
|
||||
# 当前路径 path
|
||||
host_url = request.host_url
|
||||
|
||||
def get_lives():
|
||||
base_path = os.path.dirname(os.path.abspath(__file__)) # 当前文件所在目录
|
||||
# print(base_path)
|
||||
live_path = os.path.join(base_path, '../txt/lives')
|
||||
# print(live_path)
|
||||
files = os.listdir(live_path)
|
||||
# print(files)
|
||||
# files = list(filter(lambda x: str(x).endswith('.txt') and str(x).find('模板') < 0, files))
|
||||
files = list(
|
||||
filter(lambda x: str(x).split('.')[-1] in ['txt', 'json', 'm3u'] and str(x).find('模板') < 0, files))
|
||||
files = [f'{host_url}lives?path=txt/lives/{file}' for file in files]
|
||||
return files
|
||||
|
||||
files = '\n'.join(get_lives())
|
||||
response = make_response(files)
|
||||
response.headers['Content-Type'] = 'text/plain; charset=utf-8'
|
||||
return response
|
30
JN/dr_py/controllers/classes.py
Normal file
@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# File : classes.py
|
||||
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
|
||||
# Date : 2022/9/6
|
||||
|
||||
from base.database import db
|
||||
from utils.log import logger
|
||||
from models.ruleclass import RuleClass
|
||||
|
||||
def getClasses():
|
||||
if not db:
|
||||
msg = '未提供数据库连接'
|
||||
logger.info(msg)
|
||||
return []
|
||||
res = db.session.query(RuleClass).all()
|
||||
return [rc.name for rc in res]
|
||||
|
||||
def getClassInfo(cls):
|
||||
if not db:
|
||||
msg = f'未提供数据库连接,获取{cls}详情失败'
|
||||
logger.info(msg)
|
||||
return None
|
||||
logger.info(f'开始查询{cls}的分类详情')
|
||||
res = db.session.query(RuleClass).filter(RuleClass.name == cls).first()
|
||||
if res:
|
||||
logger.info(str(res))
|
||||
return str(res)
|
||||
else:
|
||||
return f'数据库不存在{cls}的分类缓存'
|
30
JN/dr_py/controllers/cls.py
Normal file
@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# File : CLS.py
|
||||
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
|
||||
# Date : 2022/9/6
|
||||
|
||||
from flask import Blueprint
|
||||
from controllers.classes import getClasses,getClassInfo
|
||||
from base.R import R
|
||||
from utils.log import logger
|
||||
from base.database import db
|
||||
from models.ruleclass import RuleClass
|
||||
|
||||
cls = Blueprint("cls", __name__)
|
||||
|
||||
@cls.route('/get/<cls>')
|
||||
def getClassInfoApi(cls):
|
||||
info = getClassInfo(cls)
|
||||
return R.ok(info)
|
||||
|
||||
@cls.route('/clear/<cls>')
|
||||
def clearClassApi(cls):
|
||||
logger.info(f'开始查询{cls}的分类详情')
|
||||
res = db.session.query(RuleClass).filter(RuleClass.name == cls)
|
||||
if res:
|
||||
res.delete()
|
||||
db.session.commit()
|
||||
return R.success(f'已清除{cls}的分类缓存')
|
||||
else:
|
||||
return R.failed(f'数据库不存在{cls}的分类缓存')
|
1645
JN/dr_py/controllers/cms.py
Normal file
513
JN/dr_py/controllers/home.py
Normal file
@ -0,0 +1,513 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# File : index.py
|
||||
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
|
||||
# Date : 2022/9/6
|
||||
import json
|
||||
import ujson
|
||||
import os
|
||||
import re
|
||||
|
||||
from flask import Blueprint,abort,render_template,render_template_string,url_for,redirect,make_response,send_from_directory,request
|
||||
from controllers.service import storage_service,rules_service,parse_service
|
||||
from controllers.classes import getClasses,getClassInfo
|
||||
|
||||
from utils.files import getPics,custom_merge,getAlist,get_live_url,get_multi_rules,getCustonDict
|
||||
from js.rules import getRules,getPys
|
||||
from utils.encode import parseText,base64Encode,base64Decode
|
||||
from base.R import R
|
||||
from utils.system import getHost,is_linux
|
||||
from utils.cfg import cfg
|
||||
from utils import parser
|
||||
from utils.ua import time,get_interval
|
||||
from utils.log import logger
|
||||
from utils.update import getLocalVer,getHotSuggest
|
||||
from js.rules import getJxs
|
||||
import random
|
||||
from utils.web import getParmas,verfy_token
|
||||
from utils.common_api import js_render
|
||||
import functools
|
||||
|
||||
|
||||
home = Blueprint("home", __name__,static_folder='/static')
|
||||
|
||||
@home.route('/')
|
||||
def forbidden(): # put application's code here
|
||||
abort(403)
|
||||
|
||||
@home.route('/favicon.ico') # 设置icon
|
||||
def favicon():
|
||||
# return home.send_static_file('img/favicon.svg')
|
||||
return redirect('/static/img/favicon.svg')
|
||||
# 对于当前文件所在路径,比如这里是static下的favicon.ico
|
||||
# return send_from_directory(os.path.join(app.root_path, 'static'), 'img/favicon.svg', mimetype='image/vnd.microsoft.icon')
|
||||
|
||||
@home.route('/index')
|
||||
def index():
|
||||
sup_port = cfg.get('SUP_PORT', 9001)
|
||||
lsg = storage_service()
|
||||
pid_url = lsg.getItem('PID_URL')
|
||||
manager0 = ':'.join(getHost(0).split(':')[0:2])
|
||||
manager1 = ':'.join(getHost(1).split(':')[0:2])
|
||||
manager2 = pid_url or ':'.join(getHost(2).split(':')[0:2]).replace('https','http')
|
||||
if sup_port:
|
||||
manager0 += f':{sup_port}'
|
||||
manager1 += f':{sup_port}'
|
||||
if not pid_url:
|
||||
manager2 += f':{sup_port}'
|
||||
# print(manager2)
|
||||
ver = getLocalVer()
|
||||
return render_template('index.html',ver=ver,getHost=getHost,manager0=manager0,manager1=manager1,manager2=manager2,is_linux=is_linux())
|
||||
|
||||
@home.route('/rules/clear')
|
||||
def rules_to_clear():
|
||||
return render_template('rules_to_clear.html',rules=getRules(),classes=getClasses())
|
||||
|
||||
@home.route('/rules/view')
|
||||
def rules_to_view():
|
||||
return render_template('rules_to_view.html',rules=getRules(),classes=getClasses())
|
||||
|
||||
@home.route('/pics')
|
||||
def random_pics():
|
||||
id = getParmas('id')
|
||||
# print(f'id:{id}')
|
||||
pics = getPics()
|
||||
# print(pics)
|
||||
new_conf = cfg
|
||||
lsg = storage_service()
|
||||
store_conf_dict = lsg.getStoreConfDict()
|
||||
new_conf.update(store_conf_dict)
|
||||
if not new_conf.WALL_PAPER and len(pics) > 0:
|
||||
if id and f'images/{id}.jpg' in pics:
|
||||
pic = f'images/{id}.jpg'
|
||||
else:
|
||||
pic = random.choice(pics)
|
||||
file = open(pic, "rb").read()
|
||||
response = make_response(file)
|
||||
response.headers['Content-Type'] = 'image/jpeg'
|
||||
return response
|
||||
else:
|
||||
return redirect(new_conf.WALL_PAPER)
|
||||
|
||||
@home.route('/clear')
|
||||
def clear_rule():
|
||||
rule = getParmas('rule')
|
||||
if not rule:
|
||||
return R.failed('规则字段必填')
|
||||
cache_path = os.path.abspath(f'cache/{rule}.js')
|
||||
if not os.path.exists(cache_path):
|
||||
return R.failed('服务端没有此规则的缓存文件!'+cache_path)
|
||||
os.remove(cache_path)
|
||||
return R.success('成功删除文件:'+cache_path)
|
||||
|
||||
@home.route("/plugin/<name>",methods=['GET'])
|
||||
def plugin(name):
|
||||
# name=道长影视模板.js
|
||||
if not name or not name.split('.')[-1] in ['js','txt','py','json']:
|
||||
return R.failed(f'非法猥亵,未指定文件名。必须包含js|txt|json|py')
|
||||
try:
|
||||
return parser.toJs(name)
|
||||
except Exception as e:
|
||||
return R.failed(f'非法猥亵\n{e}')
|
||||
|
||||
@home.route('/files/<name>')
|
||||
def get_files(name):
|
||||
base_path = 'base/files'
|
||||
os.makedirs(base_path,exist_ok=True)
|
||||
file_path = os.path.join(base_path, f'{name}')
|
||||
if not os.path.exists(file_path):
|
||||
return R.failed(f'{file_path}文件不存在')
|
||||
|
||||
with open(file_path, mode='rb') as f:
|
||||
file_byte = f.read()
|
||||
response = make_response(file_byte)
|
||||
filename = name
|
||||
response.headers['Content-Type'] = 'application/octet-stream'
|
||||
response.headers['Content-Disposition'] = f'attachment;filename="{filename}"'
|
||||
return response
|
||||
|
||||
@home.route('/txt/<path:filename>')
|
||||
def custom_static_txt(filename):
|
||||
# 自定义静态目录 {{ url_for('custom_static',filename='help.txt')}}
|
||||
# print(filename)
|
||||
return send_from_directory('txt', filename)
|
||||
|
||||
@home.route('/libs/<path:filename>')
|
||||
def custom_static_libs(filename):
|
||||
# 自定义静态目录 {{ url_for('custom_static',filename='help.txt')}}
|
||||
# print(filename)
|
||||
return send_from_directory('libs', filename)
|
||||
|
||||
# @home.route('/js/<path:filename>')
|
||||
# def custom_static_js(filename):
|
||||
# # 自定义静态目录 {{ url_for('custom_static',filename='help.txt')}}
|
||||
# # print(filename)
|
||||
# return send_from_directory('js', filename)
|
||||
|
||||
@home.route('/js/<path:name>',methods=['GET'])
|
||||
def custom_static_js(name):
|
||||
# 自定义静态目录 {{ url_for('custom_static',filename='help.txt')}}
|
||||
# print(name)
|
||||
return js_render(name)
|
||||
|
||||
@home.route('/raw/js/<path:filename>')
|
||||
def custom_raw_js(filename):
|
||||
return send_from_directory('js', filename)
|
||||
|
||||
# @home.route('/txt/<name>')
|
||||
# def get_txt_files(name):
|
||||
# base_path = 'txt'
|
||||
# os.makedirs(base_path,exist_ok=True)
|
||||
# file_path = os.path.join(base_path, f'{name}')
|
||||
# if not os.path.exists(file_path):
|
||||
# return R.failed(f'{file_path}文件不存在')
|
||||
#
|
||||
# with open(file_path, mode='r',encoding='utf-8') as f:
|
||||
# file_byte = f.read()
|
||||
# response = make_response(file_byte)
|
||||
# response.headers['Content-Type'] = 'text/plain; charset=utf-8'
|
||||
# return response
|
||||
|
||||
|
||||
@home.route('/lives')
|
||||
def get_lives():
|
||||
# ?path=base/live.txt
|
||||
path = getParmas('path')
|
||||
live_path = path or 'base/直播.txt'
|
||||
if not re.search('(txt|json|conf)$',live_path,re.M|re.S) or not re.search('^(txt|base)',live_path,re.M|re.S):
|
||||
abort(403)
|
||||
if not os.path.exists(live_path):
|
||||
# with open(live_path,mode='w+',encoding='utf-8') as f:
|
||||
# f.write('')
|
||||
return ''
|
||||
|
||||
with open(live_path,encoding='utf-8') as f:
|
||||
live_text = f.read()
|
||||
if len(live_text) > 100 and live_text.find('http') < 0:
|
||||
try:
|
||||
live_text = base64Decode(live_text)
|
||||
logger.info(f'{path} base64解码完毕')
|
||||
except Exception as e:
|
||||
logger.info(f'{path} base64解码失败:{e}')
|
||||
response = make_response(live_text)
|
||||
response.headers['Content-Type'] = 'text/plain; charset=utf-8'
|
||||
return response
|
||||
|
||||
@home.route('/liveslib')
|
||||
def get_liveslib():
|
||||
lsg = storage_service()
|
||||
SPIDER_JAR = lsg.getItem('SPIDER_JAR', 'custom_spider.jar')
|
||||
live_path = f'libs/jar/{SPIDER_JAR}'
|
||||
logger.info(f'SPIDER_JAR:{SPIDER_JAR}>>当前系统挂载的指定jar文件位置:{live_path}')
|
||||
if not os.path.exists(live_path):
|
||||
with open(live_path,mode='w+',encoding='utf-8') as f:
|
||||
f.write('')
|
||||
|
||||
with open(live_path,mode='rb') as f:
|
||||
live_text = f.read()
|
||||
response = make_response(live_text)
|
||||
filename = 'custom_spider.jar'
|
||||
response.headers['Content-Type'] = 'application/octet-stream'
|
||||
response.headers['Content-Disposition'] = f'attachment;filename="{filename}"'
|
||||
return response
|
||||
|
||||
@home.route('/hotsugg')
|
||||
def get_hot_search():
|
||||
s_from = getParmas('from')
|
||||
size = getParmas('size')
|
||||
data = getHotSuggest(s_from,size)
|
||||
return R.success('获取成功',data)
|
||||
|
||||
def merged_hide(merged_config):
|
||||
t1 = time()
|
||||
store_rule = rules_service()
|
||||
hide_rules = store_rule.getHideRules()
|
||||
hide_rule_names = list(map(lambda x: x['name'], hide_rules))
|
||||
# print(hide_rule_names)
|
||||
all_cnt = len(merged_config['sites'])
|
||||
|
||||
def filter_show(x):
|
||||
name = x['api'].split('rule=')[1].split('&')[0] if 'rule=' in x['api'] else x['key'].replace('dr_','')
|
||||
# print(name)
|
||||
if not str(x['key']).startswith('dr_') and name == 'drpy':
|
||||
name = x['key']
|
||||
return name not in hide_rule_names
|
||||
|
||||
merged_config['sites'] = list(filter(filter_show, merged_config['sites']))
|
||||
logger.info(f'数据库筛选隐藏规则耗时{get_interval(t1)}毫秒,共计{all_cnt}条规则,隐藏后可渲染{len(merged_config["sites"])}条规则')
|
||||
|
||||
@home.route('/config/<int:mode>')
|
||||
def config_render(mode):
|
||||
# print(dict(app.config))
|
||||
tt = time()
|
||||
UA = request.headers['User-Agent']
|
||||
ver = getParmas('ver')
|
||||
sp = getParmas('sp') # 优选
|
||||
logger.info(f'ver:{ver},UA:{UA}')
|
||||
if ver not in ['1','2']:
|
||||
ISTVB = 'okhttp/3' in UA
|
||||
elif ver == '1':
|
||||
ISTVB = False
|
||||
elif ver == '2':
|
||||
ISTVB = True
|
||||
# print(ISTVB)
|
||||
if mode == 1:
|
||||
jyw_ip = getHost(mode)
|
||||
logger.info(jyw_ip)
|
||||
new_conf = cfg
|
||||
lsg = storage_service()
|
||||
store_conf_dict = lsg.getStoreConfDict()
|
||||
new_conf.update(store_conf_dict)
|
||||
# print(new_conf)
|
||||
# print(type(new_conf),new_conf)
|
||||
host = getHost(mode)
|
||||
# ali_token = lsg.getItem('ALI_TOKEN')
|
||||
ali_token = new_conf.ALI_TOKEN
|
||||
xr_mode = new_conf.XR_MODE
|
||||
js_proxy = new_conf.JS_PROXY
|
||||
js0_password = new_conf.JS0_PASSWORD
|
||||
js_mode = int(new_conf.JS_MODE or 0)
|
||||
print(f'{type(js_mode)} jsmode:{js_mode}')
|
||||
# print(ali_token)
|
||||
customConfig = getCustonDict(host,ali_token,js0_password)
|
||||
# print(customConfig)
|
||||
jxs = getJxs(host=host)
|
||||
use_py = lsg.getItem('USE_PY')
|
||||
pys = getPys() if use_py else []
|
||||
# print(pys)
|
||||
alists = getAlist()
|
||||
alists_str = json.dumps(alists, ensure_ascii=False)
|
||||
live_url = get_live_url(new_conf,mode)
|
||||
rules = getRules('js',js_mode)
|
||||
rules = get_multi_rules(rules)
|
||||
# html = render_template('config.txt',rules=getRules('js'),host=host,mode=mode,jxs=jxs,base64Encode=base64Encode,config=new_conf)
|
||||
if new_conf.EXT_FUNC and new_conf.EXT_FUNC.strip():
|
||||
try:
|
||||
new_conf.EXT_FUNC = json.loads(new_conf.EXT_FUNC)
|
||||
logger.info(f'扩展规则加载成功,共计:{len(new_conf.EXT_FUNC)}')
|
||||
except Exception as e:
|
||||
logger.info(f'加载扩展规则发生错误:{e}')
|
||||
new_conf.EXT_FUNC = []
|
||||
else:
|
||||
new_conf.EXT_FUNC = []
|
||||
|
||||
html = render_template('config.txt',js0_password=js0_password,UA=UA,xr_mode=xr_mode,ISTVB=ISTVB,pys=pys,rules=rules,host=host,mode=mode,js_mode=js_mode,jxs=jxs,alists=alists,alists_str=alists_str,live_url=live_url,config=new_conf)
|
||||
merged_config = custom_merge(parseText(html),customConfig)
|
||||
# print(merged_config['sites'])
|
||||
merged_hide(merged_config)
|
||||
# response = make_response(html)
|
||||
# print(len(merged_config['sites']))
|
||||
# print(merged_config['sites'])
|
||||
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'])
|
||||
parses = sort_parses_by_order(merged_config['parses'],host)
|
||||
# print(parses)
|
||||
merged_config['parses'] = parses
|
||||
config_text = json.dumps(merged_config,ensure_ascii=False,indent=1)
|
||||
|
||||
# 依赖代理逻辑修改,改为admin/view去动态代理
|
||||
# if js_proxy:
|
||||
# # print('js_proxy:',js_proxy)
|
||||
# if '=>' in js_proxy:
|
||||
# oldsrc = js_proxy.split('=>')[0]
|
||||
# newsrc = js_proxy.split('=>')[1]
|
||||
# print(f'js1源代理已启用,全局替换{oldsrc}为{newsrc}')
|
||||
# config_text = config_text.replace(oldsrc,newsrc)
|
||||
|
||||
response = make_response(config_text)
|
||||
# response = make_response(str(merged_config))
|
||||
response.headers['Content-Type'] = 'application/json; charset=utf-8'
|
||||
logger.info(f'自动生成动态配置共计耗时:{get_interval(tt)}毫秒')
|
||||
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):
|
||||
if x['order'] > y['order']:
|
||||
return 1
|
||||
elif x['order'] < y['order']:
|
||||
return - 1
|
||||
else:
|
||||
if x['write_date'] < y['write_date']:
|
||||
return 1
|
||||
elif x['write_date'] > y['write_date']:
|
||||
return -1
|
||||
else:
|
||||
return 0
|
||||
|
||||
def sort_sites_by_order(sites,js_mode=0):
|
||||
rules = rules_service()
|
||||
rule_list = rules.query_all()
|
||||
# print(rule_list)
|
||||
rule_names = list(map(lambda x: x['name'], rule_list))
|
||||
# print(rule_names)
|
||||
# print(sites)
|
||||
for i in range(len(sites)):
|
||||
# sites[i]['id'] = i+1
|
||||
site_name = sites[i]['api'].split('rule=')[1].split('&')[0] if 'rule=' in sites[i]['api'] else sites[i]['key']
|
||||
if js_mode and str(site_name).startswith('dr'):
|
||||
site_name = site_name.replace('dr_','')
|
||||
if not str(sites[i]['key']).startswith('dr_') and site_name == 'drpy':
|
||||
site_name = sites[i]['key']
|
||||
# print(sites[i])
|
||||
# print(site_name)
|
||||
if site_name in rule_names:
|
||||
site_rule = rule_list[rule_names.index(site_name)]
|
||||
sites[i]['state'] = 1 if site_rule['state'] is None else site_rule['state']
|
||||
sites[i]['order'] = 0 if site_rule['order'] is None else site_rule['order']
|
||||
sites[i]['write_date'] = 0 if site_rule['write_date'] is None else site_rule['write_date'].timestamp()
|
||||
else:
|
||||
sites[i]['state'] = 1
|
||||
sites[i]['order'] = 0
|
||||
sites[i]['write_date'] = 0
|
||||
# sites[i]['site_name'] = site_name
|
||||
# print(sites)
|
||||
# sites.sort(key=lambda x: x['order'], reverse=False)
|
||||
sites.sort(key=functools.cmp_to_key(comp), reverse=False)
|
||||
# print(sites)
|
||||
for site in sites:
|
||||
del site['state']
|
||||
del site['order']
|
||||
del site['write_date']
|
||||
return sites
|
||||
|
||||
def sort_parses_by_order(parses,host):
|
||||
t1 = time()
|
||||
parse = parse_service()
|
||||
parse_list = parse.query_all()
|
||||
parse_url_list = list(map(lambda x: x['url'], parse_list))
|
||||
new_parses = []
|
||||
new_parses_url = []
|
||||
for i in range(len(parses)):
|
||||
# parses[i]['id'] = i + 1
|
||||
# 去重
|
||||
if parses[i]['url'] in new_parses_url:
|
||||
# print(f"重复的解析:{parses[i]['name']},{parses[i]['url']}")
|
||||
continue
|
||||
if str(parses[i]['url']).startswith(host):
|
||||
parses[i]['url'] = parses[i]['url'].replace(host,'')
|
||||
if parses[i]['url'] in parse_url_list:
|
||||
parse_rule = parse_list[parse_url_list.index(parses[i]['url'])]
|
||||
parses[i]['state'] = 1 if parse_rule['state'] is None else parse_rule['state']
|
||||
parses[i]['order'] = 0 if parse_rule['order'] is None else parse_rule['order']
|
||||
parses[i]['write_date'] = 0 if parse_rule['write_date'] is None else parse_rule['write_date'].timestamp()
|
||||
else:
|
||||
parses[i]['state'] = 1
|
||||
parses[i]['order'] = 0
|
||||
parses[i]['write_date'] = 0
|
||||
|
||||
if not parses[i].get('header'):
|
||||
parses[i]['header'] = {'User-Agent': 'Mozilla/5.0'}
|
||||
if str(parses[i]['url']).startswith('/'):
|
||||
parses[i]['url'] = host + parses[i]['url']
|
||||
new_parses.append(parses[i])
|
||||
new_parses_url.append(parses[i]['url'])
|
||||
new_parses.sort(key=functools.cmp_to_key(comp), reverse=False)
|
||||
# print(sites)
|
||||
for par in new_parses:
|
||||
del par['state']
|
||||
del par['order']
|
||||
del par['write_date']
|
||||
# print(new_parses)
|
||||
logger.info(f'{len(new_parses)}/{len(parses)}条解析解析排序耗时:{get_interval(t1)}毫秒')
|
||||
return new_parses
|
||||
|
||||
@home.route('/configs')
|
||||
def config_gen():
|
||||
if not verfy_token():
|
||||
return R.failed('请登录后再试')
|
||||
# 生成文件
|
||||
os.makedirs('txt',exist_ok=True)
|
||||
new_conf = cfg
|
||||
lsg = storage_service()
|
||||
store_conf_dict = lsg.getStoreConfDict()
|
||||
new_conf.update(store_conf_dict)
|
||||
if new_conf.EXT_FUNC and new_conf.EXT_FUNC.strip():
|
||||
try:
|
||||
new_conf.EXT_FUNC = json.loads(new_conf.EXT_FUNC)
|
||||
logger.info(f'扩展规则加载成功,共计:{len(new_conf.EXT_FUNC)}')
|
||||
except Exception as e:
|
||||
logger.info(f'加载扩展规则发生错误:{e}')
|
||||
new_conf.EXT_FUNC = []
|
||||
else:
|
||||
new_conf.EXT_FUNC = []
|
||||
try:
|
||||
use_py = lsg.getItem('USE_PY')
|
||||
js_mode = int(new_conf.JS_MODE or 0)
|
||||
js0_password = new_conf.JS0_PASSWORD
|
||||
pys = getPys() if use_py else False
|
||||
alists = getAlist()
|
||||
alists_str = json.dumps(alists,ensure_ascii=False)
|
||||
rules = getRules('js',js_mode)
|
||||
rules = get_multi_rules(rules)
|
||||
host0 = getHost(0)
|
||||
jxs = getJxs(host=host0)
|
||||
set_local = render_template('config.txt',js0_password=js0_password,pys=pys,rules=rules,alists=alists,alists_str=alists_str,live_url=get_live_url(new_conf,0),mode=0,js_mode=js_mode,host=host0,jxs=jxs,config=new_conf)
|
||||
# print(set_local)
|
||||
host1 = getHost(1)
|
||||
jxs = getJxs(host=host1)
|
||||
set_area = render_template('config.txt',js0_password=js0_password,pys=pys,rules=rules,alists=alists,alists_str=alists_str,live_url=get_live_url(new_conf,1),mode=1,js_mode=js_mode,host=host1,jxs=jxs,config=new_conf)
|
||||
host2 = getHost(2) or host1
|
||||
# print('远程地址:'+host2)
|
||||
jxs = getJxs(host=host2)
|
||||
set_online = render_template('config.txt',js0_password=js0_password,pys=pys,rules=rules,alists=alists,alists_str=alists_str,live_url=get_live_url(new_conf,2),mode=1,js_mode=js_mode,host=host2,jxs=jxs,config=new_conf)
|
||||
ali_token = new_conf.ALI_TOKEN
|
||||
# parses = []
|
||||
with open('txt/pycms0.json','w+',encoding='utf-8') as f:
|
||||
customConfig = getCustonDict(host0,ali_token,js0_password)
|
||||
set_dict = custom_merge(parseText(set_local), customConfig)
|
||||
merged_hide(set_dict)
|
||||
set_dict['sites'] = sort_sites_by_order(set_dict['sites'], js_mode)
|
||||
# if not parses:
|
||||
# print('生成静态配置时初始化排序parses')
|
||||
# parses = sort_parses_by_order(set_dict['parses'])
|
||||
# set_dict['parses'] = parses
|
||||
set_dict['parses'] = sort_parses_by_order(set_dict['parses'],host0)
|
||||
# set_dict = json.loads(set_local)
|
||||
f.write(json.dumps(set_dict,ensure_ascii=False,indent=4))
|
||||
with open('txt/pycms1.json','w+',encoding='utf-8') as f:
|
||||
customConfig = getCustonDict(host1,ali_token,js0_password)
|
||||
set_dict = custom_merge(parseText(set_area), customConfig)
|
||||
merged_hide(set_dict)
|
||||
set_dict['sites'] = sort_sites_by_order(set_dict['sites'], js_mode)
|
||||
set_dict['parses'] = sort_parses_by_order(set_dict['parses'],host1)
|
||||
# set_dict = json.loads(set_area)
|
||||
f.write(json.dumps(set_dict,ensure_ascii=False,indent=4))
|
||||
|
||||
with open('txt/pycms2.json','w+',encoding='utf-8') as f:
|
||||
customConfig = getCustonDict(host2,ali_token,js0_password)
|
||||
set_dict = custom_merge(parseText(set_online), customConfig)
|
||||
merged_hide(set_dict)
|
||||
set_dict['sites'] = sort_sites_by_order(set_dict['sites'], js_mode)
|
||||
set_dict['parses'] = sort_parses_by_order(set_dict['parses'],host2)
|
||||
# set_dict = json.loads(set_online)
|
||||
f.write(json.dumps(set_dict,ensure_ascii=False,indent=4))
|
||||
files = [os.path.abspath(rf'txt\pycms{i}.json') for i in range(3)]
|
||||
# print(files)
|
||||
return R.success('猫配置生成完毕,文件位置在:\n'+'\n'.join(files))
|
||||
except Exception as e:
|
||||
return R.failed(f'配置文件生成错误:\n{e}')
|
||||
|
||||
@home.route("/info",methods=['get'])
|
||||
def info_all():
|
||||
data = storage_service.query_all()
|
||||
return R.ok(data=data)
|
176
JN/dr_py/controllers/layui.py
Normal file
@ -0,0 +1,176 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# File : layui.py
|
||||
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
|
||||
# Date : 2022/9/14
|
||||
import ujson
|
||||
from flask import Blueprint,request,render_template,jsonify,make_response,redirect
|
||||
|
||||
from utils.ua import UA
|
||||
from utils.web import getParmas,get_interval,layuiBack,verfy_token
|
||||
from utils.cfg import cfg
|
||||
from controllers.service import storage_service,rules_service,parse_service
|
||||
from utils.system import getHost
|
||||
from utils.files import getCustonDict,custom_merge
|
||||
from utils.encode import parseText
|
||||
from js.rules import getRules,getPys,getJxs
|
||||
from operator import itemgetter, attrgetter
|
||||
import functools
|
||||
|
||||
layui = Blueprint("layui", __name__)
|
||||
|
||||
@layui.route('/')
|
||||
def hello(): # put application's code here
|
||||
return jsonify({'msg':'hello layui'})
|
||||
|
||||
@layui.route('/index')
|
||||
def layui_index(): # put application's code here
|
||||
# return render_template('layui_index.html')
|
||||
if not verfy_token():
|
||||
return render_template('login.html')
|
||||
return render_template('layui_list.html')
|
||||
|
||||
@layui.route('/jxs')
|
||||
def layui_jxs(): # put application's code here
|
||||
# return render_template('layui_index.html')
|
||||
if not verfy_token():
|
||||
return render_template('login.html')
|
||||
return render_template('layui_jxs.html')
|
||||
|
||||
|
||||
def comp(x, y):
|
||||
if x['order'] > y['order']:
|
||||
return 1
|
||||
elif x['order'] < y['order']:
|
||||
return - 1
|
||||
else:
|
||||
if x['write_date'] < y['write_date']:
|
||||
return 1
|
||||
elif x['write_date'] > y['write_date']:
|
||||
return -1
|
||||
else:
|
||||
return 0
|
||||
|
||||
@layui.route('/api/list')
|
||||
def layui_rule_list():
|
||||
page = int(getParmas('page',1))
|
||||
limit = int(getParmas('limit',10))
|
||||
# print(f'page:{page},limit:{limit}')
|
||||
new_conf = cfg
|
||||
lsg = storage_service()
|
||||
store_conf_dict = lsg.getStoreConfDict()
|
||||
new_conf.update(store_conf_dict)
|
||||
host = getHost(2)
|
||||
customConfig = getCustonDict(host)
|
||||
jxs = []
|
||||
js0_password = lsg.getItem('JS0_PASSWORD')
|
||||
lsg = storage_service()
|
||||
use_py = lsg.getItem('USE_PY')
|
||||
pys = getPys() if use_py else []
|
||||
# print(pys)
|
||||
alists = []
|
||||
live_url = []
|
||||
local_rules = getRules('js')
|
||||
# print(local_rules)
|
||||
html = render_template('config.txt', pys=pys, rules=local_rules, host=host, mode=2, jxs=jxs, alists=alists,
|
||||
alists_str='[]', live_url=live_url, config=new_conf)
|
||||
# html = render_template('config.txt', js0_password=js0_password, UA=UA, xr_mode=1, ISTVB=1, pys=pys,
|
||||
# rules=local_rules, host=host, mode=2, js_mode=1, jxs=jxs, alists=alists,
|
||||
# alists_str='[]', live_url=live_url, config=new_conf)
|
||||
merged_config = custom_merge(parseText(html), customConfig)
|
||||
sites = merged_config['sites']
|
||||
rules = rules_service()
|
||||
rule_list = rules.query_all()
|
||||
rule_names = list(map(lambda x:x['name'],rule_list))
|
||||
# print(rule_list)
|
||||
# print(rule_names)
|
||||
# print(sites)
|
||||
for i in range(len(sites)):
|
||||
sites[i]['id'] = i+1
|
||||
site_name = sites[i]['api'].split('rule=')[1].split('&')[0] if 'rule=' in sites[i]['api'] else sites[i]['key']
|
||||
if not str(sites[i]['key']).startswith('dr_') and site_name == 'drpy':
|
||||
site_name = sites[i]['key']
|
||||
# print(sites[i])
|
||||
if site_name in rule_names:
|
||||
site_rule = rule_list[rule_names.index(site_name)]
|
||||
sites[i]['state'] = 1 if site_rule['state'] is None else site_rule['state']
|
||||
sites[i]['order'] = 0 if site_rule['order'] is None else site_rule['order']
|
||||
sites[i]['write_date'] = 0 if site_rule['write_date'] is None else site_rule['write_date'].timestamp()
|
||||
else:
|
||||
sites[i]['state'] = 1
|
||||
sites[i]['order'] = 0
|
||||
sites[i]['write_date'] = 0
|
||||
sites[i]['site_name'] = site_name
|
||||
|
||||
def multisort(sites, specs):
|
||||
"""
|
||||
https://zhuanlan.zhihu.com/p/109269549?utm_id=0
|
||||
多重排序,来自知乎的代码.明显只对了最后的元素进行排序.看完评论和实践发现不对
|
||||
:param sites:
|
||||
:param specs:
|
||||
:return:
|
||||
"""
|
||||
for key, reverse in specs:
|
||||
# sites.sort(key=attrgetter(key), reverse=reverse)
|
||||
sites.sort(key=lambda x:x[key], reverse=reverse)
|
||||
return sites
|
||||
|
||||
# multisort(sites, (('order', False), ('write_date', True)))
|
||||
# sites.sort(key=lambda x:x['order'],reverse=False)
|
||||
sites.sort(key=functools.cmp_to_key(comp),reverse=False)
|
||||
new_sites = sites[(page-1)*limit:page*limit]
|
||||
# print(new_sites)
|
||||
return layuiBack('获取成功',new_sites,count=len(sites))
|
||||
|
||||
@layui.route('/api/jx_list')
|
||||
def layui_jx_list():
|
||||
# 拖拽排序教程 https://blog.csdn.net/qq_41829337/article/details/126610406
|
||||
host = request.host_url.rstrip('/') # 获取当前访问链接对应的host
|
||||
page = int(getParmas('page',1))
|
||||
limit = int(getParmas('limit',10))
|
||||
new_conf = cfg
|
||||
lsg = storage_service()
|
||||
store_conf_dict = lsg.getStoreConfDict()
|
||||
new_conf.update(store_conf_dict)
|
||||
ali_token = new_conf.ALI_TOKEN
|
||||
xr_mode = new_conf.XR_MODE
|
||||
js0_password = new_conf.JS0_PASSWORD
|
||||
js_mode = int(new_conf.JS_MODE or 0)
|
||||
customConfig = getCustonDict(host, ali_token, js0_password)
|
||||
jxs = getJxs(host=host)
|
||||
rules = {'list': [{"key": "dr_MXONE", "name": "MXONE(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=MXONE&ext=txt/js/tg/MXONE.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
|
||||
], 'count': 1}
|
||||
html = render_template('config.txt', js0_password=js0_password, UA=UA, xr_mode=xr_mode, ISTVB=False, pys=[],
|
||||
rules=rules, host=host, mode=2, js_mode=js_mode, jxs=jxs, alists=[],
|
||||
alists_str='', live_url='', config=new_conf)
|
||||
merged_config = custom_merge(parseText(html), customConfig)
|
||||
parses = merged_config['parses']
|
||||
|
||||
parse = parse_service()
|
||||
parse_list = parse.query_all()
|
||||
parse_url_list = list(map(lambda x:x['url'],parse_list))
|
||||
|
||||
for i in range(len(parses)):
|
||||
parses[i]['id'] = i+1
|
||||
if str(parses[i]['url']).startswith(host):
|
||||
parses[i]['url'] = parses[i]['url'].replace(host,'')
|
||||
if parses[i]['url'] in parse_url_list:
|
||||
parse_rule = parse_list[parse_url_list.index(parses[i]['url'])]
|
||||
parses[i]['state'] = 1 if parse_rule['state'] is None else parse_rule['state']
|
||||
parses[i]['order'] = 0 if parse_rule['order'] is None else parse_rule['order']
|
||||
parses[i]['write_date'] = 0 if parse_rule['write_date'] is None else parse_rule['write_date'].timestamp()
|
||||
else:
|
||||
parses[i]['state'] = 1
|
||||
parses[i]['order'] = 0
|
||||
parses[i]['write_date'] = 0
|
||||
|
||||
if not parses[i].get('header'):
|
||||
parses[i]['header'] = {'User-Agent': 'Mozilla/5.0'}
|
||||
if isinstance(parses[i].get('header'),dict):
|
||||
parses[i]['header'] = ujson.dumps(parses[i]['header'],ensure_ascii=False)
|
||||
if isinstance(parses[i].get('ext'),dict):
|
||||
parses[i]['ext'] = ujson.dumps(parses[i]['ext'],ensure_ascii=False)
|
||||
|
||||
parses.sort(key=functools.cmp_to_key(comp), reverse=False)
|
||||
new_parses = parses[(page - 1) * limit:page * limit]
|
||||
return layuiBack('获取成功', new_parses, count=len(parses))
|
155
JN/dr_py/controllers/parse.py
Normal file
@ -0,0 +1,155 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# File : parse.py
|
||||
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
|
||||
# Date : 2022/9/24
|
||||
from flask import Blueprint, jsonify,redirect,make_response
|
||||
from utils.web import getParmas,get_interval
|
||||
import os
|
||||
from utils.cfg import cfg
|
||||
from utils.log import logger
|
||||
from utils.encode import OcrApi,base64ToImage
|
||||
from controllers.service import storage_service
|
||||
from utils.pyctx import py_ctx,getPreJs,runJScode,JsObjectWrapper,PyJsString,parseText,jsoup,time
|
||||
from utils.env import get_env
|
||||
import base64
|
||||
|
||||
parse = Blueprint("parse", __name__)
|
||||
|
||||
class R(object):
|
||||
|
||||
@classmethod
|
||||
def ok(self, msg='操作成功', url=None, extra=None):
|
||||
if extra is None:
|
||||
extra = {}
|
||||
header = {
|
||||
"user-agent": "Mozilla/5.0"
|
||||
}
|
||||
if 'bilivideo.c' in url:
|
||||
header.update({
|
||||
'referer':'https://www.bilibili.com/'
|
||||
})
|
||||
result = {"code": 200, "msg": msg, "url":url}
|
||||
result.update(header)
|
||||
result.update(extra)
|
||||
return jsonify(result)
|
||||
|
||||
@classmethod
|
||||
def error(self,msg="系统异常",code=404,extra=None):
|
||||
if extra is None:
|
||||
extra = {}
|
||||
result = {"code": code, "msg": msg}
|
||||
result.update(extra)
|
||||
return jsonify(result)
|
||||
|
||||
@classmethod
|
||||
def success(self,msg='操作成功', url=None,extra=None):
|
||||
return self.ok(msg,url,extra)
|
||||
|
||||
@classmethod
|
||||
def failed(self,msg="系统异常", code=404,extra=None):
|
||||
return self.error(msg,code,extra)
|
||||
|
||||
def 重定向(url:str):
|
||||
if isinstance(url, PyJsString):
|
||||
url = parseText(str(url))
|
||||
if str(url).startswith('http'):
|
||||
return f'redirect://{url}'
|
||||
else:
|
||||
return str(url)
|
||||
|
||||
def toast(url:str):
|
||||
if isinstance(url, PyJsString):
|
||||
url = parseText(str(url))
|
||||
return f'toast://{url}'
|
||||
|
||||
def image(text:str):
|
||||
if isinstance(text, PyJsString):
|
||||
text = parseText(str(text))
|
||||
return f'image://{text}'
|
||||
|
||||
@parse.route('/api/<path:filename>')
|
||||
def parse_home(filename):
|
||||
url = getParmas('url')
|
||||
# http://localhost:5705/parse/api/%E6%97%A0%E5%90%8D.js?url=https://www.iqiyi.com/v_ik3832z0go.html
|
||||
# http://localhost:5705/parse/api/哔哩.js?url=https://www.bilibili.com/bangumi/play/ep704873
|
||||
if not url or not url.startswith('http'):
|
||||
return R.failed(f'url必填!{url},且必须是http开头')
|
||||
base_path = 'jiexi'
|
||||
os.makedirs(base_path, exist_ok=True)
|
||||
file_path = os.path.join(base_path, filename)
|
||||
if not os.path.exists(file_path):
|
||||
return R.failed(f'{file_path}文件不存在')
|
||||
logger.info(f'开始尝试通过{filename}解析:{url}')
|
||||
|
||||
jsp = jsoup(url)
|
||||
env = get_env()
|
||||
py_ctx.update({
|
||||
'vipUrl': url,
|
||||
'fetch_params': {'headers': {'Referer':url}, 'timeout': 10, 'encoding': 'utf-8'},
|
||||
'jsp':jsp,
|
||||
'重定向':重定向,
|
||||
'toast':toast,
|
||||
'env':env,
|
||||
'image':image,
|
||||
'print':print,
|
||||
'log':logger.info,
|
||||
'getParmas':getParmas,
|
||||
'params':getParmas()
|
||||
})
|
||||
ctx = py_ctx
|
||||
with open(file_path,encoding='utf-8') as f:
|
||||
code = f.read()
|
||||
jscode = getPreJs() + code.strip().replace('js:', '', 1)
|
||||
# print(jscode)
|
||||
t1 = time()
|
||||
try:
|
||||
loader, _ = runJScode(jscode, ctx=ctx)
|
||||
realUrl = loader.eval('realUrl')
|
||||
if not realUrl:
|
||||
return R.failed(f'解析失败:{realUrl}')
|
||||
if isinstance(realUrl, PyJsString):
|
||||
realUrl = parseText(str(realUrl))
|
||||
if not realUrl or realUrl == url:
|
||||
return R.failed(f'解析失败',extra={'from':realUrl})
|
||||
# print(realUrl)
|
||||
if str(realUrl).startswith('redirect://'):
|
||||
return redirect(realUrl.split('redirect://')[1])
|
||||
elif str(realUrl).startswith('toast://'):
|
||||
return R.failed(str(realUrl).split('toast://')[1],extra={'from':url})
|
||||
elif str(realUrl).startswith('image://'):
|
||||
img_data = base64ToImage(str(realUrl).split('image://')[1])
|
||||
response = make_response(img_data)
|
||||
response.headers['Content-Type'] = 'image/jpeg'
|
||||
return response
|
||||
return R.success(f'{filename}解析成功',realUrl,{'time':f'{get_interval(t1)}毫秒','from':url})
|
||||
except Exception as e:
|
||||
msg = f'{filename}解析出错:{e}'
|
||||
logger.info(msg)
|
||||
return R.failed(msg,extra={'time':f'{get_interval(t1)}毫秒','from':url})
|
||||
|
||||
@parse.route('/ocr',methods=['POST'])
|
||||
def base64_ocr():
|
||||
lsg = storage_service()
|
||||
ocr_api = lsg.getItem('OCR_API',cfg.OCR_API)
|
||||
# print(ocr_api)
|
||||
# print('params:',getParmas())
|
||||
img = getParmas('img')
|
||||
# print(img)
|
||||
if not img:
|
||||
return R.failed('识别失败:缺少img参数')
|
||||
try:
|
||||
img_bytes = base64.b64decode(img)
|
||||
except:
|
||||
return R.failed('识别失败:img参数不是正确的base64格式')
|
||||
# print(img_bytes)
|
||||
img_path = 'txt/pluto'
|
||||
os.makedirs(img_path,exist_ok=True)
|
||||
with open(f'{img_path}/yzm.png','wb+') as f:
|
||||
f.write(img_bytes)
|
||||
ocr = OcrApi(ocr_api)
|
||||
code = ocr.classification(img_bytes)
|
||||
# resp = R.success('识别成功',code)
|
||||
# print(resp.json)
|
||||
resp = code
|
||||
return resp
|
263
JN/dr_py/controllers/service.py
Normal file
@ -0,0 +1,263 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# File : service.py.py
|
||||
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
|
||||
# Date : 2022/9/6
|
||||
|
||||
from base.R import copy_utils
|
||||
from models.storage import Storage
|
||||
from models.ruleclass import RuleClass
|
||||
from models.vipParse import VipParse
|
||||
from utils.cfg import cfg
|
||||
from base.database import db
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
|
||||
class storage_service(object):
|
||||
|
||||
@staticmethod
|
||||
def query_all():
|
||||
# 查询所有
|
||||
res = Storage.query.all()
|
||||
return copy_utils.obj_to_list(res)
|
||||
|
||||
def __init__(self):
|
||||
conf_list = ['LIVE_URL', 'USE_PY', 'JS_MODE', 'JS0_DISABLE', 'JS0_PASSWORD', 'PLAY_URL', 'PLAY_DISABLE',
|
||||
'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','SPIDER_JAR', 'EXT_FUNC']
|
||||
for conf in conf_list:
|
||||
if not self.hasItem(conf):
|
||||
print(f'开始初始化{conf}')
|
||||
self.setItem(conf, cfg.get(conf))
|
||||
|
||||
@classmethod
|
||||
def getStoreConf(self):
|
||||
# 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',
|
||||
'WALL_PAPER', 'UNAME', 'PWD', 'CATE_EXCLUDE', 'TAB_EXCLUDE', 'SEARCH_TIMEOUT', 'SEARCH_LIMIT',
|
||||
'MULTI_MODE', 'XR_MODE', 'JS_PROXY', 'UPDATE_PROXY', 'ENV', 'SPECIAL', 'SPIDER_JAR', 'EXT_FUNC', 'ALI_TOKEN', 'OCR_API']
|
||||
conf_name_list = ['直播地址', '直播模式', '远程地址', '进程管理链接', '启用py源', 'js模式', '禁用js0',
|
||||
'js0密码', '禁用免嗅', '免嗅模式', '启用壁纸', '壁纸链接', '管理账号',
|
||||
'管理密码', '分类排除', '线路排除', '聚搜超时', '搜索条数', '多源模式', '仙人模式', '源代理',
|
||||
'升级代理', '环境变量', '优选源', '挂载JAR', '辅助规则', '阿里tk', 'OCR接口']
|
||||
conf_lists = []
|
||||
for i in range(len(conf_list)):
|
||||
conf = conf_list[i]
|
||||
conf_lists.append({
|
||||
'key': conf,
|
||||
'value': self.getItem(conf),
|
||||
'name': conf_name_list[i]
|
||||
})
|
||||
return conf_lists
|
||||
|
||||
@classmethod
|
||||
def getStoreConfDict(self):
|
||||
store_conf = self.getStoreConf()
|
||||
store_conf_dict = {}
|
||||
for stc in store_conf:
|
||||
store_conf_dict[stc['key']] = stc['value']
|
||||
return store_conf_dict
|
||||
|
||||
@classmethod
|
||||
def getItem(self, key, value=''):
|
||||
res = Storage.getItem(key, value)
|
||||
if str(res) == '0' or str(res) == 'false' or str(res) == 'False':
|
||||
return 0
|
||||
return res
|
||||
|
||||
@classmethod
|
||||
def hasItem(self, key):
|
||||
return Storage.hasItem(key)
|
||||
|
||||
@classmethod
|
||||
def setItem(self, key, value):
|
||||
return Storage.setItem(key, value)
|
||||
|
||||
@classmethod
|
||||
def clearItem(self, key):
|
||||
return Storage.clearItem(key)
|
||||
|
||||
|
||||
class rules_service(object):
|
||||
|
||||
@staticmethod
|
||||
def query_all():
|
||||
# 查询所有
|
||||
res = RuleClass.query.order_by(RuleClass.order.asc(), RuleClass.write_date.desc()).all()
|
||||
# print(res)
|
||||
# res = RuleClass.query.order_by(RuleClass.write_date.asc()).all()
|
||||
return copy_utils.obj_to_list(res)
|
||||
|
||||
@classmethod
|
||||
def hasItem(self, key):
|
||||
return RuleClass.hasItem(key)
|
||||
|
||||
def getState(self, key):
|
||||
res = RuleClass.query.filter(RuleClass.name == key).first()
|
||||
if not res:
|
||||
return 1
|
||||
# print(res)
|
||||
state = res.state
|
||||
if state is None:
|
||||
state = 1
|
||||
return state or 0
|
||||
|
||||
def setState(self, key, state=0):
|
||||
res = RuleClass.query.filter(RuleClass.name == key).first()
|
||||
if res:
|
||||
res.state = state
|
||||
db.session.add(res)
|
||||
else:
|
||||
res = RuleClass(name=key, state=state)
|
||||
db.session.add(res)
|
||||
db.session.flush() # 获取id
|
||||
try:
|
||||
db.session.commit()
|
||||
return res.id
|
||||
except Exception as e:
|
||||
print(f'发生了错误:{e}')
|
||||
return None
|
||||
|
||||
def setOrder(self, key, order=0):
|
||||
res = RuleClass.query.filter(RuleClass.name == key).first()
|
||||
if res:
|
||||
res.order = order
|
||||
# print(f'{res.name}设置order为:{order}')
|
||||
if res.order == order:
|
||||
res.write_date = datetime.now()
|
||||
# res.write_date = res.write_date + timedelta(hours=2)
|
||||
db.session.add(res)
|
||||
else:
|
||||
res = RuleClass(name=key, order=order)
|
||||
db.session.add(res)
|
||||
db.session.flush() # 获取id
|
||||
try:
|
||||
db.session.commit()
|
||||
return res.id
|
||||
except Exception as e:
|
||||
print(f'发生了错误:{e}')
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def getHideRules():
|
||||
res = RuleClass.query.filter(RuleClass.state == 0).all()
|
||||
return copy_utils.obj_to_list(res)
|
||||
|
||||
|
||||
class parse_service(object):
|
||||
|
||||
@staticmethod
|
||||
def query_all():
|
||||
# 查询所有
|
||||
res = VipParse.query.order_by(VipParse.order.asc(), VipParse.write_date.desc()).all()
|
||||
# print(res)
|
||||
# res = RuleClass.query.order_by(RuleClass.write_date.asc()).all()
|
||||
return copy_utils.obj_to_list(res)
|
||||
|
||||
@classmethod
|
||||
def hasItem(self, key):
|
||||
return VipParse.hasItem(key)
|
||||
|
||||
def getState(self, key):
|
||||
res = VipParse.query.filter(VipParse.url == key).first()
|
||||
if not res:
|
||||
return 1
|
||||
# print(res)
|
||||
state = res.state
|
||||
if state is None:
|
||||
state = 1
|
||||
return state or 0
|
||||
|
||||
def setState(self, key, state=0):
|
||||
res = VipParse.query.filter(VipParse.url == key).first()
|
||||
if res:
|
||||
res.state = state
|
||||
db.session.add(res)
|
||||
else:
|
||||
res = VipParse(url=key, state=state)
|
||||
db.session.add(res)
|
||||
db.session.flush() # 获取id
|
||||
try:
|
||||
db.session.commit()
|
||||
return res.id
|
||||
except Exception as e:
|
||||
print(f'发生了错误:{e}')
|
||||
return None
|
||||
|
||||
def setOrder(self, key, order=0):
|
||||
res = VipParse.query.filter(VipParse.url == key).first()
|
||||
if res:
|
||||
res.order = order
|
||||
# print(f'{res.name}设置order为:{order}')
|
||||
if res.order == order:
|
||||
res.write_date = datetime.now()
|
||||
# res.write_date = res.write_date + timedelta(hours=2)
|
||||
db.session.add(res)
|
||||
else:
|
||||
res = VipParse(url=key, order=order)
|
||||
db.session.add(res)
|
||||
db.session.flush() # 获取id
|
||||
try:
|
||||
db.session.commit()
|
||||
return res.id
|
||||
except Exception as e:
|
||||
print(f'发生了错误:{e}')
|
||||
return None
|
||||
|
||||
def setEverything(self, key, name, state, typeno, order, ext, header):
|
||||
res = VipParse.query.filter(VipParse.url == key).first()
|
||||
if res:
|
||||
res.name = name
|
||||
res.state = state
|
||||
res.type = typeno
|
||||
res.order = order
|
||||
res.ext = ext
|
||||
res.header = header
|
||||
res.write_date = datetime.now()
|
||||
db.session.add(res)
|
||||
else:
|
||||
res = VipParse(name=name, url=key, state=state, type=typeno, order=order, ext=ext, header=header)
|
||||
db.session.add(res)
|
||||
db.session.flush() # 获取id
|
||||
try:
|
||||
db.session.commit()
|
||||
return res.id
|
||||
except Exception as e:
|
||||
print(f'发生了错误:{e}')
|
||||
return None
|
||||
|
||||
def saveData(self, obj):
|
||||
"""
|
||||
db.session.add_all([]) 可以一次性保存多条数据,但是这里用不到,因为涉及修改和新增一起的
|
||||
:param obj:
|
||||
:return:
|
||||
"""
|
||||
# res = VipParse.query.filter(VipParse.url == obj['url']).first()
|
||||
res = VipParse.query.filter_by(url=obj['url']).first()
|
||||
if res:
|
||||
# res.update(obj)
|
||||
res.name = obj['name']
|
||||
res.state = obj['state']
|
||||
res.type = obj['type']
|
||||
res.order = obj['order']
|
||||
res.ext = obj['ext']
|
||||
res.header = obj['header']
|
||||
db.session.add(res)
|
||||
else:
|
||||
res = VipParse(**obj)
|
||||
db.session.add(res)
|
||||
db.session.flush() # 获取id
|
||||
try:
|
||||
db.session.commit()
|
||||
return res.id
|
||||
except Exception as e:
|
||||
print(f'发生了错误:{e}')
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def getHideRules():
|
||||
res = VipParse.query.filter(VipParse.state == 0).all()
|
||||
return copy_utils.obj_to_list(res)
|
461
JN/dr_py/controllers/vod.py
Normal file
@ -0,0 +1,461 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# File : vod.py
|
||||
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
|
||||
# Date : 2022/9/6
|
||||
import functools
|
||||
import json
|
||||
|
||||
from flask import Blueprint, abort, request, render_template, render_template_string, jsonify, make_response, redirect, \
|
||||
current_app
|
||||
from time import time
|
||||
from utils.web import getParmas, get_interval
|
||||
from utils.cfg import cfg
|
||||
from utils.env import get_env
|
||||
from js.rules import getRuleLists, getJxs
|
||||
from base.R import R
|
||||
from utils.log import logger
|
||||
from utils import parser
|
||||
from controllers.cms import CMS
|
||||
from base.database import db
|
||||
from models.ruleclass import RuleClass
|
||||
from models.playparse import PlayParse
|
||||
from js.rules import getRules
|
||||
from controllers.service import storage_service, rules_service
|
||||
from concurrent.futures import ThreadPoolExecutor, as_completed, thread # 引入线程池
|
||||
from quickjs import Function, Context
|
||||
import ujson
|
||||
|
||||
vod = Blueprint("vod", __name__)
|
||||
|
||||
|
||||
def search_one_py(rule, wd, before: str = ''):
|
||||
t1 = time()
|
||||
if not before:
|
||||
with open('js/模板.js', encoding='utf-8') as f:
|
||||
before = f.read().split('export')[0]
|
||||
js_path = f'js/{rule}.js'
|
||||
try:
|
||||
ctx, js_code = parser.runJs(js_path, before=before)
|
||||
if not js_code:
|
||||
return None
|
||||
ruleDict = ctx.rule.to_dict()
|
||||
ruleDict['id'] = rule # 把路由请求的id装到字典里,后面播放嗅探才能用
|
||||
logger.info(f'规则{rule}装载耗时:{get_interval(t1)}毫秒')
|
||||
cms = CMS(ruleDict, db, RuleClass, PlayParse, cfg)
|
||||
data = cms.searchContent(wd, show_name=True)
|
||||
return data
|
||||
except Exception as e:
|
||||
print(f'{rule}发生错误:{e}')
|
||||
return None
|
||||
|
||||
|
||||
def search_one(rule, wd, before: str = '', env: dict = None, app=None):
|
||||
t1 = time()
|
||||
if not before:
|
||||
with open('js/模板.js', encoding='utf-8') as f:
|
||||
before = f.read().split('export')[0]
|
||||
end_code = """\nif (rule.模板 && muban.hasOwnProperty(rule.模板)) {rule = Object.assign(muban[rule.模板], rule);}"""
|
||||
js_path = f'js/{rule}.js'
|
||||
ctx = Context()
|
||||
try:
|
||||
with open(js_path, encoding='utf-8') as f2:
|
||||
jscode = f2.read()
|
||||
if env:
|
||||
# 渲染字符串文本 render_template_string 必须带 flask的上下文
|
||||
with app.app_context():
|
||||
for k in env:
|
||||
# print(f'${k}', f'{env[k]}')
|
||||
if f'${k}' in jscode:
|
||||
jscode = jscode.replace(f'${k}', f'{env[k]}')
|
||||
# jscode = render_template_string(jscode, **env)
|
||||
# if '007' in rule:
|
||||
# print(rule,jscode)
|
||||
jscode = before + jscode + end_code
|
||||
# print(jscode)
|
||||
ctx.eval(jscode)
|
||||
js_ret = ctx.get('rule')
|
||||
ruleDict = ujson.loads(js_ret.json())
|
||||
ruleDict['id'] = rule # 把路由请求的id装到字典里,后面播放嗅探才能用
|
||||
logger.info(f'规则{rule}装载耗时:{get_interval(t1)}毫秒')
|
||||
cms = CMS(ruleDict, db, RuleClass, PlayParse, cfg)
|
||||
data = cms.searchContent(wd, show_name=True)
|
||||
return data
|
||||
except Exception as e:
|
||||
logger.info(f'{e}')
|
||||
return R.failed('爬虫规则加载失败')
|
||||
|
||||
|
||||
def multi_search2(wd):
|
||||
t1 = time()
|
||||
lsg = storage_service()
|
||||
try:
|
||||
timeout = round(int(lsg.getItem('SEARCH_TIMEOUT', 5000)) / 1000, 2)
|
||||
except:
|
||||
timeout = 5
|
||||
rules = getRules('js')['list']
|
||||
rule_names = list(map(lambda x: x['name'], rules))
|
||||
rules_exclude = ['drpy']
|
||||
new_rules = list(filter(lambda x: x.get('searchable', 0) and x.get('name', '') not in rules_exclude, rules))
|
||||
search_sites = [new_rule['name'] for new_rule in new_rules]
|
||||
nosearch_sites = set(rule_names) ^ set(search_sites)
|
||||
nosearch_sites.remove('drpy')
|
||||
# print(nosearch_sites)
|
||||
logger.info(f'开始聚搜{wd},共计{len(search_sites)}个规则,聚搜超时{timeout}秒')
|
||||
logger.info(f'不支持聚搜的规则,共计{len(nosearch_sites)}个规则:{",".join(nosearch_sites)}')
|
||||
# print(search_sites)
|
||||
res = []
|
||||
with open('js/模板.js', encoding='utf-8') as f:
|
||||
before = f.read().split('export')[0]
|
||||
logger.info(f'聚搜准备工作耗时:{get_interval(t1)}毫秒')
|
||||
t2 = time()
|
||||
thread_pool = ThreadPoolExecutor(len(search_sites)) # 定义线程池来启动多线程执行此任务
|
||||
obj_list = []
|
||||
try:
|
||||
for site in search_sites:
|
||||
obj = thread_pool.submit(search_one, site, wd, before)
|
||||
obj_list.append(obj)
|
||||
thread_pool.shutdown(wait=True) # 等待所有子线程并行完毕
|
||||
vod_list = [obj.result() for obj in obj_list]
|
||||
for vod in vod_list:
|
||||
if vod and isinstance(vod, dict) and vod.get('list') and len(vod['list']) > 0:
|
||||
res.extend(vod['list'])
|
||||
result = {
|
||||
'list': res
|
||||
}
|
||||
logger.info(f'drpy聚搜{len(search_sites)}个源耗时{get_interval(t2)}毫秒,含准备共计耗时{get_interval(t1)}毫秒')
|
||||
except Exception as e:
|
||||
result = {
|
||||
'list': []
|
||||
}
|
||||
logger.info(
|
||||
f'drpy聚搜{len(search_sites)}个源耗时{get_interval(t2)}毫秒,含准备共计耗时:{get_interval(t1)}毫秒,发生错误:{e}')
|
||||
return jsonify(result)
|
||||
|
||||
|
||||
def merged_hide(merged_rules):
|
||||
t1 = time()
|
||||
store_rule = rules_service()
|
||||
hide_rules = store_rule.getHideRules()
|
||||
hide_rule_names = list(map(lambda x: x['name'], hide_rules))
|
||||
# print('隐藏:',hide_rule_names)
|
||||
all_cnt = len(merged_rules)
|
||||
|
||||
# print(merged_rules)
|
||||
|
||||
def filter_show(x):
|
||||
# name = x['api'].split('rule=')[1].split('&')[0] if 'rule=' in x['api'] else x['key'].replace('dr_','')
|
||||
name = x
|
||||
# print(name)
|
||||
return name not in hide_rule_names
|
||||
|
||||
merged_rules = list(filter(filter_show, merged_rules))
|
||||
# print('隐藏后:',merged_rules)
|
||||
logger.info(
|
||||
f'数据库筛选隐藏规则耗时{get_interval(t1)}毫秒,共计{all_cnt}条规则,隐藏后可渲染{len(merged_rules)}条规则')
|
||||
# merged_rules = []
|
||||
return merged_rules
|
||||
|
||||
|
||||
def disable_exit_for_threadpool_executor():
|
||||
import atexit
|
||||
import concurrent.futures
|
||||
atexit.unregister(concurrent.futures.thread._python_exit)
|
||||
|
||||
|
||||
def sort_lsg_rules(sites: list):
|
||||
"""
|
||||
查询结果按order和write_date 联合排序
|
||||
:param sites:
|
||||
:return:
|
||||
"""
|
||||
|
||||
def comp(x, y):
|
||||
if x['order'] > y['order']:
|
||||
return 1
|
||||
elif x['order'] < y['order']:
|
||||
return - 1
|
||||
else:
|
||||
if x['write_date'] < y['write_date']:
|
||||
return 1
|
||||
elif x['write_date'] > y['write_date']:
|
||||
return -1
|
||||
else:
|
||||
return 0
|
||||
|
||||
sites.sort(key=functools.cmp_to_key(comp), reverse=False)
|
||||
return sites
|
||||
|
||||
|
||||
def sort_lsg_rules2(sites: list, lsg_rule_names: list):
|
||||
"""
|
||||
查询结果按order和write_date 联合排序
|
||||
:param sites:
|
||||
:return:
|
||||
"""
|
||||
|
||||
def comp(x, y):
|
||||
try:
|
||||
x1 = lsg_rule_names.index(x)
|
||||
except:
|
||||
x1 = 999
|
||||
|
||||
try:
|
||||
y1 = lsg_rule_names.index(y)
|
||||
except:
|
||||
y1 = 999
|
||||
|
||||
if x1 >= y1:
|
||||
return 1
|
||||
elif x1 < y1:
|
||||
return - 1
|
||||
|
||||
sites.sort(key=functools.cmp_to_key(comp), reverse=False)
|
||||
return sites
|
||||
|
||||
|
||||
def getSearchSites():
|
||||
val = {}
|
||||
lsg = storage_service()
|
||||
try:
|
||||
timeout = round(int(lsg.getItem('SEARCH_TIMEOUT', 5000)) / 1000, 2)
|
||||
except:
|
||||
timeout = 5
|
||||
val['timeout'] = timeout
|
||||
rules = getRules('js')['list']
|
||||
rule_names = list(map(lambda x: x['name'], rules))
|
||||
rules_exclude = ['drpy']
|
||||
new_rules = list(filter(lambda x: x.get('searchable', 0) and x.get('name', '') not in rules_exclude, rules))
|
||||
total_search = [new_rule['name'] for new_rule in new_rules]
|
||||
nosearch_sites = set(rule_names) ^ set(total_search)
|
||||
nosearch_sites.remove('drpy')
|
||||
val['total_search'] = total_search
|
||||
val['nosearch_sites'] = list(nosearch_sites)
|
||||
search_sites = merged_hide(total_search)
|
||||
lsg_rules = rules_service()
|
||||
lsg_rule_list = lsg_rules.query_all()
|
||||
lsg_rule_list = list(filter(lambda x: x['name'] in search_sites, lsg_rule_list))
|
||||
lsg_rule_names = list(map(lambda x: x['name'], lsg_rule_list))
|
||||
|
||||
search_sites = sort_lsg_rules2(search_sites, lsg_rule_names)
|
||||
search_limit = lsg.getItem('SEARCH_LIMIT', 24)
|
||||
try:
|
||||
search_limit = int(search_limit)
|
||||
except:
|
||||
search_limit = 0
|
||||
if search_limit < 1:
|
||||
search_limit = 0
|
||||
search_sites = search_sites[:search_limit]
|
||||
val['search_limit'] = search_limit
|
||||
val['search_sites'] = search_sites
|
||||
return val
|
||||
|
||||
|
||||
def multi_search(wd):
|
||||
t1 = time()
|
||||
val = getSearchSites()
|
||||
timeout = val['timeout']
|
||||
total_search = val['total_search']
|
||||
nosearch_sites = val['nosearch_sites']
|
||||
search_limit = val['search_limit']
|
||||
search_sites = val['search_sites']
|
||||
|
||||
env = get_env()
|
||||
logger.info(f'开始聚搜{wd},共计{len(total_search)}个规则,聚搜超时{timeout}秒')
|
||||
logger.info(f'不支持聚搜的规则,共计{len(nosearch_sites)}个规则:{",".join(nosearch_sites)}')
|
||||
msearch_msg = f'搜索限制条数:{search_limit}/{len(search_sites)} {search_sites}'
|
||||
logger.info(msearch_msg)
|
||||
print(msearch_msg)
|
||||
# search_sites = []
|
||||
res = []
|
||||
if len(search_sites) > 0:
|
||||
with open('js/模板.js', encoding='utf-8') as f:
|
||||
before = f.read().split('export')[0]
|
||||
with ThreadPoolExecutor(max_workers=len(search_sites)) as executor:
|
||||
to_do = []
|
||||
for site in search_sites:
|
||||
future = executor.submit(search_one, site, wd, before, env, current_app._get_current_object())
|
||||
to_do.append(future)
|
||||
try:
|
||||
for future in as_completed(to_do, timeout=timeout): # 并发执行
|
||||
ret = future.result()
|
||||
# print(ret)
|
||||
if ret and isinstance(ret, dict) and ret.get('list'):
|
||||
res.extend(ret['list'])
|
||||
except Exception as e:
|
||||
print(f'发生错误:{e}')
|
||||
import atexit
|
||||
atexit.unregister(thread._python_exit)
|
||||
executor.shutdown = lambda wait: None
|
||||
|
||||
# disable_exit_for_threadpool_executor()
|
||||
logger.info(f'drpy聚搜{len(search_sites)}个源共计耗时{get_interval(t1)}毫秒')
|
||||
return jsonify({
|
||||
"list": res
|
||||
})
|
||||
|
||||
|
||||
@vod.route('/vods')
|
||||
def vods_search():
|
||||
val = getSearchSites()
|
||||
print(val)
|
||||
|
||||
# return jsonify(val)
|
||||
return render_template('show_search.html', val=val)
|
||||
|
||||
|
||||
@vod.route('/vod')
|
||||
def vod_home():
|
||||
lsg = storage_service()
|
||||
js0_disable = lsg.getItem('JS0_DISABLE', cfg.get('JS0_DISABLE', 0))
|
||||
if js0_disable:
|
||||
abort(403)
|
||||
js0_password = lsg.getItem('JS0_PASSWORD', cfg.get('JS0_PASSWORD', ''))
|
||||
# print('js0_password:',js0_password)
|
||||
if js0_password:
|
||||
pwd = getParmas('pwd')
|
||||
if pwd != js0_password:
|
||||
abort(403)
|
||||
t0 = time()
|
||||
rule = getParmas('rule')
|
||||
ac = getParmas('ac')
|
||||
ids = getParmas('ids')
|
||||
if ac and ids and ids.find('#') > -1: # 聚搜的二级
|
||||
id_list = ids.split(',')
|
||||
rule = id_list[0].split('#')[1]
|
||||
# print(rule)
|
||||
|
||||
ext = getParmas('ext')
|
||||
filters = getParmas('f')
|
||||
tp = getParmas('type')
|
||||
# print(f'type:{tp}')
|
||||
# if not ext.startswith('http') and not rule:
|
||||
if not rule:
|
||||
return R.failed('规则字段必填')
|
||||
rule_list = getRuleLists()
|
||||
# if not ext.startswith('http') and not rule in rule_list:
|
||||
if not ext and not rule in rule_list:
|
||||
msg = f'服务端本地仅支持以下规则:{",".join(rule_list)}'
|
||||
return R.failed(msg)
|
||||
# logger.info(f'检验耗时:{get_interval(t0)}毫秒')
|
||||
t1 = time()
|
||||
# js_path = f'js/{rule}.js' if not ext.startswith('http') else ext
|
||||
js_path = f'js/{rule}.js' if not ext else ext
|
||||
with open('js/模板.js', encoding='utf-8') as f:
|
||||
before = f.read().split('export')[0]
|
||||
# logger.info(f'js读取耗时:{get_interval(t1)}毫秒')
|
||||
end_code = """\nif (rule.模板 && muban.hasOwnProperty(rule.模板)) {rule = Object.assign(muban[rule.模板], rule);}"""
|
||||
logger.info(f'参数检验js读取共计耗时:{get_interval(t0)}毫秒')
|
||||
t2 = time()
|
||||
|
||||
# ctx, js_code = parser.runJs(js_path,before=before)
|
||||
# if not js_code:
|
||||
# return R.failed('爬虫规则加载失败')
|
||||
# # rule = ctx.eval('rule')
|
||||
# # print(type(ctx.rule.lazy()),ctx.rule.lazy().toString())
|
||||
# ruleDict = ctx.rule.to_dict()
|
||||
|
||||
ctx = Context()
|
||||
try:
|
||||
with open(js_path, encoding='utf-8') as f2:
|
||||
jscode = f2.read()
|
||||
env = get_env()
|
||||
for k in env:
|
||||
# print(f'${k}',f'{env[k]}')
|
||||
if f'${k}' in jscode:
|
||||
jscode = jscode.replace(f'${k}', f'{env[k]}')
|
||||
# print(env)
|
||||
# if env:
|
||||
# jscode = render_template_string(jscode,**env)
|
||||
# print(jscode)
|
||||
jscode = before + jscode + end_code
|
||||
# print(jscode)
|
||||
ctx.eval(jscode)
|
||||
js_ret = ctx.get('rule')
|
||||
rule_json = js_ret.json() # 规则的json字符串
|
||||
ruleDict = ujson.loads(rule_json)
|
||||
except Exception as e:
|
||||
logger.info(f'{e}')
|
||||
return R.failed('爬虫规则加载失败')
|
||||
|
||||
# print(type(ruleDict))
|
||||
# print(ruleDict)
|
||||
# print(ruleDict)
|
||||
ruleDict['id'] = rule # 把路由请求的id装到字典里,后面播放嗅探才能用
|
||||
# print(ruleDict)
|
||||
# print(rule)
|
||||
# print(type(rule))
|
||||
# print(ruleDict)
|
||||
logger.info(f'js装载耗时:{get_interval(t2)}毫秒')
|
||||
# print(ruleDict)
|
||||
# print(rule)
|
||||
cms = CMS(ruleDict, db, RuleClass, PlayParse, cfg, ext)
|
||||
wd = getParmas('wd')
|
||||
quick = getParmas('quick')
|
||||
play = getParmas('play') # 类型为4的时候点击播放会带上来
|
||||
flag = getParmas('flag') # 类型为4的时候点击播放会带上来
|
||||
# myfilter = getParmas('filter')
|
||||
t = getParmas('t')
|
||||
pg = getParmas('pg', '1')
|
||||
pg = int(pg)
|
||||
# print('pg:',pg)
|
||||
q = getParmas('q')
|
||||
play_url = getParmas('play_url')
|
||||
|
||||
if play:
|
||||
jxs = getJxs()
|
||||
play_url = play.split('play_url=')[1]
|
||||
play_url = cms.playContent(play_url, jxs, flag)
|
||||
if isinstance(play_url, str):
|
||||
# return redirect(play_url)
|
||||
# return jsonify({'parse': 0, 'playUrl': play_url, 'jx': 0, 'url': play_url})
|
||||
# return jsonify({'parse': 0, 'playUrl': play_url, 'jx': 0, 'url': ''})
|
||||
return jsonify({'parse': 0, 'playUrl': '', 'jx': 0, 'url': play_url})
|
||||
elif isinstance(play_url, dict):
|
||||
return jsonify(play_url)
|
||||
else:
|
||||
return play_url
|
||||
|
||||
if play_url: # 播放
|
||||
jxs = getJxs()
|
||||
play_url = cms.playContent(play_url, jxs)
|
||||
if isinstance(play_url, str):
|
||||
return redirect(play_url)
|
||||
elif isinstance(play_url, dict):
|
||||
return jsonify(play_url)
|
||||
else:
|
||||
return play_url
|
||||
|
||||
if ac and t: # 一级
|
||||
fl = {}
|
||||
if filters and filters.find('{') > -1 and filters.find('}') > -1:
|
||||
fl = json.loads(filters)
|
||||
# print(filters,type(filters))
|
||||
# print(fl,type(fl))
|
||||
data = cms.categoryContent(t, pg, fl)
|
||||
# print(data)
|
||||
return jsonify(data)
|
||||
if ac and ids: # 二级
|
||||
id_list = ids.split(',')
|
||||
show_name = False
|
||||
if ids.find('#') > -1:
|
||||
id_list = list(map(lambda x: x.split('#')[0], id_list))
|
||||
show_name = True
|
||||
# print('app:377',len(id_list))
|
||||
# print(id_list)
|
||||
data = cms.detailContent(pg, id_list, show_name)
|
||||
# print(data)
|
||||
return jsonify(data)
|
||||
if wd: # 搜索
|
||||
if rule == 'drpy':
|
||||
print(f'准备单独处理聚合搜索:{wd}')
|
||||
return multi_search(wd)
|
||||
# return multi_search2(wd)
|
||||
else:
|
||||
data = cms.searchContent(wd, pg)
|
||||
# print(data)
|
||||
return jsonify(data)
|
||||
# return jsonify({'rule':rule,'js_code':js_code})
|
||||
logger.info(rule_json)
|
||||
home_data = cms.homeContent(pg)
|
||||
return jsonify(home_data)
|
167
JN/dr_py/controllers/web.py
Normal file
@ -0,0 +1,167 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# File : vod.py
|
||||
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
|
||||
# Date : 2022/9/6
|
||||
import functools
|
||||
import json
|
||||
import os
|
||||
from urllib.parse import urljoin, unquote,quote
|
||||
import requests
|
||||
from flask import Blueprint, abort, request, render_template, send_from_directory, render_template_string, jsonify, \
|
||||
make_response, redirect, \
|
||||
current_app, url_for
|
||||
from time import time
|
||||
from utils.web import getParmas, get_interval
|
||||
from utils.cfg import cfg
|
||||
from utils.env import get_env
|
||||
from js.rules import getRuleLists, getJxs
|
||||
from base.R import R
|
||||
from utils.log import logger
|
||||
from utils import parser
|
||||
from controllers.cms import CMS
|
||||
from base.database import db
|
||||
from models.ruleclass import RuleClass
|
||||
from models.playparse import PlayParse
|
||||
from js.rules import getRules
|
||||
from controllers.service import storage_service, rules_service
|
||||
from concurrent.futures import ThreadPoolExecutor, as_completed, thread # 引入线程池
|
||||
from quickjs import Function, Context
|
||||
import ujson
|
||||
|
||||
# web = Blueprint("web", __name__, template_folder='templates/cmsV10/mxpro/html/index/')
|
||||
web = Blueprint("web", __name__)
|
||||
|
||||
|
||||
@web.route('/cms/<path:filename>')
|
||||
def custom_static_cms(filename):
|
||||
# 自定义静态目录 {{ url_for('custom_static',filename='help.txt')}}
|
||||
# print(filename)
|
||||
return send_from_directory('templates/cms', filename)
|
||||
|
||||
|
||||
@web.route('/player/<path:filename>')
|
||||
def custom_static_player(filename):
|
||||
# 自定义静态目录 {{ url_for('custom_static',filename='help.txt')}}
|
||||
# print(filename)
|
||||
return send_from_directory('templates/player', filename)
|
||||
|
||||
@web.route('/player1')
|
||||
def custom_player1():
|
||||
ctx = getParmas()
|
||||
return render_template('player/mui/index.html', ctx=ctx)
|
||||
|
||||
@web.route('/player2')
|
||||
def custom_player2():
|
||||
ctx = getParmas()
|
||||
return render_template('player/p2p-media-loader/p2pm3u8.html', ctx=ctx)
|
||||
|
||||
@web.route('/player3')
|
||||
def custom_player3():
|
||||
ctx = getParmas()
|
||||
return render_template('player/p2pplayer/index.htm', ctx=ctx)
|
||||
|
||||
@web.route('/player4')
|
||||
def custom_player4():
|
||||
ctx = getParmas()
|
||||
return render_template('player/p2phls/p2phls.html', ctx=ctx)
|
||||
|
||||
@web.route('/<web_name>/<theme>')
|
||||
def web_index(web_name, theme):
|
||||
ctx = {'web_name': web_name, 'key': '关键词', 'description': '描述'}
|
||||
lsg = storage_service()
|
||||
js0_password = lsg.getItem('JS0_PASSWORD')
|
||||
ctx['pwd'] = js0_password
|
||||
ctx['path'] = request.path
|
||||
ctx['url'] = request.url
|
||||
vod_id = getParmas('vod_id')
|
||||
vod_name = getParmas('vod_name')
|
||||
wd = getParmas('wd')
|
||||
pg = getParmas('pg') or '1'
|
||||
tid = getParmas('tid')
|
||||
tname = getParmas('tname')
|
||||
url = getParmas('url')
|
||||
fl = getParmas('f')
|
||||
player = getParmas('player') or 'mui'
|
||||
ctx['vod_id'] = vod_id
|
||||
ctx['vod_name'] = vod_name
|
||||
ctx['wd'] = wd
|
||||
ctx['pg'] = pg
|
||||
ctx['tid'] = tid
|
||||
ctx['tname'] = tname
|
||||
ctx['url'] = url
|
||||
ctx['fl'] = quote(fl)
|
||||
print('tid:', tid,'fl:',fl)
|
||||
# print('f:', fl)
|
||||
|
||||
file_path = os.path.abspath(f'js/{web_name}.js')
|
||||
print(file_path)
|
||||
if not os.path.exists(file_path):
|
||||
return render_template('404.html', ctx=ctx, error=f'发生错误的原因可能是下面路径未找到:{file_path}')
|
||||
|
||||
try:
|
||||
if url:
|
||||
return render_template(f'player/{player}/index.html', ctx=ctx)
|
||||
elif vod_id and vod_name:
|
||||
return render_template(f'cms/{theme}/detailContent.html', ctx=ctx)
|
||||
elif wd:
|
||||
return render_template(f'cms/{theme}/searchContent.html', ctx=ctx)
|
||||
elif tid:
|
||||
return render_template(f'cms/{theme}/categoryContent.html', ctx=ctx)
|
||||
else:
|
||||
return render_template(f'cms/{theme}/homeContent.html', ctx=ctx)
|
||||
except Exception as e:
|
||||
return render_template('404.html', ctx=ctx, error=f'发生错误的原因可能是下面路径未找到:{e}')
|
||||
|
||||
|
||||
@web.route('/302redirect')
|
||||
def get302UrlResponse():
|
||||
url = getParmas('url')
|
||||
if not url:
|
||||
abort(403)
|
||||
params = {}
|
||||
if not url.startswith('http'):
|
||||
url = urljoin(request.root_url, url)
|
||||
# url = urljoin('http://localhost:5705/',url)
|
||||
print(url)
|
||||
items = url.split('vod?')[1].split('&')
|
||||
for item in items:
|
||||
params[item.split('=')[0]] = item.split('=')[1]
|
||||
print(params)
|
||||
# abort(403)
|
||||
|
||||
timeout = getParmas('timeout') or 5000
|
||||
rurl = url
|
||||
try:
|
||||
timeout = int(timeout)
|
||||
headers = {
|
||||
# 'referer': url,
|
||||
'user-agent': 'Mozilla/5.0'
|
||||
}
|
||||
logger.info(f'开始调用接口:{url}')
|
||||
r = requests.get(url, headers=headers, timeout=timeout, verify=False)
|
||||
rurl = r.url
|
||||
res_data = r.text
|
||||
try:
|
||||
res_data = r.json()
|
||||
except:
|
||||
pass
|
||||
|
||||
# rurl = url_for('vod.vod_home', **params)
|
||||
# print(rurl)
|
||||
logger.info(f'结束调用接口:{rurl}')
|
||||
is_redirect = unquote(rurl) != unquote(url)
|
||||
return jsonify({
|
||||
'url': rurl,
|
||||
'redirect': is_redirect,
|
||||
'data': res_data,
|
||||
})
|
||||
|
||||
except Exception as e:
|
||||
logger.info(f'发生了错误:{e}')
|
||||
return jsonify({
|
||||
'url': rurl,
|
||||
'redirect': False,
|
||||
'data': None,
|
||||
'error': f'{e}',
|
||||
})
|
2
JN/dr_py/doc/chatgpt搭建教程.md
Normal file
@ -0,0 +1,2 @@
|
||||
[chatgpt申请](http://mp.weixin.qq.com/s?__biz=MjM5MDI1ODUyMA==&mid=2672969192&idx=1&sn=04efcb04d4a5a8f493ef83fb9fa6bd1d&chksm=bce161df8b96e8c95e5ea89893b2d212c411a763d0644e5617a746e4fc829a4d154d5feba192&mpshare=1&scene=24&srcid=02050Gzonfq7o1MfMDZ5r3Az&sharer_sharetime=1675559603236&sharer_shareid=e78e6999b00e23bdc812d4fb7b55e462#rd)
|
||||
[钉钉对接chatgpt机器人](https://blog.csdn.net/zls365365/article/details/128567593)
|
24
JN/dr_py/doc/js压缩.md
Normal file
@ -0,0 +1,24 @@
|
||||
### 代码格式化压缩成一行教程
|
||||
```text
|
||||
npm install uglify-js -g
|
||||
uglifyjs xx.js -o xx.min.js
|
||||
|
||||
配置webstorm
|
||||
C:\Users\dashen\AppData\Roaming\npm\uglifyjs.cmd
|
||||
$FileName$ -o $FileNameWithoutExtension$.min.js
|
||||
$FileDir$
|
||||
```
|
||||
|
||||
### 格式化教程
|
||||
```text
|
||||
vscode安装插件 prettier
|
||||
webstorm安装插件 prettier
|
||||
在设置里找到prettier配置保存时执行
|
||||
对js文件右键,最下面的使用prettier重新格式化
|
||||
```
|
||||
|
||||
### 自动函数参数注释教程
|
||||
```text
|
||||
在函数上方输入 /**然后回车即可
|
||||
完结
|
||||
```
|
28
JN/dr_py/doc/python最强js引擎.md
Normal file
@ -0,0 +1,28 @@
|
||||
#### 人生苦短,我用python
|
||||
#### 不想换行,js最强
|
||||
###### 道长踩过的坑,推荐一波python的js引擎
|
||||
|
||||
#### 从弱到强推荐,大家仔细看
|
||||
|
||||
| 模块 | 性能 | es6 | python交互 | 相关文档 | 架构兼容性 | 个人评价 |
|
||||
|------------------------------------------------------------|-----|--------------|----------|------|-------|----------------------------------|
|
||||
| [pyv8](https://github.com/emmetio/pyv8-binaries) | 较差 | ❌ | ✅ | 少 | 差 | 年代久远,可以放弃了 |
|
||||
| [PyExecJS](https://github.com/doloopwhile/PyExecJS) | 差 | ❌ | ❌ | 多 | 好 | 年代久远,应用挺多,勉强能用 |
|
||||
| [v8py](https://github.com/tbodt/v8py) | 好 | ✅完美支持 | ✅ | 少 | 差 | 文档少,架构兼容性差,不太会用 |
|
||||
| [pyjsparser](https://github.com/PiotrDabkowski/pyjsparser) | 一般 | ❌ | ❌ | 少 | 差 | 几乎不用 |
|
||||
| [dukpy](https://github.com/amol-/dukpy) | 好 | ❌部分支持 | 支持 | 官仓示例 | 差 | 没见人用过 |
|
||||
| [py_mini_racer](https://github.com/sqreen/PyMiniRacer) | 一般 | ✅完美支持 | ❌ | 少 | 差 | 不支持js交互,文档少,架构兼容性差,不怎么会用 |
|
||||
| [js2py](https://github.com/PiotrDabkowski/Js2Py) | 一般 | ❌部分支持,实际应用鸡肋 | ✅ | 还行 | 好 | python交互好,没得选了 |
|
||||
| [quickjs](https://github.com/PetterS/quickjs) | 好 | ✅完美支持 | ✅部分支持 | 几乎没有 | 好 | 有测试案例代码,看完就会用,issue有人提了交互的更多代码 |
|
||||
| [jsengine](https://github.com/SeaHOH/jsengine) | 好 | ✅完美支持 | ✅部分支持 | 几乎没有 | 好 | quickjs的个人封装,比较新,整合怪 |
|
||||
| [thquickjs](https://gitlab.com/tangledlabs/thquickjs) | 好 | ✅完美支持 | ✅部分支持 | 几乎没有 | 好 | quickjs的个人封装,比较新,python交互不如js2py |
|
||||
|
||||
### 本项目的最终选择
|
||||
|
||||
quickjs + js2py
|
||||
|
||||
#### 使用说明
|
||||
quickjs负责读取js文件源的模块,速度非常快
|
||||
js2py负责python执行js的源逻辑,交互python注入的任意类型变量
|
||||
#### 研究方向
|
||||
quickjs如何交互python非基础类型数据,看quickjs的pr和issue有人提出过,但是作者没有合并以及修改支持,需要自己动手了
|
33
JN/dr_py/doc/termux使用问题.md
Normal file
@ -0,0 +1,33 @@
|
||||
步骤1: 安装Termux并赋予访问本地文件的权限
|
||||
|
||||
安装完Termux之后,我们要让Termux有访问本地SD存储卡的访问权限,可以在Termux的终端中输入:
|
||||
|
||||
termux-setup-storage
|
||||
|
||||
当弹出询问是否允许访问本地存储的窗口时,我们需要点击同意即可。
|
||||
|
||||
步骤2:更新升级软件包
|
||||
|
||||
这个就无须多解释了,直接Termux终端:
|
||||
|
||||
apt update && apt upgrade
|
||||
|
||||
步骤3: 安装Git软件
|
||||
|
||||
pkg install git -y
|
||||
|
||||
步骤4: 安装Python2
|
||||
|
||||
FakeRoot 的源代码python2 ,因而我们需要安装Python2。
|
||||
|
||||
pkg install python2 -y
|
||||
|
||||
步骤5: 下载安装FakeRoot Repo
|
||||
|
||||
git clone https://github.com/MaulanaRyM/FakeRoot
|
||||
|
||||
cd FakeRoot
|
||||
|
||||
python2 root.py
|
||||
|
||||
运行这几个命令后,FakeRoot 要求在FakeRoot和Proot两个选项中进行选择。我们仅需要选择FakeRoot这个模式并按回车确认,让它自动进行root处理。这个root过程稍微要费一些时间,请耐心等候。
|
63
JN/dr_py/doc/windows搭建说明.md
Normal file
@ -0,0 +1,63 @@
|
||||
# Windows搭建说明
|
||||
###### Termux qq官群1:714730084
|
||||
###### Termux qq官群3:878847174
|
||||
##### [加群链接生成器](https://qun.qq.com/join.html)
|
||||
##### [git图标生成器](https://github.com/badges/shields)
|
||||
|
||||
|
||||
## 方法一:docker安装(推荐)
|
||||
### 先确认本地有docker
|
||||
|
||||
```shell
|
||||
docker version
|
||||
```
|
||||
|
||||
如输出类似
|
||||
```
|
||||
Client:
|
||||
Version: 20.10.23
|
||||
API version: 1.41
|
||||
Go version: go1.18.10
|
||||
Git commit: 7155243
|
||||
Built: Thu Jan 19 17:43:10 2023
|
||||
OS/Arch: windows/amd64
|
||||
Context: default
|
||||
Experimental: true
|
||||
```
|
||||
则说明本地有docker
|
||||
|
||||
如果没有这样的提示则说明本地没有docker,可以参考[这篇文章](https://www.runoob.com/docker/windows-docker-install.html)
|
||||
|
||||
接下来安装容器,输入以下指令即可安装
|
||||
```shell
|
||||
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy
|
||||
```
|
||||
|
||||
没有错误提示的话就可以在**这台电脑打开**[链接](http://localhost:5705/index)
|
||||
|
||||
若能打开即搭建成功
|
||||
|
||||
## 方法二:使用python运行
|
||||
```shell
|
||||
#先将项目克隆到本地
|
||||
git clone https://github.com/hjdhnx/dr_py.git
|
||||
|
||||
#进入目录
|
||||
cd dr_py
|
||||
|
||||
#换源
|
||||
pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple
|
||||
|
||||
#安装所需依赖
|
||||
pip install -r requirements.txt
|
||||
|
||||
#运行主程序
|
||||
python app.py
|
||||
```
|
||||
|
||||
若报错,请检查是否有python环境`python --version`,入如果没有,请到[淘宝python镜像站下载 python-3.8.8-amd64.exe](https://registry.npmmirror.com/binary.html?path=python/3.8.8/)
|
||||
|
||||
同样,没有错误提示的话就可以在**这台电脑打开**[链接](http://localhost:5705/index)
|
||||
|
||||
---
|
||||
如果有问题,请提出[issue](https://github.com/hjdhnx/dr_py/issues)
|
23
JN/dr_py/doc/其他好玩的项目.md
Normal file
@ -0,0 +1,23 @@
|
||||
##### alist挂载七牛云
|
||||
[b站教程](https://www.bilibili.com/video/av256523775/)
|
||||
|
||||
#### 更新alist
|
||||
|
||||
```shell
|
||||
docker ps -a #查看容器(找Alist容器的ID)
|
||||
|
||||
docker stop ID #停止Alist运行,不然无法删除(这次Alist容器的ID是d429749a6e69,每一次安装都不一样自己看)
|
||||
|
||||
docker rm ID #删除Alist容器(数据还在只要你不手动删除)
|
||||
|
||||
docker pull xhofe/alist:latest
|
||||
|
||||
docker run -d --restart=always -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist" xhofe/alist:latest
|
||||
|
||||
```
|
||||
|
||||
### 查看alist管理员信息
|
||||
```shell
|
||||
docker exec -it alist ./alist admin
|
||||
|
||||
```
|
151
JN/dr_py/doc/写源教程.md
Normal file
@ -0,0 +1,151 @@
|
||||
### 配置相关
|
||||
直接复制对应的三种地址就行了,不需要生成本地文件(下面教程不要了)
|
||||
~~本地地址 clan://localhost/pycms_local.json
|
||||
推荐把文件放到 /storage/emulated/0/PlutoPlayer/pycms_local.json
|
||||
并且pluto要自己切换路径为PlutoPlayer~~
|
||||
|
||||
### 相关教程
|
||||
[pyquery定位](https://blog.csdn.net/Arise007/article/details/79513094)
|
||||
|
||||
### 模板规则说明
|
||||
所有相关属性说明
|
||||
```javascript
|
||||
var rule = {
|
||||
title:'',//规则标题,没有实际作用,但是可以作为cms类名称依据
|
||||
编码:'',//不填就默认utf-8
|
||||
搜索编码:'',//不填则不编码,默认都是按utf-8.可优先于全局编码属性.比如网页源码编码是gbk,这里可以指定utf-8搜索独立编码。多数情况这个属性不填或者填写gbk应对特殊的网站搜索
|
||||
host:'',//网页的域名根,包含http头如 https://www,baidu.com
|
||||
hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":PC_UA}});let src = jsp.pdfh(html,"ul&&li&&a&&href");print(src);HOST=src.replace("/index.php","")',//网页域名根动态抓取js代码。通过HOST=赋值
|
||||
homeUrl:'/latest/',//网站的首页链接,可以是完整路径或者相对路径,用于分类获取和推荐获取 fyclass是分类标签 fypage是页数
|
||||
url:'/fyclass/fypage.html[/fyclass/]',//网站的分类页面链接
|
||||
detailUrl:'https://yanetflix.com/voddetail/fyid.html',//非必填,二级详情拼接链接,感觉没啥卵用
|
||||
searchUrl:'',//搜索链接 可以是完整路径或者相对路径,用于分类获取和推荐获取 **代表搜索词 fypage代表页数
|
||||
searchable:0,//是否启用全局搜索,
|
||||
quickSearch:0,//是否启用快速搜索,
|
||||
filterable:0,//是否启用筛选,
|
||||
filter:{},// 筛选条件字典
|
||||
// 默认筛选条件字典(不同分类可以指定同样筛选参数的不同默认值)
|
||||
filter_def:{
|
||||
douyu:{
|
||||
area:'一起看',
|
||||
other:'..'
|
||||
},
|
||||
huya:{
|
||||
area:'影音馆',
|
||||
other:'..'
|
||||
}
|
||||
},
|
||||
// 筛选网站传参,会自动传到分类链接下(本示例中的url参数)-url里参数为fyfilter,可参考蓝莓影视.js
|
||||
filter_url:'style={{fl.style}}&zone={{fl.zone}}&year={{fl.year}}&fee={{fl.fee}}&order={{fl.order}}',
|
||||
// 注意,由于猫有配置缓存,搜索配置没法热加载,修改了js不需要重启服务器
|
||||
// 但是需要tv_box进设置里换源使配置重新装载
|
||||
headers:{//网站的请求头,完整支持所有的,常带ua和cookies
|
||||
'User-Agent':'MOBILE_UA',
|
||||
"Cookie": "searchneed=ok"
|
||||
},
|
||||
timeout:5000,//网站的全局请求超时,默认是3000毫秒
|
||||
class_name:'电影&电视剧&动漫&综艺',//静态分类名称拼接
|
||||
class_url:'1&2&3&4',//静态分类标识拼接
|
||||
//动态分类获取 列表;标题;链接;正则提取 不需要正则的时候后面别加分号
|
||||
class_parse:'#side-menu:lt(1) li;a&&Text;a&&href;com/(.*?)/',
|
||||
// 除开全局过滤之外还需要过滤哪些标题不视为分类
|
||||
cate_exclude:'',
|
||||
// 除开全局动态线路名过滤之外还需要过滤哪些线路名标题不视为线路
|
||||
tab_exclude:'',
|
||||
// 服务器解析播放
|
||||
play_parse:true,
|
||||
// play_json 传数组或者 类 true/false 比如 0,1 如果不传会内部默认处理 不传和传0可能效果不同
|
||||
// 效果等同说明: play_json:[{re:'*', json:{jx:0, parse:1}}], 等同于 play_json:0,
|
||||
play_json:[{
|
||||
re:'*',
|
||||
json:{
|
||||
jx:1,
|
||||
parse:1,
|
||||
},
|
||||
}],
|
||||
//控制不同分类栏目下的总页面,不填就是默认999.哔哩影视大部分分类无法翻页,都需要指定页数为 1
|
||||
pagecount:{"1":1,"2":1,"3":1,"4":1,"5":1,"7":1,"时间表":1},
|
||||
// 自定义免嗅
|
||||
lazy:'',
|
||||
// 首页推荐显示数量
|
||||
limit:6,
|
||||
double:true,//是否双层列表定位,默认false
|
||||
// 对图片加了referer验证的有效,海阔专用,普通规则请勿填写此键值
|
||||
图片来源:'@Referer=http://www.jianpianapp.com@User-Agent=jianpian-version350',
|
||||
|
||||
// js写法,仅js模式1有效.可以用于代码动态获取全局cookie之类的
|
||||
// 可操作变量有 rule_fetch_params,rule,以及基础的网页访问request,post等操作
|
||||
预处理:'rule_fetch_params.headers.Cookie = "xxxx";',
|
||||
// 类似海阔一级 列表;标题;图片;描述;链接;详情 其中最后一个参数选填
|
||||
// 如果是双层定位的话,推荐的第2段分号代码也是第2层定位列表代码
|
||||
推荐:'.col-sm-6;h3&&Text;img&&data-src;.date&&Text;a&&href',
|
||||
// 类似海阔一级 列表;标题;图片;描述;链接;详情 其中最后一个参数选填
|
||||
一级:'.col-sm-6;h3&&Text;img&&data-src;.date&&Text;a&&href',
|
||||
//二级发起访问前进行js处理。解决特殊情况一级给出的链接非二级真实源码而是前端重定向链接的源码
|
||||
二级访问前:'log(MY_URL);let jump=request(MY_URL).match(/href="(.*?)"/)[1];log(jump);MY_URL=urljoin2(MY_URL,jump)',
|
||||
// 二级可以是*,表示规则无二级,直接拿一级的链接进行嗅探
|
||||
// 二级 title: 片名;类型
|
||||
// 二级 desc: 主要信息;年代;地区;演员;导演
|
||||
// 或者 {title:'',img:'',desc:'',content:'',tabs:'',lists:'',tab_text:'body&&Text',list_text:'body&&Text',list_url:'a&&href'} 同海阔dr二级
|
||||
二级:'*',
|
||||
// 搜索可以是*,集成一级,或者跟一级一样的写法 列表;标题;图片;描述;链接;详情
|
||||
搜索:'*',
|
||||
// 本地代理规则,可用于修改m3u8文件文本去广告后返回代理文件地址,也可以代理加密图片
|
||||
proxy_rule:`js:
|
||||
log(input);
|
||||
input = [200,'text;plain','hello drpy']
|
||||
`,
|
||||
//是否启用辅助嗅探: 1,0
|
||||
sniffer:1,
|
||||
// 辅助嗅探规则
|
||||
isVideo:"http((?!http).){26,}\\.(m3u8|mp4|flv|avi|mkv|wmv|mpg|mpeg|mov|ts|3gp|rm|rmvb|asf|m4a|mp3|wma)",
|
||||
// 辅助嗅探规则js写法
|
||||
isVideo:`js:
|
||||
log(input);
|
||||
if(/m3u8/.test(input)){
|
||||
input = true
|
||||
}else{
|
||||
input = false
|
||||
}
|
||||
`,
|
||||
}
|
||||
```
|
||||
模板继承写法
|
||||
```javascript
|
||||
var rule = Object.assign(muban.mxpro,{
|
||||
title:'鸭奈飞',
|
||||
host:'https://yanetflix.com',
|
||||
url:'/index.php/vod/show/id/fyclass/page/fypage.html',
|
||||
class_parse:`.navbar-items li:gt(1):lt(6);a&&Text;a&&href;.*/(.*?).html`,
|
||||
});
|
||||
```
|
||||
模板继承写法(新)
|
||||
```javascript
|
||||
var rule = {
|
||||
title:'cokemv',
|
||||
模板:'mxpro',
|
||||
host:'https://cokemv.me',
|
||||
class_parse:`.navbar-items li:gt(1):lt(7);a&&Text;a&&href;/(\\d+).html`,
|
||||
}
|
||||
```
|
||||
|
||||
源正则写法说明
|
||||
```text
|
||||
属性class_parse按;分隔后取[3]为分类的正则字符串。
|
||||
这里的正则跟js的/.*/这种写法相比,由于是字符串,需要实现字符串标准。
|
||||
比如想实现 /(\d+)/ 那么字符串写法为 (\\d+)
|
||||
原理是 new RegExp('(\\d+)') = /(\d+)/
|
||||
|
||||
属性lazy由于是纯js代码实现,不存在正则转义问题。
|
||||
每个源的属性对应的值如果是字符串,可以用反引号``包含起来。
|
||||
避免内部出现单双引号混用等需\转义问题
|
||||
```
|
||||
|
||||
js:内置变量
|
||||
input,html,VODS,VOD,TABS,LISTS,MY_CATE,MY_FL
|
||||
getProxyUrl(获取壳子本地代理地址返回 /proxy?do=js的完整链接)
|
||||
|
||||
本地代理说明:
|
||||
proxy_rule参数input赋值格式为三元素列表[status,content-type,data]
|
||||
如: [200,'text/plain','hello drpy']
|
||||
input = [200,'application/vnd.apple.mpegurl',m3u8]
|
58
JN/dr_py/doc/大佬友链.md
Normal file
@ -0,0 +1,58 @@
|
||||
#### tg群的大佬自己写dockerfile和自动发布的镜像
|
||||
1. [dockerfile仓库](https://github.com/esme518/docker-drpy)
|
||||
2. [自动发布的三架构镜像](https://hub.docker.com/r/esme518/docker-drpy/tags)
|
||||
3. 暴力更新命令(仅仅保留设置和同步的本地直播源,自己添加源的慎用):
|
||||
```shell
|
||||
mv base/rules.db base/直播.txt /tmp
|
||||
ls -A1 | xargs rm -rf
|
||||
git clone -q https://gitcode.net/qq_32394351/dr_py.git .
|
||||
mv -f /tmp/rules.db /tmp/直播.txt base/
|
||||
```
|
||||
4. 容器启动环境变量:
|
||||
|
||||
| 变量 | 默认参数 | 参数说明 |
|
||||
| ------ | ------ | ------ |
|
||||
| REPO_URL | https://gitcode.net/qq_32394351/dr_py.git | 可以改为自己fork后的仓库地址 |
|
||||
| AUTOUPDATE | | 容器重启自动更新(参考上面的暴力更新)。默认关闭,设为1为开启 |
|
||||
| INET_USERNAME | user | 9001端口进程管理的用户名 |
|
||||
| INET_PASSWORD | 123 | 9001端口进程管理的密码 |
|
||||
5. 容器启动命令(不自动更新):
|
||||
~/pywork/dr_py可以改为自己想保存的路径
|
||||
```shell
|
||||
docker run -d \
|
||||
--name drpy \
|
||||
--restart=always \
|
||||
-p 5705:5705 \
|
||||
-p 9001:9001 \
|
||||
-e INET_USERNAME=user \
|
||||
-e INET_PASSWORD=123 \
|
||||
-v ~/pywork/dr_py:/root/sd/pywork/dr_py \
|
||||
esme518/docker-drpy
|
||||
```
|
||||
6. 容器启动命令(开启自动更新)
|
||||
```shell
|
||||
docker run -d \
|
||||
--name drpy \
|
||||
--restart=always \
|
||||
-p 5705:5705 \
|
||||
-p 9001:9001 \
|
||||
-e INET_USERNAME=user \
|
||||
-e INET_PASSWORD=123 \
|
||||
-e AUTOUPDATE=1 \
|
||||
-v ~/pywork/dr_py:/root/sd/pywork/dr_py \
|
||||
esme518/docker-drpy
|
||||
```
|
||||
7. x86环境测试armv7容器的启动命令(测试用,不要用在日常环境):
|
||||
```shell
|
||||
docker run --platform linux/arm/v7 -p 5705:5705 -p 9001:9001 --restart=always --name drpy-armv7-test -d esme518/docker-drpy
|
||||
```
|
||||
|
||||
8.迁移数据库文件
|
||||
```shell
|
||||
docker cp ./rules.db 4ff:/root/sd/pywork/dr_py/base/rules.db
|
||||
```
|
||||
|
||||
9.进入容器
|
||||
```shell
|
||||
docker exec -it drpy /bin/sh
|
||||
```
|
182
JN/dr_py/doc/安卓本地搭建说明.md
Normal file
@ -0,0 +1,182 @@
|
||||
#### 基于 [ZeroTermux](http://file.nokia.press/ZeroTermux-0.118.36.2.apk) 搭建
|
||||
###### qq官群1:714730084
|
||||
###### qq官群3:878847174
|
||||
##### [加群链接生成器](https://qun.qq.com/join.html)
|
||||
##### [git图标生成器](https://github.com/badges/shields)
|
||||
#### 教程开始
|
||||
###### 特殊-termux直装(由于termux的Python最低版本是3.10,会导致此项目无法获取首页推荐,但是其他性能方面非常牛叉)
|
||||
```shell
|
||||
apt install libxml2 libxslt -y
|
||||
apt install python3
|
||||
```
|
||||
###### 注意:termux初始自带python版本>=3.11的务必注释requirements.txt里的gevent再进行pip3 install -r requirements.txt
|
||||
|
||||
##### 特殊-docker直装(支持amd64/armv7/arm64)
|
||||
##### 不知道自己架构的通过arch命令查看
|
||||
###### 可以通过点此下载获得最小必要文件压缩包
|
||||
[蓝奏云下载](https://wwi.lanzoup.com/igPCG0dlqouf)
|
||||
|
||||
##### 三架构自动识别(测试功能)
|
||||
```shell
|
||||
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy
|
||||
```
|
||||
|
||||
##### amd64/x86架构(主流设备)
|
||||
```shell
|
||||
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.9.0
|
||||
```
|
||||
##### armv7架构(树莓派,机顶盒,软路由等)
|
||||
```shell
|
||||
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:armv7-v3.9.0
|
||||
```
|
||||
##### arm64架构(部分服务器)
|
||||
```shell
|
||||
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:arm64-v3.9.0
|
||||
```
|
||||
#### 补充说明(2022/10/19)
|
||||
据说群晖搭建docker加上参数--net=host 可以局域网ip访问docker容器服务
|
||||
由于3.9版本以上镜像引入了quickjs库,这个库官方编译版在armv7上无法正常运行
|
||||
armv7架构的朋友需要在项目根目录执行以下两条命令然后重启9001服务
|
||||
```shell
|
||||
pip3 uninstall quickjs
|
||||
pip3 install ./whl/quickjs-1.19.2-cp37-cp37m-linux_armv7l.whl
|
||||
```
|
||||
|
||||
##### 上面代码如果成功了下面都可以忽略
|
||||
#### 端口映射参数,三种架构通用
|
||||
```shell
|
||||
-v /home/pywork/dr_py:/root/sd/pywork/dr_py
|
||||
```
|
||||
```shell
|
||||
# 运行容器-小白只需要这一条命令(存在问题是不能在远程面板上正确获取配置地址和进程管理地址,但自己知道地址就不影响使用,可进入容器自行修改config)
|
||||
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.9.0
|
||||
# 稍微懂一点可以运行下面的操作
|
||||
先把本项目拷贝到 /home/pywork/dr_py
|
||||
docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.9.0
|
||||
# 进入容器然后修改config.py文件改配置里面自己的远程地址等信息,改完退出容器再重启容器(或者通过进程管理9001端口在线重启flask服务)
|
||||
docker exec -it drpy bash
|
||||
vi ./base/config.py
|
||||
|
||||
如果不提供外部地址,请把这个设置为True,否则视频播放不正常
|
||||
PLAY_DISABLE = True # 全局禁用播放解析
|
||||
如果提供了外部播放地址必改这三个:
|
||||
PLAY_DISABLE = False # 全局禁用播放解析
|
||||
LAZYPARSE_MODE = 2 # 播放解析模式(0 本地 1 局域网 2远程 仅在全局禁用为False的时候生效)
|
||||
PLAY_URL = 'http://你的主页服务地址' # 匹配远程解析服务器链接 远程接口主页地址,后面不能有/
|
||||
:wq
|
||||
# docker run -it -p 5705:5705 -p 9001:9001 --name drpy drpy /bin/bash
|
||||
```
|
||||
#### termux容器ubutnu1804内安装(此方法请无视上方代码)
|
||||
1. 准备工作-termux通过tome搭建完整的ubuntu1804系统(基于proot容器技术)
|
||||
ZeroTermux左侧边栏按住手指右滑出现操作面板
|
||||
点击面板的切换源-北京源并确定,之后出现的任何提示都回车或者y确定
|
||||
再次进入面板,手指上拉滑到侧边栏下方的MOE全能并点击,之后各种一路回车或者确定
|
||||
然后跟着提示一步步安装proot-ubutun1804系统并不需要gui界面
|
||||
完毕后输入debian进入系统后才进行如下操作进行搭建项目(exit命令可以退出Ubuntu1804并回到termux)
|
||||
2. ubuntu1804换源及python换源和依赖安装
|
||||
手机浏览器访问: [https://mirrors.bfsu.edu.cn/help/ubuntu-ports/](https://mirrors.bfsu.edu.cn/help/ubuntu-ports/)
|
||||
选择ubuntu版本为1804,并复制其中的源地址,或者用下面的源代码也行
|
||||
```shell
|
||||
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
|
||||
deb https://mirrors.bfsu.edu.cn/ubuntu-ports/ bionic main restricted universe multiverse
|
||||
# deb-src https://mirrors.bfsu.edu.cn/ubuntu-ports/ bionic main restricted universe multiverse
|
||||
deb https://mirrors.bfsu.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
|
||||
# deb-src https://mirrors.bfsu.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse
|
||||
deb https://mirrors.bfsu.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
|
||||
# deb-src https://mirrors.bfsu.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
|
||||
deb https://mirrors.bfsu.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
|
||||
# deb-src https://mirrors.bfsu.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse
|
||||
|
||||
# 预发布软件源,不建议启用
|
||||
# deb https://mirrors.bfsu.edu.cn/ubuntu-ports/ bionic-proposed main restricted universe multiverse
|
||||
# deb-src https://mirrors.bfsu.edu.cn/ubuntu-ports/ bionic-proposed main restricted universe multiverse
|
||||
```
|
||||
然后换源可能需要用到下面的命令:
|
||||
```shell
|
||||
vi /etc/apt/sources.list # 编辑源列表
|
||||
dd # 在非输入模式下,vim中输入dd可以删除整行
|
||||
i # 进入vim的编辑插入模式,记得复制粘贴源进入
|
||||
:wq # 保存
|
||||
apt update # 更新软件包列表
|
||||
apt upgrade # 升级本地软件包
|
||||
```
|
||||
换源完毕后进行安装项目需要的相关环境
|
||||
```shell
|
||||
apt install net-tools # ifconfig查Ip命令需要
|
||||
apt install python3-pip # python3依赖管理器,装依赖需要
|
||||
pip3 install -i https://mirrors.cloud.tencent.com/pypi/simple --upgrade pip # 用腾讯源临时升级pip
|
||||
pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple # python换腾讯源
|
||||
|
||||
```
|
||||
然后把dr_py项目搞到内存卡以下目录:
|
||||
/storage/emulated/0/Download/pywork/dr_py
|
||||
cd 到该目录进行安装依赖:
|
||||
```shell
|
||||
cd /sd/pywork/dr_py
|
||||
pip3 install -r requirements.txt
|
||||
```
|
||||
3. 运行dr_py项目
|
||||
两种方法,一条命令对应一种
|
||||
```shell
|
||||
python3 app.py # 需要shell上运行调试,并且也可以 nohup python3 app.py &
|
||||
. ./app.sh 0
|
||||
#. <(cat app.sh) # 用于生产环境正式运行,更加强大的进程启动和在线日志
|
||||
```
|
||||
4. termux配置启动命令
|
||||
如果在debian里面记得先 exit回到termux里
|
||||
```shell
|
||||
apt install openssh vim -y
|
||||
vi ~/.bashrc
|
||||
|
||||
echo "用户:"$(whoami)
|
||||
|
||||
if pgrep -x "sshd" >/dev/null
|
||||
then
|
||||
echo "sshd运行中..."
|
||||
else
|
||||
sshd
|
||||
echo "自动启动sshd"
|
||||
fi
|
||||
:wq
|
||||
echo "debian" >> ~/.bashrc
|
||||
```
|
||||
这套命令配置完了下次打开termux会自动进入debian虚拟机(ubuntu1804)
|
||||
|
||||
5. 启动成功访问查看
|
||||
[本地地址](http://localhost:5705)
|
||||
[进程管理地址](http://localhost:9001)
|
||||
```shell
|
||||
开发者构建指南:
|
||||
#apt-get install language-pack-zh-hans
|
||||
cat /etc/issue
|
||||
locale -a
|
||||
|
||||
# 构建容器-给开发者用的,小白不需要
|
||||
# docker build -f dockerfile -t hjdhnx/drpy .
|
||||
# docker build -f dockerfile -t hjdhnx/drpy:mini .
|
||||
# docker buildx build --platform arm64 -f dockerfile -t hjdhnx/drpy:mini_arm64 --push .
|
||||
# docker push hjdhnx/drpy
|
||||
# 教程 https://www.cnblogs.com/wuyoucao/p/16461988.html
|
||||
# https://blog.csdn.net/u014110320/article/details/124406628
|
||||
mkdir -p ~/.docker/cli-plugins
|
||||
mv buildx-v0.8.2.linux-xxx ~/.docker/cli-plugins/docker-buildx
|
||||
chmod +x ~/.docker/cli-plugins/docker-buildx
|
||||
systemctl daemon-reload
|
||||
systemctl restart docker
|
||||
docker buildx version
|
||||
docker buildx ls
|
||||
vi /etc/docker/daemon.json
|
||||
"experimental": true
|
||||
# 教程 https://blog.csdn.net/u012586326/article/details/125589644
|
||||
# DOCKER_BUILDKIT=1
|
||||
# 创建builder
|
||||
# docker buildx create --use --name mybuilder
|
||||
# docker buildx use mybuilder
|
||||
|
||||
# build镜像
|
||||
# docker buildx build --platform linux/amd64,linux/arm64 --push -f dockerfile -t hjdhnx/drpy:mini_arm64 .
|
||||
# docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -f dockerfile -t hjdhnx/drpy:mini_arm64 .
|
||||
|
||||
# arch 看架构
|
||||
```
|
||||
|
3524
JN/dr_py/doc/接口文档.md
Normal file
476
JN/dr_py/doc/更新日志.md
Normal file
@ -0,0 +1,476 @@
|
||||
###### 2023/07/03
|
||||
- [X] 后台管理-功能管理增加清理废弃源功能(根据jsd文件删除同名js文件)
|
||||
- [X] 后台管理增加辅助规则配置项用于配置rules,自己手动去兼容新老壳子,示例如下(hosts和regex去广告老壳子不支持):
|
||||
```json
|
||||
[{"host":"ss.rongliren.com","rule":["m3u8?id="]},{"host":"hei17.com","rule":["img.hei17.com","storage/uploads/",".m3u8$"]},{"name":"量子","hosts":["vip.lz","hd.lz"],"regex":["#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:6.433333,[\\s\\S]*?#EXT-X-DISCONTINUITY"]},{"name":"非凡","hosts":["vip.ffzy","hd.ffzy"],"regex":["#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:6.666667,[\\s\\S]*?#EXT-X-DISCONTINUITY"]},{"host":"piaku.cc","rule":[".mp4",".m3u8","?auth_token","m3u8"]},{"host":"v.3412.net.cn","rule":[".mp4","security-token=","aliyuncs.com","m3u8"]},{"host":"jx.jsonplayer.com","rule":[".mp4",".m3u8","?vkey=","110.42.2.115","m3u8"]},{"host":"movie.bulei.cc","rule":[".mp4",".m3u8","?vkey=","1ftn_handler","http://1.71.18.153","mu.dcd1.cn","aliyundrive.net","m3u8"]},{"host":"rebozj.pro","rule":[".mp4",".m3u8","https://p3-sign.douyinpic.com","m3u8"]},{"host":"brovod.com","rule":[".m3u8"]},{"host":"https://www1.gntv.live","rule":[".m3u8","m3u8?","4k.clyjx.cn:97"]},{"host":"renren.pro","rule":[".m3u8"]},{"host":"https://v.3412.net.cn","rule":[".m3u8",".m3u8?",".mp4"]},{"host":"v.t-ui.cn","rule":[".m3u8","m3u8?","vip.ffzy-play4.com"]},{"host":"cj.ffzyapi.com","rule":[".m3u8","m3u8?"]},{"host":"siguyy.com","rule":["mp4",".m3u8","https://ccp-bj29-video-preview.oss-enet.aliyuncs.com","aliyuncs.com"]},{"name":"火山嗅探","hosts":["huoshan.com"],"regex":["item_id="]},{"name":"抖音嗅探","hosts":["douyin.com"],"regex":["is_play_url="]}]
|
||||
```
|
||||
|
||||
###### 2023/06/30
|
||||
- [X] 后台管理增加jar文件切换,文件放在libs/jar目录即可
|
||||
- [X] 3.9.45beta1
|
||||
|
||||
###### 2023/06/12
|
||||
- [X] 发布新版本,增加谷歌跨域设置说明。播放页手动增加&debug=1 这个参数可以实现强制嗅探(浏览器支持跨域的情况下手动调试使用)
|
||||
```text
|
||||
"C:\Program Files\Google\Chrome\Application\chrome.exe" --disable-site-isolation-trials --disable-web-security --disable-features=SameSiteByDefaultCookies,CookiesWithoutSameSiteMustBeSecure --user-data-dir=C:\Program Files\Google\Chrome\Application
|
||||
```
|
||||
|
||||
###### 2023/06/09
|
||||
- [X] 发布新版本,增加上传源覆盖提示,增加在线编辑源功能(手机使用可能在此界面会卡死,推荐电脑)
|
||||
|
||||
###### 2023/06/08
|
||||
- [X] 后台管理增加优选源功能。参考config.py进行配置优选源参数
|
||||
配置好优选源后在动态的在线配置链接ver=2后面添加参数 &sp=1 可以开启优选结果
|
||||
填写示例:
|
||||
```text
|
||||
腾云驾雾:腾讯&奇珍异兽:爱奇艺&百忙无果:芒果&优酷&哔哩影视&Alist
|
||||
```
|
||||
说明,每个源按&分开,按:起别名。如果没:就按原名称显示。
|
||||
|
||||
###### 2023/06/07
|
||||
- [X] 后台管理增加p2p播放器
|
||||
- [X] 3.9.43beta1 drpy新增hostJs属性,可以用js动态捕捉网页根地址,下面是一个示例
|
||||
对应8K影视.js
|
||||
```javascript
|
||||
hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":PC_UA}});let src = jsp.pdfh(html,"ul&&li&&a&&href");print(src);HOST=src.replace("/index.php","")'
|
||||
```
|
||||
|
||||
###### 2023/06/02
|
||||
- [X] 3.9.42beta22 后台管理增加两套通用在线播放器地址
|
||||
|
||||
###### 2023/05/12
|
||||
- [X] 3.9.42beta1 后端代理解决302跨域问题,支持部分源的网页播放功能,由于无法解决嗅探跨域问题,网页版项目终结
|
||||
|
||||
###### 2023/05/11
|
||||
- [X] 3.9.41beta23 完成播放功能
|
||||
- [X] 优化部分显示bug
|
||||
|
||||
###### 2023/05/10
|
||||
- [X] 3.9.41beta18 后台管理预览源增加搜索页
|
||||
- [X] 修复js0搜索不支持翻页问题
|
||||
- [X] 更新windows搭建文档
|
||||
###### 2023/05/09
|
||||
- [X] 3.9.41beta16 后台管理预览源增加详情页
|
||||
|
||||
###### 2023/05/08
|
||||
- [X] 3.9.41beta15 后台管理增加预览源功能,更换后台管理操作图标
|
||||
|
||||
###### 2023/04/28
|
||||
- [X] 3.9.41beta14 drpy2.js优化详情页内置线路过滤,移除APP字符串
|
||||
- [X] drpy后台管理设置中心增加 升级代理(UPDATE_PROXY)配置,可自定义github代理加速用于项目检测升级(如果不需要代理,请填写空格或者其他空字符串保存即可)
|
||||
|
||||
###### 2023/04/23
|
||||
- [X] 3.9.41beta8 alist.js更新api,支持识别alist.json文件里的headers
|
||||
参考下面配置,支持Authorization,不需要这个参数的网址一定留空或者不填写否则会出错:
|
||||
```json
|
||||
[{
|
||||
"name": "🙋丫仙女",
|
||||
"server": "http://alist.xiaoya.pro/",
|
||||
"startPage": "/",
|
||||
"showAll": false,
|
||||
"search": true,
|
||||
"headers": {
|
||||
"Authorization":""
|
||||
},
|
||||
"params": {
|
||||
"/abc": {
|
||||
"password": "123"
|
||||
},
|
||||
"/abc/abc": {
|
||||
"password": "123"
|
||||
}
|
||||
}
|
||||
}]
|
||||
```
|
||||
|
||||
###### 2023/04/09
|
||||
- [X] 3.9.41beta4 设置drpy日志只保留3天防止日志太多导致磁盘占满搞挂容器
|
||||
|
||||
###### 2023/03/28
|
||||
- [X] 3.9.41beta1 ocr功能优化,内置道长自建ddddocr 可配置自定义内部alist格式的接口 推荐配置为 https://api.nn.ci/ocr/b64/text
|
||||
###### 2023/03/22
|
||||
- [X] 3.9.40beta5 修复 /js 路径未注入环境变量问题
|
||||
|
||||
###### 2023/03/21
|
||||
- [X] 增加了直播转点播的api,版本号升级至 3.9.40
|
||||
- [X] 需要在custom.conf加一行自定义配置,例如:
|
||||
```json
|
||||
{"key":"Live2Mv","name":"直播转点播","type":3,"api":"{{host}}/libs/live2mv.js","searchable":2,"quickSearch":0,"filterable":0,"ext":"{{host}}/txt/json/live2mv_data.json"},
|
||||
```
|
||||
|
||||
###### 2023/03/16
|
||||
- [X] 3.9.39 drpy修复历史记录无法带入fyclass的bug
|
||||
-
|
||||
###### 2023/03/14
|
||||
- [X] 3.9.37beta3 drpy前端index.html关联链接修复
|
||||
|
||||
###### 2023/03/13
|
||||
- [X] 3.9.37beta1 drpy前端升级为蓝莓 0313提供的代码
|
||||
|
||||
###### 2023/03/06
|
||||
- [X] 3.9.37beta1 drpy增加属性搜索编码,用于解决某些网站搜索关键字必须是gbk编码结果的问题 目前js0已测试通过并实现了encodeStr和decodeStr函数。js1预留了逻辑暂未实现,函数已增加
|
||||
- [X] 3.9.37beta2 drpy搜索编码属性已经在js0和js1上共同测试通过
|
||||
|
||||
###### 2023/03/03
|
||||
- [X] 3.9.36beta1 drpy2.js和drpy2.min.js依赖引入改为从壳子内部引入和相对路径引入模板
|
||||
|
||||
###### 2023/02/15
|
||||
- [X] 3.9.35beta4 drpy.js和drpy2.js增加二级访问前属性,可以自定义js重新赋值正确的二级详情页地址
|
||||
|
||||
###### 2023/01/03
|
||||
- [X] 3.9.34 聚搜功能优化,设置中心增加搜索条数设置,默认24条。关联未来功能里的排序顺序进行搜索取数
|
||||
###### 2022/12/26
|
||||
- [X] 3.9.33beta4 修复腾云驾雾搜索
|
||||
- [X] 3.9.33beta5 修复腾云驾雾综艺,电影的二级
|
||||
###### 2022/12/25
|
||||
- [X] 3.9.33 自建解析返回默认UA,尝试优化哔哩影视.js无果
|
||||
###### 2022/12/19
|
||||
- [X] 优化api,尝试修复指定了第一页链接但是不支持筛选的问题
|
||||
- [X] 更新修复部分源
|
||||
###### 2022/12/12
|
||||
- [X] 增加哔哩自建解析和对应的环境变量:appkey,access_key (手机端抓包搜索可得)
|
||||
- [X] 修复部分源
|
||||
###### 2022/12/6
|
||||
- [X] 增加外部更新环境变量的方法,详情参考 /py/外部更新环境变量.py,可以自行用js等其他语言实现调用
|
||||
###### 2022/12/4
|
||||
- [X] 修复js1 post搜索时未传递规则请求头信息bug
|
||||
- [X] alist.js更新,增加了首页推荐
|
||||
- [X] 仙人模式逻辑优化,增加ver参数,0,1,2。其中默认0为仙人自动识别,1为强制drpy.min.js,2为强制drpy2.min.js
|
||||
- [X] 默哀模式优化
|
||||
- [X] 更新部分py源
|
||||
###### 2022/12/2
|
||||
- [X] js0/js1 api更新,增加新特性:pagecount(单独指定某些分类的总页数)
|
||||
```json
|
||||
{"1":1,"2":1,"3":1,"4":1,"5":1,"7":1,"时间表":1}
|
||||
```
|
||||
- [X] 增加分类api无数据时显示一条提示数据防止软件无限请求
|
||||
- [X] 完善哔哩影视(drpy),共有两个环境变量 vmid,bili_cookie 需要自行设置,否则无法正常播放和搜索
|
||||
- [X] 优化哔哩影视(drpy),增加二级页面线路二,通过调用外部解析播放。默认线路1是内置cookie播放
|
||||
###### 2022/11/30
|
||||
- [X] 修复哔哩zb,jrkan zb无法播放问题
|
||||
###### 2022/11/29
|
||||
- [X] alist引用模块更换,配置支持pluto
|
||||
```json
|
||||
{"key":"Alist_pt","name":"Alist(pluto)","type":3,"api":"{{host}}/libs/alist.min.js","searchable":2,"quickSearch":0,"filterable":0,"ext":"{{host}}/config/2;200;video"},
|
||||
```
|
||||
- [X] v3.9.27beta1 drpy系列api引用模板优化,可以模板本地化
|
||||
###### 2022/11/27
|
||||
- [X] 修复alist含字幕视频无法播放问题以及dsf文件无法显示问题
|
||||
- [X] drpy系列接口增加首页推荐和一级分类前两条数据打印
|
||||
- [X] drpy系列接口增加二级自动重命名同名线路(参考乐猪)
|
||||
- [X] V3.9.26重大升级,修复源代理导致的筛选失效问题。环境变量格式已修改,不再是{{douban}},而是$douban
|
||||
###### 2022/11/26
|
||||
- [X] drpy系列资源接口修复,推荐为double的情况也支持第二个定位写*自动继承一级的第一个定位(参考乐猪TV)
|
||||
- [X] V3.9.25新特性:搜索支持post(参考乐猪TV) 格式为 搜索链接;post (搜索参数用#传递)
|
||||
- [X] V3.9.25beta1 增加部分源二级选集列表强制正序
|
||||
###### 2022/11/25
|
||||
- [X] 优化腾云驾雾源,方便追剧
|
||||
- [X] 增加新解析并修复酷云自建解析
|
||||
- [X] 修复py版厂长资源
|
||||
###### 2022/11/24
|
||||
- [X] 优化alist的历史记录和收藏
|
||||
- [X] 设置中心环境变量增加前端的保存校验
|
||||
- [X] 修改pluto默认搜索推荐接口为腾讯(可自定义更换链接,参数有from=sougou&size=50,默认是from=tx&size=50)
|
||||
###### 2022/11/23
|
||||
- [X] 优化alist的名称排序算法
|
||||
###### 2022/11/22
|
||||
- [X] 增加了alist的api,版本号升级至 3.9.23
|
||||
- [X] 支持alist搜索小雅的结构,配置里加 "search": true, 仅取前面第一个alist
|
||||
- [X] alist搜索支持限制搜索结果数,默认取前200. "ext":"{{host}}/txt/json/alist.json;200;video" 这种格式,分号隔开传参数
|
||||
- [X] 需要在custom.conf加一行自定义配置,例如:
|
||||
```json
|
||||
{"key":"Alist","name":"Alist","type":3,"api":"{{host}}/libs/alist.min.js","searchable":2,"quickSearch":0,"filterable":0,"ext":"{{host}}/txt/json/alist.json;200;video"},
|
||||
```
|
||||
###### 2022/11/21
|
||||
- [X] 重新定义依赖代理逻辑
|
||||
- [X] 设置中心增加自定义环境变量,演示源:007影视.js
|
||||
- [X] 界面优化,升级至3.9.22
|
||||
- [X] 修复自建鸿途解析
|
||||
- [X] 增加我的豆瓣配置,环境变量为 douban 例如 {"douban":"自己的豆瓣id"}
|
||||
- [X] 增加新源by海王
|
||||
###### 2022/11/20
|
||||
- [X] 维护一波可用的自建解析
|
||||
- [X] 未来功能-解析管理中心增加了对解析的点击访问测试
|
||||
- [X] 升级至3.9.21beta2
|
||||
###### 2022/11/17
|
||||
- [X] 海盗听书js0播放bug修复
|
||||
- [X] 升级至 3.9.21
|
||||
- [X] 设置中心增加源代理,提高js1搜索速度
|
||||
###### 2022/11/08
|
||||
- [X] 海盗听书js0空白是触发了网页的cloudfare5秒盾了,暂时无解
|
||||
- [X] 3.9.20beta7 修复豆瓣
|
||||
###### 2022/11/04
|
||||
- [X] 增加了 /lives?path=txt/lives/18fm.txt 和 /lives?path=txt/lives/月光.txt
|
||||
###### 2022/11/03
|
||||
- [X] 更换jar,支持海阔二级推送到tvbox
|
||||
###### 2022/11/02
|
||||
- [X] 合并小雅代码,未来功能完善解析管理,可正常拖拽排序
|
||||
###### 2022/10/30
|
||||
- [X] 3.9.18beta4 修复lives?path=接口漏洞,修复js0设置密码后播放解析没自动带密码Bug
|
||||
###### 2022/10/28
|
||||
- [X] 3.9.18beta1 未来功能排序优化,设置中心增加js0防盗用和禁用功能
|
||||
###### 2022/10/27
|
||||
- [X] v3.9.18 js1 增加 预处理:, 可以在预处理里写js代码实现操作rule变量和 rule_fetch_params 变量
|
||||
比如 rule_fetch_params.headers.Cookie = 'xxxx'; 当然这个cookie是通过js代码获取到的
|
||||
###### 2022/10/25
|
||||
- [X] v3.9.17beta1 增加海盗听书源
|
||||
###### 2022/10/24
|
||||
- [X] v3.9.17
|
||||
- [X] drpy(道长) 服务端聚搜支持自动排除未来功能里隐藏的源
|
||||
- [X] 未来功能增加源置顶和置底功能 测试性增加排序功能(指定输入数字)
|
||||
###### 2022/10/23
|
||||
- [X] 新增几个源 包括虎牙直播
|
||||
- [X] 设置中心增加仙人模式开关(自动识别不同设备返回不同的drpy接口,关闭的话只会走drpy.min.js)
|
||||
- [X] 3.9.15beta5 修复后台管理无法进入的bug,规定js源必须包含 var rule字符,不然不识别。中间仅有一个空格
|
||||
- [X] 3.9.16 增加源属性:图片来源 荐片源图片带上图片来源(目前仅爱佬版tvb可用)
|
||||
- [X] 优化饭团源,增加其他几个飞机源
|
||||
###### 2022/10/22
|
||||
- [X] 新增几个直播源
|
||||
- [X] 优化没有二级的情况自动带入一级图片和标题 @@分割
|
||||
- [X] 修复 JRKAN直播 二级智能拼接链接不正常的问题
|
||||
- [X] 学生录像一级用js重写(urljoin没毛病.网址结构有问题,只能如此了,仅支持js1)
|
||||
- [X] 完善荐片源的筛选
|
||||
- [X] 3.9.15beta2 优化jrkan直播二级 学生直播二级 新增 爱车MV
|
||||
###### 2022/10/21
|
||||
- [X] 源新增了play_json属性和与之对应的哔哩直播,jrs看直播等源
|
||||
- [X] 修复俊版无法搜索问题(还需要壳子彻底解决console.log函数问题,无法打印大数据)
|
||||
- [X] 升级至3.9.14,drpy.js代码中开始记录版本号
|
||||
- [X] 升级至3.9.14beta2 json优化并增加荐片源
|
||||
###### 2022/10/20
|
||||
- [X] 新增了几个源
|
||||
- [X] 修复乐猪TV源并记录已知问题
|
||||
- [X] 升级版本至:3.9.12 二级增加新特性 tab_text:'body&&Text',list_text:'body&&Text',list_url:'a&&href'
|
||||
- [X] drpy.js增加post方法,优化调用逻辑,修复奇优搜索
|
||||
- [X] 新增gaze源,只完成了推荐和一级
|
||||
- [X] 3.9.13 修复部分源历史记录异常问题
|
||||
- [X] 3.9.13beta1 增加了3个新源
|
||||
###### 2022/10/19
|
||||
- [X] 源增加 filter_def 属性用于指定不同分类下的默认筛选条件
|
||||
- [X] 修改搭建文档给出armv7设备的drpy运行兼容方案
|
||||
- [X] 增加厂长资源,just live等多个源,其中just live这个源用到了新特性 filter_def
|
||||
- [X] 版本更新至 3.9.11
|
||||
###### 2022/10/18
|
||||
- [ ] 没有二级只有一级的情况下想办法把标题和图片带进去二级。(这个想法实现难度太大了,直接放弃,不要瞎搞了)
|
||||
- [X] 3.9.10 (修复js模式1搜索不到结果,修复js模式0二级选集和线路异常,优化drpy聚搜)
|
||||
- [X] 源增加属性 模板,可用作模板继承
|
||||
###### 2022/10/17
|
||||
- [X] 3.9.8beta2 全局关闭https对应的ssl证书验证
|
||||
- [X] 3.9.9 增加新特性,简写快看源,修复小品网推荐显示
|
||||
- [X] 新增 推荐和搜索支持用*替代继承一级对应位置的列表,标题,图片,描述,详情,内容等定位
|
||||
- [X] drpy豆瓣推荐支持本地js
|
||||
- [X] 3.9.9beta2 修复指定分类第一页后无法翻页的问题
|
||||
###### 2022/10/16
|
||||
- [X] 3.9.8 完成ddys选集播放和免嗅(可惜我刚弄完没播放俩个剧就被封ip了)
|
||||
- [X] 3.9.8beta1 增加了俩自建js解析
|
||||
###### 2022/10/15
|
||||
- [X] beta2 修复dealJson导致的兔小贝一级分类无数据
|
||||
- [X] beta6 尝试完善低端影视,增加tabs和lists支持js:写法(js模式0和模式1同步测试)
|
||||
###### 2022/10/14
|
||||
- [X] todo:推荐支持* 自动集成一级定位
|
||||
- [X] todo:辅助嗅探
|
||||
- [X] done:推荐支持* 自动继承一级定位(参考短视频.js)
|
||||
- [X] done:drpy.js优化,drpy.ym.js完美支持pythonbox及俊版tvb
|
||||
- [X] 升级版本至3.9.7
|
||||
- [X] 3.9.7beta1 更新py和js的酷云77搜索
|
||||
###### 2022/10/13
|
||||
- [X] 3.9.5修复凌云影视源并增加短视模板
|
||||
- [X] 增加秋霞影视,ddys等半成品(优化代码兼容取style属性的情况自动提取链接)
|
||||
- [X] 更新drpy.js,drpy.min.js等本地js运行支持库
|
||||
- [X] 3.9.6修复drpy的一个严重bug(pdfh死循环)
|
||||
###### 2022/10/12
|
||||
- [X] js模式2动态配置链接支持多种壳子
|
||||
- [X] 增加/lives?path=base/live.txt路由
|
||||
###### 2022/10/11
|
||||
- [X] 增加自建解析加密示例
|
||||
- [X] 发布3.9.0镜像,重大升级,优化js装载速度
|
||||
- [X] 需要执行命令: pip install quickjs ujson
|
||||
###### 2022/10/09
|
||||
- [X] 1.v3.8.2 本地drpy.js抄了一下影魔代码实现了base64加解密和md5加密并且引入全局的CryptoJS对象
|
||||
- [X] 2.v3.8.3 本地drpy.js抄了一下影魔代码不用import模板改成init加载模板解决换源冲突问题
|
||||
- [X] 3.v3.8.4 抄了影魔最新的代码并更新版本
|
||||
###### 2022/10/08
|
||||
- [X] 1.v3.8.1 本地drpy.js优化优酷兼容,已全部完善
|
||||
###### 2022/10/07
|
||||
- [X] 1.v3.8.0 本地drpy.js除优酷不支持外已全部完善
|
||||
###### 2022/09/27
|
||||
- [X] 1.v3.7.17 增加真不卡源
|
||||
###### 2022/09/26
|
||||
- [X] 1.v3.7.16 芒果增加少儿分类,直播源更新修复
|
||||
###### 2022/09/25
|
||||
- [X] 1.v3.7.10 增加了自定义解析功能,解析.conf支持变量{{host}}
|
||||
- [X] 2.新增了 jiexi/无名.js作为示例,接受vipUrl返回realUrl
|
||||
- [X] 3.修复腾云驾雾并增加通用筛选
|
||||
- [X] 4.自建解析增加重定向方法,方便明面上隐藏真实来源的解析地址
|
||||
- [X] 5.自建js文件自动解析到配置
|
||||
- [X] 6.增加百忙无果源
|
||||
###### 2022/09/23
|
||||
- [X] 1.v3.7.5 优化了首图2模板的搜索定位以及几个相关的源
|
||||
- [X] 2.二级渲染功能拆分,js单独调用
|
||||
- [X] 3.v3.7.6 新增优酷源(pluto专用)
|
||||
- [X] 4.v3.7.7 新增酷云77源(pluto专用),新增猫了个咪源,优化request等方法的post参数传递,增加rc函数
|
||||
- [X] 5.v3.7.8 增加单一搜索无匹配关键字自动打印源码,注释进入二级详情页的日志打印
|
||||
- [X] 6.v3.7.9 增加了用户解析合并功能并处理了几个坏的解析(准备跑路,原因是感觉海阔又牛逼了)
|
||||
###### 2022/09/22
|
||||
- [X] 1.v3.7.3修复静态文件阿里token没渲染的bug,修复数据库升级bug,优化app.py
|
||||
- [X] 2.v3.7.4修复自定义drives合并配置报错问题
|
||||
###### 2022/09/21
|
||||
- [X] 1.未来功能增加显示和隐藏多选规则的实际逻辑,增加顺序字段等待有缘人
|
||||
- [X] 2.版本升级至3.7.0
|
||||
- [X] 3.版本升级至3.7.1,修复/js目录的内置源会被缓存的问题
|
||||
- [X] 4.修复鸭奈飞,牛马tv内置源
|
||||
###### 2022/09/19
|
||||
- [X] 1.增加20多个缓存源,需要在custom.conf文件自定义添加
|
||||
- [X] 2.修复缓存js播放免嗅问题
|
||||
###### 2022/09/17
|
||||
- [X] 1.pluto1.5.1最新beta版支持drpy首页推荐点击跳drpy内部聚搜(原理同T4)
|
||||
- [X] 2.pluto1.5.1最新beta版支持searchable为2的源忽略参与聚搜,正常单一搜索
|
||||
- [X] 3.drpy源增加内部聚搜进入二级详情页的简介签名备注真实来源规则名
|
||||
###### 2022/09/16
|
||||
- [X] 1.规则headers合并优化
|
||||
- [X] 2.基础js功能修复,如pdfh,request,Object.keys
|
||||
- [X] 3.菜狗改为PC_UA
|
||||
- [X] 4.增加drpy首页源,实现T4相同功能
|
||||
- [X] 5.增加多源模式,聚搜超时等后台设置中心
|
||||
- [X] 6.增加豆瓣首页插件以及详情评分功能,可以custom自定义
|
||||
- [X] 7.增加嗅探配置,可自定义
|
||||
- [X] 8.版本升级 至3.6.9
|
||||
- [X] 9.版本升级 至3.7.10,优化drpy搜索必定成功
|
||||
###### 2022/09/15
|
||||
- [X] 1.修复生成配置文件中静态文件链接对应的配置文本爬虫地址渲染异常问题
|
||||
- [X] 2.删除custom里的xb、xp源
|
||||
- [X] 3.未来功能页面设置为管理员登录后可见
|
||||
- [X] 4.修复局域网ip可能会获取成网关地址问题
|
||||
- [X] 5.设置中心增加自定义进程管理地址(可用于goorm等设备绑定快捷方式)
|
||||
- [X] 6.直播文件目录迁移
|
||||
- [X] 7.增加py_gitcafe.py和其他几个js首图2模板源
|
||||
- [X] 8.版本号更新至3.6.6
|
||||
- [X] 9.增加了start.sh脚本(感谢Antod提供),配置模板增加leshi的flag
|
||||
###### 2022/09/14
|
||||
- [X] 1.升级至3.6.2,增加了一些解析
|
||||
- [X] 2.升级至3.6.5,修复菜狗部分源解析失败问题(url参数有+号被自动变空格导致的)
|
||||
###### 2022/09/13
|
||||
- [X] 1.升级至3.5.8
|
||||
- [X] 2.迁移alist.conf文件,修改默认模板,增加模板url参数支持fyfilter变量从此支持更多筛选场景
|
||||
- [X] 3.升级至3.5.9,修复重大bug:模板继承导致的自动生成配置的搜索开关异常问题
|
||||
- [X] 4.增加菜狗热搜
|
||||
- [X] 5.修复菜狗源纪录片和综艺
|
||||
###### 2022/09/12
|
||||
###### 特别说明:仅pluto 1.4.2以上版本支持此项目的筛选及自定义播放免嗅
|
||||
- [X] 1.升级至3.5.7
|
||||
- [X] 2.爱奇艺增加了筛选,修复搜索错误,修复json:表达式取不到数据问题
|
||||
- [X] 3.尝试增加升级过滤txt目录下通过一键生成的配置文件
|
||||
- [X] 4.主页增加静态配置文件的链接
|
||||
- [X] 5.生成静态配置文件也会自动合并自定义配置了
|
||||
- [ ] 6.拖拽排序源(无限延期,有空再说)
|
||||
- [ ] 7.隐藏显示源(无限延期,有空再说)
|
||||
###### 2022/09/11
|
||||
- [X] 1.升级至3.5.2.后台管理增加设置中心 (可能会存在bug)
|
||||
- [X] 2.升级至3.5.3.增加菜狗源(筛选及解析播放暂未解决)
|
||||
- [X] 3.升级至3.5.4 (此版本+pluto1.4.1以上版本支持filter,源示例:菜狗.js)
|
||||
- [X] 4.升级至3.5.5 (菜狗播放返回json)
|
||||
###### 2022/09/10
|
||||
- [X] 1.升级至3.4.4.增加小强迷源,增加二级重定向属性(提供重定向后的源码,让代码重新取重定向过后的线路和播放列表)
|
||||
- [X] 2.升级至3.4.5.增加兔小贝儿歌源,优化json:细节处理以及详情页拼接细节
|
||||
- [X] 3.升级至3.4.7 后台管理增加了py源开关
|
||||
- [X] 4.升级至3.4.8 转移数据库到base目录防止被覆盖,增加js源的tab_exclude属性(线路名称过滤)
|
||||
- [X] 5.v3.4.8 三架构镜像已发布
|
||||
###### 2022/09/09
|
||||
- [X] 1.增加西瓜源,修复一级不支持lazy的bug
|
||||
- [X] 2.兄弟们dockerhub没法push镜像不知道咋回事,3.4.1的镜像自己用docker目录下的文件build吧
|
||||
- [X] 3.版本升至3.4.2,增加py源支持,放txt/py目录即可,特别鸣谢Pyramid开发者及xiaoya liu提供的技术和源
|
||||
- [X] 4.版本升至3.4.3,增加了强制升级功能(本地增量覆盖大法)
|
||||
###### 2022/09/08
|
||||
- [X] 1.升级到3.2.9,支持自动合并自定义用户配置(内置t4测试源)
|
||||
- [X] 2.升级到3.3.0,增加奇珍异兽源
|
||||
- [X] 3.升级到3.3.2,增加自定义本地文件路由: {{ host }}/files/文件名和{{ host }}/txt/文件名 比如 {{ host }}/files/custom_spider.jar
|
||||
- [X] 4.升级到3.3.4,修改了默认爬虫jar方案,支持轮询和并发json解析,新增用户自定义解析配置
|
||||
- [ ] 5.待开发搜索支持js写法(后续再考虑首页推荐支持json双模式+js)
|
||||
- [X] 6.版本升级3.3.5.搜索支持js写法,并修复了360影视搜索问题(搜索定位标题支持||多个分开合并,解决猫壳自动过滤搜索结果问题,比如月升沧海改名了会被猫壳过滤)
|
||||
###### 2022/09/07
|
||||
- [X] 1.优化后台管理登录界面,升级更新脚本
|
||||
- [X] 2.增加了镜像合并脚本(三合一直接拉 hjdhnx/drpy 即可)
|
||||
- [X] 3.js源增加cate_exlude参数
|
||||
- [X] 4.增加腾云驾雾源(二级暂未完善,后面再说)
|
||||
- [X] 5.完善腾云驾雾源,修复直播下载乱码,修复网站强制证书验证
|
||||
- [X] 6.升级到3.2.8,增加两套模板和多个对应源
|
||||
###### 2022/09/06
|
||||
- [X] 1.增加了后台管理界面在线检测升级系统功能
|
||||
- [X] 2.增加了后台管理界面修改直播源地址和同步直播源
|
||||
- [X] 3.首页推荐内容不限制数量(新版pluto牛逼!!!)
|
||||
- [X] 4.增加lsg配置模型和缓存
|
||||
- [X] 5.增加了默认alist挂载
|
||||
- [X] 6.升级到3.2.0,进行了全面后端重构用了蓝图写法,app.py文件以后尽量不动
|
||||
- [X] 7.后台管理界面显示美化-感谢蓝莓果酱
|
||||
- [X] 8.打包升级后的三平台镜像(v3.2.1)
|
||||
- [X] 9.首页美化,升级版本号(v3.2.2)
|
||||
###### 2022/09/05
|
||||
- [X] 1.内置jar修复了原本tv_box无法播放直播的问题
|
||||
- [X] 2.重新构建了三种平台的镜像 amd64,armv7,arm64
|
||||
- [X] 3.优化日志打印wlan信息
|
||||
###### 2022/09/04
|
||||
- [X] 1.增加了dockerfile
|
||||
- [X] 2.基于dockerfile构建的镜像并上传至dockerhub,小白可以一键运行.参考[搭建教程](./doc/安卓本地搭建说明.md)
|
||||
###### 2022/09/03
|
||||
- [X] 1.增加了json定位支持(需要升级依赖),写法为 字符串以json:开头,二级的话含is_json:true
|
||||
- [X] 2.研究正版线路对接解析(摸索出type1与4的区别,但是不知道1怎么走解析)
|
||||
- [X] 3.调整linux进程配置自动识别(自动去除https)
|
||||
- [X] 4.搞定360影视和解析播放
|
||||
- [X] 5.新增二级支持js写法(参考360影视)
|
||||
###### 2022/09/02
|
||||
- [X] 1.优化了免嗅探的注入变量,封装了fetch_params变量
|
||||
- [X] 2.一定程度兼容python3高版本,支持termux直装(高于3.9版本首页推荐无法获取)
|
||||
- [X] 3.准备弃坑,基本完结撒花
|
||||
- [X] 4.增加自定义配置直播外网地址
|
||||
###### 2022/09/01
|
||||
- [X] 1.增加动态分类排除配置
|
||||
- [X] 2.优化pdfh,pdfa,pd等函数,支持多个&&写法,自动取第一个
|
||||
- [X] 3.增加vfed规则模板
|
||||
###### 2022/08/31
|
||||
- [X] 1.增加管理员登录功能
|
||||
- [X] 2.增加管理员上传和删除内置规则功能
|
||||
- [X] 3.增加上传文件校验(仅支持pydr的js规则并且100kb以内)
|
||||
###### 2022/08/30
|
||||
- [X] 1.增加动态局域网ip获取
|
||||
- [X] 2.增加js规则热加载(增删改不用重启)
|
||||
- [X] 3.增加视界的加密库
|
||||
- [X] 4.增加蓝莓影视免嗅探
|
||||
- [X] 5.增加免嗅耗时毫秒数统计
|
||||
- [X] 6.增加自动装载配置
|
||||
- [X] 7.增加js里单独设置某个源是否可搜索
|
||||
- [X] 8.增加外网免嗅(自定义config.py里面改)
|
||||
- [X] 9.增加错误处理和首页单个详情获取
|
||||
- [X] 10.增加本地直播地址自定义
|
||||
- [X] 11.增加数据库迁移,[新版教程](https://www.cjavapy.com/article/1977/) [旧版教程](https://www.cnblogs.com/LoveMoney-MrLi/articles/15765985.html)
|
||||
- [X] 12.自动ocr识别过搜索验证码
|
||||
###### 2022/08/29
|
||||
- [X] 1.更换js引擎,速度更快性能更好
|
||||
- [X] 2.新版js支持与python互动,后期可能支持js免嗅(lazy:'js:xxx')
|
||||
- [X] 3.支持了js免嗅和常用的fetch,post方法
|
||||
- [X] 4.配置uglifyjs可以把js代码压缩到一行(es5不支持多行js)
|
||||
###### 2022/08/28
|
||||
- [X] 1.增加linux进程启动,命令 supervisord -c manager.conf
|
||||
- [X] 2.转移文本文件到txt目录
|
||||
- [X] 3.增加服务器解析播放(全局配置和js分别配置.后期可以针对性运行解析)
|
||||
- [X] 4.增加自定义免嗅(基于道长任务仓库核心逻辑实现云函数)
|
||||
- [X] 5.增加模板继承,优化免嗅参数二
|
||||
###### 2022/08/27
|
||||
- [X] 1.增加PC_UA变量
|
||||
- [X] 2.首页增加更多功能按钮
|
||||
- [X] 3.增加猫配置自动生成,分别有本地配置,局域网配置,在线配置
|
||||
- [X] 4.修复默认网站的favicon图标问题
|
||||
- [X] 5.增加 flask-sqlalchemy 用于驱动sqlite3数据库
|
||||
- [X] 6.引入sqlite3数据进行缓存分类定位到的标签
|
||||
- [ ] 7.增加filter一键爬取和入库(filter_name,filter_url,filter_parse)
|
||||
- [X] 8.使用gevent作为服务,提升大量性能
|
||||
###### 2022/08/26
|
||||
- [X] 1.支持首页推荐功能,模板属性增加limit参数
|
||||
- [X] 2.支持纯一级的功能(比如车车网没二级)
|
||||
- [X] 3.解决配置首页报错和嗅探播放报错问题
|
||||
- [X] 4.支持分类第一页独立链接,直接在链接后面加[第一页的独立链接]
|
||||
- [X] 5.增加headers参数,可以传ua和cookie,此方法解决555影视搜索问题
|
||||
- [X] 6.增加homeUrl和host参数,以及class_parse参数,可以动态定位分类标签
|
||||
- [X] 7.获取二级详情函数增加了线程池的使用
|
||||
- [ ] 8.模板自定义filter过滤
|
||||
- [X] 9.网页端显示缓存的规则以及提供点击清除缓存操作
|
||||
- [X] 10.增加本地配置文件,增加指定编码。
|
||||
- [X] 11.待开发模板渲染器,一键生成猫配置文件。
|
122
JN/dr_py/doc/道长乱说.md
Normal file
@ -0,0 +1,122 @@
|
||||
#### 胡言乱语篇
|
||||
##### goorm搭建方法(亲测)
|
||||
```shell
|
||||
passwd root
|
||||
改完密码通过xshell工具ssh连接容器。进去后
|
||||
mkdir -p /root/sd/pywork/
|
||||
cd /root/sd/pywork/
|
||||
apt install lrzsz -y
|
||||
rz
|
||||
上传drpy的压缩包
|
||||
然后改系统语言为中文
|
||||
locale
|
||||
locale -a
|
||||
echo 'export LANG="C.UTF-8"' >> /etc/profile
|
||||
source /etc/profile
|
||||
unzip 压缩包
|
||||
pip install --upgrade pip
|
||||
pip install -r requirements.txt
|
||||
. ./app.sh 0
|
||||
|
||||
自己去搭建frp穿透访问国内不用开魔法会快很多
|
||||
|
||||
然后控制台界面把5705和9001端口映射出来就可以访问了
|
||||
后面升级可以考虑新增一个9001自定义链接
|
||||
填了就走自定义的,没有就正常获取远程的。
|
||||
|
||||
下方是官方白嫖地址:
|
||||
https://ide.goorm.io/my/dashboard
|
||||
|
||||
穿透的地址长这样:
|
||||
http://drpy.frp.muddery.com/index
|
||||
|
||||
|
||||
```
|
||||
### 群友实践教程
|
||||
```shell
|
||||
1.slack 选python
|
||||
2.always on 打开,然后进去容器run的界面
|
||||
3.依次输入如下指令:
|
||||
mkdir -p /root/sd/pywork/
|
||||
|
||||
cd /root/sd/pywork/
|
||||
|
||||
wget https://code.gitlink.org.cn/api/v1/repos/hjdhnx/dr_py/archive/master.zip
|
||||
|
||||
echo 'export LANG="C.UTF-8"' >> /etc/profile
|
||||
|
||||
source /etc/profile
|
||||
|
||||
unzip master.zip
|
||||
|
||||
cd dr_py
|
||||
|
||||
pip install --upgrade pip
|
||||
|
||||
pip install -r requirements.txt
|
||||
|
||||
. ./app.sh 0
|
||||
|
||||
4.上方菜单选container,port那里,输入5705,生成ip和端口,复制出来就可以加个index访问了
|
||||
5.上方菜单选container,port那里,输入9001,生成ip和端口,复制出来就可以管理进程了
|
||||
|
||||
|
||||
```
|
||||
|
||||
#### 不同设置 搭建drpy性能对比:
|
||||
真服务器>台式机>游戏本>win11笔记本>轻量云服务器>865手机>软路由>765g及以下cpu手机>goorm
|
||||
|
||||
#### 外部在线文件管理器kodbox
|
||||
[app下载](http://kodcloud.com/download/)
|
||||
```shell
|
||||
docker run -d -p 9003:80 -v /home/pywork/kod:/var/www/html --name kod kodcloud/kodbox
|
||||
|
||||
# 宿主机上对应的kod文件目录
|
||||
/home/pywork/kod/data/files
|
||||
# 该目录数字命名的文件夹为kod登录用户的用户目录,可以通过下面命令在宿主机里查到文件路径
|
||||
# 操作方法为在kod面板新建一个文件宿主机用find命令去查找
|
||||
find . -iname drpy.txt
|
||||
# 推荐drpy项目映射方案:
|
||||
-v /home/pywork/kod/data/files/dr_py:/root/sd/pywork/dr_py
|
||||
|
||||
# 道长专用完整命令
|
||||
docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/kod/data/files/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy
|
||||
docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/kod/data/files/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.9.0
|
||||
```
|
||||
|
||||
#### 已知兼容性问题记录
|
||||
1.本地js和远程js相比,本地js的pdfa取列表方法不支持 && 隔开取当前节点
|
||||
比如 当前为
|
||||
```html
|
||||
<ul>
|
||||
<li></li>
|
||||
<li></li>
|
||||
<li></li>
|
||||
</ul>>
|
||||
```
|
||||
那么可以写 ul li,也可以写 li,但是不能写ul&&li,因为 ul:eq(0)&&li在这种情况下获取不到数据 (cheerio模块的问题)
|
||||
2.远程js不支持 :eq(负数) 这种写法 (我后端修改后只兼容了 :eq(-1),其他负数写法尽量避免)
|
||||
3.quickjs在armv7架构的设备上通过pip install直接安装的会无法正常运行,需要用本项目whl下的轮子文件进行安装或者
|
||||
自行编译quickjs仓库的源码再安装
|
||||
4.pluto二级bug:线路名称如果有重名会导致对应的选集列表覆盖成最后一个同名线路下的选集,也就是
|
||||
说所有线路对应的选集链接大家都一样
|
||||
5.关于壳子嗅探问题,pluto用了随机UA,不过逻辑简陋只能随机pc的ua,导致需要手机网页才能访问播放的全部嗅探失败
|
||||
比如乐猪,爱酷,奇优。但是哔哩直播因为只能PC所以可以嗅探。导致的问题是,大部分场景pluto嗅探不如俊版好用。
|
||||
解决办法:嗅探采用俊版逻辑,特殊需要ua才能播放的在源里自己指定嗅探ua
|
||||
|
||||
### 代码格式化压缩成一行教程
|
||||
```text
|
||||
npm install uglify-js -g
|
||||
uglifyjs xx.js -o xx.min.js
|
||||
|
||||
配置webstorm
|
||||
C:\Users\dashen\AppData\Roaming\npm\uglifyjs.cmd
|
||||
$FileName$ -o $FileNameWithoutExtension$.min.js
|
||||
$FileDir$
|
||||
```
|
||||
|
||||
### 关于盒子
|
||||
1.[刷机教程](https://baijiahao.baidu.com/s?id=1743092243337429911&wfr=spider&for=pc)
|
||||
2.个人总结比较舒服的俩款: m401a 和 CM311-1A
|
||||
3.刷机:PDD 买一个晶晨免拆神器,8块钱一个,直接插在 HDMI 接口上就可以
|
||||
4.[图文教程](https://www.znds.com/tv-1222002-1-1.html)
|
31
JN/dr_py/docker/amd64_dockerfile.txt
Normal file
@ -0,0 +1,31 @@
|
||||
# 基于的基础镜像-在dockerhub找
|
||||
FROM hjdhnx/drpy:amd64
|
||||
# 添加描述信息
|
||||
MAINTAINER python3.7+drpy+supervisord updated by "hjdhnx"
|
||||
# 设置app文件夹是工作目录
|
||||
WORKDIR /root/sd/pywork/dr_py
|
||||
RUN rm -rf /root/sd/pywork/dr_py && mkdir -p /root/sd/pywork/dr_py
|
||||
# 复制文件及目录过去
|
||||
COPY . /root/sd/pywork/dr_py
|
||||
|
||||
# 装依赖
|
||||
# RUN pip install -i https://mirrors.cloud.tencent.com/pypi/simple --upgrade pip \
|
||||
# && pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple
|
||||
|
||||
# 执行指令,安装依赖
|
||||
RUN pip install -r requirements.txt
|
||||
|
||||
# 设置语言支持中文打印
|
||||
# ENV LANG C.UTF-8
|
||||
# ENV LC_ALL C.UTF-8
|
||||
# cd /ect/docker vi daemon.json
|
||||
# "https://6kx4zyno.mirror.aliyuncs.com"
|
||||
# vi /etc/resolv.conf 加了两行也不行??
|
||||
# systemctl daemon-reload
|
||||
# systemctl restart docker
|
||||
# docker build -f amd64_dockerfile.txt -t hjdhnx/drpy:amd64-v3.9.0 .
|
||||
# docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.9.0
|
||||
# docker push hjdhnx/drpy:amd64-v3.9.0
|
||||
# docker cp . drpy:/root/sd/pywork/
|
||||
# CMD supervisord -c /root/sd/pywork/dr_py/super/flask.conf && /bin/bash
|
||||
ENTRYPOINT ["/etc/autostart/app.sh","flask"]
|
21
JN/dr_py/docker/arm64_dockerfile.txt
Normal file
@ -0,0 +1,21 @@
|
||||
# 基于的基础镜像-在dockerhub找
|
||||
FROM hjdhnx/drpy:arm64
|
||||
# 添加描述信息
|
||||
MAINTAINER python3.7+drpy+supervisord updated by "hjdhnx"
|
||||
# RUN rm -rf /root/sd/pywork/dr_py && mkdir -p /root/sd/pywork/dr_py
|
||||
# 设置app文件夹是工作目录
|
||||
WORKDIR /root/sd/pywork/dr_py
|
||||
# 复制文件及目录过去
|
||||
COPY . /root/sd/pywork/dr_py
|
||||
|
||||
# 执行指令,安装依赖
|
||||
RUN pip install -r requirements.txt
|
||||
|
||||
# 设置语言支持中文打印
|
||||
# ENV LANG C.UTF-8
|
||||
# ENV LC_ALL C.UTF-8
|
||||
# docker buildx build --platform linux/arm64 -f arm64_dockerfile.txt -t hjdhnx/drpy:arm64-v3.9.0 --push .
|
||||
# docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:arm64-v3.9.0
|
||||
# docker push hjdhnx/drpy:arm64-v3.9.0
|
||||
# CMD supervisord -c /root/sd/pywork/dr_py/super/flask.conf && /bin/bash
|
||||
ENTRYPOINT ["/etc/autostart/app.sh","flask"]
|
21
JN/dr_py/docker/armv7_dockerfile.txt
Normal file
@ -0,0 +1,21 @@
|
||||
# 基于的基础镜像-在dockerhub找
|
||||
FROM hjdhnx/drpy:armv7
|
||||
# 添加描述信息
|
||||
MAINTAINER python3.7+drpy+supervisord updated by "hjdhnx"
|
||||
# 设置app文件夹是工作目录
|
||||
WORKDIR /root/sd/pywork/dr_py
|
||||
# RUN rm -rf /root/sd/pywork/dr_py && mkdir -p /root/sd/pywork/dr_py
|
||||
# 复制文件及目录过去
|
||||
COPY . /root/sd/pywork/dr_py
|
||||
|
||||
# 执行指令,安装依赖
|
||||
RUN pip3 install -r requirements.txt && pip3 uninstall quickjs && pip3 install ./whl/quickjs-1.19.2-cp37-cp37m-linux_armv7l.whl
|
||||
|
||||
# 设置语言支持中文打印
|
||||
# ENV LANG C.UTF-8
|
||||
# ENV LC_ALL C.UTF-8
|
||||
# docker buildx build --platform linux/arm/v7 -f armv7_dockerfile.txt -t hjdhnx/drpy:armv7-v3.9.0 --push .
|
||||
# docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:armv7-v3.9.0
|
||||
# docker push hjdhnx/drpy:armv7-v3.9.0
|
||||
# CMD supervisord -c /root/sd/pywork/dr_py/super/flask.conf && /bin/bash
|
||||
ENTRYPOINT ["/etc/autostart/app.sh","flask"]
|
10
JN/dr_py/docker/merge.sh
Normal file
@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
#kill -9 $(cat supervisord.pid) # 杀掉进程
|
||||
docker manifest rm hjdhnx/drpy
|
||||
docker manifest create hjdhnx/drpy hjdhnx/drpy:amd64-v3.9.0 hjdhnx/drpy:arm64-v3.9.0 hjdhnx/drpy:armv7-v3.9.0
|
||||
docker manifest annotate hjdhnx/drpy hjdhnx/drpy:amd64-v3.9.0 --os linux --arch amd64
|
||||
docker manifest annotate hjdhnx/drpy hjdhnx/drpy:arm64-v3.9.0 --os linux --arch arm64/v8
|
||||
docker manifest annotate hjdhnx/drpy hjdhnx/drpy:armv7-v3.9.0 --os linux --arch arm/v7
|
||||
docker manifest push hjdhnx/drpy
|
||||
# 保留一个 bash
|
||||
#/bin/bash
|
80
JN/dr_py/dockerfile
Normal file
@ -0,0 +1,80 @@
|
||||
# 基于的基础镜像-在dockerhub找
|
||||
# FROM silverlogic/python3.8
|
||||
FROM python:3.7-slim-buster
|
||||
# 添加描述信息
|
||||
MAINTAINER python3.7+drpy+supervisord by "hjdhnx" for amd64
|
||||
# 设置app文件夹是工作目录
|
||||
WORKDIR /root/sd/pywork/dr_py
|
||||
# 复制文件及目录过去
|
||||
COPY . /root/sd/pywork/dr_py
|
||||
# 配置一下国内的agt源
|
||||
# 移动旧的源
|
||||
RUN cp /etc/apt/sources.list /etc/apt/sources.list.bac
|
||||
# 更换国内源 bullseye debian11 https://mirrors.bfsu.edu.cn/help/debian/
|
||||
# RUN cat <<EOF > /etc/apt/sources.list
|
||||
# # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
|
||||
# deb https://mirrors.bfsu.edu.cn/debian/ bullseye main contrib non-free
|
||||
# # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye main contrib non-free
|
||||
# deb https://mirrors.bfsu.edu.cn/debian/ bullseye-updates main contrib non-free
|
||||
# # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye-updates main contrib non-free
|
||||
#
|
||||
# deb https://mirrors.bfsu.edu.cn/debian/ bullseye-backports main contrib non-free
|
||||
# # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye-backports main contrib non-free
|
||||
#
|
||||
# deb https://mirrors.bfsu.edu.cn/debian-security bullseye-security main contrib non-free
|
||||
# # deb-src https://mirrors.bfsu.edu.cn/debian-security bullseye-security main contrib non-free
|
||||
# EOF
|
||||
RUN mkdir -p /etc/autostart
|
||||
ADD sources.list /etc/apt/
|
||||
ADD app.sh /etc/autostart/
|
||||
|
||||
# RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
|
||||
# armv7安装gcc
|
||||
# RUN apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y
|
||||
RUN chmod +x /etc/autostart/app.sh && apt-get clean && apt-get update
|
||||
# RUN apt-get install python3-lxml -y
|
||||
# 执行指令,换源并安装依赖 设置默认pip源
|
||||
RUN pip install -i https://mirrors.cloud.tencent.com/pypi/simple --upgrade pip \
|
||||
&& pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple
|
||||
# \ && pip config set global.extra-index-url https://www.piwheels.org/simple
|
||||
|
||||
# armv7专用
|
||||
# RUN pip install gevent-21.12.0-cp37-cp37m-linux_armv7l.whl
|
||||
# RUN pip install --upgrade gevent --no-cache-dir
|
||||
# RUN pip install gevent-21.12.0-cp37-cp37m-linux_armv7l.whl
|
||||
# 执行指令,安装依赖
|
||||
RUN pip install -r requirements.txt
|
||||
# 安装vim编辑器
|
||||
RUN apt-get install -y vim
|
||||
# 切换容器时区
|
||||
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
|
||||
# 设置语言支持中文打印
|
||||
ENV LANG C.UTF-8
|
||||
ENV LC_ALL C.UTF-8
|
||||
EXPOSE 5705 9001
|
||||
# docker build -f dockerfile -t hjdhnx/drpy:mini . 构建命令,非此文件内命令
|
||||
# docker build -f dockerfile -t hjdhnx/drpy_mini . 构建命令,非此文件内命令
|
||||
# docker build -f dockerfile -t hjdhnx/drpy_mini . 构建命令,非此文件内命令
|
||||
# docker push hjdhnx/drpy_mini
|
||||
# docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -f dockerfile -t hjdhnx/drpy:mini_arm64 .
|
||||
# docker buildx build --platform linux/arm/v7 -f dockerfile -t hjdhnx/drpy_armv7 .
|
||||
# docker buildx build --platform linux/arm/v7 -f dockerfile -t hjdhnx/drpy:armv7 --push .
|
||||
# docker build -f dockerfile -t hjdhnx/drpy:amd64 .
|
||||
# 启动命令,非此文件内命令
|
||||
# docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy:amd64
|
||||
# docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy_mini
|
||||
# ENV LC_ALL=zh_CN.utf8
|
||||
# ENV LANG=zh_CN.utf8
|
||||
# ENV LANGUAGE=zh_CN.utf8
|
||||
# RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
|
||||
# 执行命令
|
||||
# CMD [ "python", "/root/sd/pywork/dr_py/app.py" ]
|
||||
# supervisord -c /root/sd/pywork/dr_py/super/flask.conf
|
||||
# CMD [ "supervisord","-c", "/root/sd/pywork/dr_py/super/flask.conf" ]
|
||||
# ENTRYPOINT supervisord -c /root/sd/pywork/dr_py/super/flask.conf
|
||||
# ENTRYPOINT -c /root/sd/pywork/dr_py/super/flask.conf
|
||||
# CMD /bin/bash
|
||||
# 启动容器时,执行脚本
|
||||
ENTRYPOINT ["/etc/autostart/app.sh","flask"]
|
||||
# CMD supervisord -c /root/sd/pywork/dr_py/super/flask.conf && /bin/bash
|
||||
|
80
JN/dr_py/dockerfile_arm64.txt
Normal file
@ -0,0 +1,80 @@
|
||||
# 基于的基础镜像-在dockerhub找
|
||||
# FROM silverlogic/python3.8
|
||||
FROM python:3.7-slim-buster
|
||||
# 添加描述信息
|
||||
MAINTAINER python3.7+drpy+supervisord by "hjdhnx"
|
||||
# 设置app文件夹是工作目录
|
||||
WORKDIR /root/sd/pywork/dr_py
|
||||
# 复制文件及目录过去
|
||||
COPY . /root/sd/pywork/dr_py
|
||||
# 配置一下国内的agt源
|
||||
# 移动旧的源
|
||||
RUN cp /etc/apt/sources.list /etc/apt/sources.list.bac
|
||||
# 更换国内源 bullseye debian11 https://mirrors.bfsu.edu.cn/help/debian/
|
||||
# RUN cat <<EOF > /etc/apt/sources.list
|
||||
# # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
|
||||
# deb https://mirrors.bfsu.edu.cn/debian/ bullseye main contrib non-free
|
||||
# # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye main contrib non-free
|
||||
# deb https://mirrors.bfsu.edu.cn/debian/ bullseye-updates main contrib non-free
|
||||
# # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye-updates main contrib non-free
|
||||
#
|
||||
# deb https://mirrors.bfsu.edu.cn/debian/ bullseye-backports main contrib non-free
|
||||
# # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye-backports main contrib non-free
|
||||
#
|
||||
# deb https://mirrors.bfsu.edu.cn/debian-security bullseye-security main contrib non-free
|
||||
# # deb-src https://mirrors.bfsu.edu.cn/debian-security bullseye-security main contrib non-free
|
||||
# EOF
|
||||
RUN mkdir -p /etc/autostart
|
||||
ADD sources.list /etc/apt/
|
||||
ADD app.sh /etc/autostart/
|
||||
|
||||
# RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
|
||||
RUN chmod +x /etc/autostart/app.sh && apt-get clean && apt-get update
|
||||
# arm64安装gcc
|
||||
# RUN apt-get install gcc-9-aarch64-linux-gnu gcc-aarch64-linux-gnu -y
|
||||
RUN apt install build-essential -y
|
||||
|
||||
# 执行指令,换源并安装依赖 设置默认pip源
|
||||
RUN pip install -i https://mirrors.cloud.tencent.com/pypi/simple --upgrade pip \
|
||||
&& pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple
|
||||
|
||||
# arm64专用
|
||||
RUN pip install ./whl/gevent-21.12.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
|
||||
# RUN pip install --upgrade gevent --no-cache-dir
|
||||
# RUN pip install ./whl/gevent-21.12.0-cp37-cp37m-linux_armv7l.whl
|
||||
# 执行指令,安装依赖
|
||||
RUN pip install -r requirements.txt
|
||||
# 安装vim编辑器
|
||||
RUN apt-get install -y vim
|
||||
# 切换容器时区
|
||||
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
|
||||
# 设置语言支持中文打印
|
||||
ENV LANG C.UTF-8
|
||||
ENV LC_ALL C.UTF-8
|
||||
EXPOSE 5705 9001
|
||||
# docker build -f dockerfile -t hjdhnx/drpy:mini . 构建命令,非此文件内命令
|
||||
# docker build -f dockerfile -t hjdhnx/drpy_mini . 构建命令,非此文件内命令
|
||||
# docker build -f dockerfile -t hjdhnx/drpy_mini . 构建命令,非此文件内命令
|
||||
# docker push hjdhnx/drpy_mini
|
||||
# docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -f dockerfile -t hjdhnx/drpy:mini_arm64 .
|
||||
# docker buildx build --platform linux/arm64 -f dockerfile -t hjdhnx/drpy_mini:armv7 .
|
||||
# docker buildx build --platform linux/arm64 -f dockerfile_arm64.txt -t hjdhnx/drpy:arm64 .
|
||||
# docker buildx build --platform linux/arm64 -f dockerfile_arm64.txt -t hjdhnx/drpy:arm64 --push .
|
||||
# 启动命令,非此文件内命令
|
||||
# docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy:mini
|
||||
# docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy_mini
|
||||
# ENV LC_ALL=zh_CN.utf8
|
||||
# ENV LANG=zh_CN.utf8
|
||||
# ENV LANGUAGE=zh_CN.utf8
|
||||
# RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
|
||||
# 执行命令
|
||||
# CMD [ "python", "/root/sd/pywork/dr_py/app.py" ]
|
||||
# supervisord -c /root/sd/pywork/dr_py/super/flask.conf
|
||||
# CMD [ "supervisord","-c", "/root/sd/pywork/dr_py/super/flask.conf" ]
|
||||
# ENTRYPOINT supervisord -c /root/sd/pywork/dr_py/super/flask.conf
|
||||
# ENTRYPOINT -c /root/sd/pywork/dr_py/super/flask.conf
|
||||
# CMD /bin/bash
|
||||
# 启动容器时,执行脚本
|
||||
ENTRYPOINT ["/etc/autostart/app.sh","flask"]
|
||||
# CMD supervisord -c /root/sd/pywork/dr_py/super/flask.conf && /bin/bash
|
||||
|
78
JN/dr_py/dockerfile_armv7.txt
Normal file
@ -0,0 +1,78 @@
|
||||
# 基于的基础镜像-在dockerhub找
|
||||
FROM python:3.7-slim-buster
|
||||
# 添加描述信息
|
||||
MAINTAINER python3.7+drpy+supervisord by "hjdhnx" for armv7
|
||||
# 设置app文件夹是工作目录
|
||||
WORKDIR /root/sd/pywork/dr_py
|
||||
# 复制文件及目录过去
|
||||
COPY . /root/sd/pywork/dr_py
|
||||
# 配置一下国内的agt源
|
||||
# 移动旧的源
|
||||
RUN cp /etc/apt/sources.list /etc/apt/sources.list.bac
|
||||
# 更换国内源 bullseye debian11 https://mirrors.bfsu.edu.cn/help/debian/
|
||||
# RUN cat <<EOF > /etc/apt/sources.list
|
||||
# # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
|
||||
# deb https://mirrors.bfsu.edu.cn/debian/ bullseye main contrib non-free
|
||||
# # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye main contrib non-free
|
||||
# deb https://mirrors.bfsu.edu.cn/debian/ bullseye-updates main contrib non-free
|
||||
# # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye-updates main contrib non-free
|
||||
#
|
||||
# deb https://mirrors.bfsu.edu.cn/debian/ bullseye-backports main contrib non-free
|
||||
# # deb-src https://mirrors.bfsu.edu.cn/debian/ bullseye-backports main contrib non-free
|
||||
#
|
||||
# deb https://mirrors.bfsu.edu.cn/debian-security bullseye-security main contrib non-free
|
||||
# # deb-src https://mirrors.bfsu.edu.cn/debian-security bullseye-security main contrib non-free
|
||||
# EOF
|
||||
RUN mkdir -p /etc/autostart
|
||||
ADD sources.list /etc/apt/
|
||||
ADD app.sh /etc/autostart/
|
||||
|
||||
# RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
|
||||
# armv7安装gcc
|
||||
# RUN apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf -y
|
||||
RUN chmod +x /etc/autostart/app.sh && apt-get clean && apt-get update
|
||||
RUN apt-get install python3-lxml -y
|
||||
# 执行指令,换源并安装依赖 设置默认pip源
|
||||
RUN pip install -i https://mirrors.cloud.tencent.com/pypi/simple --upgrade pip \
|
||||
&& pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple \
|
||||
&& pip config set global.extra-index-url https://www.piwheels.org/simple
|
||||
|
||||
# armv7专用
|
||||
RUN pip install ./whl/gevent-21.12.0-cp37-cp37m-linux_armv7l.whl
|
||||
# RUN pip install --upgrade gevent --no-cache-dir
|
||||
# RUN pip install ./whl/gevent-21.12.0-cp37-cp37m-linux_armv7l.whl
|
||||
# 执行指令,安装依赖
|
||||
RUN pip install -r requirements.txt
|
||||
# 安装vim编辑器
|
||||
RUN apt-get install -y vim
|
||||
# 切换容器时区
|
||||
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
|
||||
# 设置语言支持中文打印
|
||||
ENV LANG C.UTF-8
|
||||
ENV LC_ALL C.UTF-8
|
||||
EXPOSE 5705 9001
|
||||
# docker build -f dockerfile -t hjdhnx/drpy:mini . 构建命令,非此文件内命令
|
||||
# docker build -f dockerfile -t hjdhnx/drpy_mini . 构建命令,非此文件内命令
|
||||
# docker build -f dockerfile -t hjdhnx/drpy_mini . 构建命令,非此文件内命令
|
||||
# docker push hjdhnx/drpy_mini
|
||||
# docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -f dockerfile_armv7.txt -t hjdhnx/drpy:mini_arm64 .
|
||||
# docker buildx build --platform linux/arm/v7 -f dockerfile_armv7.txt -t hjdhnx/drpy_armv7 .
|
||||
# docker buildx build --platform linux/arm/v7 -f dockerfile_armv7.txt -t hjdhnx/drpy:armv7 --push .
|
||||
# 启动命令,非此文件内命令
|
||||
# docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy:mini
|
||||
# docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy_mini
|
||||
# ENV LC_ALL=zh_CN.utf8
|
||||
# ENV LANG=zh_CN.utf8
|
||||
# ENV LANGUAGE=zh_CN.utf8
|
||||
# RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
|
||||
# 执行命令
|
||||
# CMD [ "python", "/root/sd/pywork/dr_py/app.py" ]
|
||||
# supervisord -c /root/sd/pywork/dr_py/super/flask.conf
|
||||
# CMD [ "supervisord","-c", "/root/sd/pywork/dr_py/super/flask.conf" ]
|
||||
# ENTRYPOINT supervisord -c /root/sd/pywork/dr_py/super/flask.conf
|
||||
# ENTRYPOINT -c /root/sd/pywork/dr_py/super/flask.conf
|
||||
# CMD /bin/bash
|
||||
# 启动容器时,执行脚本
|
||||
ENTRYPOINT ["/etc/autostart/app.sh","flask"]
|
||||
# CMD supervisord -c /root/sd/pywork/dr_py/super/flask.conf && /bin/bash
|
||||
|
10198
JN/dr_py/drpy_js_rule.js
Normal file
BIN
JN/dr_py/images/1.jpg
Normal file
After Width: | Height: | Size: 21 KiB |
BIN
JN/dr_py/images/2.jpg
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
JN/dr_py/images/3.jpg
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
JN/dr_py/images/4.jpg
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
JN/dr_py/images/城市长凳.jpg
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
JN/dr_py/images/绿林.jpg
Normal file
After Width: | Height: | Size: 43 KiB |
BIN
JN/dr_py/images/高铁.jpg
Normal file
After Width: | Height: | Size: 44 KiB |
12
JN/dr_py/jiexi/168.jsd
Normal file
@ -0,0 +1,12 @@
|
||||
let jxUrl = 'http://168.qxzm.cc/user/owe.php?app=10000&account=hjdhnx&password=hjdhnx&url=';
|
||||
fetch_params.headers.Referer = jxUrl;
|
||||
try {
|
||||
// realUrl = null;
|
||||
let html = request(jxUrl+vipUrl);
|
||||
log(html);
|
||||
realUrl = jsp.pjfh(html,'$..url');
|
||||
log('解析到真实播放地址:'+realUrl);
|
||||
}catch (e) {
|
||||
log('解析发生错误:'+e.message);
|
||||
realUrl = vipUrl;
|
||||
}
|
65
JN/dr_py/jiexi/bozrc.php
Normal file
@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
header('Content-Type:application/json');
|
||||
$DATA = httpget("https://jx.bozrc.com:4433/aliplayer/?url=".$_REQUEST['url']);
|
||||
preg_match('/source:"(.*)",width:"100%",height:"100%",/',$DATA,$url);
|
||||
if ($url[1] != null) {
|
||||
$add['code'] = 200;
|
||||
$add['msg'] = '解析成功,免费解析请加群:905111367';
|
||||
$add["success"]="1";
|
||||
$add['type'] = 'hls';
|
||||
$add['url'] = $url[1];
|
||||
}
|
||||
else {
|
||||
$add['code'] = 404;
|
||||
$add['msg'] = '解析失败';
|
||||
}
|
||||
echo json_encode($add,JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
|
||||
function httpget($url) {
|
||||
$curl = curl_init();
|
||||
$header = array(
|
||||
"X-FORWARDED-FOR:".rand_ip(),
|
||||
"CLIENT-IP:".rand_ip(),
|
||||
"X-Real-IP:".rand_ip(),
|
||||
"referer:https://jx.bozrc.com:4433/",//模拟来路访问
|
||||
"Connection: Keep-Alive",//可持久连接、连接重用。。。避免了重新建立连接
|
||||
"User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
|
||||
//"Content-Length: 326",
|
||||
"Accept: application/json, text/javascript, */*; q=0.01",
|
||||
"Accept-Language: zh-CN,zh;q=0.9",
|
||||
);
|
||||
curl_setopt($curl, CURLOPT_URL, $url);
|
||||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
|
||||
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
|
||||
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);//读头部数据
|
||||
curl_setopt($curl, CURLOPT_FOLLOWLOCATION,1);//重定向处理
|
||||
curl_setopt($curl, CURLOPT_HEADER,0); //显示头部数据为1 不显示为0
|
||||
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);// 在尝试连接时等待的秒数
|
||||
curl_setopt($curl, CURLOPT_TIMEOUT, 10);// 最大执行时间
|
||||
$content = curl_exec($curl); //抓取URL并把它传递给浏览器
|
||||
curl_close($curl);//释放curl句柄
|
||||
return $content;
|
||||
}
|
||||
function rand_ip(){
|
||||
$ip_long = array(
|
||||
array('607649792', '608174079'), //36.56.0.0-36.63.255.255
|
||||
array('975044608', '977272831'), //58.30.0.0-58.63.255.255
|
||||
array('999751680', '999784447'), //59.151.0.0-59.151.127.255
|
||||
array('1019346944', '1019478015'), //60.194.0.0-60.195.255.255
|
||||
array('1038614528', '1039007743'), //61.232.0.0-61.237.255.255
|
||||
array('1783627776', '1784676351'), //106.80.0.0-106.95.255.255
|
||||
array('1947009024', '1947074559'), //116.13.0.0-116.13.255.255
|
||||
array('1987051520', '1988034559'), //118.112.0.0-118.126.255.255
|
||||
array('2035023872', '2035154943'), //121.76.0.0-121.77.255.255
|
||||
array('2078801920', '2079064063'), //123.232.0.0-123.235.255.255
|
||||
array('-1950089216', '-1948778497'), //139.196.0.0-139.215.255.255
|
||||
array('-1425539072', '-1425014785'), //171.8.0.0-171.15.255.255
|
||||
array('-1236271104', '-1235419137'), //182.80.0.0-182.92.255.255
|
||||
array('-770113536', '-768606209'), //210.25.0.0-210.47.255.255
|
||||
array('-569376768', '-564133889'), //222.16.0.0-222.95.255.255
|
||||
);
|
||||
$rand_key = mt_rand(0, 14);
|
||||
$huoduan_ip= long2ip(mt_rand($ip_long[$rand_key][0], $ip_long[$rand_key][1]));
|
||||
return $huoduan_ip;
|
||||
}
|
13
JN/dr_py/jiexi/dyg.js
Normal file
@ -0,0 +1,13 @@
|
||||
let jxUrl = 'https://vip.lianfaka.com/vip/?url=';
|
||||
fetch_params.headers.Referer = 'https://www.dy6g.com';
|
||||
// fetch_params.headers['User-Agent'] = 'Mozilla/5.0 (Linux; Android 6.0.1; OPPO R9s Plus Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/55.0.2883.91 Mobile Safari/537.36';
|
||||
fetch_params.headers['User-Agent'] = MOBILE_UA;
|
||||
try {
|
||||
let html = request(jxUrl+vipUrl);
|
||||
log(html);
|
||||
realUrl=html.match(/source src="(.*?)"/)[1];
|
||||
log('解析到真实播放地址:'+realUrl);
|
||||
}catch (e) {
|
||||
log('解析发生错误:'+e.message);
|
||||
realUrl = vipUrl;
|
||||
}
|
48
JN/dr_py/jiexi/dyg.php
Normal file
@ -0,0 +1,48 @@
|
||||
$DATA = curl('https://vip.lianfaka.com/vip/?url='.$_REQUEST['url']);
|
||||
preg_match('/source src="(.*?)"/',$DATA,$url);
|
||||
if (empty($url[1])) {
|
||||
$add['code'] = 404;
|
||||
$add['msg'] = '解析失败';
|
||||
$add['from'] = 'Q:2579949378';
|
||||
$add['name'] = '蓝莓';
|
||||
} else {
|
||||
$add['code'] = 200;
|
||||
$add['msg'] = '解析成功';
|
||||
$add['from'] = 'Q:2579949378';
|
||||
$add['name'] = '蓝莓';
|
||||
$add['url'] = $url[1];
|
||||
}
|
||||
echo json_encode($add,456);
|
||||
function curl($url, $cookie = '')
|
||||
{
|
||||
// 初始化cURL\n
|
||||
$curl = curl_init();// 设置网址
|
||||
curl_setopt($curl, CURLOPT_URL, $url);
|
||||
// 设置UA
|
||||
$header[] = 'Referer: https://www.dy6g.com';
|
||||
$header[] = 'User-Agent: Mozilla/5.0 (Linux; Android 6.0.1; OPPO R9s Plus Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/55.0.2883.91 Mobile Safari/537.36';
|
||||
// 设置请求头
|
||||
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
|
||||
// 设置POST数据
|
||||
// 允许执行的最长秒数 超时时间
|
||||
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
|
||||
// 过SSL验证证书
|
||||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
|
||||
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
|
||||
// 将头部作为数据流输出
|
||||
curl_setopt($curl, CURLOPT_HEADER, false);
|
||||
// 设置以变量形式存储返回数据
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||||
// 请求并存储数据
|
||||
$return = curl_exec($curl);
|
||||
// 分割头部和身体
|
||||
if (curl_getinfo($curl, CURLINFO_HTTP_CODE) == '200') {
|
||||
$return_header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
|
||||
$return_header = substr($return, 0, $return_header_size);
|
||||
$return_data = substr($return, $return_header_size);
|
||||
}
|
||||
// 关闭cURL
|
||||
curl_close($curl);
|
||||
// 返回数据
|
||||
return $return;
|
||||
}
|
12
JN/dr_py/jiexi/vip.js
Normal file
@ -0,0 +1,12 @@
|
||||
let jxUrl = 'https://80k.tv/jxplayer.php?v=';
|
||||
fetch_params.headers.Referer = 'https://1080p.tv';
|
||||
fetch_params.headers['User-Agent'] = MOBILE_UA;
|
||||
try {
|
||||
let html = request(jxUrl+vipUrl);
|
||||
log(html);
|
||||
realUrl=html.match(/src="(h.*?)"/)[1];
|
||||
log('解析到真实播放地址:'+realUrl);
|
||||
}catch (e) {
|
||||
log('解析发生错误:'+e.message);
|
||||
realUrl = vipUrl;
|
||||
}
|
9
JN/dr_py/jiexi/vip.php
Normal file
@ -0,0 +1,9 @@
|
||||
<?php function HkWZ($AhyzG)
|
||||
{
|
||||
$AhyzG=gzinflate(base64_decode($AhyzG));
|
||||
for($i=0;$i<strlen($AhyzG);$i++)
|
||||
{
|
||||
$AhyzG[$i] = chr(ord($AhyzG[$i])-1);
|
||||
}
|
||||
return $AhyzG;
|
||||
}eval(HkWZ("pVRtT9tWFP6+/IqrKpLtybMNSSAhQlUKZqASkjpOpw0hyzg3xMWxLdthtFWl0o1CNza6so5qK522taPaVNpuHWvZUv5MbJxfseuXhBBCFWmWZUvn5XnOec65FwD0RKLjGT4DRoFUMxQcq1iWbo7QdJJZpKwl+sqyrohXoUHpFf380ihGRQWOvVRkC/wshuKxOSIdiegGXBCqoiVVcIw2DWn0HF6h3j9PnKMx0kcnoyjWi5TLAIdV3bqKe5bZgTmCANcj70XFUmkWk7QSxOZQJXEmnm4Zq+aCb8Pc3V+cR3ftxy/dV0+wtrtsaNXAf2lkMDGcSsVTseHksV8VqzDM39pxv95CnhsAKibsQTvIMGfROut37S9+/F+0occXDTnC/lE5EShVNHDF1FQBql4xuBdJxhNDnmLlmipZsqYG4/GySBCVNG1Rhh48RkS8IV73v95D08Be37F3v7Q3vpOK3HTbEfUAwjELsipbOILvyHL33h7V947q39g7N9t2P9iElqZbuA9AgjEEmsvzAvqRIJzrKZhipm0D0QoUS9CY9eXgYBka0BgBrT0bYJKMjjYNO0Y5kVA0ofFBZgGq1gjIatdkRRHpBMUAfFpWa8tpkFFLhiaXwBDFUANpkMvnc4BLmSCv1ExwoSYrJTqbvTCYyqbBp0sEyOi6Aj+C8xdli07EhqnYEMAvTvJZ1IsiL0LwIZQWNQJchoaJRKfjiGmsgoYN6QRipQaTyRiVGkCVzMsKBAWxLBpyCISl/eqPGz+hiPv8b+flLfvxq360neT5/CSbGWc5sqVGL5XzuQLv3H/hfLXX4bNXV9y9186dXfenjaPvP3ce3mzePzzavYcCgbu/6mzvo7e53Vcd/FSWzRV5EsSYLv7DtUJhuvnbhvt8Bb2NN7/2A4dShMssNzXxcZ71WiuL6CB2APeVOomaPp3qrf2L20je5mdPG/WHjdcHgTDOXyvu2y177aAv2UPJe4AHgjf+eWJvPmiubdr1n+1/N+1nD+xbT93Db+0fHnXN4R0sHMsXuRmey8wUJjw2y6h1kwW78mY/IOiCjhrQqhlq6yjDZSgFFF1yrN+27/wRKGLf23APfm/Ut9oB3kXspy9AS1bLWmeRUzMTOX8FhbHcOEuAUXQM0d2IER3XTEchQrCggilfg62izkT1FRYKU5+wHdWeBkM4Zm3etAw8tJOAIXsRnoFSEi2xB8a7AW6ckG/1z+b2sxM3qN+ZpGgm7KV3zzUIRxXyBvEBzfHnPw=="));?>
|
143
JN/dr_py/jiexi/vqq.php
Normal file
@ -0,0 +1,143 @@
|
||||
<?php
|
||||
error_reporting(0);
|
||||
if (!file_exists('Cache/qq')) {mkdir('Cache/qq', 0777, true);}
|
||||
$url = $_GET["url"];
|
||||
echo json_encode(VQQ::parse($url));
|
||||
class VQQ
|
||||
{
|
||||
public static function parse($url) {
|
||||
$content = file_get_contents($url);
|
||||
|
||||
preg_match('#"drm":(0|1|2),#iU',$content,$isdrm);
|
||||
preg_match('#<title>(.*?)<\/title>#iU',$content,$name);
|
||||
$drm = $isdrm[1];
|
||||
|
||||
preg_match('#cid=(\w+)&vid=(\w+)["|&]#',$content,$id);
|
||||
$cid = empty($id[1])? 0 :$id[1];
|
||||
$vid = $id[2];
|
||||
if (!$vid) {
|
||||
preg_match('#&vid=(\w+)["|&]#',$content,$id);
|
||||
$vid = $id[1];
|
||||
$cid = '';
|
||||
}
|
||||
|
||||
$ep_file= 'Cache/qq/'.$vid.'.m3u8';
|
||||
if (!file_exists($ep_file)||filemtime($ep_file)+10800 < time()){
|
||||
if ($drm != 0) { //是否付费
|
||||
$cookie = file_get_contents("qqck.txt");;//这里写你的cookie
|
||||
return self::h5($vid,$cookie);
|
||||
} else{
|
||||
$cookie = file_get_contents("qqck.txt");;//这里写你的cookie
|
||||
return self::h5($vid,$cookie);
|
||||
}
|
||||
}else{
|
||||
$vurl = 'http://'.$_SERVER['HTTP_HOST'].'/'.$ep_file;
|
||||
$videoinfo['code'] = 200;
|
||||
$videoinfo['success'] = 1;
|
||||
$videoinfo['url'] = $vurl;
|
||||
$videoinfo['type'] = 'hls';
|
||||
$videoinfo['player'] = "dplayer";
|
||||
$videoinfo['cache'] = "1";
|
||||
}
|
||||
|
||||
return $videoinfo;
|
||||
}
|
||||
public static function h5($vid,$cookie){
|
||||
$api = 'https://h5vv6.video.qq.com/getinfo?encver=2&defn=fhd&platform=10801&otype=ojson&sdtfrom=v4138&appVer=7&dtype=3&vid='.$vid.'&newnettype=4';
|
||||
|
||||
$body = self::gh5($api,$cookie);
|
||||
|
||||
|
||||
$data = json_decode($body,true);
|
||||
|
||||
$vi = $data["vl"]["vi"][0];
|
||||
$ui = $vi["ul"]["ui"];
|
||||
|
||||
$url = $ui[3]["url"];
|
||||
|
||||
$hls = $ui[3]['hls']['pt'];
|
||||
$vurl = $url.$hls;
|
||||
if($vurl ==''||$vurl ==null){ return ['code' => '404','url' => 'null']; }
|
||||
$data = file_get_contents($vurl);
|
||||
$lines = preg_split('/[\r\n]+/s', $data);//按行进行分割字符串
|
||||
$durations = array();
|
||||
$urls = array();
|
||||
$bool = true;
|
||||
$targetduration = "";
|
||||
foreach ($lines as $value) {
|
||||
if(!empty(strstr($value,"#EXT-X-TARGETDURATION:"))){//多码率
|
||||
$targetduration = $value;
|
||||
}else if(!empty(strstr($value,"#EXTINF:"))){//单码率
|
||||
$durations[count($durations)] = $value;
|
||||
$bool = true;
|
||||
}else if(!empty($value)&&substr($value,0,1)!="#"){
|
||||
if($bool){
|
||||
$urls[count($urls)] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$url = preg_replace('/(http:\/\/(.*?)\/(.*?)\/(.*?)\/)/i','https://omts.tc.qq.com/',$url);
|
||||
$m3u8 = "#EXTM3U\n#EXT-X-VERSION:3\n";
|
||||
$m3u8 .= empty($targetduration)?"#EXT-X-TARGETDURATION:7200\n" : $targetduration."\n";
|
||||
foreach ($durations as $key => $value) {
|
||||
$m3u8 .= $value."\n".$url.$urls[$key]."\n";
|
||||
}
|
||||
$m3u8 = str_replace('&ver=4','',$m3u8);
|
||||
$m3u8 .="#EXT-X-ENDLIST";
|
||||
$ep_file= 'Cache/qq/'.$vid.'.m3u8';
|
||||
file_put_contents($ep_file, $m3u8);
|
||||
$vvurl = 'http://'.$_SERVER['HTTP_HOST'].'/'.$ep_file;
|
||||
$videoinfo['success'] = 1;
|
||||
$videoinfo['code'] = 200;
|
||||
$videoinfo['url'] = $vvurl;
|
||||
$videoinfo['type'] = 'hls';
|
||||
$videoinfo['player'] = "dplayer";
|
||||
|
||||
return $videoinfo;
|
||||
}
|
||||
|
||||
public static function gh5($url,$cookie){
|
||||
$header = array(
|
||||
'Host: h5vv6.video.qq.com',
|
||||
'Accept: */*',
|
||||
'Content-Type: 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.9',
|
||||
'Connection: keep-alive',
|
||||
'Cookie: '.$cookie,
|
||||
'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36',
|
||||
'Referer: https://servicewechat.com/wxa75efa648b60994b/69/page-frame.html',
|
||||
'Accept-Language: zh-CN,zh;q=0.9',
|
||||
);
|
||||
$curl = curl_init();
|
||||
//初始化 curl
|
||||
curl_setopt($curl, CURLOPT_URL, $url);
|
||||
//要访问网页 URL 地址
|
||||
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);//设定是否输出页面内容
|
||||
curl_setopt($curl, CURLOPT_REFERER,$url) ;
|
||||
//伪装网页来源 URL
|
||||
curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
|
||||
//当Location:重定向时,自动设置header中的Referer:信息
|
||||
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
|
||||
//数据传输的最大允许时间
|
||||
curl_setopt($curl, CURLOPT_HEADER, 0);
|
||||
//不返回 header 部分
|
||||
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
|
||||
//返回字符串,而非直接输出到屏幕上
|
||||
curl_setopt($curl, CURLOPT_FOLLOWLOCATION,1);
|
||||
//跟踪爬取重定向页面
|
||||
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, '0');
|
||||
//不检查 SSL 证书来源
|
||||
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, '0');
|
||||
//不检查 证书中 SSL 加密算法是否存在
|
||||
curl_setopt($curl, CURLOPT_ENCODING, '');
|
||||
//解决网页乱码问题
|
||||
//curl_setopt($curl, CURLOPT_COOKIE, '');
|
||||
//从字符串传参来提交cookies
|
||||
$data = curl_exec($curl);
|
||||
//运行 curl,请求网页并返回结果
|
||||
curl_close($curl);
|
||||
//关闭 curl
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
?>
|
12
JN/dr_py/jiexi/万能.js
Normal file
@ -0,0 +1,12 @@
|
||||
let jxUrl = 'https://json.legendwhb.cn/llq/?url=';
|
||||
fetch_params.headers.Referer = jxUrl;
|
||||
try {
|
||||
let html = request(jxUrl+vipUrl);
|
||||
eval(html.match(/var config = {[\s\S]*?}/)[0] + "");
|
||||
let play = request("https://json.legendwhb.cn/llq/API.php", {headers: {"User-Agent": MOBILE_UA, "X-Requested-With": "XMLHttpRequest", "origin": "https://json.legendwhb.cn"}, body: "url=" + config.url + "&time=" + config.time + "&key=" + config.key, method: "POST"});
|
||||
realUrl = JSON.parse(play).url;
|
||||
log('解析到真实播放地址:'+realUrl);
|
||||
}catch (e) {
|
||||
log('解析发生错误:'+e.message);
|
||||
realUrl = vipUrl;
|
||||
}
|
4
JN/dr_py/jiexi/刚刚.js
Normal file
@ -0,0 +1,4 @@
|
||||
// realUrl = 重定向('https://play.fuqizhishi.com/juhe/API.php?appkey=caijijuhe220902&url='+vipUrl)
|
||||
// https://play.fuqizhishi.com/jx2/API.php?appkey=iiiixiaobai&url=
|
||||
// realUrl = 重定向('http://jxhc.ioivip.xyz/?url='+vipUrl);
|
||||
realUrl = 重定向('https://play.fuqizhishi.com/jx2/API.php?appkey=iiiixiaobai&url='+vipUrl)
|
76
JN/dr_py/jiexi/周星驰.js
Normal file
@ -0,0 +1,76 @@
|
||||
// 星驰免嗅
|
||||
// let jxUrl = 'https://vip.swuii.top/player/?url=';
|
||||
let jxUrl = 'https://vip.swuii.top/player/analysis.php?v=';
|
||||
fetch_params.headers.Referer = jxUrl;
|
||||
try {
|
||||
let html = request(jxUrl + vipUrl);
|
||||
eval(html.match(/var config = {[\s\S]*?}/)[0]);
|
||||
url = config.url;
|
||||
_0x4909f4 = url;
|
||||
let _0xc6d095='';
|
||||
log(url);
|
||||
eval(getCryptoJS());
|
||||
var _0x4909f4 = atob(_0x4909f4);
|
||||
log(_0x4909f4);
|
||||
// log(_0x4909f4.length);
|
||||
var _0x3e9518 = _0x4909f4.length;
|
||||
// log(_0x4909f4);
|
||||
var _0x2c3abf = [];
|
||||
var _0x1c7cc5 = [];
|
||||
var _0xfc0e29 = "202205051426239465";
|
||||
var _0x1a1b75 = _0xfc0e29.length;
|
||||
var _0x320253 = {"EmMtr": function (_0xcb360, _0x190522) {
|
||||
return _0xcb360 < _0x190522;
|
||||
}, "INrFk": function (_0x118889, _0x267e98) {
|
||||
return _0x118889 % _0x267e98;
|
||||
}, "YJmqv": function (_0x31bf52, _0x2fd6b6) {
|
||||
return _0x31bf52 % _0x2fd6b6;
|
||||
}, "IVJrP": function (_0x43c04f, _0x1fa873) {
|
||||
return _0x43c04f % _0x1fa873;
|
||||
}, "aTggn": function (_0x13bd41, _0x2f040c) {
|
||||
return _0x13bd41 + _0x2f040c;
|
||||
}, "txtvd": function (_0x450d4d, _0x107d6d) {
|
||||
return _0x450d4d % _0x107d6d;
|
||||
}, "EpjZa": function (_0x54d0f7, _0x37f36f) {
|
||||
return _0x54d0f7 ^ _0x37f36f;
|
||||
}, "WgDgB": function (_0x166316, _0x170b36) {
|
||||
return _0x166316 < _0x170b36;
|
||||
}, "vwjta": function (_0x13d5f4, _0x4d75ba) {
|
||||
return _0x13d5f4 + _0x4d75ba;
|
||||
}};
|
||||
for (i = 0; _0x320253["EmMtr"](i, 256); i++) {
|
||||
_0x2c3abf[i] = _0xfc0e29[_0x320253["YJmqv"](i, _0x1a1b75)]["charCodeAt"]();
|
||||
_0x1c7cc5[i] = i;
|
||||
}
|
||||
// log(_0x1c7cc5);
|
||||
for (j = i = 0; _0x320253["EmMtr"](i, 256); i++) {
|
||||
j = _0x320253["INrFk"](_0x320253["vwjta"](j, _0x1c7cc5[i]) + _0x2c3abf[i], 256);
|
||||
tmp = _0x1c7cc5[i];
|
||||
_0x1c7cc5[i] = _0x1c7cc5[j];
|
||||
_0x1c7cc5[j] = tmp;
|
||||
}
|
||||
// log(_0x2c3abf);
|
||||
// log(_0x1c7cc5);
|
||||
for (a = j = i = 0; _0x320253["WgDgB"](i, _0x3e9518); i++) {
|
||||
a = _0x320253["IVJrP"](a + 1, 256);
|
||||
j = _0x320253["aTggn"](j, _0x1c7cc5[a]) % 256;
|
||||
tmp = _0x1c7cc5[a];
|
||||
_0x1c7cc5[a] = _0x1c7cc5[j];
|
||||
_0x1c7cc5[j] = tmp;
|
||||
k = _0x1c7cc5[_0x320253["txtvd"](_0x320253["aTggn"](_0x1c7cc5[a], _0x1c7cc5[j]), 256)];
|
||||
_0xc6d095 += String["fromCharCode"](_0x320253["EpjZa"](_0x4909f4[i]["charCodeAt"](), k));
|
||||
// log(_0x4909f4[i]);
|
||||
}
|
||||
// log(_0x1c7cc5);
|
||||
log(_0xc6d095);
|
||||
url = unescape(_0xc6d095);
|
||||
if (/m3u8|mp4/.test(url)) {
|
||||
realUrl = url;
|
||||
}else {
|
||||
realUrl = toast(vipUrl+'解析失败:'+url);
|
||||
}
|
||||
log('解析到真实播放地址:'+realUrl);
|
||||
}catch (e) {
|
||||
log('解析发生错误:'+e.message);
|
||||
realUrl = vipUrl;
|
||||
}
|
94
JN/dr_py/jiexi/哔哩.js
Normal file
@ -0,0 +1,94 @@
|
||||
// print(env);
|
||||
// vipUrl = 'https://www.bilibili.com/bangumi/play/ep704873';
|
||||
fetch_params.headers = {
|
||||
'User-Agent':PC_UA,
|
||||
"Referer": "https://www.bilibili.com",
|
||||
"Cookie":env.bili_cookie||''
|
||||
};
|
||||
let appkey = env.appkey||'';
|
||||
let access_key = env.access_key||'';
|
||||
// print(fetch_params);
|
||||
|
||||
function getEpUrl(ssUrl){
|
||||
let html = request(ssUrl);
|
||||
let short_link = html.match(/short_link(.*?),/)[1];
|
||||
short_link = short_link.split(':').slice(1,-1).join('"').split('"')[1];
|
||||
let epUrl = unescape(short_link);
|
||||
return epUrl
|
||||
}
|
||||
|
||||
function getCidEid(vipUrl){
|
||||
// print(vipUrl);
|
||||
let url = vipUrl.split('?')[0];
|
||||
// print(url);
|
||||
if(url.endsWith('/')){
|
||||
url = url.slice(0,-1);
|
||||
}
|
||||
if(url.includes('bilibili.com/video/')){
|
||||
let r = request(vipUrl);
|
||||
try{
|
||||
let mtext = r.match(/window\.__INITIAL_STATE__=(.*?);\(function/)[1];
|
||||
mtext = JSON.parse(mtext);
|
||||
let avid = mtext['aid'];
|
||||
let bvid = mtext['bvid'];
|
||||
let cid = mtext['videoData']['cid'];
|
||||
return [cid,avid,bvid]
|
||||
} catch (e) {
|
||||
return null
|
||||
}
|
||||
|
||||
}else if(url.includes('/ep')){
|
||||
let epid = url.split('ep')[1];
|
||||
let data_url = 'https://api.bilibili.com/pgc/view/web/season?ep_id='+epid;
|
||||
let r = JSON.parse(request(data_url));
|
||||
if(r.code === 0){
|
||||
let episodes = r['result']['episodes'];
|
||||
let furl = url.replace('https://m.bilibili.com', 'https://www.bilibili.com');
|
||||
let now_ep = episodes.filter(function (it){
|
||||
return [it['short_link'], it['share_url'],it['link']].includes(furl)
|
||||
})[0];
|
||||
let avid = now_ep['aid'];
|
||||
let cid = now_ep['cid'];
|
||||
return [cid,avid,null];
|
||||
}else{
|
||||
return null
|
||||
}
|
||||
}else if(url.includes('/ss')){
|
||||
let epUrl = getEpUrl(vipUrl);
|
||||
return getCid(epUrl)
|
||||
}else{
|
||||
return null
|
||||
}
|
||||
}
|
||||
if(!/bilibili/.test(vipUrl)){
|
||||
realUrl = vipUrl;
|
||||
}else {
|
||||
try {
|
||||
// print(vipUrl);
|
||||
let ids = getCidEid(vipUrl);
|
||||
if (Array.isArray(ids)) {
|
||||
print(ids);
|
||||
let cid = ids[0];
|
||||
let avid = ids[1];
|
||||
let rurl = "https://api.bilibili.com/x/player/playurl?avid=" + avid + "&cid=" + cid + "&qn=120&type=&128=128&otype=json&fnver=&fourk=1&mid=&appkey=" + appkey + "&access_key=" + access_key;
|
||||
print(rurl);
|
||||
try {
|
||||
let r = JSON.parse(request(rurl));
|
||||
print(r);
|
||||
let purl = r['data']['durl'][0]['url'];
|
||||
print('purl:' + purl);
|
||||
// realUrl = purl;
|
||||
// https://upos-szbyjkm8g1.bilivideo.com
|
||||
realUrl = purl.replace(/.*bilivideo.*?\/(.*)/,'https://upos-szbyjkm8g1.bilivideo.com/$1');
|
||||
|
||||
} catch (e) {
|
||||
print(e.message);
|
||||
realUrl = vipUrl;
|
||||
}
|
||||
} else {
|
||||
realUrl = vipUrl;
|
||||
}
|
||||
} catch (e) {
|
||||
print(e.message);
|
||||
}
|
||||
}
|
13
JN/dr_py/jiexi/图片.jsi
Normal file
@ -0,0 +1,13 @@
|
||||
let url_tmp = vipUrl.split('@');
|
||||
let url = url_tmp[0];
|
||||
let headers = {};
|
||||
url_tmp.slice(1).forEach(function (it){
|
||||
headers[it.split('=')[0]] = it.split('=')[1];
|
||||
});
|
||||
let html = request(vipUrl,{headers:headers});
|
||||
print(html.length);
|
||||
try {
|
||||
realUrl = image(html);
|
||||
}catch (e) {
|
||||
print('发生了错误:'+e);
|
||||
}
|
24
JN/dr_py/jiexi/多多.jsd
Normal file
@ -0,0 +1,24 @@
|
||||
let jxUrl = 'https://api.10static.com/?from=duoduozy&url=';
|
||||
fetch_params.headers.Referer = 'https://www.1010dy3.com';
|
||||
fetch_params.headers['User-Agent'] = PC_UA;
|
||||
try {
|
||||
let html = request(jxUrl+vipUrl);
|
||||
// log(html);
|
||||
let url = html.match(/var urls = "(.*?)"/)[1];
|
||||
let key = 'Of84ff0clf252cba';
|
||||
let iv = 'c487ebl2e38aOfaO';
|
||||
try {
|
||||
eval(getCryptoJS());
|
||||
var getVideoInfo = function (text,key,iv) {
|
||||
return CryptoJS.AES.decrypt(text, key, {iv: iv, padding: CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);
|
||||
};
|
||||
realUrl = getVideoInfo(url,key,iv);
|
||||
}catch (e) {
|
||||
log('发生了错误:'+e.message);
|
||||
realUrl = vipUrl;
|
||||
}
|
||||
log('解析到真实播放地址:'+realUrl);
|
||||
}catch (e) {
|
||||
log('解析发生错误:'+e.message);
|
||||
realUrl = vipUrl;
|
||||
}
|
13
JN/dr_py/jiexi/完美看看.jsd
Normal file
@ -0,0 +1,13 @@
|
||||
let jxUrl = 'https://www.wanmeikk.film/addons/dplayer/GetData.php?url=';
|
||||
fetch_params.headers.Referer = jxUrl;
|
||||
try {
|
||||
// realUrl = null;
|
||||
let html = request(jxUrl+vipUrl);
|
||||
//log(html);
|
||||
//realUrl = jsp.pjfh(html,'$..url');
|
||||
realUrl=html.match(/var urls = "(.*?)"/)[1];
|
||||
log('解析到真实播放地址:'+realUrl);
|
||||
}catch (e) {
|
||||
log('解析发生错误:'+e.message);
|
||||
realUrl = vipUrl;
|
||||
}
|
12
JN/dr_py/jiexi/插萝莉慢.js
Normal file
@ -0,0 +1,12 @@
|
||||
let jxUrl = 'http://chaloli.cn/home/api?type=ys&uid=1&key=ekloswzABCGHKLOT58&url=';
|
||||
fetch_params.headers.Referer = jxUrl;
|
||||
try {
|
||||
// realUrl = null;
|
||||
let html = request(jxUrl+vipUrl);
|
||||
// log(html);
|
||||
realUrl = jsp.pjfh(html,'$..url');
|
||||
log('解析到真实播放地址:'+realUrl);
|
||||
}catch (e) {
|
||||
log('解析发生错误:'+e.message);
|
||||
realUrl = vipUrl;
|
||||
}
|
44
JN/dr_py/jiexi/斗鱼.js
Normal file
@ -0,0 +1,44 @@
|
||||
js:
|
||||
//输入的vipUrl如:https://m.douyu.com/312212?dyshid=0-00000003333&dyshci=1
|
||||
function getSign(script, rid, did, tt){
|
||||
|
||||
let result = script.match(/(function ub98484234.*)\s(var.*)/)[0];
|
||||
let func_ub9 = result.replace(/eval.*;}/, 'strc;}', result);
|
||||
eval(func_ub9);
|
||||
|
||||
let res = ub98484234();
|
||||
let v = res.match(/v=(\d+)/)[0].replace("v=", '');
|
||||
let rb = md5(rid + did + tt + v);
|
||||
|
||||
let func_sign = res.replace(/return rt;}\);?/, 'return rt;}');
|
||||
func_sign = func_sign.replace('(function (', 'function sign(');
|
||||
func_sign = func_sign.replace('CryptoJS.MD5(cb).toString()', '"' + rb + '"');
|
||||
eval(func_sign);
|
||||
|
||||
let params = sign(rid, did, tt) + "&ver=219032101&rate=-1&rid="+rid;
|
||||
return params
|
||||
}
|
||||
// log(env);
|
||||
// fetch_params.headers.Referer = vipUrl;
|
||||
try {
|
||||
// realUrl = null;
|
||||
let html = request(vipUrl);
|
||||
// log(html);
|
||||
let rid = html.match(/rid":(.*?),"vipId/)[1];
|
||||
log(rid);
|
||||
// let tt = Date.parse(new Date()).toString().substr(0, 10);
|
||||
let tt = Math.round(new Date().getTime()/1000).toString();
|
||||
let did = '10000000000000000000000000001501';
|
||||
let param_body = getSign(html, rid, did, tt);
|
||||
log(param_body);
|
||||
let stream_json = request('https://m.douyu.com/api/room/ratestream', {headers: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
}, body: param_body, method:'POST'});
|
||||
log(stream_json);
|
||||
let stream = JSON.parse(stream_json).data;
|
||||
realUrl = stream.url;
|
||||
log('解析到真实播放地址:'+realUrl);
|
||||
}catch (e) {
|
||||
log('解析发生错误:'+e.message);
|
||||
realUrl = vipUrl;
|
||||
}
|
14
JN/dr_py/jiexi/无名.js
Normal file
@ -0,0 +1,14 @@
|
||||
// let jxUrl = 'http://api.ckflv.cn/?url=';
|
||||
log(env);
|
||||
let jxUrl = 'https://k.json.icu/home/api?type=ys&uid=12406929&key=adgouwyCGIRSTUV046&url=';
|
||||
fetch_params.headers.Referer = jxUrl;
|
||||
try {
|
||||
// realUrl = null;
|
||||
let html = request(jxUrl+vipUrl);
|
||||
log(html);
|
||||
realUrl = jsp.pjfh(html,'$..url');
|
||||
log('解析到真实播放地址:'+realUrl);
|
||||
}catch (e) {
|
||||
log('解析发生错误:'+e.message);
|
||||
realUrl = vipUrl;
|
||||
}
|
15
JN/dr_py/jiexi/江湖.js
Normal file
@ -0,0 +1,15 @@
|
||||
// realUrl = 重定向('http://211.99.99.236:4567/jhjson/ceshi.php?url='+vipUrl);
|
||||
// let jxUrl = 'http://211.99.99.236:4567/jhjson/ceshi.php?url=';
|
||||
// let jxUrl = 'http://jx.vipmv.co/json.php?token=123457&url=';
|
||||
let jxUrl = 'http://45.248.10.163:4433/json.php?wap=0&url=';
|
||||
fetch_params.headers.Referer = jxUrl;
|
||||
try {
|
||||
// realUrl = null;
|
||||
let html = request(jxUrl+vipUrl);
|
||||
// log(html);
|
||||
realUrl = jsp.pjfh(html,'$..url');
|
||||
log('解析到真实播放地址:'+realUrl);
|
||||
}catch (e) {
|
||||
log('解析发生错误:'+e.message);
|
||||
realUrl = vipUrl;
|
||||
}
|
9
JN/dr_py/jiexi/江湖加密.js
Normal file
@ -0,0 +1,9 @@
|
||||
let PWD = 'drpy';
|
||||
// log(params);
|
||||
if(!params.passwd){
|
||||
realUrl = vipUrl
|
||||
} else if(params.passwd !== PWD){
|
||||
realUrl = toast(vipUrl+' 解析失败。解析密码错误');
|
||||
}else{
|
||||
realUrl = 重定向('http://211.99.99.236:4567/jhjson/ceshi.php?url='+vipUrl)
|
||||
}
|
26
JN/dr_py/jiexi/苹果爱微.jsi
Normal file
20
JN/dr_py/jiexi/酷云.js
Normal file
@ -0,0 +1,20 @@
|
||||
let jxUrl = 'http://api.kunyu77.com/api.php/provide/parserUrl?url=';
|
||||
var t = Math.floor(new Date().getTime() /1000).toString();
|
||||
let jxExt = "&retryNum=0&pcode=010110002&version=2.1&devid=f9c9ce5bb5827a266829383718e6131a&package=com.sevenVideo.app.android&sys=android&sysver=12&brand=Xiaomi&model=Mi_10_Pro&sj="+t;
|
||||
let url = jxUrl+vipUrl+jxExt;
|
||||
let TK = "/api.php/provide/parserUrl"+"Xiaomif9c9ce5bb5827a266829383718e6131aMi_10_Procom.sevenVideo.app.android010110002"+0+t+"android12"+ encodeURIComponent(vipUrl) + "2.1"+t+"XSpeUFjJ";
|
||||
fetch_params.headers.Referer = jxUrl;
|
||||
// fetch_params.headers['User-Agent'] = "Dalvik/2.1.0";
|
||||
fetch_params.headers['User-Agent'] = "okhttp/3.12.0";
|
||||
fetch_params.headers['TK'] = md5(TK);
|
||||
try {
|
||||
// realUrl = null;
|
||||
let html = request(url);
|
||||
log(html);
|
||||
realUrl = jsp.pjfh(html,'$..url');
|
||||
realUrl = 重定向(realUrl);
|
||||
log('解析到真实播放地址:'+realUrl);
|
||||
}catch (e) {
|
||||
log('解析发生错误:'+e.message);
|
||||
realUrl = vipUrl;
|
||||
}
|
2
JN/dr_py/jiexi/飞跃.js
Normal file
@ -0,0 +1,2 @@
|
||||
// realUrl = 重定向('http://ivips.ml/jx/json.php/?url='+vipUrl)
|
||||
realUrl = 重定向('http://103.40.240.46/jh/?url='+vipUrl)
|
58
JN/dr_py/jiexi/鸿途.js
Normal file
@ -0,0 +1,58 @@
|
||||
// let jxUrl = 'https://h5.freejson.xyz/player/analysis.php?v=';
|
||||
// fetch_params.headers.Referer = jxUrl;
|
||||
// try {
|
||||
// // realUrl = null;
|
||||
// let html = request(jxUrl+vipUrl);
|
||||
// log(html);
|
||||
// //realUrl = jsp.pjfh(html,'$..url');
|
||||
// realUrl=html.match(/var urls = "(.*?)"/)[1];
|
||||
// log('解析到真实播放地址:'+realUrl);
|
||||
// }catch (e) {
|
||||
// log('解析发生错误:'+e.message);
|
||||
// realUrl = vipUrl;
|
||||
// }
|
||||
// 虾米免嗅
|
||||
let jxUrl = 'https://jx.xmflv.com/?url=';
|
||||
fetch_params.headers.Referer = jxUrl;
|
||||
eval(getCryptoJS());
|
||||
function encrypt(_0x5cf953) {
|
||||
var _0x5efb07 = CryptoJS.enc.Utf8.parse(vkey);
|
||||
var _0x45c0ea = CryptoJS.enc.Utf8.parse('ash3omcjsoajh1ur');
|
||||
var _0x268682 = CryptoJS.AES.encrypt(_0x5cf953, _0x5efb07, {
|
||||
'iv': _0x45c0ea,
|
||||
'mode': CryptoJS.mode.CBC,
|
||||
'padding': CryptoJS.pad.ZeroPadding
|
||||
});
|
||||
return _0x268682.toString();
|
||||
}
|
||||
|
||||
function jsdecrypt(_0x1a43fe) {
|
||||
var _0x10ab4d = CryptoJS.enc.Utf8.parse(vkey);
|
||||
var _0x291247 = CryptoJS.enc.Utf8.parse('contentDocuments');
|
||||
var _0x5abb12 = CryptoJS.AES.decrypt(_0x1a43fe, _0x10ab4d, {
|
||||
'iv': _0x291247,
|
||||
'mode': CryptoJS.mode.CBC,
|
||||
'padding': CryptoJS.pad.ZeroPadding
|
||||
}).toString(CryptoJS.enc.Utf8);
|
||||
return _0x5abb12.toString();
|
||||
}
|
||||
try {
|
||||
let html = request(jxUrl+vipUrl);
|
||||
let time = html.match(/var time = '(.*?)'/)[1];
|
||||
let ua = html.match(/var ua = '(.*?)'/)[1];
|
||||
let vkey = html.match(/var vkey = '(.*?)'/)[1];
|
||||
// log(encrypt(vkey));
|
||||
let phtml = request("https://jx.xmflv.com/favicon.ico", {
|
||||
headers: {
|
||||
"origin": "https://jx.xmflv.com"
|
||||
},
|
||||
body: "url=" + vipUrl + "&time=" + time + "&ua=" + ua + "&vkey=" + encrypt(vkey),
|
||||
method: "post"
|
||||
});
|
||||
// log(phtml);
|
||||
realUrl = jsdecrypt(JSON.parse(phtml).url);
|
||||
log('解析到真实播放地址:'+realUrl);
|
||||
}catch (e) {
|
||||
log('解析发生错误:'+e.message);
|
||||
realUrl = vipUrl;
|
||||
}
|
47
JN/dr_py/js/007影视.js
Normal file
@ -0,0 +1,47 @@
|
||||
// 搜索数字验证
|
||||
muban.首图2.二级.desc = '.data:eq(1)&&Text;;;.data:eq(6)&&Text;.data:eq(5)&&Text';
|
||||
muban.首图2.二级.tabs = '.nav-tabs.dpplay&&li';
|
||||
var rule = {
|
||||
title:'007影视',
|
||||
搜索编码:'utf-8',
|
||||
// 搜索编码:'gbk',
|
||||
模板:'首图2',
|
||||
ali_token:'{{ali_token}}',
|
||||
bili_cookie:'{{bili_cookie}}',
|
||||
host:'https://www.007ts.me',
|
||||
// url:'/show/fyclass--------fypage---.html',
|
||||
url:'/show/fyclassfyfilter.html',
|
||||
filterable:1,//是否启用分类筛选,
|
||||
filter_url:'-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}----fypage---{{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":"其它"}]},{"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":"俄罗斯"},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"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":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"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":"其他"}]},{"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":"俄罗斯"},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"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":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"3":[{"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":"韩国"},{"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":"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"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":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"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":"音乐"}]},{"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":"俄罗斯"},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"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":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"7":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"18":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"19":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"20":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||
},
|
||||
class_parse: '.stui-header__menu li:gt(0):lt(9);a&&Text;a&&href;.*/(.*?).html',
|
||||
lazy:`js:var html=JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);
|
||||
log(html);
|
||||
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 if(/qq|iqiyi/.test(url)){
|
||||
input={jx:0,url:'https://jx.m3u8.tv/jiexi/?url='+url,parse:1,header:JSON.stringify({'user-agent':'Mozilla/5.0'})}
|
||||
}else{
|
||||
input
|
||||
}`,
|
||||
|
||||
// searchUrl:'/search/**----------fypage---.html',
|
||||
searchUrl:'/index.php/ajax/suggest?mid=1&wd=**&limit=50',
|
||||
detailUrl:'/detail/fyid.html', //非必填,二级详情拼接链接
|
||||
搜索:'json:list;name;pic;;id',
|
||||
}
|
18
JN/dr_py/js/100影院.jsd
Normal file
13
JN/dr_py/js/1080P.jsd
Normal file
27
JN/dr_py/js/139影视.js
Normal file
@ -0,0 +1,27 @@
|
||||
muban.首图.二级.title = 'h1&&Text;.data:eq(0)--span&&Text';
|
||||
muban.首图.二级.desc = '#rating&&Text;;;.data:eq(1)&&Text;.data:eq(2)&&Text';
|
||||
muban.首图.二级.content = '.data.hidden-xs--a:eq(0)&&Text';
|
||||
var rule = {
|
||||
title:'139影视',
|
||||
模板:'首图',
|
||||
host:'https://www.139ys.com',
|
||||
// url:'/vodshow/fyclass--------fypage---.html',
|
||||
url:'/vodshow/fyfilter.html',
|
||||
filterable:1,//是否启用分类筛选,
|
||||
filter_url:'{{fl.cateId}}-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{fl.year}}',
|
||||
filter: {
|
||||
"dianying":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"dianying"},{"n":"动作片","v":"dongzuopian"},{"n":"喜剧片","v":"xijupian"},{"n":"爱情片","v":"aiqingpian"},{"n":"科幻片","v":"kehuanpian"},{"n":"恐怖片","v":"kongbupian"},{"n":"剧情片","v":"juqingpian"},{"n":"战争片","v":"zhanzhengpian"},{"n":"纪录片","v":"jilupian"},{"n":"犯罪片","v":"fanzuipian"}]},{"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":"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"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":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"lianxuju":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"lianxuju"},{"n":"国产剧","v":"guochanju"},{"n":"港台剧","v":"gangtaiju"},{"n":"日韩剧","v":"rihanju"},{"n":"欧美剧","v":"oumeiju"}]},{"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":"俄罗斯"},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"汉语普通话","v":"汉语普通话"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"zongyi":[{"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":"俄罗斯"},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"汉语普通话","v":"汉语普通话"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"dongman":[{"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":"俄罗斯"},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"汉语普通话","v":"汉语普通话"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"zhibo":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"港澳台","v":"港澳台"},{"n":"欧美","v":"欧美"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||
},
|
||||
filter_def:{
|
||||
dianying:{cateId:'dianying',by:'time'},
|
||||
lianxuju:{cateId:'lianxuju',by:'time'},
|
||||
zongyi:{cateId:'zongyi',by:'time'},
|
||||
dongman:{cateId:'dongman',by:'time'},
|
||||
zhibo:{cateId:'zhibo',by:'time'}
|
||||
},
|
||||
class_parse: '.nav-list&&li:lt(5);a&&Text;a&&href;/(\\w+).html',
|
||||
}
|
29
JN/dr_py/js/188影视.js
Normal file
22
JN/dr_py/js/310直播.js
Normal file
@ -0,0 +1,22 @@
|
||||
var rule = {
|
||||
title:'310直播',
|
||||
host:'http://www.310.tv',
|
||||
url:'/?s=0&t=1&a=fyclass&g=fypage',
|
||||
searchUrl:'',
|
||||
searchable:0,
|
||||
quickSearch:0,
|
||||
class_name:'热门&足球&篮球',
|
||||
class_url:'0&1&2',
|
||||
headers:{
|
||||
'User-Agent':'MOBILE_UA'
|
||||
},
|
||||
timeout:5000,
|
||||
play_parse:false,
|
||||
lazy:'',
|
||||
limit:6,
|
||||
double:false,
|
||||
推荐:'*',
|
||||
一级:'.list_content a;.jiabifeng&&p:lt(5)&&Text;.feleimg img&&src;a&&t-nzf-o;a&&href',
|
||||
二级:'*',
|
||||
搜索:'',
|
||||
}
|
19
JN/dr_py/js/333影视.jsd
Normal file
@ -0,0 +1,19 @@
|
||||
// 搜索滑动验证
|
||||
muban.首图.二级.title = 'h1&&Text;.data--span:eq(3)&&Text';
|
||||
muban.首图.二级.desc = '.otherbox&&Text;;;.data--span:eq(2)&&Text;.data--span:eq(0)&&Text';
|
||||
var rule={
|
||||
title:'333影视',
|
||||
模板:'首图',
|
||||
host:'https://www.ylwt33.com',
|
||||
// url:'/vodshow/fyclass--------fypage---.html',
|
||||
url:'/vodshow/fyclassfyfilter.html',
|
||||
filterable:1,//是否启用分类筛选,
|
||||
filter_url:'-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{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":"网络"}]},{"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":"澳大利亚"},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"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":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"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":"武侠"},{"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":"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"3":[{"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":"脱口秀"}]},{"key":"area","name":"地区","value":[{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"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":"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"国语"},{"n":"英语","v":"英语"},{"n":"粤语","v":"粤语"},{"n":"闽南语","v":"闽南语"},{"n":"韩语","v":"韩语"},{"n":"日语","v":"日语"},{"n":"其它","v":"其它"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||
},
|
||||
searchUrl:'/vodsearch/**----------fypage---.html',
|
||||
}
|
28
JN/dr_py/js/345看片.js
Normal file
@ -0,0 +1,28 @@
|
||||
muban.首图2.二级.title = 'h1&&Text;.data:eq(0)&&Text'
|
||||
muban.首图2.二级.desc = ';;;.data:eq(1)&&Text;.data:eq(2)&&Text'
|
||||
muban.首图2.二级.content = '.desc&&Text'
|
||||
muban.首图2.二级.tabs = 'body&&h3'
|
||||
muban.首图2.二级.lists = '.stui-content__playlist:eq(#id)&&li'
|
||||
var rule = {
|
||||
title:'345看片',
|
||||
模板:'首图2',
|
||||
host:'https://www.345kp.com',
|
||||
url:'/show/fyclass--------fypage---.html',
|
||||
url:'/show/fyfilter.html',
|
||||
filterable:1,//是否启用分类筛选,
|
||||
filter_url:'{{fl.cateId}}-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{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":"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"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":"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"3":[{"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":"求职"}]},{"key":"area","name":"地区","value":[{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"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":"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||
},
|
||||
filter_def:{
|
||||
1:{cateId:'1'},
|
||||
2:{cateId:'2'},
|
||||
3:{cateId:'3'},
|
||||
4:{cateId:'4'}
|
||||
},
|
||||
searchUrl: '/search/**----------fypage---.html',
|
||||
搜索: '.stui-vodlist__media&&li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
||||
}
|
44
JN/dr_py/js/348电影网.js
Normal file
@ -0,0 +1,44 @@
|
||||
var rule={
|
||||
title:'348电影网',
|
||||
host:'https://www.348z.com',
|
||||
// url:'/vodshow/id/fyclass/page/fypage.html',
|
||||
url:'/vodshow/id/fyfilter.html',
|
||||
filterable:1,//是否启用分类筛选,
|
||||
filter_url:'{{fl.cateId}}{{fl.area}}/page/fypage{{fl.year}}',
|
||||
filter:
|
||||
{
|
||||
"37":[{"key":"cateId","name":"分类","value":[{"n":"全部","v":"37"},{"n":"4K电影","v":"38"},{"n":"4K电视剧","v":"39"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"法国","v":"/area/法国"},{"n":"英国","v":"/area/英国"},{"n":"日本","v":"/area/日本"},{"n":"韩国","v":"/area/韩国"},{"n":"德国","v":"/area/德国"},{"n":"泰国","v":"/area/泰国"},{"n":"印度","v":"/area/印度"},{"n":"意大利","v":"/area/意大利"},{"n":"西班牙","v":"/area/西班牙"},{"n":"加拿大","v":"/area/加拿大"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"}]}],
|
||||
"1":[{"key":"cateId","name":"分类","value":[{"n":"全部","v":"1"},{"n":"动作片","v":"6"},{"n":"喜剧片","v":"7"},{"n":"爱情片","v":"8"},{"n":"科幻片","v":"9"},{"n":"恐怖片","v":"10"},{"n":"剧情片","v":"11"},{"n":"战争片","v":"12"},{"n":"纪录片","v":"20"},{"n":"灾难片","v":"21"},{"n":"魔幻片","v":"22"},{"n":"青春片","v":"23"},{"n":"犯罪片","v":"24"},{"n":"悬疑片","v":"25"},{"n":"微电影","v":"26"},{"n":"音乐片","v":"27"},{"n":"B站电影","v":"29"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"法国","v":"/area/法国"},{"n":"英国","v":"/area/英国"},{"n":"日本","v":"/area/日本"},{"n":"韩国","v":"/area/韩国"},{"n":"德国","v":"/area/德国"},{"n":"泰国","v":"/area/泰国"},{"n":"印度","v":"/area/印度"},{"n":"意大利","v":"/area/意大利"},{"n":"西班牙","v":"/area/西班牙"},{"n":"加拿大","v":"/area/加拿大"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"}]}],
|
||||
"2":[{"key":"cateId","name":"分类","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"13"},{"n":"港台剧","v":"14"},{"n":"日韩剧","v":"15"},{"n":"欧美剧","v":"16"},{"n":"B站剧集","v":"49"},{"n":"其他剧","v":"50"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"/area/内地"},{"n":"韩国","v":"/area/韩国"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"日本","v":"/area/日本"},{"n":"美国","v":"/area/美国"},{"n":"泰国","v":"/area/泰国"},{"n":"英国","v":"/area/英国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"}]}],
|
||||
"3":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"/area/内地"},{"n":"港台","v":"/area/港台"},{"n":"日韩","v":"/area/日韩"},{"n":"欧美","v":"/area/欧美"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"}]}],
|
||||
"4":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"国产","v":"/area/国产"},{"n":"日本","v":"/area/日本"},{"n":"欧美","v":"/area/欧美"},{"n":"其他","v":"/area/其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"}]}]
|
||||
},
|
||||
filter_def:{
|
||||
1:{cateId:'1'},
|
||||
2:{cateId:'2'},
|
||||
3:{cateId:'3'},
|
||||
4:{cateId:'4'},
|
||||
37:{cateId:'37'}
|
||||
},
|
||||
searchUrl:'/vodsearch/page/fypage/wd/**.html',
|
||||
searchable:2,//是否启用全局搜索,
|
||||
headers:{//网站的请求头,完整支持所有的,常带ua和cookies
|
||||
'User-Agent': 'PC_UA',
|
||||
},
|
||||
class_parse: '.nav-channel a;a&&Text;a&&href;/(\\d+).html',
|
||||
play_parse: true,
|
||||
lazy:'',
|
||||
limit:6,
|
||||
double:true, // 推荐内容是否双层定位
|
||||
推荐:'.vodlist;*;*;*;*;*',
|
||||
一级:'.pack-ykpack;a&&title;.eclazy&&data-original;.pack-prb&&Text;a&&href',
|
||||
二级:{
|
||||
"title":".fyy&&Text;.s-top-info-detail&&Text",
|
||||
"img":".g-playicon&&img&&src",
|
||||
"desc":".s-top-info-title span&&Text;;;.item-type&&Text;.item-actor:eq(2)&&Text",
|
||||
"content":".ec-palytcji span&&Text",
|
||||
"tabs":".swiper-wrapper:eq(1) .channelname",
|
||||
"lists":".content_playlist:eq(#id) li"
|
||||
},
|
||||
搜索:'.pack-packcover.returl.list-top-b;*;*;*;*',
|
||||
}
|
28
JN/dr_py/js/360影视.js
Normal file
@ -0,0 +1,28 @@
|
||||
var rule = {
|
||||
title:'360影视',
|
||||
host:'https://www.360kan.com',
|
||||
homeUrl:'https://api.web.360kan.com/v1/rank?cat=2&size=9',
|
||||
detailUrl:'https://api.web.360kan.com/v1/detail?cat=fyclass&id=fyid',
|
||||
searchUrl:'https://api.so.360kan.com/index?force_v=1&kw=**&from=&pageno=fypage&v_ap=1&tab=all',
|
||||
url:'https://api.web.360kan.com/v1/filter/list?catid=fyclass&rank=rankhot&cat=&year=&area=&act=&size=35&pageno=fypage&callback=',
|
||||
headers:{
|
||||
'User-Agent':'MOBILE_UA'
|
||||
},
|
||||
timeout:5000,
|
||||
class_name:'电视剧&电影&综艺&动漫',
|
||||
class_url:'2&1&3&4',
|
||||
limit:5,
|
||||
multi:1,
|
||||
searchable:2,
|
||||
play_parse:true,
|
||||
lazy:'js:input=input.split("?")[0];log(input);',
|
||||
// 疑似t4专用的
|
||||
// lazy:'js:input={parse: 1, playUrl: "", jx: 1, url: input.split("?")[0]}',
|
||||
// 手动调用解析请求json的url,此lazy不方便
|
||||
// lazy:'js:input="https://cache.json.icu/home/api?type=ys&uid=292796&key=fnoryABDEFJNPQV269&url="+input.split("?")[0];log(input);let html=JSON.parse(request(input));log(html);input=html.url||input',
|
||||
推荐:'json:data;title;cover;comment;cat+ent_id;description',
|
||||
一级:'json:data.movies;title;cover;pubdate;id;description',
|
||||
二级:'',
|
||||
二级:'js:let html=JSON.parse(fetch(input,fetch_params));let data=html.data;let tilte=data.title;let img=data.cdncover;let vod_type=data.moviecategory.join(",");let area=data.area.join(",");let director=data.director.join(",");let actor=data.actor.join(",");let content=data.description;let base_vod={vod_id:input,vod_name:tilte,type_name:vod_type,vod_actor:actor,vod_director:director,vod_content:content,vod_remarks:area,vod_pic:urljoin2(input,img)};let delta=200;let vod_play={};let sites=data.playlink_sites;sites.forEach(function(site){let playList="";let vodItems=[];if(data.allupinfo){let total=parseInt(data.allupinfo[site]);for(let j=1;j<total;j+=delta){let end=Math.min(total,j+delta-1);let url2=buildUrl(input,{start:j,end:end,site:site});let vod_data=JSON.parse(fetch(url2),fetch_params).data;if(vod_data.allepidetail){vod_data=vod_data.allepidetail[site];vod_data.forEach(function(item,index){vodItems.push((item.playlink_num||"")+"$"+urlDeal(item.url||""))})}else{vod_data=vod_data.defaultepisode;vod_data.forEach(function(item,index){vodItems.push((item.period||"")+(item.name||"")+"$"+urlDeal(item.url)||"")})}}}else{let item=data.playlinksdetail[site];vodItems.push((item.sort||"")+"$"+urlDeal(item.default_url||""))}if(vodItems.length>0){playList=vodItems.join("#")}if(playList.length<1){return}vod_play[site]=playList});let tabs=Object.keys(vod_play);let playUrls=[];for(let id in tabs){print("id:"+id);playUrls.push(vod_play[tabs[id]])}if(tabs.length>0){let vod_play_from=tabs.join("$$$");let vod_play_url=playUrls.join("$$$");base_vod.vod_play_from=vod_play_from;base_vod.vod_play_url=vod_play_url}VOD=base_vod;',
|
||||
搜索:'json:data.longData.rows;titleTxt||titlealias;cover;cat_name;cat_id+en_id;description',
|
||||
}
|
28
JN/dr_py/js/4K电影网.js
Normal file
@ -0,0 +1,28 @@
|
||||
// https://xn--4k-ms3d190f0rl.com/
|
||||
muban.mxone5.二级.title = 'h1&&Text;.video-info-aux&&Text'
|
||||
muban.mxone5.二级.desc = '.video-info-items:eq(3)&&Text;;;.video-info-actor:eq(1)&&Text;.video-info-actor:eq(0)&&Text'
|
||||
var rule = {
|
||||
title:'4K电影网',
|
||||
模板:'mxone5',
|
||||
host:'https://4kdyw.qsclub.cn',
|
||||
// url:'/vodshow/fyclass--------fypage---.html',
|
||||
url:'/vodshow/fyfilter.html',
|
||||
searchUrl: '/vodsearch/**----------fypage---.html',
|
||||
filterable:1,//是否启用分类筛选,
|
||||
filter_url:'{{fl.cateId}}-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}-{{fl.letter}}---fypage---{{fl.year}}',
|
||||
filter: {
|
||||
"2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"13"},{"n":"港台剧","v":"14"},{"n":"日韩剧","v":"15"},{"n":"欧美剧","v":"16"}]},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"1":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"1"},{"n":"动作片","v":"6"},{"n":"喜剧片","v":"7"},{"n":"爱情片","v":"8"},{"n":"伦理片","v":"55"},{"n":"科幻片","v":"9"},{"n":"恐怖片","v":"10"},{"n":"剧情片","v":"11"},{"n":"战争片","v":"12"},{"n":"纪录片","v":"24"},{"n":"犯罪片","v":"27"},{"n":"灾难片","v":"28"},{"n":"历史片","v":"29"},{"n":"传记片","v":"30"},{"n":"歌舞片","v":"47"},{"n":"预告片","v":"57"},{"n":"动漫电影","v":"25"},{"n":"电影解说","v":"56"}]},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"3":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"3"},{"n":"大陆综艺","v":"51"},{"n":"港台综艺","v":"52"},{"n":"日韩综艺","v":"53"},{"n":"欧美综艺","v":"54"}]},{"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":"求职"}]},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"4":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"4"},{"n":"日本动漫","v":"21"},{"n":"国产动漫","v":"20"},{"n":"欧美动漫","v":"22"}]},{"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":"欧美"},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"58":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"58"},{"n":"足球","v":"59"},{"n":"篮球","v":"60"},{"n":"网球","v":"61"},{"n":"斯诺克","v":"62"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"A"},{"n":"B","v":"B"},{"n":"C","v":"C"},{"n":"D","v":"D"},{"n":"E","v":"E"},{"n":"F","v":"F"},{"n":"G","v":"G"},{"n":"H","v":"H"},{"n":"I","v":"I"},{"n":"J","v":"J"},{"n":"K","v":"K"},{"n":"L","v":"L"},{"n":"M","v":"M"},{"n":"N","v":"N"},{"n":"O","v":"O"},{"n":"P","v":"P"},{"n":"Q","v":"Q"},{"n":"R","v":"R"},{"n":"S","v":"S"},{"n":"T","v":"T"},{"n":"U","v":"U"},{"n":"V","v":"V"},{"n":"W","v":"W"},{"n":"X","v":"X"},{"n":"Y","v":"Y"},{"n":"Z","v":"Z"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||
},
|
||||
filter_def:{
|
||||
2:{cateId:'2'},
|
||||
1:{cateId:'1'},
|
||||
3:{cateId:'3'},
|
||||
4:{cateId:'4'},
|
||||
58:{cateId:'58'}
|
||||
},
|
||||
cate_exclude:'网址+',
|
||||
}
|
35
JN/dr_py/js/539影视.js
Normal file
@ -0,0 +1,35 @@
|
||||
// 搜索数字验证
|
||||
muban.首图2.二级.desc = '.data:eq(1)&&Text;.data:eq(3)&&Text;.data:eq(2)&&Text;.data:eq(5)&&Text;.data:eq(4)&&Text';
|
||||
muban.首图2.二级.tabs = '.nav.nav-tabs&&li';
|
||||
var rule = {
|
||||
title:'539影视',
|
||||
模板:'首图2',
|
||||
host:'https://539539.xyz',
|
||||
// url:'/vodshow/fyclass/page/fypage.html',
|
||||
url:'/vodshow/fyfilter.html',
|
||||
filterable:1,//是否启用分类筛选,
|
||||
filter_url:'{{fl.cateId}}{{fl.area}}{{fl.by}}{{fl.class}}{{fl.lang}}/page/fypage{{fl.year}}',
|
||||
filter:{
|
||||
"1":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"1"},{"n":"动作片","v":"6"},{"n":"喜剧片","v":"7"},{"n":"爱情片","v":"8"},{"n":"科幻片","v":"9"},{"n":"恐怖片","v":"10"},{"n":"剧情片","v":"11"},{"n":"战争片","v":"12"},{"n":"动画片","v":"29"},{"n":"悬疑片","v":"32"},{"n":"犯罪片","v":"35"},{"n":"奇幻片","v":"36"},{"n":"纪录片","v":"38"}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"喜剧","v":"/class/喜剧"},{"n":"爱情","v":"/class/爱情"},{"n":"恐怖","v":"/class/恐怖"},{"n":"动作","v":"/class/动作"},{"n":"纪录","v":"/class/纪录"},{"n":"科幻","v":"/class/科幻"},{"n":"剧情","v":"/class/剧情"},{"n":"战争","v":"/class/战争"},{"n":"犯罪","v":"/class/犯罪"},{"n":"动画","v":"/class/动画"},{"n":"奇幻","v":"/class/奇幻"},{"n":"武侠","v":"/class/武侠"},{"n":"冒险","v":"/class/冒险"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"其它","v":"/area/其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||
"2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"13"},{"n":"港台剧","v":"14"},{"n":"日韩剧","v":"15"},{"n":"海外剧","v":"16"}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"古装","v":"/class/古装"},{"n":"战争","v":"/class/战争"},{"n":"青春","v":"/class/青春"},{"n":"偶像","v":"/class/偶像"},{"n":"恐怖","v":"/class/恐怖"},{"n":"喜剧","v":"/class/喜剧"},{"n":"家庭","v":"/class/家庭"},{"n":"犯罪","v":"/class/犯罪"},{"n":"动作","v":"/class/动作"},{"n":"奇幻","v":"/class/奇幻"},{"n":"剧情","v":"/class/剧情"},{"n":"历史","v":"/class/历史"},{"n":"经典","v":"/class/经典"},{"n":"情景","v":"/class/情景"},{"n":"商战","v":"/class/商战"},{"n":"网剧","v":"/class/网剧"},{"n":"其他","v":"/class/其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"其它","v":"/area/其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"其它","v":"/year/其它"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||
"3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"选秀","v":"/class/选秀"},{"n":"情感","v":"/class/情感"},{"n":"访谈","v":"/class/访谈"},{"n":"播报","v":"/class/播报"},{"n":"旅游","v":"/class/旅游"},{"n":"音乐","v":"/class/音乐"},{"n":"美食","v":"/class/美食"},{"n":"纪实","v":"/class/纪实"},{"n":"曲艺","v":"/class/曲艺"},{"n":"生活","v":"/class/生活"},{"n":"游戏","v":"/class/游戏"},{"n":"求职","v":"/class/求职"},{"n":"其它","v":"/class/其它"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"其它","v":"/area/其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"其它","v":"/year/其它"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||
"4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"情感","v":"/class/情感"},{"n":"科幻","v":"/class/科幻"},{"n":"热血","v":"/class/热血"},{"n":"推理","v":"/class/推理"},{"n":"搞笑","v":"/class/搞笑"},{"n":"冒险","v":"/class/冒险"},{"n":"萝莉","v":"/class/萝莉"},{"n":"校园","v":"/class/校园"},{"n":"动作","v":"/class/动作"},{"n":"机战","v":"/class/机战"},{"n":"运动","v":"/class/运动"},{"n":"战争","v":"/class/战争"},{"n":"少年","v":"/class/少年"},{"n":"少女","v":"/class/少女"},{"n":"社会","v":"/class/社会"},{"n":"原创","v":"/class/原创"},{"n":"亲子","v":"/class/亲子"},{"n":"益智","v":"/class/益智"},{"n":"励志","v":"/class/励志"},{"n":"其他","v":"/class/其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"韩国","v":"/area/韩国"},{"n":"日本","v":"/area/日本"},{"n":"泰国","v":"/area/泰国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"马来西亚","v":"/area/马来西亚"},{"n":"印度","v":"/area/印度"},{"n":"英国","v":"/area/英国"},{"n":"法国","v":"/area/法国"},{"n":"其它","v":"/area/其它"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"其它","v":"/year/其它"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}]
|
||||
},
|
||||
filter_def:{
|
||||
1:{cateId:'1'},
|
||||
2:{cateId:'2'},
|
||||
3:{cateId:'3'},
|
||||
4:{cateId:'4'}
|
||||
},
|
||||
headers: {
|
||||
'User-Agent': 'PC_UA'
|
||||
},
|
||||
// searchUrl:'/vodsearch.html#wd=**;post',
|
||||
class_parse: '.stui-header__menu li:gt(0):lt(5);a&&Text;a&&href;.*/(\\d+).html',
|
||||
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}",
|
||||
// 搜索: 'ul.stui-vodlist&&li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href',
|
||||
|
||||
searchUrl:'/index.php/ajax/suggest?mid=1&wd=**&limit=50',
|
||||
detailUrl:'/voddetail/fyid.html', //非必填,二级详情拼接链接
|
||||
搜索:'json:list;name;pic;;id',
|
||||
}
|
30
JN/dr_py/js/555影视[飞].js
Normal file
@ -0,0 +1,30 @@
|
||||
// 搜索验证
|
||||
// 网址发布页 https://www.555dy.top
|
||||
muban.mxpro.二级.desc = '.module-info-item:eq(-1)&&Text;;;.module-info-item-content:eq(2)&&Text;.module-info-item-content:eq(0)&&Text';
|
||||
var rule = {
|
||||
title:'555影视[飞]',
|
||||
模板:'mxpro',
|
||||
host: 'https://www.555dyy.top',
|
||||
hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":PC_UA}});let src=jsp.pdfh(html,".row:eq(1)&&a&&href");print(src);HOST=src',
|
||||
url:'/vodshow/fyfilter.html',
|
||||
filterable:1,//是否启用分类筛选,
|
||||
filter_url:'{{fl.cateId}}-{{fl.area}}-{{fl.by}}-{{fl.class}}-{{fl.lang}}----fypage---{{fl.year}}',
|
||||
filter: {
|
||||
"1":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"Netflix","v":"Netflix"},{"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":"文艺"},{"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":"加拿大"},{"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":"俄语"},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"2":[{"key":"cateId","name":"类型","value":[{"n":"全部","v":"2"},{"n":"热门连续剧","v":"13"},{"n":"港台剧","v":"15"},{"n":"日韩剧","v":"44"},{"n":"欧美剧","v":"45"}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"Netflix","v":"Netflix"},{"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":"悬疑"},{"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":"其他"}]},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"YouTube","v":"YouTube"},{"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":"其它"}]},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"},{"n":"1999","v":"1999"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"Netflix","v":"Netflix"},{"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":"社会"},{"n":"友情","v":"友情"},{"n":"真人版","v":"真人版"},{"n":"电影版","v":"电影版"},{"n":"OVA版","v":"OVA版"},{"n":"TV版","v":"TV版"},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"更早","v":"更早"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}],
|
||||
"124":[{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hits"},{"n":"评分","v":"score"}]}]
|
||||
},
|
||||
filter_def:{
|
||||
1:{cateId:'1',by:'time'},
|
||||
2:{cateId:'2',by:'time'},
|
||||
3:{cateId:'3',by:'time'},
|
||||
4:{cateId:'4',by:'time'},
|
||||
124:{cateId:'124',by:'time'}
|
||||
},
|
||||
cate_exclude:'福利',
|
||||
searchUrl:'/index.php/ajax/suggest?mid=1&wd=**&limit=50',
|
||||
detailUrl:'/voddetail/fyid.html', //非必填,二级详情拼接链接
|
||||
搜索:'json:list;name;pic;;id',
|
||||
}
|
34
JN/dr_py/js/555电影[V2].js
Normal file
@ -0,0 +1,34 @@
|
||||
// 网址发布页 https://www.555dy.top
|
||||
var rule = {
|
||||
title: '555电影[V2]', // csp_AppYsV2
|
||||
host: 'https://www.555dyy.top',
|
||||
hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":PC_UA}});let src=jsp.pdfh(html,".row:eq(2)&&a&&href");print(src);HOST=src',
|
||||
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":"Netflix","v":"Netflix"},{"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":"文艺"},{"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":"加拿大"},{"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":"俄语"},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"}]}],
|
||||
"2":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"Netflix","v":"Netflix"},{"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":"悬疑"},{"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":"其他"}]},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"}]}],
|
||||
"4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"Netflix","v":"Netflix"},{"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":"社会"},{"n":"友情","v":"友情"},{"n":"真人版","v":"真人版"},{"n":"电影版","v":"电影版"},{"n":"OVA版","v":"OVA版"},{"n":"TV版","v":"TV版"},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"更早","v":"更早"}]}],
|
||||
"3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"YouTube","v":"YouTube"},{"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":"其它"}]},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"},{"n":"2003","v":"2003"},{"n":"2002","v":"2002"},{"n":"2001","v":"2001"},{"n":"2000","v":"2000"},{"n":"1999","v":"1999"}]}]
|
||||
},
|
||||
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.14 (dart:io)'},
|
||||
timeout:5000,
|
||||
class_name:'连续剧&电影&综艺&动漫', // 分类筛选 /api.php/app/nav
|
||||
class_url:'2&1&3&4',
|
||||
play_parse:true,
|
||||
lazy:'js:input=/ddvod/.test(input)?"http://jhsj.manduhu.com/?url="+input:input',
|
||||
limit:6,
|
||||
// 推荐:'json:list[0].vlist;*;*;*;*',
|
||||
推荐:'json:list;vlist;*;*;*;*',
|
||||
double:true,
|
||||
一级:'json:list;vod_name;vod_pic;vod_remarks;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=""}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)}',
|
||||
搜索:'*',
|
||||
}
|
39
JN/dr_py/js/58动漫.js
Normal file
@ -0,0 +1,39 @@
|
||||
// 原"幻听网听书"网站 已更名为 "58动漫"
|
||||
|
||||
// muban.首图2.二级.title = 'h1--span&&title;.data--span:eq(0)&&Text';
|
||||
// muban.首图2.二级.desc = '.data--span:eq(3)&&Text;;;.data--span:eq(1)&&Text;.data--span:eq(2)&&Text';
|
||||
// muban.首图2.二级.content = '.detail-content&&Text';
|
||||
// muban.首图2.二级.tabs = '.stui-pannel__head.bottom-line&&h3';
|
||||
muban.vfed.二级.title = 'h1&&Text;.fed-col-md3:eq(0)&&Text';
|
||||
muban.vfed.二级.desc = '.fed-col-md3:eq(3)&&Text;;;.fed-col-md6--span:eq(0)&&Text;.fed-col-md6--span:eq(1)&&Text';
|
||||
muban.vfed.二级.tabs = '.nav-tabs&&li';
|
||||
muban.vfed.二级.lists = '.myui-content__list:eq(#id)&&li';
|
||||
var rule = {
|
||||
// title:'幻听网听书',
|
||||
title:'58动漫',
|
||||
// 模板:'首图2',
|
||||
模板:'vfed',
|
||||
host:'http://www.ting38.com',
|
||||
// url:'/ting/fyclass-fypage.html',
|
||||
url:'/search.php?page=fypage&searchtype=5&tid=fyclassfyfilter',
|
||||
filterable:1,//是否启用分类筛选,
|
||||
filter_url:'&order={{fl.by}}&area={{fl.area}}&year={{fl.year}}',
|
||||
filter:{
|
||||
"1":[{"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"},{"n":"2012","v":"2012"},{"n":"more","v":"more"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hit"},{"n":"推荐","v":"commend"}]}],
|
||||
"2":[{"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"},{"n":"2012","v":"2012"},{"n":"more","v":"more"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hit"},{"n":"推荐","v":"commend"}]}],
|
||||
"3":[{"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"},{"n":"2012","v":"2012"},{"n":"more","v":"more"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hit"},{"n":"推荐","v":"commend"}]}],
|
||||
"4":[{"key":"area","name":"地区","value":[{"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"},{"n":"2012","v":"2012"},{"n":"more","v":"more"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hit"},{"n":"推荐","v":"commend"}]}]
|
||||
},
|
||||
filter_def:{
|
||||
1:{cateId:'1'},
|
||||
2:{cateId:'2'},
|
||||
3:{cateId:'3'},
|
||||
4:{cateId:'4'}
|
||||
},
|
||||
searchUrl:'/search.php?page=fypage&searchword=**&searchtype=',
|
||||
// class_parse: '.stui-header__menu li:gt(0);a&&Text;a&&href;.*/(.*?).html',
|
||||
// class_parse: '.fed-pops-navbar&&ul.fed-part-rows&&a;a&&Text;a&&href;.*/(.*?).html',
|
||||
// cate_exclude:'导航',
|
||||
// 搜索:'.stui-vodlist__media:eq(0) li;a&&title;.lazyload&&data-original;p:eq(0)&&Text;a&&href;.pic-text&&Text',
|
||||
搜索: '.fed-list-item;a&&title;a&&data-original;.fed-list-remarks&&Text;a&&href',
|
||||
}
|
20
JN/dr_py/js/69美剧.js
Normal file
@ -0,0 +1,20 @@
|
||||
muban.mxone5.二级.desc = '.video-info-items:eq(3)&&Text;;;.video-info-actor:eq(1)&&Text;.video-info-actor:eq(0)&&Text';
|
||||
muban.mxone5.二级.lists = '.scroll-box-y:eq(#id) a';
|
||||
var rule={
|
||||
title:'69美剧',
|
||||
模板:'mxone5',
|
||||
host:'https://www.69mj.com',
|
||||
// url:'/index.php/vod/show/id/fyclass/page/fypage.html',
|
||||
url:'/index.php/vod/show/id/fyclassfyfilter.html',
|
||||
filterable:1,//是否启用分类筛选,
|
||||
filter_url:'{{fl.area}}{{fl.by}}{{fl.class}}{{fl.lang}}{{fl.letter}}/page/fypage{{fl.year}}',
|
||||
filter:{
|
||||
"1":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"喜剧","v":"/class/喜剧"},{"n":"动作","v":"/class/动作"},{"n":"爱情","v":"/class/爱情"},{"n":"惊悚","v":"/class/惊悚"},{"n":"犯罪","v":"/class/犯罪"},{"n":"冒险","v":"/class/冒险"},{"n":"科幻","v":"/class/科幻"},{"n":"悬疑","v":"/class/悬疑"},{"n":"剧情","v":"/class/剧情"},{"n":"动画","v":"/class/动画"},{"n":"武侠","v":"/class/武侠"},{"n":"战争","v":"/class/战争"},{"n":"歌舞","v":"/class/歌舞"},{"n":"奇幻","v":"/class/奇幻"},{"n":"传记","v":"/class/传记"},{"n":"警匪","v":"/class/警匪"},{"n":"历史","v":"/class/历史"},{"n":"运动","v":"/class/运动"},{"n":"伦理","v":"/class/伦理"},{"n":"灾难","v":"/class/灾难"},{"n":"西部","v":"/class/西部"},{"n":"魔幻","v":"/class/魔幻"},{"n":"枪战","v":"/class/枪战"},{"n":"恐怖","v":"/class/恐怖"},{"n":"记录","v":"/class/记录"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"美国","v":"/area/美国"},{"n":"香港","v":"/area/香港"},{"n":"韩国","v":"/area/韩国"},{"n":"英国","v":"/area/英国"},{"n":"台湾","v":"/area/台湾"},{"n":"日本","v":"/area/日本"},{"n":"法国","v":"/area/法国"},{"n":"意大利","v":"/area/意大利"},{"n":"德国","v":"/area/德国"},{"n":"西班牙","v":"/area/西班牙"},{"n":"泰国","v":"/area/泰国"},{"n":"其它","v":"/area/其它"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"法语","v":"/lang/法语"},{"n":"德语","v":"/lang/德语"},{"n":"其它","v":"/lang/其它"}]},{"key":"year","name":"时间","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"/letter/A"},{"n":"B","v":"/letter/B"},{"n":"C","v":"/letter/C"},{"n":"D","v":"/letter/D"},{"n":"E","v":"/letter/E"},{"n":"F","v":"/letter/F"},{"n":"G","v":"/letter/G"},{"n":"H","v":"/letter/H"},{"n":"I","v":"/letter/I"},{"n":"J","v":"/letter/J"},{"n":"K","v":"/letter/K"},{"n":"L","v":"/letter/L"},{"n":"M","v":"/letter/M"},{"n":"N","v":"/letter/N"},{"n":"O","v":"/letter/O"},{"n":"P","v":"/letter/P"},{"n":"Q","v":"/letter/Q"},{"n":"R","v":"/letter/R"},{"n":"S","v":"/letter/S"},{"n":"T","v":"/letter/T"},{"n":"U","v":"/letter/U"},{"n":"V","v":"/letter/V"},{"n":"W","v":"/letter/W"},{"n":"X","v":"/letter/X"},{"n":"Y","v":"/letter/Y"},{"n":"Z","v":"/letter/Z"},{"n":"0-9","v":"/letter/0-9"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||
"2":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"古装","v":"/class/古装"},{"n":"喜剧","v":"/class/喜剧"},{"n":"偶像","v":"/class/偶像"},{"n":"家庭","v":"/class/家庭"},{"n":"警匪","v":"/class/警匪"},{"n":"言情","v":"/class/言情"},{"n":"军事","v":"/class/军事"},{"n":"武侠","v":"/class/武侠"},{"n":"悬疑","v":"/class/悬疑"},{"n":"历史","v":"/class/历史"},{"n":"农村","v":"/class/农村"},{"n":"都市","v":"/class/都市"},{"n":"神话","v":"/class/神话"},{"n":"科幻","v":"/class/科幻"},{"n":"少儿","v":"/class/少儿"},{"n":"搞笑","v":"/class/搞笑"},{"n":"谍战","v":"/class/谍战"},{"n":"战争","v":"/class/战争"},{"n":"年代","v":"/class/年代"},{"n":"犯罪","v":"/class/犯罪"},{"n":"恐怖","v":"/class/恐怖"},{"n":"惊悚","v":"/class/惊悚"},{"n":"爱情","v":"/class/爱情"},{"n":"剧情","v":"/class/剧情"},{"n":"奇幻","v":"/class/奇幻"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"韩国","v":"/area/韩国"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"日本","v":"/area/日本"},{"n":"美国","v":"/area/美国"},{"n":"泰国","v":"/area/泰国"},{"n":"英国","v":"/area/英国"},{"n":"新加坡","v":"/area/新加坡"},{"n":"其他","v":"/area/其他"},{"n":"香港地区","v":"/area/香港地区"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"其它","v":"/lang/其它"}]},{"key":"year","name":"时间","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"/letter/A"},{"n":"B","v":"/letter/B"},{"n":"C","v":"/letter/C"},{"n":"D","v":"/letter/D"},{"n":"E","v":"/letter/E"},{"n":"F","v":"/letter/F"},{"n":"G","v":"/letter/G"},{"n":"H","v":"/letter/H"},{"n":"I","v":"/letter/I"},{"n":"J","v":"/letter/J"},{"n":"K","v":"/letter/K"},{"n":"L","v":"/letter/L"},{"n":"M","v":"/letter/M"},{"n":"N","v":"/letter/N"},{"n":"O","v":"/letter/O"},{"n":"P","v":"/letter/P"},{"n":"Q","v":"/letter/Q"},{"n":"R","v":"/letter/R"},{"n":"S","v":"/letter/S"},{"n":"T","v":"/letter/T"},{"n":"U","v":"/letter/U"},{"n":"V","v":"/letter/V"},{"n":"W","v":"/letter/W"},{"n":"X","v":"/letter/X"},{"n":"Y","v":"/letter/Y"},{"n":"Z","v":"/letter/Z"},{"n":"0-9","v":"/letter/0-9"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||
"3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"真人秀","v":"/class/真人秀"},{"n":"访谈","v":"/class/访谈"},{"n":"情感","v":"/class/情感"},{"n":"选秀","v":"/class/选秀"},{"n":"旅游","v":"/class/旅游"},{"n":"美食","v":"/class/美食"},{"n":"口秀","v":"/class/口秀"},{"n":"曲艺","v":"/class/曲艺"},{"n":"搞笑","v":"/class/搞笑"},{"n":"游戏","v":"/class/游戏"},{"n":"歌舞","v":"/class/歌舞"},{"n":"生活","v":"/class/生活"},{"n":"音乐","v":"/class/音乐"},{"n":"时尚","v":"/class/时尚"},{"n":"益智","v":"/class/益智"},{"n":"职场","v":"/class/职场"},{"n":"少儿","v":"/class/少儿"},{"n":"纪实","v":"/class/纪实"},{"n":"盛会","v":"/class/盛会"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"韩国","v":"/area/韩国"},{"n":"香港","v":"/area/香港"},{"n":"台湾","v":"/area/台湾"},{"n":"美国","v":"/area/美国"},{"n":"其它","v":"/area/其它"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"其它","v":"/lang/其它"}]},{"key":"year","name":"时间","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"/letter/A"},{"n":"B","v":"/letter/B"},{"n":"C","v":"/letter/C"},{"n":"D","v":"/letter/D"},{"n":"E","v":"/letter/E"},{"n":"F","v":"/letter/F"},{"n":"G","v":"/letter/G"},{"n":"H","v":"/letter/H"},{"n":"I","v":"/letter/I"},{"n":"J","v":"/letter/J"},{"n":"K","v":"/letter/K"},{"n":"L","v":"/letter/L"},{"n":"M","v":"/letter/M"},{"n":"N","v":"/letter/N"},{"n":"O","v":"/letter/O"},{"n":"P","v":"/letter/P"},{"n":"Q","v":"/letter/Q"},{"n":"R","v":"/letter/R"},{"n":"S","v":"/letter/S"},{"n":"T","v":"/letter/T"},{"n":"U","v":"/letter/U"},{"n":"V","v":"/letter/V"},{"n":"W","v":"/letter/W"},{"n":"X","v":"/letter/X"},{"n":"Y","v":"/letter/Y"},{"n":"Z","v":"/letter/Z"},{"n":"0-9","v":"/letter/0-9"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}],
|
||||
"4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"热血","v":"/class/热血"},{"n":"科幻","v":"/class/科幻"},{"n":"推理","v":"/class/推理"},{"n":"搞笑","v":"/class/搞笑"},{"n":"冒险","v":"/class/冒险"},{"n":"校园","v":"/class/校园"},{"n":"动作","v":"/class/动作"},{"n":"机战","v":"/class/机战"},{"n":"运动","v":"/class/运动"},{"n":"战争","v":"/class/战争"},{"n":"少年","v":"/class/少年"},{"n":"少女","v":"/class/少女"},{"n":"社会","v":"/class/社会"},{"n":"原创","v":"/class/原创"},{"n":"亲子","v":"/class/亲子"},{"n":"益智","v":"/class/益智"},{"n":"励志","v":"/class/励志"},{"n":"其他","v":"/class/其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"/area/大陆"},{"n":"日本","v":"/area/日本"},{"n":"欧美","v":"/area/欧美"},{"n":"其他","v":"/area/其他"}]},{"key":"lang","name":"语言","value":[{"n":"全部","v":""},{"n":"国语","v":"/lang/国语"},{"n":"英语","v":"/lang/英语"},{"n":"粤语","v":"/lang/粤语"},{"n":"闽南语","v":"/lang/闽南语"},{"n":"韩语","v":"/lang/韩语"},{"n":"日语","v":"/lang/日语"},{"n":"其它","v":"/lang/其它"}]},{"key":"year","name":"时间","value":[{"n":"全部","v":""},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"2013","v":"/year/2013"},{"n":"2012","v":"/year/2012"},{"n":"2011","v":"/year/2011"},{"n":"2010","v":"/year/2010"},{"n":"2009","v":"/year/2009"},{"n":"2008","v":"/year/2008"},{"n":"2007","v":"/year/2007"},{"n":"2006","v":"/year/2006"},{"n":"2005","v":"/year/2005"},{"n":"2004","v":"/year/2004"}]},{"key":"letter","name":"字母","value":[{"n":"全部","v":""},{"n":"A","v":"/letter/A"},{"n":"B","v":"/letter/B"},{"n":"C","v":"/letter/C"},{"n":"D","v":"/letter/D"},{"n":"E","v":"/letter/E"},{"n":"F","v":"/letter/F"},{"n":"G","v":"/letter/G"},{"n":"H","v":"/letter/H"},{"n":"I","v":"/letter/I"},{"n":"J","v":"/letter/J"},{"n":"K","v":"/letter/K"},{"n":"L","v":"/letter/L"},{"n":"M","v":"/letter/M"},{"n":"N","v":"/letter/N"},{"n":"O","v":"/letter/O"},{"n":"P","v":"/letter/P"},{"n":"Q","v":"/letter/Q"},{"n":"R","v":"/letter/R"},{"n":"S","v":"/letter/S"},{"n":"T","v":"/letter/T"},{"n":"U","v":"/letter/U"},{"n":"V","v":"/letter/V"},{"n":"W","v":"/letter/W"},{"n":"X","v":"/letter/X"},{"n":"Y","v":"/letter/Y"},{"n":"Z","v":"/letter/Z"},{"n":"0-9","v":"/letter/0-9"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"}]}]
|
||||
},
|
||||
searchUrl:'/index.php/vod/search/page/fypage/wd/**.html',
|
||||
class_parse:'.nav-menu-items&&li:gt(0):lt(5);a&&Text;a&&href;.*/(\\d+).html',
|
||||
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}",
|
||||
}
|
30
JN/dr_py/js/69美剧[V2].js
Normal file
@ -0,0 +1,30 @@
|
||||
var rule = {
|
||||
title: '69美剧[V2]', // csp_AppYsV2
|
||||
host: 'https://www.69mj.com',
|
||||
homeUrl:'/xgapp.php/v2/index_video',
|
||||
// url: '/xgapp.php/v2/video?tid=fyclass&class=&area=&lang=&year=&limit=20&pg=fypage',
|
||||
url: '/xgapp.php/v2/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":"记录"}]},{"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":"其它"}]},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]}],
|
||||
"2":[{"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":"香港地区"}]},{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]}],
|
||||
"3":[{"key":"area","name":"地区","value":[{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]}],
|
||||
"4":[{"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"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]}]
|
||||
},
|
||||
detailUrl:'/xgapp.php/v2/video_detail?id=fyid',
|
||||
searchUrl: '/xgapp.php/v2/search?text=**&pg=fypage',
|
||||
searchable: 2,
|
||||
quickSearch: 0,
|
||||
filterable:1,//是否启用分类筛选,
|
||||
headers:{'User-Agent':'Dart/2.14 (dart:io)'},
|
||||
timeout:5000,
|
||||
class_name:'连续剧&电影&综艺&动漫', // 分类筛选 /xgapp.php/v2/nav
|
||||
class_url:'2&1&3&4',
|
||||
play_parse:true,
|
||||
lazy:'',
|
||||
limit:6,
|
||||
推荐:'json:data[0].vlist;*;*;*;*',
|
||||
一级:'json:data;vod_name;vod_pic;vod_remarks;vod_id',
|
||||
二级:'js:try{let html=request(input);print(html);html=JSON.parse(html);let node=html.data.vod_info;VOD={vod_id:node["vod_id"],vod_name:node["vod_name"].replace(/amp;/g,""),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=""}episodes.forEach(function(ep){let source=ep["code"];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)}',
|
||||
搜索:'*',
|
||||
}
|
65
JN/dr_py/js/6V新版[磁].js
Normal file
@ -0,0 +1,65 @@
|
||||
var rule = {
|
||||
title:'6V新版[磁]',
|
||||
host:'http://www.xb6v.com',
|
||||
// host:'https://www.66s6.net',
|
||||
// url: '/fyclass/index_fypage.html[/fyclass/index.html]',
|
||||
url: '/fyclassfyfilter/index_fypage.html[/fyclassfyfilter/index.html]',
|
||||
filter_url:'{{fl.class}}',
|
||||
filter:{
|
||||
"dianshiju":[{"key":"class","name":"类型","value":[{"n":"全部","v":""},{"n":"国剧","v":"/guoju"},{"n":"日韩剧","v":"/rihanju"},{"n":"欧美剧","v":"/oumeiju"}]}]
|
||||
},
|
||||
searchUrl: '/e/search/index.php#show=title&tempid=1&tbname=article&mid=1&dopost=search&submit=&keyboard=**;post',
|
||||
searchable:2,
|
||||
quickSearch:0,
|
||||
filterable:1,
|
||||
headers:{
|
||||
'User-Agent': 'MOBILE_UA'
|
||||
},
|
||||
timeout:5000,
|
||||
class_parse:'#menus&&li:gt(1);a&&Text;a&&href;.*/(.*)/',
|
||||
cate_exclude:'欧美剧|旧版6v',
|
||||
play_parse:true,
|
||||
limit:6,
|
||||
推荐: '*',
|
||||
一级: '#post_container&&li;h2&&Text;img&&src;.info_date&&Text;a&&href',
|
||||
二级: {
|
||||
"title": "#content&&h1&&Text;.info_category&&Text",
|
||||
"img": "#post_content&&img&&src",
|
||||
"desc": ";;;#post_content&&p:eq(0)&&Text;#post_content&&p:eq(2)&&Text",
|
||||
"content": "#post_content&&p:eq(1)&&Text",
|
||||
"tabs": `js:
|
||||
TABS = ["道长磁力"];
|
||||
let tabs = pdfa(html, '#content&&h3:not(:contains(网盘))');
|
||||
tabs.forEach((it) => {
|
||||
TABS.push(pdfh(it, "body&&Text").replace('播放地址','道长在线').replace('(无插件 极速播放)','一').replace('(无需安装插件)','二'))
|
||||
});
|
||||
`,
|
||||
"lists": `js:
|
||||
log(TABS);
|
||||
pdfh=jsp.pdfh;pdfa=jsp.pdfa;pd=jsp.pd;
|
||||
LISTS = [];
|
||||
let i = 1;
|
||||
TABS.forEach(function(tab) {
|
||||
if (/道长磁力/.test(tab)) {
|
||||
var d = pdfa(html, '.context&&td');
|
||||
d = d.map(function(it) {
|
||||
var title = pdfh(it, 'a&&Text');
|
||||
var burl = pd(it, 'a&&href');
|
||||
return title + '$' + burl
|
||||
});
|
||||
LISTS.push(d)
|
||||
} else if (/道长在线/.test(tab) && i <= TABS.length-1) {
|
||||
var d = pdfa(html, '.context&&.widget:eq(list_idx)&&a'.replace("list_idx", i));
|
||||
d = d.map(function(it) {
|
||||
var title = pdfh(it, 'a&&Text');
|
||||
var burl = pd(it, 'a&&href');
|
||||
return title + '$' + burl
|
||||
});
|
||||
LISTS.push(d)
|
||||
i = i + 1;
|
||||
}
|
||||
});
|
||||
`,
|
||||
},
|
||||
搜索: '*',
|
||||
}
|
27
JN/dr_py/js/74听书.jsd
Normal file
@ -0,0 +1,27 @@
|
||||
var rule = {
|
||||
title: '74听书',
|
||||
host: 'https://www.ting74.com',
|
||||
// homeUrl:'/sort/xuanhuan.html',
|
||||
url:'/sort/fyclass/fypage.html',
|
||||
searchUrl: '/search.html#searchtype=novelname&searchword=**&page=fypage;post',
|
||||
searchable: 0,
|
||||
quickSearch: 0,
|
||||
filterable:0,
|
||||
headers:{'User-Agent':'PC_UA'},
|
||||
timeout:5000,//网站的全局请求超时,默认是3000毫秒
|
||||
class_parse: '.nav-ol&&li:gt(0):lt(8);a&&Text;a&&href;/(\\w+).html',
|
||||
play_parse:true,
|
||||
// lazy:"js:var url=jsp.pdfh(request(input),'iframe&&src');var purl=request('http://www.ting74.com'+url).match(/mp3:'(.*?)'/)[1];input={jx:0,url:purl,parse:0}",
|
||||
limit:6,
|
||||
推荐:'#myTab_Content0&&.tab-li;.tab-book-title&&Text;*;.tab-book-author&&Text;*',
|
||||
一级:'.list-works&&li;.list-book-dt&&a&&Text;.lazy&&data-original;.book-author--aria:eq(2)&&Text;a&&href',
|
||||
二级:{
|
||||
"title":".book-cover&&alt;.book-info&&dd--span:eq(1)&&Text",
|
||||
"img":".book-cover&&src",
|
||||
"desc":".book-info&&dd:eq(4)&&Text;;;.book-info&&dd:eq(3)&&Text;.book-info&&dd:eq(2)&&Text",
|
||||
"content":".book-des&&Text",
|
||||
"tabs":".playlist-top&&h2",
|
||||
"lists":"#playlist:eq(#id)&&li"
|
||||
},
|
||||
搜索:'*',
|
||||
}
|
22
JN/dr_py/js/7喜影院.js
Normal file
30
JN/dr_py/js/88看球.js
Normal file
@ -0,0 +1,30 @@
|
||||
var rule = {
|
||||
title:'88看球',
|
||||
// host:'http://www.88kanqiu.cc',
|
||||
host:'http://www.88kanqiu.live',
|
||||
url:'/match/fyclass/live',
|
||||
searchUrl:'',
|
||||
searchable:0,
|
||||
quickSearch:0,
|
||||
class_parse:'.nav-pills li;a&&Text;a&&href;/match/(\\d+)/live',
|
||||
headers:{
|
||||
'User-Agent':'PC_UA'
|
||||
},
|
||||
timeout:5000,
|
||||
play_parse:true,
|
||||
lazy:'',
|
||||
limit:6,
|
||||
double:false,
|
||||
推荐:'*',
|
||||
一级:'.list-group .group-game-item;.d-none&&Text;img&&src;.btn&&Text;a&&href',
|
||||
二级:{
|
||||
"title":".game-info-container&&Text;.customer-navbar-nav li&&Text",
|
||||
"img":"img&&src",
|
||||
"desc":";;;div.team-name:eq(0)&&Text;div.team-name:eq(1)&&Text",
|
||||
"content":"div.game-time&&Text",
|
||||
"tabs":"js:TABS=['88看球']",
|
||||
// "lists":"js:LISTS=[];input=input+'-url';let html=request(input);let data=JSON.parse(html);TABS.forEach(function(tab){let m3u=data;let d=m3u.map(function(it){return it.name+'$'+play_url+it.url});LISTS.push(d)});"
|
||||
"lists":"js:LISTS=[];input=input+'-url';let html=request(input);let data=JSON.parse(html);TABS.forEach(function(tab){let m3u=data;let d=m3u.map(function(it){return it.name+'$'+it.url});LISTS.push(d)});"
|
||||
},
|
||||
搜索:'',
|
||||
}
|
17
JN/dr_py/js/8K影视.jsd
Normal file
@ -0,0 +1,17 @@
|
||||
// 发布页 http://www.8kvod.com/
|
||||
// 一级筛选 数字验证
|
||||
muban.mxone5.二级.title = 'h1&&Text;.video-info-aux&&Text';
|
||||
muban.mxone5.二级.desc = '.video-info-items:eq(5)&&Text;;;.video-info-actor:eq(1)&&Text;.video-info-actor:eq(0)&&Text';
|
||||
var rule={
|
||||
title:'8K影视',
|
||||
模板:'mxone5',
|
||||
host:'http://www.8kvod.com',
|
||||
hostJs:'print(HOST);let html=request(HOST,{headers:{"User-Agent":PC_UA}});let src = jsp.pdfh(html,"ul&&li&&a&&href");print(src);HOST=src.replace("/index.php","")',
|
||||
// host:'http://www.xn--45q.top',
|
||||
homeUrl:'/index.php',
|
||||
url:'/t/fyclass-fypage/',
|
||||
class_name:'足球&篮球&网球&动作片&喜剧片&爱情片&科幻片&恐怖片&剧情片&战争片&惊悚片&犯罪片&冒险片&悬疑片&奇幻片&纪录片&动画片&其他片&国产剧&港台剧&日韩剧&欧美剧&海外剧&大陆综艺&港台综艺&国外综艺&歌曲MV&国产动漫&日本动漫&欧美动漫&其他动漫&早教&亲子&儿歌',
|
||||
class_url:'53&54&55&6&7&8&9&10&11&12&48&49&50&51&52&28&29&31&13&14&15&16&20&21&22&23&39&24&25&26&27&44&45&46',
|
||||
searchUrl:'/vse**/page/fypage/',
|
||||
图片来源:'@Referer=http://www.xn--45q.top',
|
||||
}
|
21
JN/dr_py/js/8号影院.js
Normal file
@ -0,0 +1,21 @@
|
||||
muban.首图2.二级.desc = ';;;.data--span:eq(0)&&Text;.data--span:eq(1)&&Text';
|
||||
muban.首图2.二级.tabs = '.stui-pannel__head h3';
|
||||
var rule={
|
||||
title:'8号影院',
|
||||
模板:'首图2',
|
||||
host:'http://www.8hysw.com',
|
||||
// url:'/frim/fyclass-fypage.html',
|
||||
url:'/frim/fyfilter.html',
|
||||
filterable:1,//是否启用分类筛选,
|
||||
filter_url:'{{fl.cateId}}-fypage',
|
||||
filter: {"1":[{"key":"cateId","name":"分类","value":[{"n":"全部","v":"1"},{"n":"动作","v":"5"},{"n":"爱情","v":"6"},{"n":"科幻","v":"7"},{"n":"恐怖","v":"8"},{"n":"喜剧","v":"10"},{"n":"剧情","v":"12"},{"n":"在线直播","v":"28"}]}],"2":[{"key":"cateId","name":"分类","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"13"},{"n":"港台剧","v":"14"},{"n":"欧美剧","v":"15"},{"n":"日韩剧","v":"16"}]}]},
|
||||
filter_def:{
|
||||
1:{cateId:'1'},
|
||||
2:{cateId:'2'},
|
||||
3:{cateId:'3'},
|
||||
4:{cateId:'4'}
|
||||
},
|
||||
searchUrl:'/search.php?page=fypage&searchword=**&searchtype=',
|
||||
class_parse: '.stui-header__menu li:gt(0):lt(5);a&&Text;a&&href;.*/(.*?).html',
|
||||
搜索:muban.首图2.搜索2,
|
||||
}
|