Skip to content
This repository was archived by the owner on Jul 8, 2024. It is now read-only.

Commit 412efab

Browse files
committed
增加辅助嗅探接口
1 parent 8e38911 commit 412efab

File tree

6 files changed

+194
-26
lines changed

6 files changed

+194
-26
lines changed

doc/写源教程.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,20 @@ var rule = {
9494
proxy_rule:`js:
9595
log(input);
9696
input = [200,'text;plain','hello drpy']
97-
`
97+
`,
98+
//是否启用辅助嗅探: 1,0
99+
sniffer:1,
100+
// 辅助嗅探规则
101+
isVideo:"http((?!http).){26,}\\.(m3u8|mp4|flv|avi|mkv|wmv|mpg|mpeg|mov|ts|3gp|rm|rmvb|asf|m4a|mp3|wma)",
102+
// 辅助嗅探规则js写法
103+
isVideo:`js:
104+
log(input);
105+
if(/m3u8/.test(input)){
106+
input = true
107+
}else{
108+
input = false
109+
}
110+
`,
98111
}
99112
```
100113
模板继承写法

js/version.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
3.9.46beta17
1+
3.9.46beta18

libs/drpy.js

Lines changed: 88 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ function pre(){
5555
}
5656

5757
let rule = {};
58-
const VERSION = 'drpy1 3.9.46beta12 20230709';
58+
const VERSION = 'drpy1 3.9.46beta18 20230711';
5959
/** 已知问题记录
6060
* 1.影魔的jinjia2引擎不支持 {{fl}}对象直接渲染 (有能力解决的话尽量解决下,支持对象直接渲染字符串转义,如果加了|safe就不转义)[影魔牛逼,最新的文件发现这问题已经解决了]
6161
* Array.prototype.append = Array.prototype.push; 这种js执行后有毛病,for in 循环列表会把属性给打印出来 (这个大毛病需要重点排除一下)
@@ -2141,6 +2141,32 @@ function proxyParse(proxyObj){
21412141
}
21422142
}
21432143

2144+
/**
2145+
* 辅助嗅探解析规则
2146+
* @param isVideoObj
2147+
* @returns {boolean}
2148+
*/
2149+
function isVideoParse(isVideoObj){
2150+
var input = isVideoObj.url;
2151+
if(!isVideoObj.t){ // t为假代表默认传的正则字符串
2152+
let re_matcher = new RegExp(isVideoObj.isVideo,'i'); // /g匹配多个,/i不区分大小写,/m匹配多行
2153+
return re_matcher.test(input);
2154+
}else{
2155+
// 执行js
2156+
try {
2157+
eval(isVideoObj.isVideo);
2158+
if(typeof(input)==='boolean'){
2159+
return input
2160+
}else{
2161+
return false
2162+
}
2163+
}catch (e) {
2164+
log('执行嗅探规则发生错误:'+e.message);
2165+
return false
2166+
}
2167+
}
2168+
}
2169+
21442170
/**
21452171
* js源预处理特定返回对象中的函数
21462172
* @param ext
@@ -2216,6 +2242,10 @@ function proxyParse(proxyObj){
22162242
rule.play_json = rule.hasOwnProperty('play_json')?rule.play_json:[];
22172243
rule.pagecount = rule.hasOwnProperty('pagecount')?rule.pagecount:{};
22182244
rule.proxy_rule = rule.hasOwnProperty('proxy_rule')?rule.proxy_rule:'';
2245+
rule.sniffer = rule.hasOwnProperty('sniffer')?rule.sniffer:'';
2246+
rule.sniffer = !!(rule.sniffer && rule.sniffer!=='0' && rule.sniffer!=='false');
2247+
2248+
rule.isVideo = rule.hasOwnProperty('isVideo')?rule.isVideo:'';
22192249
if(rule.headers && typeof(rule.headers) === 'object'){
22202250
try {
22212251
let header_keys = Object.keys(rule.headers);
@@ -2398,6 +2428,39 @@ function proxy(params){
23982428
return proxyParse(proxyObj)
23992429
}
24002430

2431+
/**
2432+
* 是否启用辅助嗅探功能,启用后可以根据isVideo函数进行手动识别为视频的链接地址。默认为false
2433+
* @returns {*|boolean|boolean}
2434+
*/
2435+
function sniffer(){
2436+
let enable_sniffer = rule.sniffer || false;
2437+
if(enable_sniffer){
2438+
log('准备执行辅助嗅探代理规则:\n'+rule.isVideo);
2439+
}
2440+
return enable_sniffer
2441+
}
2442+
2443+
/**
2444+
* 启用辅助嗅探功能后根据次函数返回的值识别地址是否为视频,返回true/false
2445+
* @param url
2446+
*/
2447+
function isVideo(url){
2448+
let t = 0;
2449+
if(rule.isVideo &&rule.isVideo.trim()){
2450+
rule.isVideo = rule.isVideo.trim();
2451+
}
2452+
if(rule.isVideo.startsWith(':js')){
2453+
rule.isVideo = rule.isVideo.replace(':js','');
2454+
t = 1;
2455+
}
2456+
let isVideoObj = {
2457+
url:url,
2458+
isVideo:rule.isVideo,
2459+
t:t,
2460+
};
2461+
return isVideoParse(isVideoObj)
2462+
}
2463+
24012464
function DRPY(){//导出函数
24022465
return {
24032466
init: init,
@@ -2407,19 +2470,33 @@ function DRPY(){//导出函数
24072470
detail: detail,
24082471
play: play,
24092472
search: search,
2410-
proxy:proxy
2473+
proxy:proxy,
2474+
sniffer:sniffer,
2475+
isVideo:isVideo
24112476
}
24122477
}
24132478

2479+
/**
2480+
* 导出函数无法简写成下面的形式:
2481+
2482+
export default {
2483+
...DRPY,
2484+
DRPY
2485+
}
2486+
2487+
*/
2488+
24142489
// 导出函数对象
24152490
export default {
2416-
init: init,
2417-
home: home,
2418-
homeVod: homeVod,
2419-
category: category,
2420-
detail: detail,
2421-
play: play,
2422-
search: search,
2423-
proxy:proxy,
2424-
DRPY:DRPY
2491+
init,
2492+
home,
2493+
homeVod,
2494+
category,
2495+
detail,
2496+
play,
2497+
search,
2498+
proxy,
2499+
sniffer,
2500+
isVideo,
2501+
DRPY,
24252502
}

libs/drpy.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

libs/drpy2.js

Lines changed: 89 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ function pre(){
4141

4242
let rule = {};
4343
let vercode = typeof(pdfl) ==='function'?'drpy2.1':'drpy2';
44-
const VERSION = vercode+' 3.9.46beta12 20230709';
44+
const VERSION = vercode+' 3.9.46beta18 20230711';
4545
/** 已知问题记录
4646
* 1.影魔的jinjia2引擎不支持 {{fl}}对象直接渲染 (有能力解决的话尽量解决下,支持对象直接渲染字符串转义,如果加了|safe就不转义)[影魔牛逼,最新的文件发现这问题已经解决了]
4747
* Array.prototype.append = Array.prototype.push; 这种js执行后有毛病,for in 循环列表会把属性给打印出来 (这个大毛病需要重点排除一下)
@@ -2005,6 +2005,32 @@ function proxyParse(proxyObj){
20052005
}
20062006
}
20072007

2008+
/**
2009+
* 辅助嗅探解析规则
2010+
* @param isVideoObj
2011+
* @returns {boolean}
2012+
*/
2013+
function isVideoParse(isVideoObj){
2014+
var input = isVideoObj.url;
2015+
if(!isVideoObj.t){ // t为假代表默认传的正则字符串
2016+
let re_matcher = new RegExp(isVideoObj.isVideo,'i'); // /g匹配多个,/i不区分大小写,/m匹配多行
2017+
return re_matcher.test(input);
2018+
}else{
2019+
// 执行js
2020+
try {
2021+
eval(isVideoObj.isVideo);
2022+
if(typeof(input)==='boolean'){
2023+
return input
2024+
}else{
2025+
return false
2026+
}
2027+
}catch (e) {
2028+
log('执行嗅探规则发生错误:'+e.message);
2029+
return false
2030+
}
2031+
}
2032+
}
2033+
20082034
/**
20092035
* js源预处理特定返回对象中的函数
20102036
* @param ext
@@ -2083,6 +2109,10 @@ function init(ext) {
20832109
rule.play_json = rule.hasOwnProperty('play_json')?rule.play_json:[];
20842110
rule.pagecount = rule.hasOwnProperty('pagecount')?rule.pagecount:{};
20852111
rule.proxy_rule = rule.hasOwnProperty('proxy_rule')?rule.proxy_rule:'';
2112+
rule.sniffer = rule.hasOwnProperty('sniffer')?rule.sniffer:'';
2113+
rule.sniffer = !!(rule.sniffer && rule.sniffer!=='0' && rule.sniffer!=='false');
2114+
2115+
rule.isVideo = rule.hasOwnProperty('isVideo')?rule.isVideo:'';
20862116
if(rule.headers && typeof(rule.headers) === 'object'){
20872117
try {
20882118
let header_keys = Object.keys(rule.headers);
@@ -2278,6 +2308,40 @@ function proxy(params){
22782308
return proxyParse(proxyObj)
22792309
}
22802310

2311+
2312+
/**
2313+
* 是否启用辅助嗅探功能,启用后可以根据isVideo函数进行手动识别为视频的链接地址。默认为false
2314+
* @returns {*|boolean|boolean}
2315+
*/
2316+
function sniffer(){
2317+
let enable_sniffer = rule.sniffer || false;
2318+
if(enable_sniffer){
2319+
log('准备执行辅助嗅探代理规则:\n'+rule.isVideo);
2320+
}
2321+
return enable_sniffer
2322+
}
2323+
2324+
/**
2325+
* 启用辅助嗅探功能后根据次函数返回的值识别地址是否为视频,返回true/false
2326+
* @param url
2327+
*/
2328+
function isVideo(url){
2329+
let t = 0;
2330+
if(rule.isVideo &&rule.isVideo.trim()){
2331+
rule.isVideo = rule.isVideo.trim();
2332+
}
2333+
if(rule.isVideo.startsWith(':js')){
2334+
rule.isVideo = rule.isVideo.replace(':js','');
2335+
t = 1;
2336+
}
2337+
let isVideoObj = {
2338+
url:url,
2339+
isVideo:rule.isVideo,
2340+
t:t,
2341+
};
2342+
return isVideoParse(isVideoObj)
2343+
}
2344+
22812345
function DRPY(){//导出函数
22822346
return {
22832347
init: init,
@@ -2287,19 +2351,33 @@ function DRPY(){//导出函数
22872351
detail: detail,
22882352
play: play,
22892353
search: search,
2290-
proxy:proxy
2354+
proxy:proxy,
2355+
sniffer:sniffer,
2356+
isVideo:isVideo
22912357
}
22922358
}
22932359

2360+
/**
2361+
* 导出函数无法简写成下面的形式:
2362+
2363+
export default {
2364+
...DRPY,
2365+
DRPY
2366+
}
2367+
2368+
*/
2369+
22942370
// 导出函数对象
22952371
export default {
2296-
init: init,
2297-
home: home,
2298-
homeVod: homeVod,
2299-
category: category,
2300-
detail: detail,
2301-
play: play,
2302-
search: search,
2303-
proxy:proxy,
2304-
DRPY:DRPY
2372+
init,
2373+
home,
2374+
homeVod,
2375+
category,
2376+
detail,
2377+
play,
2378+
search,
2379+
proxy,
2380+
sniffer,
2381+
isVideo,
2382+
DRPY,
23052383
}

libs/drpy2.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)