Add files via upload

pull/2/head
gaotianliuyun 3 years ago committed by GitHub
parent 846c9d00db
commit a29a433035
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

File diff suppressed because it is too large Load Diff

@ -1,12 +1,14 @@
// import 'https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/es6py.js';
// import 'https://code.gitlink.org.cn/api/v1/repos/hjdhnx/dr_py/raw/master/libs/es6py.js';
// import {是否正版,urlDeal,setResult,setResult2,setHomeResult,maoss,urlencode} from 'http://192.168.10.103:5705/libs/es6py.js';
// import 'http://192.168.1.124:5705/libs/es6py.js';
import cheerio from 'https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/cheerio.min.js';
import cheerio from 'https://code.gitlink.org.cn/api/v1/repos/hjdhnx/dr_py/raw/master/libs/cheerio.min.js';
// import cheerio from 'http://192.168.10.103:5705/libs/cheerio.min.js';
import 'https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/crypto-js.js';
import 'https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/drT.js';
import 'https://code.gitlink.org.cn/api/v1/repos/hjdhnx/dr_py/raw/master/libs/crypto-js.js';
import 'https://code.gitlink.org.cn/api/v1/repos/hjdhnx/dr_py/raw/master/libs/drT.js';
import 模板 from 'https://code.gitlink.org.cn/api/v1/repos/hjdhnx/dr_py/raw/master/js/模板.js';
import {gbkTool} from 'https://code.gitlink.org.cn/api/v1/repos/hjdhnx/dr_py/raw/master/libs/gbk.js'
// import 'http://192.168.10.103:5705/libs/drT.js';
// import muban from 'https://gitcode.net/qq_32394351/dr_py/-/raw/master/js/模板.js';
// import muban from 'https://code.gitlink.org.cn/api/v1/repos/hjdhnx/dr_py/raw/master/js/模板.js';
// import muban from 'http://192.168.10.103:5705/admin/view/模板.js';
// const key = 'drpy_zbk';
@ -32,8 +34,28 @@ function init_test(){
console.log("init_test_end");
}
/**
* 执行预处理代码
*/
function pre(){
if(typeof(rule.预处理) === 'string' && rule.预处理 && rule.预处理.trim()){
let code = rule.预处理.trim();
console.log("执行预处理代码:"+code);
if(code.startsWith('js:')){
code = code.replace('js:','');
}
try {
// code里可以进行get 或者 post请求cookie并改变rule.headers 里的cookie
// 直接操作 rule_fetch_params 这个变量 .headers.Cookie
eval(code);
}catch (e) {
console.log('预处理执行失败:'+e.message);
}
}
}
let rule = {};
const VERSION = '3.9.16';
const VERSION = 'drpy1 3.9.41beta1 20230328';
/**
* 1.影魔的jinjia2引擎不支持 {{fl}}对象直接渲染 (有能力解决的话尽量解决下支持对象直接渲染字符串转义,如果加了|safe就不转义)[影魔牛逼最新的文件发现这问题已经解决了]
* Array.prototype.append = Array.prototype.push; 这种js执行后有毛病,for in 循环列表会把属性给打印出来 (这个大毛病需要重点排除一下)
@ -50,6 +72,9 @@ const VERSION = '3.9.16';
adb devices -l
adb logcat -c
adb logcat | grep -i QuickJS
adb logcat -c -b events
adb logcat -c -b main -b events -b radio -b system
adb logcat > 2.log DRPY:E | grep -i QuickJS
* **/
@ -67,7 +92,8 @@ const OCR_RETRY = 3;//ocr验证重试次数
// const OCR_API = 'http://dm.mudery.com:10000';//ocr在线识别接口
// const OCR_API = 'http://192.168.3.239:5705/parse/ocr';//ocr在线识别接口
// const OCR_API = 'http://cms.nokia.press/parse/ocr';//ocr在线识别接口
const OCR_API = 'http://cms.nokia.press:5706/parse/ocr';//ocr在线识别接口
// const OCR_API = 'http://cms.nokia.press:5707/parse/ocr';//ocr在线识别接口
const OCR_API = 'http://drpy.nokia.press:8028/ocr/drpy/text';//ocr在线识别接口
if(typeof(MY_URL)==='undefined'){
var MY_URL; // 全局注入变量,pd函数需要
}
@ -370,11 +396,82 @@ function md5(text) {
return CryptoJS.MD5(text).toString();
}
/**
* 字符串按指定编码
* @param input
* @param encoding
* @returns {*}
*/
function encodeStr(input,encoding){
encoding = encoding||'gbk';
if(encoding.startsWith('gb')){
const strTool = gbkTool();
input = strTool.encode(input);
}
return input
}
/**
* 字符串指定解码
* @param input
* @param encoding
* @returns {*}
*/
function decodeStr(input,encoding){
encoding = encoding||'gbk';
if(encoding.startsWith('gb')){
const strTool = gbkTool();
input = strTool.decode(input);
}
return input
}
function getCryptoJS(){
// return request('https://gitcode.net/qq_32394351/dr_py/-/raw/master/libs/crypto-hiker.js');
// return request('https://code.gitlink.org.cn/api/v1/repos/hjdhnx/dr_py/raw/master/libs/crypto-hiker.js');
return 'console.log("CryptoJS已装载");'
}
/**
* 强制正序算法
* @param lists 待正序列表
* @param key 正序键
* @param option 单个元素处理函数
* @returns {*}
*/
function forceOrder(lists,key,option){
let start = Math.floor(lists.length/2);
let end = Math.min(lists.length-1,start+1);
if(start >= end){
return lists;
}
let first = lists[start];
let second = lists[end];
if(key){
try {
first = first[key];
second = second[key];
}catch (e) {}
}
if(option && typeof(option)==='function'){
try {
first = option(first);
second = option(second);
}catch (e) {}
}
first+='';
second+='';
// console.log(first,second);
if(first.match(/(\d+)/)&&second.match(/(\d+)/)){
let num1 = Number(first.match(/(\d+)/)[1]);
let num2 = Number(second.match(/(\d+)/)[1]);
if (num1 > num2){
lists.reverse();
}
}
return lists
}
let VODS = [];// 一级或者搜索需要的数据列表
let VOD = {};// 二级的单个数据
let TABS = [];// 二级的自定义线路列表 如: TABS=['道长在线','道长在线2']
@ -736,9 +833,12 @@ var OcrApi={
classification:function (img){ // img是byte类型,这里不方便搞啊
let code = '';
try {
let html = request(this.api,{data:{img:img},headers:{'User-Agent':PC_UA},'method':'POST'},true);
html = JSON.parse(html);
code = html.url||'';
// let html = request(this.api,{data:{img:img},headers:{'User-Agent':PC_UA},'method':'POST'},true);
// html = JSON.parse(html);
// code = html.url||'';
log('通过drpy_ocr验证码接口过验证...');
let html = request(OCR_API,{data:{img:img},headers:{'User-Agent':PC_UA},'method':'POST'},true);
code = html||'';
}catch (e) {}
return code
}
@ -888,6 +988,9 @@ function request(url,obj,ocr_flag){
if(rule.headers){
Object.assign(headers,rule.headers);
}
if(!fetch_params){
fetch_params = {};
}
fetch_params.headers = headers;
}
if(!fetch_params.headers.Referer){
@ -905,17 +1008,22 @@ function request(url,obj,ocr_flag){
obj.headers = headers;
}
if(rule.encoding&&rule.encoding!=='utf-8'&&!ocr_flag){
if(!obj.headers.hasOwnProperty('Content-Type')){ // 手动指定了就不管
if(!obj.headers.hasOwnProperty('Content-Type')&&!obj.headers.hasOwnProperty('content-type')){ // 手动指定了就不管
obj.headers["Content-Type"] = 'text/html; charset='+rule.encoding;
}
}
if(typeof(obj.body)!='undefined'&&obj.body&&typeof (obj.body)==='string'){
let data = {};
obj.body.split('&').forEach(it=>{
data[it.split('=')[0]] = it.split('=')[1]
});
obj.data = data;
delete obj.body
// let data = {};
// obj.body.split('&').forEach(it=>{
// data[it.split('=')[0]] = it.split('=')[1]
// });
// obj.data = data;
// delete obj.body
// 传body加 "Content-Type":"application/x-www-form-urlencoded;" 即可post form
if(!obj.headers.hasOwnProperty('Content-Type')&&!obj.headers.hasOwnProperty('content-type')){ // 手动指定了就不管
obj.headers["Content-Type"] = 'application/x-www-form-urlencoded; charset='+rule.encoding;
}
}else if(typeof(obj.body)!='undefined'&&obj.body&&typeof (obj.body)==='object'){
obj.data = obj.body;
delete obj.body
@ -929,7 +1037,7 @@ function request(url,obj,ocr_flag){
}
console.log(JSON.stringify(obj.headers));
// console.log('request:'+url+' obj:'+JSON.stringify(obj));
console.log('request:'+url);
console.log('request:'+url+`|method:${obj.method||'GET'}|body:${obj.body||''}`);
let res = req(url, obj);
let html = res.content||'';
// console.log(html);
@ -956,15 +1064,17 @@ function post(url,obj){
fetch = request;
print = function (data){
data = data||'';
if(typeof(data)!=='string'){
if(typeof(data)=='object'&&Object.keys(data).length>0){
try {
data = JSON.stringify(data);
console.log(data);
}catch (e) {
console.log('print:'+e.message)
}
}
if(typeof(data)!=='string'){
// console.log('print:'+e.message);
console.log(typeof(data)+':'+data.length);
return
}
}else if(typeof(data)=='object'&&Object.keys(data).length<1){
console.log('null object');
}else{
console.log(data);
}
@ -1011,10 +1121,19 @@ function getHtml(url){
}
let cookie = getItem(RULE_CK,'');
if(cookie){
// log('有cookie:'+cookie);
if(obj.headers && ! Object.keys(obj.headers).map(it=>it.toLowerCase()).includes('cookie')){
log('历史无cookie,新增过验证后的cookie');
obj.headers['Cookie'] = cookie;
}else if(obj.headers && obj.headers.cookie && obj.headers.cookie!==cookie){
obj.headers['Cookie'] = cookie;
log('历史有小写过期的cookie,更新过验证后的cookie');
}else if(obj.headers && obj.headers.Cookie && obj.headers.Cookie!==cookie){
obj.headers['Cookie'] = cookie;
log('历史有大写过期的cookie,更新过验证后的cookie');
}else if(!obj.headers){
obj.headers = {Cookie:cookie};
log('历史无headers,更新过验证后的含cookie的headers');
}
}
let html = getCode(url,obj);
@ -1106,8 +1225,12 @@ function homeParse(homeObj) {
* @returns {*}
*/
function getPP(p, pn, pp, ppn){
try {
let ps = p[pn] === '*' && pp.length > ppn ?pp[ppn]:p[pn]
return ps
}catch (e) {
return ''
}
}
/**
@ -1165,25 +1288,27 @@ function homeVodParse(homeVodObj){
if (homeVodObj.double) {
let items = _pdfa(html, p0);
// console.log(items.length);
let p1 = getPP(p,1,pp,0);
let p2 = getPP(p,2,pp,1);
let p3 = getPP(p,3,pp,2);
let p4 = getPP(p,4,pp,3);
let p5 = getPP(p,5,pp,4);
let p6 = getPP(p,6,pp,5);
for (let item of items) {
// console.log(p[1]);
let items2 = _pdfa(item, p[1]);
let items2 = _pdfa(item, p1);
// console.log(items2.length);
for (let item2 of items2) {
try {
let p2 = getPP(p,2,pp,1);
let title = _pdfh(item2, p2);
let img = '';
try {
let p3 = getPP(p,3,pp,2);
img = _pd(item2, p3);
} catch (e) {}
let desc = '';
try {
let p4 = getPP(p,4,pp,3);
desc = _pdfh(item2, p4);
}catch (e) {}
let p5 = getPP(p,5,pp,4);
let links = [];
for (let _p5 of p5.split('+')) {
let link = !homeVodObj.detailUrl ? _pd(item2, _p5, MY_URL) : _pdfh(item2, _p5);
@ -1191,7 +1316,6 @@ function homeVodParse(homeVodObj){
}
let content;
if(p.length > 6 && p[6]){
let p6 = getPP(p,6,pp,5);
content = _pdfh(item2, p6);
} else{
content = '';
@ -1221,21 +1345,22 @@ function homeVodParse(homeVodObj){
} else {
let items = _pdfa(html, p0);
let p1 = getPP(p,1,pp,1);
let p2 = getPP(p,2,pp,2);
let p3 = getPP(p,3,pp,3);
let p4 = getPP(p,4,pp,4);
let p5 = getPP(p,5,pp,5);
for (let item of items) {
try {
let p1 = getPP(p,1,pp,1);
let title = _pdfh(item, p1);
let img = '';
try {
let p2 = getPP(p,2,pp,2);
img = _pd(item, p2, MY_URL);
} catch (e) {}
let desc = '';
try {
let p3 = getPP(p,3,pp,3);
desc = _pdfh(item, p3);
}catch (e) {}
let p4 = getPP(p,4,pp,4);
let links = [];
for (let _p5 of p4.split('+')) {
let link = !homeVodObj.detailUrl ? _pd(item, _p5, MY_URL) : _pdfh(item, _p5);
@ -1243,7 +1368,6 @@ function homeVodParse(homeVodObj){
}
let content;
if(p.length > 5 && p[5]){
let p5 = getPP(p,5,pp,5);
content = _pdfh(item, p5);
}else{
content = ''
@ -1283,6 +1407,9 @@ function homeVodParse(homeVodObj){
}
});
}
if(d.length>0){
print(d.slice(0,2));
}
return JSON.stringify({
list:d
})
@ -1302,6 +1429,11 @@ function categoryParse(cateObj) {
let d = [];
// let url = cateObj.url.replaceAll('fyclass', cateObj.tid).replaceAll('fypage', cateObj.pg);
let url = cateObj.url.replaceAll('fyclass', cateObj.tid);
if(cateObj.pg === 1 && url.includes('[')&&url.includes(']')){
url = url.split('[')[1].split(']')[0];
}else if(cateObj.pg > 1 && url.includes('[')&&url.includes(']')){
url = url.split('[')[0];
}
if(rule.filter_url){
if(!/fyfilter/.test(url)){
if(!url.endsWith('&')&&!rule.filter_url.startsWith('&')){
@ -1349,11 +1481,7 @@ function categoryParse(cateObj) {
url = url.replaceAll('fypage',cateObj.pg);
}
}
if(cateObj.pg === 1 && url.includes('[')&&url.includes(']')){
url = url.split('[')[1].split(']')[0];
}else if(cateObj.pg > 1 && url.includes('[')&&url.includes(']')){
url = url.split('[')[0];
}
MY_URL = url;
// setItem('MY_URL',MY_URL);
console.log(MY_URL);
@ -1418,13 +1546,27 @@ function categoryParse(cateObj) {
});
}
// print(d);
return d.length<1?'{}':JSON.stringify({
if(d.length>0){
print(d.slice(0,2));
}
let pagecount = 0;
if(rule.pagecount && typeof(rule.pagecount) === 'object' && rule.pagecount.hasOwnProperty(MY_CATE)){
print(`MY_CATE:${MY_CATE},pagecount:${JSON.stringify(rule.pagecount)}`);
pagecount = parseInt(rule.pagecount[MY_CATE]);
}
let nodata = {
list:[{vod_name:'无数据,防无限请求',vod_id:'no_data',vod_remarks:'不要点,会崩的',vod_pic:'https://ghproxy.com/https://raw.githubusercontent.com/hjdhnx/dr_py/main/404.jpg'}],
total:1,pagecount:1,page:1,limit:1
};
let vod = d.length<1?JSON.stringify(nodata):JSON.stringify({
'page': parseInt(cateObj.pg),
'pagecount': 999,
'pagecount': pagecount||999,
'limit': 20,
'total': 999,
'list': d,
});
// print(vod);
return vod
}
/**
@ -1471,7 +1613,40 @@ function searchParse(searchObj) {
p0 = p0.replace(/^(jsp:|json:|jq:)/,'');
// print('1381 p0:'+p0);
try {
let html = getHtml(MY_URL);
let req_method = MY_URL.split(';').length>1?MY_URL.split(';')[1].toLowerCase():'get';
let html;
if(req_method==='post'){
let rurls = MY_URL.split(';')[0].split('#')
let rurl = rurls[0]
let params = rurls.length > 1 ?rurls[1]:'';
print(`post=》rurl:${rurl},params:${params}`);
// let new_dict = {};
// let new_tmp = params.split('&');
// new_tmp.forEach(i=>{
// new_dict[i.split('=')[0]] = i.split('=')[1];
// });
// html = post(rurl,{body:new_dict});
let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
let postData = {body:params};
Object.assign(_fetch_params,postData);
html = post(rurl,_fetch_params);
}else if(req_method==='postjson'){
let rurls = MY_URL.split(';')[0].split('#')
let rurl = rurls[0]
let params = rurls.length > 1 ?rurls[1]:'';
print(`postjson-》rurl:${rurl},params:${params}`);
try{
params = JSON.parse(params);
}catch (e) {
params = '{}'
}
let _fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
let postData = {body:params};
Object.assign(_fetch_params,postData);
html = post(rurl,_fetch_params);
}else{
html = getHtml(MY_URL);
}
if (html) {
if(/系统安全验证|输入验证码/.test(html)){
let cookie = verifyCode(MY_URL);
@ -1491,24 +1666,24 @@ function searchParse(searchObj) {
if(is_json){
// console.log(html);
html = dealJson(html);
// console.log(JSON.stringify(html));
}
console.log(JSON.stringify(html));
console.log(html);
// console.log(html);
let list = _pdfa(html, p0);
// print(list.length);
// print(list);
list.forEach(it => {
let p1 = getPP(p, 1, pp, 1);
let p2 = getPP(p, 2, pp, 2);
let p3 = getPP(p, 3, pp, 3);
let p4 = getPP(p, 4, pp, 4);
let p5 = getPP(p,5,pp,5);
list.forEach(it => {
let links = p4.split('+').map(_p4=>{
return !rule.detailUrl?_pd(it, _p4,MY_URL):_pdfh(it, _p4)
});
let link = links.join('$');
let content;
if(p.length > 5 && p[5]){
let p5 = getPP(p,5,pp,5);
content = _pdfh(it, p5);
}else{
content = '';
@ -1558,6 +1733,7 @@ function searchParse(searchObj) {
* @returns {string}
*/
function detailParse(detailObj){
let t1 = (new Date()).getTime();
fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
let orId = detailObj.orId;
let vod_name = '片名';
@ -1589,7 +1765,15 @@ function detailParse(detailObj){
let tab_exclude = detailObj.tab_exclude;
let html = detailObj.html||'';
MY_URL = url;
console.log(MY_URL);
if(detailObj.二级访问前){
try {
print(`尝试在二级访问前执行代码:${detailObj.二级访问前}`);
eval(detailObj.二级访问前.trim().replace('js:',''));
}catch (e) {
print(`二级访问前执行代码出现错误:${e.message}`)
}
}
// console.log(MY_URL);
// setItem('MY_URL',MY_URL);
if(p==='*'){
vod.vod_play_from = '道长在线';
@ -1605,26 +1789,41 @@ function detailParse(detailObj){
vod = VOD;
console.log(JSON.stringify(vod));
}else if(p&&typeof(p)==='object'){
let tt1 = (new Date()).getTime();
if(!html){
html = getHtml(MY_URL);
}
let _impJQP = true;
print(`二级${MY_URL}仅获取源码耗时:${(new Date()).getTime()-tt1}毫秒`);
let _impJQP = false;
let _ps;
if(p.is_json){
print('二级是json');
_ps = parseTags.json;
html = dealJson(html);
_impJQP = false;
}else if(p.is_jsp){
print('二级是jsp');
_ps = parseTags.jsp;
}else if(p.is_jq){
print('二级是jq');
_ps = parseTags.jq;
}else{
print('二级默认jq');
_ps = parseTags.jq;
// print('二级默认jsp');
// _ps = parseTags.jsp;
}
if(_ps === parseTags.jq){ // jquery解析提前load(html)
_impJQP = true;
}
if (_impJQP) {
let ttt1 = (new Date()).getTime();
let c$ = cheerio.load(html);
html = { rr: c$, ele: c$('html')[0] }
// print(`二级${MY_URL}仅c$源码耗时:${(new Date()).getTime()-ttt1}毫秒`);
html = { rr: c$, ele: c$('html')[0] };
print(`二级${MY_URL}仅cheerio.load源码耗时:${(new Date()).getTime()-ttt1}毫秒`);
}
let tt2 = (new Date()).getTime();
print(`二级${MY_URL}获取并装载源码耗时:${tt2-tt1}毫秒`);
_pdfa = _ps.pdfa;
_pdfh = _ps.pdfh;
_pd = _ps.pd;
@ -1678,7 +1877,7 @@ function detailParse(detailObj){
if(p.tabs){
if(p.tabs.startsWith('js:')){
print('开始执行tabs代码:'+p.tabs);
if(html&&typeof (html)!=='string'){
if(html&&_impJQP&&typeof (html)!=='string'){
try { // 假装是jq的对象拿来转换一下字符串,try为了防止json的情况报错
html = html.rr(html.ele).toString();
}catch (e) {}
@ -1693,12 +1892,21 @@ function detailParse(detailObj){
console.log(vHeader.length);
let tab_text = p.tab_text||'body&&Text';
// print('tab_text:'+tab_text);
let new_map = {};
for(let v of vHeader){
let v_title = _pdfh(v,tab_text).trim();
console.log(v_title);
if(tab_exclude&& (new RegExp(tab_exclude)).test(v_title)){
continue;
}
if(!new_map.hasOwnProperty(v_title)){
new_map[v_title] = 1;
}else{
new_map[v_title] += 1;
}
if(new_map[v_title]>1){
v_title+=Number(new_map[v_title]-1);
}
playFrom.push(v_title);
}
}
@ -1715,7 +1923,7 @@ function detailParse(detailObj){
if(p.lists.startsWith('js:')){
print('开始执行lists代码:'+p.lists);
try {
if(html&&typeof (html)!=='string'){
if(html&&_impJQP&&typeof (html)!=='string'){
// 假装是jq的对象拿来转换一下字符串,try为了防止json的情况报错
try {
html = html.rr(html.ele).toString();
@ -1751,7 +1959,10 @@ function detailParse(detailObj){
let tab_ext = p.tabs.split(';').length > 1 && !is_tab_js ? p.tabs.split(';')[1] : '';
let p1 = p.lists.replaceAll('#idv', tab_name).replaceAll('#id', i);
tab_ext = tab_ext.replaceAll('#idv', tab_name).replaceAll('#id', i);
console.log(p1);
// 测试jsp提速
// console.log(p1);
// p1 = p1.replace(':eq(0)',',0').replace(' ','&&');
// console.log(p1);
// console.log(html);
let vodList = [];
try {
@ -1765,13 +1976,26 @@ function detailParse(detailObj){
let tabName = tab_ext?_pdfh(html, tab_ext):tab_name;
console.log(tabName);
// console.log('cheerio解析Text');
vodList.forEach(it=>{
// 请注意,这里要固定pdfh解析body&&Text,不需要下划线,没写错
// new_vod_list.push(pdfh(it,'body&&Text')+'$'+_pd(it,'a&&href',MY_URL));
// new_vod_list.push(cheerio.load(it).text()+'$'+_pd(it,'a&&href',MY_URL));
// 此处存在性能问题: pt版2000集需要650毫秒,俊版1300毫秒 特么的优化不动 主要后面定位url的我拿他没法
// 主要性能问题在于 _pd(it, list_url, MY_URL)
let tt1 = (new Date()).getTime();
// vodList.forEach((it,idex)=>{
// // 请注意,这里要固定pdfh解析body&&Text,不需要下划线,没写错
// // new_vod_list.push(pdfh(it,'body&&Text')+'$'+_pd(it,'a&&href',MY_URL));
// // new_vod_list.push(cheerio.load(it).text()+'$'+_pd(it,'a&&href',MY_URL));
// // new_vod_list.push(_pdfh(it, list_text).trim() + '$' + _pd(it, list_url, MY_URL));
// // new_vod_list.push(_pdfh(it, list_text).trim() + '$' +idex);
// // new_vod_list.push(idex + '$' +_pdfh(it, list_url));
// new_vod_list.push(_pdfh(it, list_text).trim() + '$' +_pd(it, list_url,MY_URL));
// });
if(vodList.length>0){
for(let i=0;i<vodList.length;i++){
let it = vodList[i];
new_vod_list.push(_pdfh(it, list_text).trim() + '$' +_pd(it, list_url,MY_URL));
});
}
new_vod_list = forceOrder(new_vod_list,'',x=>x.split('$')[0]);
console.log(`drpy影响性能代码共计列表数循环次数:${vodList.length},耗时:${(new Date()).getTime()-tt1}毫秒`);
}
let vlist = new_vod_list.join('#');
vod_tab_list.push(vlist);
}
@ -1783,9 +2007,11 @@ function detailParse(detailObj){
if(rule.图片来源 && vod.vod_pic && vod.vod_pic.startsWith('http')){
vod.vod_pic = vod.vod_pic + rule.图片来源;
}
if(!vod.vod_id){
if(!vod.vod_id||(vod_id.includes('$')&&vod.vod_id!==vod_id)){
vod.vod_id = vod_id;
}
let t2 = (new Date()).getTime();
console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`);
// print(vod);
return JSON.stringify({
list: [vod]
@ -1886,13 +2112,14 @@ function playParse(playObj){
console.log('init');
try {
// make shared jsContext happy muban不能import,不然会造成换源继承后变量被篡改
if (typeof (globalThis.mubanJs) === 'undefined') {
let mubanJs = request('https://gitcode.net/qq_32394351/dr_py/-/raw/master/js/模板.js', { 'User-Agent': MOBILE_UA });
mubanJs = mubanJs.replace('export default', '(function() {return muban;}()) // export default');
// console.log(mubanJs);
globalThis.mubanJs = mubanJs;
}
let muban = eval(globalThis.mubanJs);
// if (typeof (globalThis.mubanJs) === 'undefined') {
// let mubanJs = request('https://code.gitlink.org.cn/api/v1/repos/hjdhnx/dr_py/raw/master/js/模板.js', { 'User-Agent': MOBILE_UA });
// mubanJs = mubanJs.replace('export default', '(function() {return muban;}()) // export default');
// // console.log(mubanJs);
// globalThis.mubanJs = mubanJs;
// }
// let muban = eval(globalThis.mubanJs);
let muban = 模板.getMubans();
if (typeof ext == 'object'){
rule = ext;
} else if (typeof ext == 'string') {
@ -1901,10 +2128,10 @@ function playParse(playObj){
if (js){
eval(js.replace('var rule', 'rule'));
}
}
} else {
eval(ext.replace('var rule', 'rule'));
}
}
if (rule.模板 && muban.hasOwnProperty(rule.模板)) {
print('继承模板:'+rule.模板);
rule = Object.assign(muban[rule.模板], rule);
@ -1925,6 +2152,7 @@ function playParse(playObj){
rule.searchUrl = rule.searchUrl||'';
rule.homeUrl = rule.host&&rule.homeUrl?urljoin(rule.host,rule.homeUrl):(rule.homeUrl||rule.host);
rule.detailUrl = rule.host&&rule.detailUrl?urljoin(rule.host,rule.detailUrl):rule.detailUrl;
rule.二级访问前 = rule.二级访问前||'';
if(rule.url.includes('[')&&rule.url.includes(']')){
let u1 = rule.url.split('[')[0]
let u2 = rule.url.split('[')[1].split(']')[0]
@ -1936,8 +2164,10 @@ function playParse(playObj){
rule.timeout = rule.timeout||5000;
rule.encoding = rule.编码||rule.encoding||'utf-8';
rule.search_encoding = rule.搜索编码||rule.search_encoding||'';
rule.图片来源 = rule.图片来源||'';
rule.play_json = rule.hasOwnProperty('play_json')?rule.play_json:[];
rule.pagecount = rule.hasOwnProperty('pagecount')?rule.pagecount:{};
if(rule.headers && typeof(rule.headers) === 'object'){
try {
let header_keys = Object.keys(rule.headers);
@ -1958,6 +2188,7 @@ function playParse(playObj){
rule_fetch_params = {'headers': rule.headers||false, 'timeout': rule.timeout, 'encoding': rule.encoding};
oheaders = rule.headers||{};
RKEY = typeof(key)!=='undefined'&&key?key:'drpy_' + (rule.title || rule.host);
pre(); // 预处理
init_test();
}catch (e) {
console.log('init_test发生错误:'+e.message);
@ -2048,6 +2279,7 @@ function detail(vod_url) {
orId: orId,
url:url,
二级:rule.二级,
二级访问前:rule.二级访问前,
detailUrl:detailUrl,
fyclass:fyclass,
tab_exclude:rule.tab_exclude,
@ -2078,6 +2310,15 @@ function play(flag, id, flags) {
* @returns {string}
*/
function search(wd, quick) {
if(rule.search_encoding){
if(rule.search_encoding.toLowerCase()!=='utf-8'){
// 按搜索编码进行编码
wd = encodeStr(wd,rule.search_encoding);
}
}else if(rule.encoding && rule.encoding.toLowerCase()!=='utf-8'){
// 按全局编码进行编码
wd = encodeStr(wd,rule.encoding);
}
let searchObj = {
searchUrl: rule.searchUrl,
搜索: rule.搜索,

2
lib/drpy.min.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

2
lib/drpy2.min.js vendored

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save