增加辅助嗅探接口
This commit is contained in:
parent
8e389113c8
commit
412efabae9
15
doc/写源教程.md
15
doc/写源教程.md
@ -94,7 +94,20 @@ var rule = {
|
|||||||
proxy_rule:`js:
|
proxy_rule:`js:
|
||||||
log(input);
|
log(input);
|
||||||
input = [200,'text;plain','hello drpy']
|
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
|
||||||
|
}
|
||||||
|
`,
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
模板继承写法
|
模板继承写法
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
3.9.46beta17
|
3.9.46beta18
|
||||||
99
libs/drpy.js
99
libs/drpy.js
@ -55,7 +55,7 @@ function pre(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
let rule = {};
|
let rule = {};
|
||||||
const VERSION = 'drpy1 3.9.46beta12 20230709';
|
const VERSION = 'drpy1 3.9.46beta18 20230711';
|
||||||
/** 已知问题记录
|
/** 已知问题记录
|
||||||
* 1.影魔的jinjia2引擎不支持 {{fl}}对象直接渲染 (有能力解决的话尽量解决下,支持对象直接渲染字符串转义,如果加了|safe就不转义)[影魔牛逼,最新的文件发现这问题已经解决了]
|
* 1.影魔的jinjia2引擎不支持 {{fl}}对象直接渲染 (有能力解决的话尽量解决下,支持对象直接渲染字符串转义,如果加了|safe就不转义)[影魔牛逼,最新的文件发现这问题已经解决了]
|
||||||
* Array.prototype.append = Array.prototype.push; 这种js执行后有毛病,for in 循环列表会把属性给打印出来 (这个大毛病需要重点排除一下)
|
* Array.prototype.append = Array.prototype.push; 这种js执行后有毛病,for in 循环列表会把属性给打印出来 (这个大毛病需要重点排除一下)
|
||||||
@ -2141,6 +2141,32 @@ function proxyParse(proxyObj){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 辅助嗅探解析规则
|
||||||
|
* @param isVideoObj
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
function isVideoParse(isVideoObj){
|
||||||
|
var input = isVideoObj.url;
|
||||||
|
if(!isVideoObj.t){ // t为假代表默认传的正则字符串
|
||||||
|
let re_matcher = new RegExp(isVideoObj.isVideo,'i'); // /g匹配多个,/i不区分大小写,/m匹配多行
|
||||||
|
return re_matcher.test(input);
|
||||||
|
}else{
|
||||||
|
// 执行js
|
||||||
|
try {
|
||||||
|
eval(isVideoObj.isVideo);
|
||||||
|
if(typeof(input)==='boolean'){
|
||||||
|
return input
|
||||||
|
}else{
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}catch (e) {
|
||||||
|
log('执行嗅探规则发生错误:'+e.message);
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* js源预处理特定返回对象中的函数
|
* js源预处理特定返回对象中的函数
|
||||||
* @param ext
|
* @param ext
|
||||||
@ -2216,6 +2242,10 @@ function proxyParse(proxyObj){
|
|||||||
rule.play_json = rule.hasOwnProperty('play_json')?rule.play_json:[];
|
rule.play_json = rule.hasOwnProperty('play_json')?rule.play_json:[];
|
||||||
rule.pagecount = rule.hasOwnProperty('pagecount')?rule.pagecount:{};
|
rule.pagecount = rule.hasOwnProperty('pagecount')?rule.pagecount:{};
|
||||||
rule.proxy_rule = rule.hasOwnProperty('proxy_rule')?rule.proxy_rule:'';
|
rule.proxy_rule = rule.hasOwnProperty('proxy_rule')?rule.proxy_rule:'';
|
||||||
|
rule.sniffer = rule.hasOwnProperty('sniffer')?rule.sniffer:'';
|
||||||
|
rule.sniffer = !!(rule.sniffer && rule.sniffer!=='0' && rule.sniffer!=='false');
|
||||||
|
|
||||||
|
rule.isVideo = rule.hasOwnProperty('isVideo')?rule.isVideo:'';
|
||||||
if(rule.headers && typeof(rule.headers) === 'object'){
|
if(rule.headers && typeof(rule.headers) === 'object'){
|
||||||
try {
|
try {
|
||||||
let header_keys = Object.keys(rule.headers);
|
let header_keys = Object.keys(rule.headers);
|
||||||
@ -2398,6 +2428,39 @@ function proxy(params){
|
|||||||
return proxyParse(proxyObj)
|
return proxyParse(proxyObj)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否启用辅助嗅探功能,启用后可以根据isVideo函数进行手动识别为视频的链接地址。默认为false
|
||||||
|
* @returns {*|boolean|boolean}
|
||||||
|
*/
|
||||||
|
function sniffer(){
|
||||||
|
let enable_sniffer = rule.sniffer || false;
|
||||||
|
if(enable_sniffer){
|
||||||
|
log('准备执行辅助嗅探代理规则:\n'+rule.isVideo);
|
||||||
|
}
|
||||||
|
return enable_sniffer
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 启用辅助嗅探功能后根据次函数返回的值识别地址是否为视频,返回true/false
|
||||||
|
* @param url
|
||||||
|
*/
|
||||||
|
function isVideo(url){
|
||||||
|
let t = 0;
|
||||||
|
if(rule.isVideo &&rule.isVideo.trim()){
|
||||||
|
rule.isVideo = rule.isVideo.trim();
|
||||||
|
}
|
||||||
|
if(rule.isVideo.startsWith(':js')){
|
||||||
|
rule.isVideo = rule.isVideo.replace(':js','');
|
||||||
|
t = 1;
|
||||||
|
}
|
||||||
|
let isVideoObj = {
|
||||||
|
url:url,
|
||||||
|
isVideo:rule.isVideo,
|
||||||
|
t:t,
|
||||||
|
};
|
||||||
|
return isVideoParse(isVideoObj)
|
||||||
|
}
|
||||||
|
|
||||||
function DRPY(){//导出函数
|
function DRPY(){//导出函数
|
||||||
return {
|
return {
|
||||||
init: init,
|
init: init,
|
||||||
@ -2407,19 +2470,33 @@ function DRPY(){//导出函数
|
|||||||
detail: detail,
|
detail: detail,
|
||||||
play: play,
|
play: play,
|
||||||
search: search,
|
search: search,
|
||||||
proxy:proxy
|
proxy:proxy,
|
||||||
|
sniffer:sniffer,
|
||||||
|
isVideo:isVideo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出函数无法简写成下面的形式:
|
||||||
|
|
||||||
|
export default {
|
||||||
|
...DRPY,
|
||||||
|
DRPY
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
// 导出函数对象
|
// 导出函数对象
|
||||||
export default {
|
export default {
|
||||||
init: init,
|
init,
|
||||||
home: home,
|
home,
|
||||||
homeVod: homeVod,
|
homeVod,
|
||||||
category: category,
|
category,
|
||||||
detail: detail,
|
detail,
|
||||||
play: play,
|
play,
|
||||||
search: search,
|
search,
|
||||||
proxy:proxy,
|
proxy,
|
||||||
DRPY:DRPY
|
sniffer,
|
||||||
|
isVideo,
|
||||||
|
DRPY,
|
||||||
}
|
}
|
||||||
|
|||||||
2
libs/drpy.min.js
vendored
2
libs/drpy.min.js
vendored
File diff suppressed because one or more lines are too long
100
libs/drpy2.js
100
libs/drpy2.js
@ -41,7 +41,7 @@ function pre(){
|
|||||||
|
|
||||||
let rule = {};
|
let rule = {};
|
||||||
let vercode = typeof(pdfl) ==='function'?'drpy2.1':'drpy2';
|
let vercode = typeof(pdfl) ==='function'?'drpy2.1':'drpy2';
|
||||||
const VERSION = vercode+' 3.9.46beta12 20230709';
|
const VERSION = vercode+' 3.9.46beta18 20230711';
|
||||||
/** 已知问题记录
|
/** 已知问题记录
|
||||||
* 1.影魔的jinjia2引擎不支持 {{fl}}对象直接渲染 (有能力解决的话尽量解决下,支持对象直接渲染字符串转义,如果加了|safe就不转义)[影魔牛逼,最新的文件发现这问题已经解决了]
|
* 1.影魔的jinjia2引擎不支持 {{fl}}对象直接渲染 (有能力解决的话尽量解决下,支持对象直接渲染字符串转义,如果加了|safe就不转义)[影魔牛逼,最新的文件发现这问题已经解决了]
|
||||||
* Array.prototype.append = Array.prototype.push; 这种js执行后有毛病,for in 循环列表会把属性给打印出来 (这个大毛病需要重点排除一下)
|
* Array.prototype.append = Array.prototype.push; 这种js执行后有毛病,for in 循环列表会把属性给打印出来 (这个大毛病需要重点排除一下)
|
||||||
@ -2005,6 +2005,32 @@ function proxyParse(proxyObj){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 辅助嗅探解析规则
|
||||||
|
* @param isVideoObj
|
||||||
|
* @returns {boolean}
|
||||||
|
*/
|
||||||
|
function isVideoParse(isVideoObj){
|
||||||
|
var input = isVideoObj.url;
|
||||||
|
if(!isVideoObj.t){ // t为假代表默认传的正则字符串
|
||||||
|
let re_matcher = new RegExp(isVideoObj.isVideo,'i'); // /g匹配多个,/i不区分大小写,/m匹配多行
|
||||||
|
return re_matcher.test(input);
|
||||||
|
}else{
|
||||||
|
// 执行js
|
||||||
|
try {
|
||||||
|
eval(isVideoObj.isVideo);
|
||||||
|
if(typeof(input)==='boolean'){
|
||||||
|
return input
|
||||||
|
}else{
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}catch (e) {
|
||||||
|
log('执行嗅探规则发生错误:'+e.message);
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* js源预处理特定返回对象中的函数
|
* js源预处理特定返回对象中的函数
|
||||||
* @param ext
|
* @param ext
|
||||||
@ -2083,6 +2109,10 @@ function init(ext) {
|
|||||||
rule.play_json = rule.hasOwnProperty('play_json')?rule.play_json:[];
|
rule.play_json = rule.hasOwnProperty('play_json')?rule.play_json:[];
|
||||||
rule.pagecount = rule.hasOwnProperty('pagecount')?rule.pagecount:{};
|
rule.pagecount = rule.hasOwnProperty('pagecount')?rule.pagecount:{};
|
||||||
rule.proxy_rule = rule.hasOwnProperty('proxy_rule')?rule.proxy_rule:'';
|
rule.proxy_rule = rule.hasOwnProperty('proxy_rule')?rule.proxy_rule:'';
|
||||||
|
rule.sniffer = rule.hasOwnProperty('sniffer')?rule.sniffer:'';
|
||||||
|
rule.sniffer = !!(rule.sniffer && rule.sniffer!=='0' && rule.sniffer!=='false');
|
||||||
|
|
||||||
|
rule.isVideo = rule.hasOwnProperty('isVideo')?rule.isVideo:'';
|
||||||
if(rule.headers && typeof(rule.headers) === 'object'){
|
if(rule.headers && typeof(rule.headers) === 'object'){
|
||||||
try {
|
try {
|
||||||
let header_keys = Object.keys(rule.headers);
|
let header_keys = Object.keys(rule.headers);
|
||||||
@ -2278,6 +2308,40 @@ function proxy(params){
|
|||||||
return proxyParse(proxyObj)
|
return proxyParse(proxyObj)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否启用辅助嗅探功能,启用后可以根据isVideo函数进行手动识别为视频的链接地址。默认为false
|
||||||
|
* @returns {*|boolean|boolean}
|
||||||
|
*/
|
||||||
|
function sniffer(){
|
||||||
|
let enable_sniffer = rule.sniffer || false;
|
||||||
|
if(enable_sniffer){
|
||||||
|
log('准备执行辅助嗅探代理规则:\n'+rule.isVideo);
|
||||||
|
}
|
||||||
|
return enable_sniffer
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 启用辅助嗅探功能后根据次函数返回的值识别地址是否为视频,返回true/false
|
||||||
|
* @param url
|
||||||
|
*/
|
||||||
|
function isVideo(url){
|
||||||
|
let t = 0;
|
||||||
|
if(rule.isVideo &&rule.isVideo.trim()){
|
||||||
|
rule.isVideo = rule.isVideo.trim();
|
||||||
|
}
|
||||||
|
if(rule.isVideo.startsWith(':js')){
|
||||||
|
rule.isVideo = rule.isVideo.replace(':js','');
|
||||||
|
t = 1;
|
||||||
|
}
|
||||||
|
let isVideoObj = {
|
||||||
|
url:url,
|
||||||
|
isVideo:rule.isVideo,
|
||||||
|
t:t,
|
||||||
|
};
|
||||||
|
return isVideoParse(isVideoObj)
|
||||||
|
}
|
||||||
|
|
||||||
function DRPY(){//导出函数
|
function DRPY(){//导出函数
|
||||||
return {
|
return {
|
||||||
init: init,
|
init: init,
|
||||||
@ -2287,19 +2351,33 @@ function DRPY(){//导出函数
|
|||||||
detail: detail,
|
detail: detail,
|
||||||
play: play,
|
play: play,
|
||||||
search: search,
|
search: search,
|
||||||
proxy:proxy
|
proxy:proxy,
|
||||||
|
sniffer:sniffer,
|
||||||
|
isVideo:isVideo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出函数无法简写成下面的形式:
|
||||||
|
|
||||||
|
export default {
|
||||||
|
...DRPY,
|
||||||
|
DRPY
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
// 导出函数对象
|
// 导出函数对象
|
||||||
export default {
|
export default {
|
||||||
init: init,
|
init,
|
||||||
home: home,
|
home,
|
||||||
homeVod: homeVod,
|
homeVod,
|
||||||
category: category,
|
category,
|
||||||
detail: detail,
|
detail,
|
||||||
play: play,
|
play,
|
||||||
search: search,
|
search,
|
||||||
proxy:proxy,
|
proxy,
|
||||||
DRPY:DRPY
|
sniffer,
|
||||||
|
isVideo,
|
||||||
|
DRPY,
|
||||||
}
|
}
|
||||||
2
libs/drpy2.min.js
vendored
2
libs/drpy2.min.js
vendored
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user