@@ -263,7 +263,7 @@ const pre = () => {
263
263
let rule = { } ;
264
264
// @ts -ignore
265
265
let vercode = typeof pdfl === 'function' ? 'drpy3.1' : 'drpy3' ;
266
- const VERSION = `${ vercode } 3.9.50beta21 202400529 ` ;
266
+ const VERSION = `${ vercode } 3.9.50beta24 20240601 ` ;
267
267
/** 已知问题记录
268
268
* 1.影魔的jinjia2引擎不支持 {{fl}}对象直接渲染 (有能力解决的话尽量解决下,支持对象直接渲染字符串转义,如果加了|safe就不转义)[影魔牛逼,最新的文件发现这问题已经解决了]
269
269
* Array.prototype.append = Array.prototype.push; 这种js执行后有毛病,for in 循环列表会把属性给打印出来 (这个大毛病需要重点排除一下)
@@ -853,6 +853,20 @@ const urlencode = (str) => {
853
853
. replace ( / % 2 0 / g, '+' ) ;
854
854
} ;
855
855
856
+ /**
857
+ * url编码,同 encodeURI
858
+ * @param str
859
+ * @returns {string }
860
+ */
861
+ function encodeUrl ( str ) {
862
+ if ( typeof ( encodeURI ) == 'function' ) {
863
+ return encodeURI ( str )
864
+ } else {
865
+ str = ( str + '' ) . toString ( ) ;
866
+ return encodeURIComponent ( str ) . replace ( / % 2 F / g, '/' ) . replace ( / % 3 F / g, '?' ) . replace ( / % 3 A / g, ':' ) . replace ( / % 4 0 / g, '@' ) . replace ( / % 3 D / g, '=' ) . replace ( / % 3 A / g, ':' ) . replace ( / % 2 C / g, ',' ) . replace ( / % 2 B / g, '+' ) . replace ( / % 2 4 / g, '$' ) ;
867
+ }
868
+ }
869
+
856
870
const base64Encode = ( text : string ) => {
857
871
return CryptoJS . enc . Base64 . stringify ( CryptoJS . enc . Utf8 . parse ( text ) ) ;
858
872
} ;
@@ -1248,8 +1262,6 @@ let VODS: any = []; // 一级或者搜索需要的数据列表
1248
1262
let VOD : any = { } ; // 二级的单个数据
1249
1263
let TABS : any = [ ] ; // 二级的自定义线路列表 如: TABS=['道长在线','道长在线2']
1250
1264
let LISTS : any = [ ] ; // 二级的自定义选集播放列表 如: LISTS=[['第1集$http://1.mp4','第2集$http://2.mp4'],['第3集$http://1.mp4','第4集$http://2.mp4']]
1251
- globalThis . encodeUrl = urlencode ;
1252
- globalThis . urlencode = urlencode ;
1253
1265
1254
1266
/**
1255
1267
* 获取链接的query请求转为js的object字典对象
@@ -2048,7 +2060,7 @@ const homeVodParse = (homeVodObj) => {
2048
2060
if ( ! p || typeof p !== 'string' ) return '{}' ;
2049
2061
2050
2062
p = p . trim ( ) ;
2051
- let pp = rule [ '一级' ] . split ( ';' ) ;
2063
+ let pp = rule [ '一级' ] ? rule [ '一级' ] . split ( ';' ) : [ ] ;
2052
2064
2053
2065
if ( p . startsWith ( 'js:' ) ) {
2054
2066
const TYPE = 'home' ;
@@ -2363,7 +2375,7 @@ const searchParse = (searchObj) => {
2363
2375
if ( ! p || typeof p !== 'string' ) return '{}' ;
2364
2376
2365
2377
p = p . trim ( ) ;
2366
- let pp = rule [ '一级' ] . split ( ';' ) ;
2378
+ let pp = rule [ '一级' ] ? rule [ '一级' ] . split ( ';' ) : [ ] ;
2367
2379
let url = searchObj . searchUrl . replaceAll ( '**' , searchObj . wd ) ;
2368
2380
2369
2381
if ( searchObj . pg === 1 && url . includes ( '[' ) && url . includes ( ']' ) && ! url . includes ( '#' ) ) {
@@ -2973,10 +2985,29 @@ function getOriginalJs(js_code){
2973
2985
}
2974
2986
let rsa_private_key = 'MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCqin/jUpqM6+fgYP/oMqj9zcdHMM0mEZXLeTyixIJWP53lzJV2N2E3OP6BBpUmq2O1a9aLnTIbADBaTulTNiOnVGoNG58umBnupnbmmF8iARbDp2mTzdMMeEgLdrfXS6Y3VvazKYALP8EhEQykQVarexR78vRq7ltY3quXx7cgI0ROfZz5Sw3UOLQJ+VoWmwIxu9AMEZLVzFDQN93hzuzs3tNyHK6xspBGB7zGbwCg+TKi0JeqPDrXxYUpAz1cQ/MO+Da0WgvkXnvrry8NQROHejdLVOAslgr6vYthH9bKbsGyNY3H+P12kcxo9RAcVveONnZbcMyxjtF5dWblaernAgMBAAECggEAGdEHlSEPFmAr5PKqKrtoi6tYDHXdyHKHC5tZy4YV+Pp+a6gxxAiUJejx1hRqBcWSPYeKne35BM9dgn5JofgjI5SKzVsuGL6bxl3ayAOu+xXRHWM9f0t8NHoM5fdd0zC3g88dX3fb01geY2QSVtcxSJpEOpNH3twgZe6naT2pgiq1S4okpkpldJPo5GYWGKMCHSLnKGyhwS76gF8bTPLoay9Jxk70uv6BDUMlA4ICENjmsYtd3oirWwLwYMEJbSFMlyJvB7hjOjR/4RpT4FPnlSsIpuRtkCYXD4jdhxGlvpXREw97UF2wwnEUnfgiZJ2FT/MWmvGGoaV/CfboLsLZuQKBgQDTNZdJrs8dbijynHZuuRwvXvwC03GDpEJO6c1tbZ1s9wjRyOZjBbQFRjDgFeWs9/T1aNBLUrgsQL9c9nzgUziXjr1Nmu52I0Mwxi13Km/q3mT+aQfdgNdu6ojsI5apQQHnN/9yMhF6sNHg63YOpH+b+1bGRCtr1XubuLlumKKscwKBgQDOtQ2lQjMtwsqJmyiyRLiUOChtvQ5XI7B2mhKCGi8kZ+WEAbNQcmThPesVzW+puER6D4Ar4hgsh9gCeuTaOzbRfZ+RLn3Aksu2WJEzfs6UrGvm6DU1INn0z/tPYRAwPX7sxoZZGxqML/z+/yQdf2DREoPdClcDa2Lmf1KpHdB+vQKBgBXFCVHz7a8n4pqXG/HvrIMJdEpKRwH9lUQS/zSPPtGzaLpOzchZFyQQBwuh1imM6Te+VPHeldMh3VeUpGxux39/m+160adlnRBS7O7CdgSsZZZ/dusS06HAFNraFDZf1/VgJTk9BeYygX+AZYu+0tReBKSs9BjKSVJUqPBIVUQXAoGBAJcZ7J6oVMcXxHxwqoAeEhtvLcaCU9BJK36XQ/5M67ceJ72mjJC6/plUbNukMAMNyyi62gO6I9exearecRpB/OGIhjNXm99Ar59dAM9228X8gGfryLFMkWcO/fNZzb6lxXmJ6b2LPY3KqpMwqRLTAU/zy+ax30eFoWdDHYa4X6e1AoGAfa8asVGOJ8GL9dlWufEeFkDEDKO9ww5GdnpN+wqLwePWqeJhWCHad7bge6SnlylJp5aZXl1+YaBTtOskC4Whq9TP2J+dNIgxsaF5EFZQJr8Xv+lY9lu0CruYOh9nTNF9x3nubxJgaSid/7yRPfAGnsJRiknB5bsrCvgsFQFjJVs=' ;
2975
2987
let decode_content = '' ;
2988
+ function aes_decrypt ( data ) {
2989
+ let key = CryptoJS . enc . Hex . parse ( "686A64686E780A0A0A0A0A0A0A0A0A0A" ) ;
2990
+ let iv = CryptoJS . enc . Hex . parse ( "647A797964730A0A0A0A0A0A0A0A0A0A" ) ;
2991
+ let encrypted = CryptoJS . AES . decrypt ( {
2992
+ ciphertext : CryptoJS . enc . Base64 . parse ( data )
2993
+ } , key , {
2994
+ iv : iv ,
2995
+ mode : CryptoJS . mode . CBC ,
2996
+ padding : CryptoJS . pad . Pkcs7
2997
+ } ) . toString ( CryptoJS . enc . Utf8 ) ;
2998
+ return encrypted ;
2999
+ }
3000
+ let error_log = false ;
3001
+ function logger ( text ) {
3002
+ if ( error_log ) {
3003
+ log ( text ) ;
3004
+ }
3005
+ }
2976
3006
let decode_funcs = [
2977
- ( text ) => { try { return ungzip ( text ) } catch ( e ) { return '' } } ,
2978
- ( text ) => { try { return base64Decode ( text ) } catch ( e ) { return '' } } ,
2979
- ( text ) => { try { return RSA . decode ( text , rsa_private_key , null ) } catch ( e ) { return '' } } ,
3007
+ ( text ) => { try { return ungzip ( text ) } catch ( e ) { logger ( '非gzip加密' ) ; return '' } } ,
3008
+ ( text ) => { try { return base64Decode ( text ) } catch ( e ) { logger ( '非b64加密' ) ; return '' } } ,
3009
+ ( text ) => { try { return aes_decrypt ( text ) } catch ( e ) { logger ( '非aes加密' ) ; return '' } } ,
3010
+ ( text ) => { try { return RSA . decode ( text , rsa_private_key , null ) } catch ( e ) { logger ( '非rsa加密' ) ; return '' } } ,
2980
3011
]
2981
3012
let func_index = 0
2982
3013
while ( ! current_match . test ( decode_content ) ) {
@@ -3025,7 +3056,9 @@ const init = (ext) => {
3025
3056
let js : any = request ( ext , { method : 'GET' } ) ;
3026
3057
if ( js ) {
3027
3058
js = getOriginalJs ( js ) ;
3028
- eval ( js . replace ( 'var rule' , 'rule' ) ) ;
3059
+ // eval(js.replace('var rule', 'rule'));
3060
+ // eval("(function(){'use strict';"+js.replace('var rule', 'rule')+"})()");
3061
+ eval ( "(function(){" + js . replace ( 'var rule' , 'rule' ) + "})()" ) ;
3029
3062
}
3030
3063
if ( query [ 'type' ] === 'url' && query [ 'params' ] ) {
3031
3064
// 指定type是链接并且传了params支持简写如 ./xx.json
@@ -3036,7 +3069,9 @@ const init = (ext) => {
3036
3069
}
3037
3070
} else {
3038
3071
ext = getOriginalJs ( ext ) ;
3039
- eval ( ext . replace ( 'var rule' , 'rule' ) ) ;
3072
+ // eval(ext.replace('var rule', 'rule'));
3073
+ // eval("(function(){'use strict';"+ext.replace('var rule', 'rule')+"})()");
3074
+ eval ( "(function(){" + ext . replace ( 'var rule' , 'rule' ) + "})()" ) ;
3040
3075
}
3041
3076
}
3042
3077
if ( rule [ '模板' ] && muban . hasOwnProperty ( rule [ '模板' ] ) ) {
@@ -3367,6 +3402,14 @@ const isVideo = (url: string) => {
3367
3402
return result ;
3368
3403
} ;
3369
3404
3405
+ /**
3406
+ * 获取规则
3407
+ * @returns {{} }
3408
+ */
3409
+ function getRule ( key ) {
3410
+ return key ? rule [ key ] || '' : rule
3411
+ }
3412
+
3370
3413
// [重要]防止树摇
3371
3414
const keepUnUse = {
3372
3415
useful : ( ) : void => {
@@ -3390,6 +3433,8 @@ const keepUnUse = {
3390
3433
maoss,
3391
3434
getProxyUrl,
3392
3435
urljoin2,
3436
+ urlencode,
3437
+ encodeUrl,
3393
3438
stringify,
3394
3439
jsp,
3395
3440
jq,
@@ -3420,6 +3465,7 @@ const keepUnUse = {
3420
3465
} ;
3421
3466
3422
3467
export {
3468
+ getRule ,
3423
3469
runMain ,
3424
3470
init ,
3425
3471
home ,
0 commit comments