mirror of
https://github.com/qist/tvbox.git
synced 2025-10-26 17:52:20 +00:00
Add files via upload
This commit is contained in:
395
lib/drpy.js
395
lib/drpy.js
@@ -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)
|
||||
// console.log('print:'+e.message);
|
||||
console.log(typeof(data)+':'+data.length);
|
||||
return
|
||||
}
|
||||
}
|
||||
if(typeof(data)!=='string'){
|
||||
console.log(typeof(data)+':'+data.length);
|
||||
}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){
|
||||
let ps = p[pn] === '*' && pp.length > ppn ?pp[ppn]:p[pn]
|
||||
return ps
|
||||
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);
|
||||
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 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 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));
|
||||
// new_vod_list.push(_pdfh(it, list_text).trim() + '$' + _pd(it, list_url, MY_URL));
|
||||
new_vod_list.push(_pdfh(it, list_text).trim() + '$' + _pd(it, list_url, 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,9 +2128,9 @@ function playParse(playObj){
|
||||
if (js){
|
||||
eval(js.replace('var rule', 'rule'));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
eval(ext.replace('var rule', 'rule'));
|
||||
} else {
|
||||
eval(ext.replace('var rule', 'rule'));
|
||||
}
|
||||
}
|
||||
if (rule.模板 && muban.hasOwnProperty(rule.模板)) {
|
||||
print('继承模板:'+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.搜索,
|
||||
|
||||
Reference in New Issue
Block a user