Add files via upload

This commit is contained in:
潇洒 2024-06-29 23:12:13 +08:00 committed by GitHub
parent 736b8b89dc
commit 943c52f759
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 268 additions and 390 deletions

View File

@ -3,26 +3,23 @@ muban.vfed.二级.desc = '.fed-col-md3:eq(3)&&Text;;;.fed-col-md6--span:eq(0)&&T
muban.vfed.二级.tabs = '.nav-tabs&&li';
muban.vfed.二级.lists = '.myui-content__list:eq(#id)&&li';
var rule = {
title:'58动漫', // 原"幻听网听书"网站 已更名为 "58动漫"
模板:'vfed',
host:'http://www.ting38.com',
// url:'/ting/fyclass-fypage.html',
url:'/search.php?page=fypage&searchtype=5&tid=fyclassfyfilter',
filterable:1,//是否启用分类筛选,
filter_url:'&order={{fl.by}}&area={{fl.area}}&year={{fl.year}}',
filter:{
"1":[{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2024","v":"2024"},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"more","v":"more"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hit"},{"n":"推荐","v":"commend"}]}],
"2":[{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2024","v":"2024"},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"more","v":"more"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hit"},{"n":"推荐","v":"commend"}]}],
"3":[{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2024","v":"2024"},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"more","v":"more"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hit"},{"n":"推荐","v":"commend"}]}],
"4":[{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"大陆","v":"大陆"},{"n":"香港","v":"香港"},{"n":"台湾","v":"台湾"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"欧美","v":"欧美"},{"n":"泰国","v":"泰国"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2024","v":"2024"},{"n":"2023","v":"2023"},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"more","v":"more"}]},{"key":"by","name":"排序","value":[{"n":"时间","v":"time"},{"n":"人气","v":"hit"},{"n":"推荐","v":"commend"}]}]
title: '58动漫[漫]',
模板: 'vfed',
host: 'http://www.ting38.com',
url: '/search.php?page=fypage&searchtype=5&tid=fyclassfyfilter',
class_parse: '.fed-pops-navbar&&li;a&&Text;a&&href;.*/(.*?).html',
play_parse: true,
lazy: "js:var html=JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);var url=html.url;if(html.encrypt=='1'){url=unescape(url)}else if(html.encrypt=='2'){url=unescape(base64Decode(url))}if(/m3u8|mp4/.test(url)){input=url}else{input}",
limit: 6,
filterable: 1,//是否启用分类筛选,
filter_url: '&order={{fl.by}}&area={{fl.area}}&year={{fl.year}}',
filter: 'H4sIAAAAAAAAA+2TzUrDQBSF32XWWWTSX/sq0kXUAYsmhVCFULKSutJURAzFghu1EQoGLMWmtE+TjOYtzM9k7gU37pPdnO/MvTN3DjMmlPQOx+SM2aRHbKZbRCGmbrBUxZtVtN2l+lI/v2D5NjPDEz+58jOcCuIoBdVUrSFYvkRcA65hToFTzFXgKuL0QPJ0iXgXeBfzDvAO5m3gbcxbwFuYN4E3MYd5KZ6XwrwU5jWGFhM8Xzr9zCme/ciGR+fufRxO/zw699aJtxINRoN0a9k4CkMePAjndDCSBnf9n9s7YRwPDYOZJ9mxfYVodeaVy7xRZ165zJsoc91iOsp8HsQ34T8zj18WyexaUCFKL3mb8a8P4Qkh66YB3+zLukLIW3uvfL4UnhCy5/N7/LQrexZC1i0X33u3rCuE9D4DqBNC3mWyjraP5V0KgbOpv0QVvoTzCxTHT5vwCAAA',
filter_def: {
1: {cateId: '1'},
2: {cateId: '2'},
3: {cateId: '3'},
4: {cateId: '4'}
},
filter_def:{
1:{cateId:'1'},
2:{cateId:'2'},
3:{cateId:'3'},
4:{cateId:'4'}
},
searchUrl:'/search.php?page=fypage&searchword=**&searchtype=',
searchUrl: '/search.php?page=fypage&searchword=**&searchtype=',
搜索: '.fed-list-item;a&&title;a&&data-original;.fed-list-remarks&&Text;a&&href',
lazy:'`js:input = request(input).match(/var now="(.*?)"/)[1];',
}

380
JS/drpy2.min.js vendored
View File

@ -4,10 +4,7 @@ import "./jsencrypt.js";
import "./node-rsa.js";
import "./pako.min.js";
import 模板 from "./模板.js";
import {
gbkTool
}
from "./gbk.js";
import { gbkTool } from "./gbk.js";
function init_test() {
console.log("init_test_start");
@ -24,8 +21,7 @@ function ocr_demo_test() {
log("测试验证码图片的ocr识别结果为:" + code)
}
function rsa_demo_test() {
let t1 = (new Date)
.getTime();
let t1 = (new Date).getTime();
let pkcs1_public = `
-----BEGIN RSA PUBLIC KEY-----
MEgCQQCrI0pQ/ERRpJ3Ou190XJedFq846nDYP52rOtXyDxlFK5D3p6JJu2RwsKwy
@ -174,8 +170,7 @@ m7mp8il0kaftHdSxTbspG3tZ2fjIiFIZkLEOmRpd7ogWumgOajzUdA==
const decrypted = key.decrypt(encrypted, "utf8");
console.log("decrypted: ", decrypted)
})();
let t2 = (new Date)
.getTime();
let t2 = (new Date).getTime();
console.log("rsa_demo_test 测试耗时:" + (t2 - t1) + "毫秒")
}
function pre() {
@ -194,7 +189,7 @@ function pre() {
}
let rule = {};
let vercode = typeof pdfl === "function" ? "drpy2.1" : "drpy2";
const VERSION = vercode + " 3.9.50beta31 20240617";
const VERSION = vercode + " 3.9.50beta32 20240625";
const MOBILE_UA = "Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36";
const PC_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.54 Safari/537.36";
const UA = "Mozilla/5.0";
@ -228,8 +223,7 @@ const SELECT_REGEX_A = /:eq|:lt|:gt/g;
const $js = {
toString(func) {
let strfun = func.toString();
return strfun.replace(/^\(\)(\s+)?=>(\s+)?\{/, "js:")
.replace(/\}$/, "")
return strfun.replace(/^\(\)(\s+)?=>(\s+)?\{/, "js:").replace(/\}$/, "")
}
};
@ -305,12 +299,12 @@ function window_b64() {
btoa: btoa
}
}
if (typeof atob != "function" || typeof btoa != "function") {
if (typeof atob !== "function" || typeof btoa !== "function") {
var {
atob, btoa
} = window_b64()
}
if (typeof Object.assign != "function") {
if (typeof Object.assign !== "function") {
Object.assign = function() {
let target = arguments[0];
for (let i = 1; i < arguments.length; i++) {
@ -360,12 +354,12 @@ if (!Array.prototype.includes) {
enumerable: false
})
}
if (typeof String.prototype.startsWith != "function") {
if (typeof String.prototype.startsWith !== "function") {
String.prototype.startsWith = function(prefix) {
return this.slice(0, prefix.length) === prefix
}
}
if (typeof String.prototype.endsWith != "function") {
if (typeof String.prototype.endsWith !== "function") {
String.prototype.endsWith = function(suffix) {
return this.indexOf(suffix, this.length - suffix.length) !== -1
}
@ -385,7 +379,7 @@ Object.defineProperty(Object.prototype, "myValues", {
},
enumerable: false
});
if (typeof Object.prototype.values != "function") {
if (typeof Object.prototype.values !== "function") {
Object.defineProperty(Object.prototype, "values", {
value: function(obj) {
if (obj == null) {
@ -402,7 +396,7 @@ if (typeof Object.prototype.values != "function") {
enumerable: false
})
}
if (typeof Array.prototype.join != "function") {
if (typeof Array.prototype.join !== "function") {
Object.defineProperty(Array.prototype, "join", {
value: function(emoji) {
emoji = emoji || "";
@ -428,7 +422,7 @@ if (typeof Array.prototype.join != "function") {
enumerable: false
})
}
if (typeof Array.prototype.toReversed != "function") {
if (typeof Array.prototype.toReversed !== "function") {
Object.defineProperty(Array.prototype, "toReversed", {
value: function() {
const clonedList = this.slice();
@ -527,8 +521,7 @@ function rc(js) {
iv: t,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
})
.toString(CryptoJS.enc.Utf8)
}).toString(CryptoJS.enc.Utf8)
},
En: function(word) {
var Encrypted = CryptoJS.AES.encrypt(word, a, {
@ -550,8 +543,7 @@ function maoss(jxurl, ref, key) {
return CryptoJS.AES.decrypt(text, key, {
iv: iv,
padding: CryptoJS.pad.Pkcs7
})
.toString(CryptoJS.enc.Utf8)
}).toString(CryptoJS.enc.Utf8)
};
var token_key = key == undefined ? "dvyYRQlnPRCMdQSe" : key;
if (ref) {
@ -578,8 +570,7 @@ function maoss(jxurl, ref, key) {
config.url = CryptoJS.AES.decrypt(config.url, key, {
iv: iv,
padding: CryptoJS.pad.Pkcs7
})
.toString(CryptoJS.enc.Utf8)
}).toString(CryptoJS.enc.Utf8)
}
return config.url
} catch (e) {
@ -587,32 +578,15 @@ function maoss(jxurl, ref, key) {
}
}
function urlencode(str) {
str = (str + "")
.toString();
return encodeURIComponent(str)
.replace(/!/g, "%21")
.replace(/'/g, "%27")
.replace(/\(/g, "%28")
.replace(/\)/g, "%29")
.replace(/\*/g, "%2A")
.replace(/%20/g, "+")
str = (str + "").toString();
return encodeURIComponent(str).replace(/!/g, "%21").replace(/'/g, "%27").replace(/\(/g, "%28").replace(/\)/g, "%29").replace(/\*/g, "%2A").replace(/%20/g, "+")
}
function encodeUrl(str) {
if (typeof encodeURI == "function") {
return encodeURI(str)
} else {
str = (str + "")
.toString();
return encodeURIComponent(str)
.replace(/%2F/g, "/")
.replace(/%3F/g, "?")
.replace(/%3A/g, ":")
.replace(/%40/g, "@")
.replace(/%3D/g, "=")
.replace(/%3A/g, ":")
.replace(/%2C/g, ",")
.replace(/%2B/g, "+")
.replace(/%24/g, "$")
str = (str + "").toString();
return encodeURIComponent(str).replace(/%2F/g, "/").replace(/%3F/g, "?").replace(/%3A/g, ":").replace(/%40/g, "@").replace(/%3D/g, "=").replace(/%3A/g, ":").replace(/%2C/g, ",").replace(/%2B/g, "+").replace(/%24/g, "$")
}
}
function base64Encode(text) {
@ -622,8 +596,7 @@ function base64Decode(text) {
return CryptoJS.enc.Utf8.stringify(CryptoJS.enc.Base64.parse(text))
}
function md5(text) {
return CryptoJS.MD5(text)
.toString()
return CryptoJS.MD5(text).toString()
}
function uint8ArrayToBase64(uint8Array) {
let binaryString = String.fromCharCode.apply(null, Array.from(uint8Array));
@ -668,8 +641,7 @@ function gzip(str) {
}
function ungzip(b64Data) {
let strData = atob(b64Data);
const charData = strData.split("")
.map(function(x) {
const charData = strData.split("").map(function(x) {
return x.charCodeAt(0)
});
const binData = new Uint8Array(charData);
@ -769,12 +741,9 @@ function fixAdM3u8(m3u8_text, m3u8_url, ad_remove) {
} else if (ad_remove.startsWith("js:")) {
ad_remove = ad_remove.slice(3)
}
let m3u8_start = m3u8_text.slice(0, m3u8_text.indexOf("#EXTINF"))
.trim();
let m3u8_body = m3u8_text.slice(m3u8_text.indexOf("#EXTINF"), m3u8_text.indexOf("#EXT-X-ENDLIST"))
.trim();
let m3u8_end = m3u8_text.slice(m3u8_text.indexOf("#EXT-X-ENDLIST"))
.trim();
let m3u8_start = m3u8_text.slice(0, m3u8_text.indexOf("#EXTINF")).trim();
let m3u8_body = m3u8_text.slice(m3u8_text.indexOf("#EXTINF"), m3u8_text.indexOf("#EXT-X-ENDLIST")).trim();
let m3u8_end = m3u8_text.slice(m3u8_text.indexOf("#EXT-X-ENDLIST")).trim();
let murls = [];
let m3_body_list = m3u8_body.split("\n");
let m3_len = m3_body_list.length;
@ -795,8 +764,7 @@ function fixAdM3u8(m3u8_text, m3u8_url, ad_remove) {
}
let new_m3u8_body = [];
for (let murl of murls) {
if (ad_remove && new RegExp(ad_remove)
.test(murl)) {} else {
if (ad_remove && new RegExp(ad_remove).test(murl)) {} else {
let murl_list = murl.split("&");
if (!murl_list[murl_list.length - 1].startsWith("http") && m3u8_url.startsWith("http")) {
murl_list[murl_list.length - 1] = urljoin(m3u8_url, murl_list[murl_list.length - 1])
@ -806,15 +774,12 @@ function fixAdM3u8(m3u8_text, m3u8_url, ad_remove) {
})
}
}
new_m3u8_body = new_m3u8_body.join("\n")
.trim();
m3u8_text = [m3u8_start, new_m3u8_body, m3u8_end].join("\n")
.trim();
new_m3u8_body = new_m3u8_body.join("\n").trim();
m3u8_text = [m3u8_start, new_m3u8_body, m3u8_end].join("\n").trim();
return m3u8_text
}
function fixAdM3u8Ai(m3u8_url, headers) {
let ts = (new Date)
.getTime();
let ts = (new Date).getTime();
let option = headers ? {
headers: headers
} : {};
@ -830,41 +795,50 @@ function fixAdM3u8Ai(m3u8_url, headers) {
return i
}
function reverseString(str) {
return str.split("")
.reverse()
.join("")
return str.split("").reverse().join("")
}
let m3u8 = request(m3u8_url, option);
m3u8 = m3u8.trim()
.split("\n")
.map(it => it.startsWith("#") ? it : urljoin(m3u8_url, it))
.join("\n");
m3u8 = m3u8.trim().split("\n").map(it => it.startsWith("#") ? it : urljoin(m3u8_url, it)).join("\n");
m3u8 = m3u8.replace(/\n\n/gi, "\n");
let last_url = m3u8.split("\n")
.slice(-1)[0];
let last_url = m3u8.split("\n").slice(-1)[0];
if (last_url.length < 5) {
last_url = m3u8.split("\n")
.slice(-2)[0]
last_url = m3u8.split("\n").slice(-2)[0]
}
if (last_url.includes(".m3u8") && last_url !== m3u8_url) {
m3u8_url = urljoin2(m3u8_url, last_url);
log("嵌套的m3u8_url:" + m3u8_url);
m3u8 = request(m3u8_url, option)
}
let s = m3u8.trim()
.split("\n")
.filter(it => it.trim())
.join("\n");
let s = m3u8.trim().split("\n").filter(it => it.trim()).join("\n");
let ss = s.split("\n");
let firststr = ss.find(x => !x.startsWith("#"));
let firststr = "";
let maxl = 0;
let kk = 0;
let kkk = 2;
let secondstr = "";
for (let i = 0; i < ss.length; i++) {
let s = ss[i];
if (!s.startsWith("#")) {
if (kk == 0) firststr = s;
if (kk == 1) maxl = b(firststr, s);
if (kk > 1) {
if (maxl > b(firststr, s)) {
if (secondstr.length < 5) secondstr = s;
kkk = kkk + 2
} else {
maxl = b(firststr, s);
kkk++
}
}
kk++;
if (kk >= 20) break
}
}
if (kkk > 30) firststr = secondstr;
let firststrlen = firststr.length;
let ml = Math.round(ss.length / 2)
.toString()
.length;
let ml = Math.round(ss.length / 2).toString().length;
let maxc = 0;
let laststr = ss.toReversed()
.find(x => {
let laststr = ss.toReversed().find(x => {
if (!x.startsWith("#")) {
let k = b(reverseString(firststr), reverseString(x));
maxl = b(firststr, x);
@ -895,9 +869,7 @@ function fixAdM3u8Ai(m3u8_url, headers) {
log("----广告地址----");
log(ad_urls);
m3u8 = ss.join("\n");
log("处理耗时:" + ((new Date)
.getTime() - ts)
.toString());
log("处理耗时:" + ((new Date).getTime() - ts).toString());
return m3u8
}
function forceOrder(lists, key, option) {
@ -946,8 +918,7 @@ function getQuery(url) {
arr.forEach(item => {
let arr1 = item.split("=");
let key = arr1[0];
let value = arr1.slice(1)
.join("=");
let value = arr1.slice(1).join("=");
resObj[key] = value
});
return resObj
@ -972,16 +943,13 @@ function pdfh2(html, parse) {
let html2 = html;
try {
if (typeof html !== "string") {
html2 = html.rr(html.ele)
.toString()
html2 = html.rr(html.ele).toString()
}
} catch (e) {
print(`html对象转文本发生了错误:${e.message}`)
}
let result = defaultParser.pdfh(html2, parse);
let option = parse.includes("&&") ? parse.split("&&")
.slice(-1)[0] : parse.split(" ")
.slice(-1)[0];
let option = parse.includes("&&") ? parse.split("&&").slice(-1)[0] : parse.split(" ").slice(-1)[0];
if (/style/.test(option.toLowerCase()) && /url\(/.test(result)) {
try {
result = result.match(/url\((.*?)\)/)[1];
@ -994,8 +962,7 @@ function pdfa2(html, parse) {
let html2 = html;
try {
if (typeof html !== "string") {
html2 = html.rr(html.ele)
.toString()
html2 = html.rr(html.ele).toString()
}
} catch (e) {
print(`html对象转文本发生了错误:${e.message}`)
@ -1181,8 +1148,7 @@ function verifyCode(url) {
}, true);
let json = JSON.parse(hhtml);
if (!cookie) {
let setCk = Object.keys(json)
.find(it => it.toLowerCase() === "set-cookie");
let setCk = Object.keys(json).find(it => it.toLowerCase() === "set-cookie");
cookie = setCk ? json[setCk].split(";")[0] : ""
}
console.log("cookie:" + cookie);
@ -1256,8 +1222,7 @@ function $require(url) {
eval(request(url))
}
function keysToLowerCase(obj) {
return Object.keys(obj)
.reduce((result, key) => {
return Object.keys(obj).reduce((result, key) => {
const newKey = key.toLowerCase();
result[newKey] = obj[key];
return result
@ -1284,8 +1249,7 @@ function request(url, obj, ocr_flag) {
obj = fetch_params
} else {
let headers = obj.headers || {};
let keys = Object.keys(headers)
.map(it => it.toLowerCase());
let keys = Object.keys(headers).map(it => it.toLowerCase());
if (!keys.includes("user-agent")) {
headers["User-Agent"] = MOBILE_UA;
if (typeof fetch_params === "object" && fetch_params && fetch_params.headers) {
@ -1346,8 +1310,7 @@ function reqCookie(url, obj, all_cookie) {
all_cookie = all_cookie || false;
let html = request(url, obj);
let json = JSON.parse(html);
let setCk = Object.keys(json)
.find(it => it.toLowerCase() === "set-cookie");
let setCk = Object.keys(json).find(it => it.toLowerCase() === "set-cookie");
let cookie = setCk ? json[setCk] : "";
if (Array.isArray(cookie)) {
cookie = cookie.join(";")
@ -1364,8 +1327,7 @@ function reqCookie(url, obj, all_cookie) {
fetch = request;
print = function(data) {
data = data || "";
if (typeof data == "object" && Object.keys(data)
.length > 0) {
if (typeof data == "object" && Object.keys(data).length > 0) {
try {
data = JSON.stringify(data);
console.log(data)
@ -1373,8 +1335,7 @@ print = function(data) {
console.log(typeof data + ":" + data.length);
return
}
} else if (typeof data == "object" && Object.keys(data)
.length < 1) {
} else if (typeof data == "object" && Object.keys(data).length < 1) {
console.log("null object")
} else {
console.log(data)
@ -1403,9 +1364,7 @@ function getHtml(url) {
}
let cookie = getItem(RULE_CK, "");
if (cookie) {
if (obj.headers && !Object.keys(obj.headers)
.map(it => it.toLowerCase())
.includes("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) {
@ -1484,8 +1443,7 @@ function homeParse(homeObj) {
list.forEach((it, idex) => {
try {
let name = _pdfh(it, p[1]);
if (homeObj.cate_exclude && new RegExp(homeObj.cate_exclude)
.test(name)) {
if (homeObj.cate_exclude && new RegExp(homeObj.cate_exclude).test(name)) {
return
}
let url = _pd(it, p[2]);
@ -1509,8 +1467,7 @@ function homeParse(homeObj) {
}
}
}
classes = classes.filter(it => !homeObj.cate_exclude || !new RegExp(homeObj.cate_exclude)
.test(it.type_name));
classes = classes.filter(it => !homeObj.cate_exclude || !new RegExp(homeObj.cate_exclude).test(it.type_name));
let resp = {
class: classes
};
@ -1533,8 +1490,7 @@ function homeVodParse(homeVodObj) {
let d = [];
MY_URL = homeVodObj.homeUrl;
console.log(MY_URL);
let t1 = (new Date)
.getTime();
let t1 = (new Date).getTime();
let p = homeVodObj.推荐;
print("p:" + p);
if (p === "*" && rule.一级) {
@ -1670,16 +1626,14 @@ function homeVodParse(homeVodObj) {
}
} catch (e) {}
}
let t2 = (new Date)
.getTime();
let t2 = (new Date).getTime();
console.log("加载首页推荐耗时:" + (t2 - t1) + "毫秒");
if (rule.图片替换) {
if (rule.图片替换.startsWith("js:")) {
d.forEach(it => {
try {
var input = it.vod_pic;
eval(rule.图片替换.trim()
.replace("js:", ""));
eval(rule.图片替换.trim().replace("js:", ""));
it.vod_pic = input
} catch (e) {
log(`图片:${it.vod_pic}替换错误:${e.message}`)
@ -1735,8 +1689,7 @@ function categoryParse(cateObj) {
let fl = cateObj.filter ? cateObj.extend : {};
if (rule.filter_def && typeof rule.filter_def === "object") {
try {
if (Object.keys(rule.filter_def)
.length > 0 && rule.filter_def.hasOwnProperty(cateObj.tid)) {
if (Object.keys(rule.filter_def).length > 0 && rule.filter_def.hasOwnProperty(cateObj.tid)) {
let self_fl_def = rule.filter_def[cateObj.tid];
if (self_fl_def && typeof self_fl_def === "object") {
let fl_def = JSON.parse(JSON.stringify(self_fl_def));
@ -1758,9 +1711,7 @@ function categoryParse(cateObj) {
let url_rep = url.match(/.*?\((.*)\)/)[1];
let cnt_page = url_rep.replaceAll("fypage", cateObj.pg);
let cnt_pg = eval(cnt_page);
url = url.replaceAll(url_rep, cnt_pg)
.replaceAll("(", "")
.replaceAll(")", "")
url = url.replaceAll(url_rep, cnt_pg).replaceAll("(", "").replaceAll(")", "")
} else {
url = url.replaceAll("fypage", cateObj.pg)
}
@ -1775,8 +1726,7 @@ function categoryParse(cateObj) {
var input = MY_URL;
const MY_PAGE = cateObj.pg;
var desc = "";
eval(p.trim()
.replace("js:", ""));
eval(p.trim().replace("js:", ""));
d = VODS
} else {
p = p.split(";");
@ -1797,15 +1747,12 @@ function categoryParse(cateObj) {
}
let list = _pdfa(html, p[0]);
list.forEach(it => {
let links = p[4].split("+")
.map(p4 => {
let links = p[4].split("+").map(p4 => {
return !rule.detailUrl ? _pd(it, p4, MY_URL) : _pdfh(it, p4)
});
let link = links.join("$");
let vod_id = rule.detailUrl ? MY_CATE + "$" + link : link;
let vod_name = _pdfh(it, p[1])
.replace(/\n|\t/g, "")
.trim();
let vod_name = _pdfh(it, p[1]).replace(/\n|\t/g, "").trim();
let vod_pic = _pd(it, p[2], MY_URL);
if (rule.二级 === "*") {
vod_id = vod_id + "@@" + vod_name + "@@" + vod_pic
@ -1814,9 +1761,7 @@ function categoryParse(cateObj) {
vod_id: vod_id,
vod_name: vod_name,
vod_pic: vod_pic,
vod_remarks: _pdfh(it, p[3])
.replace(/\n|\t/g, "")
.trim()
vod_remarks: _pdfh(it, p[3]).replace(/\n|\t/g, "").trim()
})
})
}
@ -1829,8 +1774,7 @@ function categoryParse(cateObj) {
d.forEach(it => {
try {
var input = it.vod_pic;
eval(rule.图片替换.trim()
.replace("js:", ""));
eval(rule.图片替换.trim().replace("js:", ""));
it.vod_pic = input
} catch (e) {
log(`图片:${it.vod_pic}替换错误:${e.message}`)
@ -1905,9 +1849,7 @@ function searchParse(searchObj) {
let url_rep = url.match(/.*?\((.*)\)/)[1];
let cnt_page = url_rep.replaceAll("fypage", searchObj.pg);
let cnt_pg = eval(cnt_page);
url = url.replaceAll(url_rep, cnt_pg)
.replaceAll("(", "")
.replaceAll(")", "")
url = url.replaceAll(url_rep, cnt_pg).replaceAll("(", "").replaceAll(")", "")
} else {
url = url.replaceAll("fypage", searchObj.pg)
}
@ -1920,8 +1862,7 @@ function searchParse(searchObj) {
const KEY = searchObj.wd;
var input = MY_URL;
var detailUrl = rule.detailUrl || "";
eval(p.trim()
.replace("js:", ""));
eval(p.trim().replace("js:", ""));
d = VODS
} else {
p = p.split(";");
@ -1936,8 +1877,7 @@ function searchParse(searchObj) {
let is_json = p0.startsWith("json:");
p0 = p0.replace(/^(jsp:|json:|jq:)/, "");
try {
let req_method = MY_URL.split(";")
.length > 1 ? MY_URL.split(";")[1].toLowerCase() : "get";
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("#");
@ -1994,8 +1934,7 @@ function searchParse(searchObj) {
let p4 = getPP(p, 4, pp, 4);
let p5 = getPP(p, 5, pp, 5);
list.forEach(it => {
let links = p4.split("+")
.map(_p4 => {
let links = p4.split("+").map(_p4 => {
return !rule.detailUrl ? _pd(it, _p4, MY_URL) : _pdfh(it, _p4)
});
let link = links.join("$");
@ -2006,9 +1945,7 @@ function searchParse(searchObj) {
content = ""
}
let vod_id = link;
let vod_name = _pdfh(it, p1)
.replace(/\n|\t/g, "")
.trim();
let vod_name = _pdfh(it, p1).replace(/\n|\t/g, "").trim();
let vod_pic = _pd(it, p2, MY_URL);
if (rule.二级 === "*") {
vod_id = vod_id + "@@" + vod_name + "@@" + vod_pic
@ -2017,11 +1954,8 @@ function searchParse(searchObj) {
vod_id: vod_id,
vod_name: vod_name,
vod_pic: vod_pic,
vod_remarks: _pdfh(it, p3)
.replace(/\n|\t/g, "")
.trim(),
vod_content: content.replace(/\n|\t/g, "")
.trim()
vod_remarks: _pdfh(it, p3).replace(/\n|\t/g, "").trim(),
vod_content: content.replace(/\n|\t/g, "").trim()
};
d.push(ob)
})
@ -2036,8 +1970,7 @@ function searchParse(searchObj) {
d.forEach(it => {
try {
var input = it.vod_pic;
eval(rule.图片替换.trim()
.replace("js:", ""));
eval(rule.图片替换.trim().replace("js:", ""));
it.vod_pic = input
} catch (e) {
log(`图片:${it.vod_pic}替换错误:${e.message}`)
@ -2069,8 +2002,7 @@ function searchParse(searchObj) {
})
}
function detailParse(detailObj) {
let t1 = (new Date)
.getTime();
let t1 = (new Date).getTime();
fetch_params = JSON.parse(JSON.stringify(rule_fetch_params));
let orId = detailObj.orId;
let vod_name = "片名";
@ -2103,8 +2035,7 @@ function detailParse(detailObj) {
if (detailObj.二级访问前) {
try {
print(`尝试在二级访问前执行代码:${detailObj.二级访问前}`);
eval(detailObj.二级访问前.trim()
.replace("js:", ""))
eval(detailObj.二级访问前.trim().replace("js:", ""))
} catch (e) {
print(`二级访问前执行代码出现错误:${e.message}`)
}
@ -2115,18 +2046,15 @@ function detailParse(detailObj) {
vod.vod_actor = "没有二级,只有一级链接直接嗅探播放";
vod.vod_content = MY_URL;
vod.vod_play_url = "嗅探播放$" + MY_URL.split("@@")[0]
} else if (typeof p === "string" && p.trim()
.startsWith("js:")) {
} else if (typeof p === "string" && p.trim().startsWith("js:")) {
const TYPE = "detail";
var input = MY_URL;
var play_url = "";
eval(p.trim()
.replace("js:", ""));
eval(p.trim().replace("js:", ""));
vod = VOD;
console.log(JSON.stringify(vod))
} else if (p && typeof p === "object") {
let tt1 = (new Date)
.getTime();
let tt1 = (new Date).getTime();
if (!html) {
html = getHtml(MY_URL)
}
@ -2146,49 +2074,31 @@ function detailParse(detailObj) {
print("二级默认jq");
_ps = parseTags.jq
}
let tt2 = (new Date)
.getTime();
let tt2 = (new Date).getTime();
print(`二级${MY_URL}获取并装载源码耗时:${tt2-tt1}毫秒`);
_pdfa = _ps.pdfa;
_pdfh = _ps.pdfh;
_pd = _ps.pd;
if (p.title) {
let p1 = p.title.split(";");
vod.vod_name = _pdfh(html, p1[0])
.replace(/\n|\t/g, "")
.trim();
let type_name = p1.length > 1 ? _pdfh(html, p1[1])
.replace(/\n|\t/g, "")
.replace(/ /g, "")
.trim() : "";
vod.vod_name = _pdfh(html, p1[0]).replace(/\n|\t/g, "").trim();
let type_name = p1.length > 1 ? _pdfh(html, p1[1]).replace(/\n|\t/g, "").replace(/ /g, "").trim() : "";
vod.type_name = type_name || vod.type_name
}
if (p.desc) {
try {
let p1 = p.desc.split(";");
vod.vod_remarks = _pdfh(html, p1[0])
.replace(/\n|\t/g, "")
.trim();
vod.vod_year = p1.length > 1 ? _pdfh(html, p1[1])
.replace(/\n|\t/g, "")
.trim() : "";
vod.vod_area = p1.length > 2 ? _pdfh(html, p1[2])
.replace(/\n|\t/g, "")
.trim() : "";
vod.vod_actor = p1.length > 3 ? _pdfh(html, p1[3])
.replace(/\n|\t/g, "")
.trim() : "";
vod.vod_director = p1.length > 4 ? _pdfh(html, p1[4])
.replace(/\n|\t/g, "")
.trim() : ""
vod.vod_remarks = _pdfh(html, p1[0]).replace(/\n|\t/g, "").trim();
vod.vod_year = p1.length > 1 ? _pdfh(html, p1[1]).replace(/\n|\t/g, "").trim() : "";
vod.vod_area = p1.length > 2 ? _pdfh(html, p1[2]).replace(/\n|\t/g, "").trim() : "";
vod.vod_actor = p1.length > 3 ? _pdfh(html, p1[3]).replace(/\n|\t/g, "").trim() : "";
vod.vod_director = p1.length > 4 ? _pdfh(html, p1[4]).replace(/\n|\t/g, "").trim() : ""
} catch (e) {}
}
if (p.content) {
try {
let p1 = p.content.split(";");
vod.vod_content = _pdfh(html, p1[0])
.replace(/\n|\t/g, "")
.trim()
vod.vod_content = _pdfh(html, p1[0]).replace(/\n|\t/g, "").trim()
} catch (e) {}
}
if (p.img) {
@ -2216,14 +2126,12 @@ function detailParse(detailObj) {
let tab_text = p.tab_text || "body&&Text";
let new_map = {};
for (let v of vHeader) {
let v_title = _pdfh(v, tab_text)
.trim();
let v_title = _pdfh(v, tab_text).trim();
if (!v_title) {
v_title = "线路空"
}
console.log(v_title);
if (tab_exclude && new RegExp(tab_exclude)
.test(v_title)) {
if (tab_exclude && new RegExp(tab_exclude).test(v_title)) {
continue
}
if (!new_map.hasOwnProperty(v_title)) {
@ -2254,16 +2162,13 @@ function detailParse(detailObj) {
for (let i in LISTS) {
if (LISTS.hasOwnProperty(i)) {
try {
LISTS[i] = LISTS[i].map(it => it.split("$")
.slice(0, 2)
.join("$"))
LISTS[i] = LISTS[i].map(it => it.split("$").slice(0, 2).join("$"))
} catch (e) {
print(`格式化LISTS发生错误:${e.message}`)
}
}
}
vod_play_url = LISTS.map(it => it.join("#"))
.join(vod_play_url)
vod_play_url = LISTS.map(it => it.join("#")).join(vod_play_url)
} catch (e) {
print(`js执行lists: 发生错误:${e.message}`)
}
@ -2271,27 +2176,20 @@ function detailParse(detailObj) {
let list_text = p.list_text || "body&&Text";
let list_url = p.list_url || "a&&href";
let list_url_prefix = p.list_url_prefix || "";
let is_tab_js = p.tabs.trim()
.startsWith("js:");
let is_tab_js = p.tabs.trim().startsWith("js:");
for (let i = 0; i < playFrom.length; i++) {
let tab_name = playFrom[i];
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);
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);
let tabName = tab_ext ? _pdfh(html, tab_ext) : tab_name;
console.log(tabName);
let new_vod_list = [];
let tt1 = (new Date)
.getTime();
let tt1 = (new Date).getTime();
if (typeof pdfl === "function") {
new_vod_list = pdfl(html, p1, list_text, list_url, MY_URL);
if (list_url_prefix) {
new_vod_list = new_vod_list.map(it => it.split("$")[0] + "$" + list_url_prefix + it.split("$")
.slice(1)
.join("$"))
new_vod_list = new_vod_list.map(it => it.split("$")[0] + "$" + list_url_prefix + it.split("$").slice(1).join("$"))
}
} else {
let vodList = [];
@ -2301,8 +2199,7 @@ function detailParse(detailObj) {
} catch (e) {}
for (let i = 0; i < vodList.length; i++) {
let it = vodList[i];
new_vod_list.push(_pdfh(it, list_text)
.trim() + "$" + list_url_prefix + _pd(it, list_url, MY_URL))
new_vod_list.push(_pdfh(it, list_text).trim() + "$" + list_url_prefix + _pd(it, list_url, MY_URL))
}
}
if (new_vod_list.length > 0) {
@ -2328,8 +2225,7 @@ function detailParse(detailObj) {
if (!vod.vod_id || vod_id.includes("$") && vod.vod_id !== vod_id) {
vod.vod_id = vod_id
}
let t2 = (new Date)
.getTime();
let t2 = (new Date).getTime();
console.log(`加载二级界面${MY_URL}耗时:${t2-t1}毫秒`);
try {
vod = vodDeal(vod)
@ -2342,8 +2238,7 @@ function detailParse(detailObj) {
}
function get_tab_index(vod) {
let obj = {};
vod.vod_play_from.split("$$$")
.forEach((it, index) => {
vod.vod_play_from.split("$$$").forEach((it, index) => {
obj[it] = index
});
return obj
@ -2371,8 +2266,7 @@ function vodDeal(vod) {
}
play_ordered_list = tab_list.map(it => vod_play_url[tab_index_dict[it]])
}
if (rule.tab_rename && typeof rule.tab_rename === "object" & Object.keys(rule.tab_rename)
.length > 0) {
if (rule.tab_rename && typeof rule.tab_rename === "object" & Object.keys(rule.tab_rename).length > 0) {
tab_renamed_list = tab_list.map(it => rule.tab_rename[it] || it);
tab_list = tab_renamed_list
}
@ -2413,8 +2307,7 @@ function playParse(playObj) {
try {
let lazy_code = rule.lazy.trim();
if (lazy_code.startsWith("js:")) {
lazy_code = lazy_code.replace("js:", "")
.trim()
lazy_code = lazy_code.replace("js:", "").trim()
}
print("开始执行js免嗅=>" + lazy_code);
eval(lazy_code);
@ -2511,8 +2404,7 @@ function getOriginalJs(js_code) {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
})
.toString(CryptoJS.enc.Utf8);
}).toString(CryptoJS.enc.Utf8);
return encrypted
}
let error_log = false;
@ -2608,8 +2500,7 @@ function init(ext) {
console.log(`规则加载失败,不支持的规则类型:${typeof ext}`);
return
}
rule.host = (rule.host || "")
.rstrip("/");
rule.host = (rule.host || "").rstrip("/");
HOST = rule.host;
if (rule.hostJs) {
console.log(`检测到hostJs,准备执行...`);
@ -2627,8 +2518,7 @@ function init(ext) {
headers: host_headers
});
let match_muban = "";
let muban_keys = Object.keys(muban)
.filter(it => !/默认|短视2|采集1/.test(it));
let muban_keys = Object.keys(muban).filter(it => !/默认|短视2|采集1/.test(it));
for (let muban_key of muban_keys) {
try {
let host_data = JSON.parse(home({}, host_html, muban[muban_key].class_parse));
@ -2644,8 +2534,7 @@ function init(ext) {
if (match_muban) {
muban["自动"] = muban[match_muban];
if (rule["模板修改"] && rule["模板修改"].startsWith("js:")) {
eval(rule["模板修改"].replace("js:", "")
.trim())
eval(rule["模板修改"].replace("js:", "").trim())
}
} else {
delete rule["模板"]
@ -2658,16 +2547,10 @@ function init(ext) {
print("继承模板:" + rule.模板);
rule = Object.assign(muban[rule.模板], rule)
}
let rule_cate_excludes = (rule.cate_exclude || "")
.split("|")
.filter(it => it.trim());
let rule_tab_excludes = (rule.tab_exclude || "")
.split("|")
.filter(it => it.trim());
rule_cate_excludes = rule_cate_excludes.concat(CATE_EXCLUDE.split("|")
.filter(it => it.trim()));
rule_tab_excludes = rule_tab_excludes.concat(TAB_EXCLUDE.split("|")
.filter(it => it.trim()));
let rule_cate_excludes = (rule.cate_exclude || "").split("|").filter(it => it.trim());
let rule_tab_excludes = (rule.tab_exclude || "").split("|").filter(it => it.trim());
rule_cate_excludes = rule_cate_excludes.concat(CATE_EXCLUDE.split("|").filter(it => it.trim()));
rule_tab_excludes = rule_tab_excludes.concat(TAB_EXCLUDE.split("|").filter(it => it.trim()));
rule.cate_exclude = rule_cate_excludes.join("|");
rule.tab_exclude = rule_tab_excludes.join("|");
rule.类型 = rule.类型 || "影视";
@ -2763,8 +2646,7 @@ function home(filter, home_html, class_parse) {
console.log("home");
home_html = home_html || "";
class_parse = class_parse || "";
if (typeof rule.filter === "string" && rule.filter.trim()
.length > 0) {
if (typeof rule.filter === "string" && rule.filter.trim().length > 0) {
try {
let filter_json = ungzip(rule.filter.trim());
rule.filter = JSON.parse(filter_json)
@ -2816,8 +2698,7 @@ function detail(vod_url) {
let detailUrl = vod_url.split("@@")[0];
let url;
if (!detailUrl.startsWith("http") && !detailUrl.includes("/")) {
url = rule.detailUrl.replaceAll("fyid", detailUrl)
.replaceAll("fyclass", fyclass)
url = rule.detailUrl.replaceAll("fyid", detailUrl).replaceAll("fyclass", fyclass)
} else if (detailUrl.includes("/")) {
url = urljoin(rule.homeUrl, detailUrl)
} else {
@ -2920,8 +2801,7 @@ function DRPY() {
fixAdM3u8Ai: fixAdM3u8Ai
}
}
export
default {
export default {
runMain: runMain,
getRule: getRule,
init: init,

8
JS/大米动漫.js Normal file
View File

@ -0,0 +1,8 @@
var rule = {
模板: 'mxpro',
title: '大米动漫[漫]',
host: 'https://damidm.com/',
url: 'show/fyclass--------fypage---.html',
searchUrl: '/search/**----------fypage---.html',
class_parse: '.navbar-items li;a&&Text;a&&href;/(\\d+).html',
}

View File

@ -1,6 +1,6 @@
var rule={
title:'异世界动漫',
host:'https://www.lldm.net',
host:'https://www.dmmiku.com/',
homeUrl:'/index.php/vod/show/id/22.html',
// url:'/index.php/vod/show/class/fyclass/id/20/page/fypage.html',
url:'/index.php/vod/show/fyclassfyfilter.html',

View File

@ -1,6 +1,6 @@
var rule = {
模板: '首图',
title: '樱花动漫',
title: '樱花动漫[漫]',
host: 'https://katedm.com/',
url: '/list/fyclass-fypage.html',
searchUrl: '/search/**----------fypage---.html',

View File

@ -1,5 +1,5 @@
var rule = {
title: '次元城动漫',//规则标题,没有实际作用,但是可以作为cms类名称依据
title: '次元城动漫[漫]',//规则标题,没有实际作用,但是可以作为cms类名称依据
编码: '',//不填就默认utf-8
搜索编码: '',//不填则不编码默认都是按utf-8.可优先于全局编码属性.比如网页源码编码是gbk,这里可以指定utf-8搜索独立编码。多数情况这个属性不填或者填写gbk应对特殊的网站搜索
host: 'https://www.cycanime.com',//网页的域名根,包含http头如 https://www,baidu.com

View File

@ -1,47 +1,40 @@
var rule = {
title:'路漫漫',
// host:'https://www.96ba.com',
host:'https://m.lmm52.com',
// url:'/vod/show/id/fyclass/page/fypage.html',
url:'/vod/show/id/fyclassfyfilter.html',
filterable:1,//是否启用分类筛选,
filter_url:'{{fl.by}}/page/fypage{{fl.year}}',
filter:{
"ribendongman":[{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2024","v":"/year/2024"},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"更早","v":"/year/2013-1980"}]},{"key":"by","name":"排序","value":[{"n":"更新","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"},{"n":"点赞","v":"/by/up"}]}],
"guochandongman":[{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2024","v":"/year/2024"},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"更早","v":"/year/2013-1980"}]},{"key":"by","name":"排序","value":[{"n":"更新","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"},{"n":"点赞","v":"/by/up"}]}],
"oumeidongman":[{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2024","v":"/year/2024"},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"更早","v":"/year/2013-1980"}]},{"key":"by","name":"排序","value":[{"n":"更新","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"},{"n":"点赞","v":"/by/up"}]}],
"ribendonghuadianying":[{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2024","v":"/year/2024"},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"更早","v":"/year/2013-1980"}]},{"key":"by","name":"排序","value":[{"n":"更新","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"},{"n":"点赞","v":"/by/up"}]}],
"guochandonghuadianying":[{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2024","v":"/year/2024"},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"更早","v":"/year/2013-1980"}]},{"key":"by","name":"排序","value":[{"n":"更新","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"},{"n":"点赞","v":"/by/up"}]}],
"oumeidonghuadianying":[{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2024","v":"/year/2024"},{"n":"2023","v":"/year/2023"},{"n":"2022","v":"/year/2022"},{"n":"2021","v":"/year/2021"},{"n":"2020","v":"/year/2020"},{"n":"2019","v":"/year/2019"},{"n":"2018","v":"/year/2018"},{"n":"2017","v":"/year/2017"},{"n":"2016","v":"/year/2016"},{"n":"2015","v":"/year/2015"},{"n":"2014","v":"/year/2014"},{"n":"更早","v":"/year/2013-1980"}]},{"key":"by","name":"排序","value":[{"n":"更新","v":"/by/time"},{"n":"人气","v":"/by/hits"},{"n":"评分","v":"/by/score"},{"n":"点赞","v":"/by/up"}]}]
},
searchUrl:'/vod/search/page/fypage/wd/**.html',
searchable: 2,//是否启用全局搜索,
quickSearch: 0,//是否启用快速搜索,
title: "路漫漫",
host: "https://m.lmm52.com",
url: "/vod/show/id/fyclassfyfilter.html",
searchUrl: "https://m.lmm52.com/vod/search/page/fypage/wd/**.html",
searchable: 2,
quickSearch: 0,
filterable: 1,
filter: "H4sIAAAAAAAAAO2Su04CURCG32XqNXu/wKsYitVsAlHRcEs2hISoECuJxqhRYqMFxkIKKFgLXoY9Lm/hHtB1mPqUU87//Tt7kvm6YEN5vwtHUQxlSBez1dcraFAPTyI8d8LjdrQp1mU8mKwvJjLOB+hp29QyLOc30+MobOibAFGbUhtTi1ILU5NSE1ODUgNRs0RoHiAaUBpg6lPqY+pR6mHqUuoWVDzPxMM75c6eWQryp1dkbXsRcX2bJqP/ixTz7kXEuJ8tb+TW++nf1oNYb9Xyj4p/jvvrj8dVkojpHepUa60m6WSfl+nVEHWah6eNnUXp29P3+SKbv6BS+0y+vKKBw0axUUqNctkoNkqpUR4bxUYpNcpno9gopUYFbBQbpdCo3g8SNsur7Q0AAA==",
filter_url: "{{fl.排序}}{{fl.年代}}/page/fypage",
filter_def: "",
headers: {
'User-Agent': 'MOBILE_UA',
"User-Agent": "MOBILE_UA"
},
class_parse:'.container&&.tag.text-light;a&&Text;a&&href;.*/(.*?).html',
timeout: 5000,
class_name: "日本动漫&国产动漫&欧美动漫&日本动画电影&国产动画电影&欧美动画电影",
class_url: "6&7&8&3&4&5",
class_parse: "",
cate_exclude: "",
play_parse: true,
lazy:`js:
var html = JSON.parse(request(input).match(/r player_.*?=(.*?)</)[1]);
var url = html.url;
var from = html.from;
if (/m3u8/.test(url)) {
input = url.split("&")[0]
} else {
input
}
`,
limit: 6,
推荐:'.owl-theme-jable .item;*;*;*;*',
一级:'#mdym .col-6;h6&&Text;.lazyload&&data-src;.label&&Text;a&&href',
二级:{
"title":"h1&&Text;.video-info-aux&&Text",
"img":".url_img&&src",
"desc":".video-info-items--span:eq(3)&&Text;;;.video-info-actor:eq(1)&&Text;.video-info-actor:eq(0)&&Text",
"content":".content-text&&Text",
"tabs":".module-tab-content .tab-item",
"lists":".scroll-content:eq(#id) a"
lazy: $js.toString(() => {
input = {parse: 1, url: input, js: ''};
}),
double: false,
推荐: "*",
一级: ".video-img-box;h6.title&&Text;.lazyload&&data-src;.label&&Text;a&&href",
二级: {
title: ".page-title&&Text;.tag-link&&Text",
img: ".module-item-pic&&.lazyload&&src",
desc: ".video-info-items:eq(3)&&Text;.video-info-items:eq(2)&&Text;;.video-info-items:eq(1)&&Text;.video-info-items:eq(0)&&Text",
content: ".video-info-content&&Text",
tabs: ".module-tab-item.tab-item",
lists: ".module-player-list:eq(#id) a",
tab_text: "body&&Text",
list_text: "body&&Text",
list_url: "a&&href"
},
搜索:'*',
detailUrl: "",
搜索: "*"
}

View File

@ -3,7 +3,7 @@ Object.assign(muban.mxpro.二级, {
});
var rule = {
模板: 'mxpro',
title: '驴番',
title: '驴番[漫]',
host: 'https://www.lvfan.fun',
url: 'vodshow/fyclass--------fypage---/',
class_parse: '.navbar-items li;a&&Text;a&&href;.*/(\\d+)/',