xxxx
This commit is contained in:
114
js/4kav.js
Normal file
114
js/4kav.js
Normal file
@@ -0,0 +1,114 @@
|
||||
/*
|
||||
@header({
|
||||
searchable: 1,
|
||||
filterable: 1,
|
||||
quickSearch: 1,
|
||||
title: '4kkav',
|
||||
'类型': '影视',
|
||||
lang: 'ds'
|
||||
})
|
||||
*/
|
||||
|
||||
var rule = {
|
||||
title: '4kkav',
|
||||
host: 'https://zh.xhamster.com',
|
||||
// url:'/4k/2',
|
||||
url: '/categories/fyfilter',
|
||||
searchUrl: '/search/**?quality=2160p&page=fypage',
|
||||
searchable: 1,
|
||||
quickSearch: 1,
|
||||
filterable: 1,
|
||||
filter_url: 'fyclass/4k{{fl.排序}}/fypage',
|
||||
filter: 'H4sIAAAAAAAAA+3WsUrDQBzH8T1PUW42iJv4KtLhb/onPc3dldylpZSCg6CTBQcndzcVxKXg22iJb2EawZK0Vw/i+MsU7i7/L4TPcLOoVz0iGUrNlsVJ77ReWD+z37f6yAVPq22xur37XC7EQXNTk2L/7piyojl7d2Mzrp71cPnx/tqatZm5PnJ4xtaJrQPz7W/+CK3uX/aHNE/+JfW2KB9vvq7bv6hVU8a6eCyr5qBzsny+Kp+WYcnEKMXa7aw2VvpRc73/M1uc04gACZA6Qzo6jqdMeWyyASz5QrAUZMlKndLI5EwalnwhWAqyRFZCkT8ERUGK8sLCERx1duRITnDfhqTukhKTZZzCkTcER2GOCmWHxsGRLwRHQY5MnpJVYOQLgVHYBYkZt2xvCIj2I4rm31EjolIfGQAA',
|
||||
class_name: '4k&国产&日本&18&新加坡&亚洲&俄罗斯&中国台湾&大学生&射液&高潮&青少年', //静态分类名称拼接/categories/chinese/4k/2
|
||||
class_url: '4k&chinese&japanese&18-year-old&singaporean&asian&russian&taiwanese&college&cumshot&orgasm&teen', //静态分类标识拼接
|
||||
limit: 999,
|
||||
headers: { 'User-Agent': PC_UA },
|
||||
double: true,
|
||||
一级: $js.toString(() => {
|
||||
let d = [];
|
||||
function processUrl(url) {
|
||||
if (MY_CATE === '4k') {
|
||||
if (MY_PAGE === 1) {
|
||||
return HOST + '/4k?formatFrozen=1';
|
||||
} else {
|
||||
return HOST + '/' + MY_CATE + '/' + MY_PAGE;
|
||||
}
|
||||
} else {
|
||||
if (MY_PAGE == 1) {
|
||||
return url.substring(0, url.length - 2)
|
||||
} else {
|
||||
return url;
|
||||
}
|
||||
}
|
||||
}
|
||||
let html = request(processUrl(input))
|
||||
let htmm = jsp.pdfh(html, '#initials-script&&Html')
|
||||
let jss = htmm.slice(16, -1);
|
||||
let str = JSON.parse(jss.replace(/<div[^>]*>.*?<\/div>/gi, '')
|
||||
.replace(/<span[^>]*>.*?<\/span>/gi, ''));
|
||||
// console.log("dgdgeudgwe====" + JSON.stringify(str))
|
||||
function data(myclass) {
|
||||
if (myclass === '4k') {
|
||||
let dtat = str.pagesIndexFormatComponent.trendingVideoListProps.videoThumbProps;
|
||||
return dtat
|
||||
} else {
|
||||
let dtat= str.pagesCategoryComponent.trendingVideoListProps.videoThumbProps;
|
||||
return dtat
|
||||
// let dtat=str.searchResult.videoThumbProps;
|
||||
}
|
||||
}
|
||||
data(MY_CATE).forEach(it => {
|
||||
d.push({
|
||||
url: it.pageURL,
|
||||
title: it.title,
|
||||
img: it.thumbURL,
|
||||
})
|
||||
});
|
||||
setResult(d)
|
||||
}),
|
||||
二级: $js.toString(() => {
|
||||
let urls = [];
|
||||
let html = request(input)
|
||||
let htmm = jsp.pdfh(html, '#initials-script&&Html')
|
||||
let jss = htmm.slice(16, -1);
|
||||
let str = JSON.parse(jss.replace(/<div[^>]*>.*?<\/div>/gi, '')
|
||||
.replace(/<span[^>]*>.*?<\/span>/gi, ''));
|
||||
let data = str.xplayerSettings.sources.standard.h264;
|
||||
data.forEach(it => {
|
||||
if (it.quality === 'auto') {
|
||||
if (it.fallback) {
|
||||
urls.push("4k①" + '$' + it.url);
|
||||
urls.push("4k②" + '$' + it.fallback);
|
||||
} else {
|
||||
urls.push("4k" + '$' + it.url);
|
||||
}
|
||||
} else {
|
||||
urls.push(it.quality + '$' + it.url);
|
||||
}
|
||||
});
|
||||
|
||||
VOD = {
|
||||
vod_play_from: 'XSP',
|
||||
vod_play_url: urls.join('#')
|
||||
}
|
||||
}),
|
||||
搜索: $js.toString(() => {
|
||||
let d = [];
|
||||
let html = request(input)
|
||||
let htmm = jsp.pdfh(html, '#initials-script&&Html')
|
||||
let jss = htmm.slice(16, -1);
|
||||
let str = JSON.parse(jss.replace(/<div[^>]*>.*?<\/div>/gi, '')
|
||||
.replace(/<span[^>]*>.*?<\/span>/gi, ''));
|
||||
// console.log("dgdgeudgwe===="+JSON.parse(str))
|
||||
let dtat = str.searchResult.videoThumbProps;
|
||||
dtat.forEach(it => {
|
||||
d.push({
|
||||
url: it.pageURL,
|
||||
title: it.title,
|
||||
img: it.thumbURL,
|
||||
})
|
||||
});
|
||||
setResult(d)
|
||||
}),
|
||||
}
|
||||
25
js/JAVXX.js
Normal file
25
js/JAVXX.js
Normal file
@@ -0,0 +1,25 @@
|
||||
var rule = {
|
||||
title: 'JAVXX',
|
||||
host: 'https://javxx.com',
|
||||
url: 'https://javxx.com/cn/fyclass?page=fypage',
|
||||
searchUrl: 'https://javxx.com/cn/search?keyword=**&page=fypage',
|
||||
searchable: 2,
|
||||
quickSearch: 0,
|
||||
filterable: 0,
|
||||
filter: '',
|
||||
filter_url: '',
|
||||
filter_def: {},
|
||||
headers: {
|
||||
'User-Agent': 'MOBILE_UA',
|
||||
},
|
||||
timeout: 5000,
|
||||
class_parse: '#menu&&ul&&li;a&&Text;a&&href;.*/(.*)',
|
||||
cate_exclude: '类别|女演员|制作商|系列|SIRO|LUXU|200GANA|PRESTIGE PREMIUM|ORECO|S-CUTE|ARA|390JAC|328HMDN|FC2|HEYZO|1pondo|Caribbeancom|Caribbeancompr|10musume|Pacopacomama|C0930|H0930|H4610|Tokyo Hot|XXX AV|GACHIG',
|
||||
play_parse: true,
|
||||
lazy: "js:\n input = { parse: 1, url: input, js: '' };",
|
||||
double: true,
|
||||
推荐: '列表1;列表2;标题;图片;描述;链接;详情',
|
||||
一级: '.vid-items&&.item;span:eq(2)&&Text;img&&src;.meta&&Text;a&&href',
|
||||
二级: '*',
|
||||
搜索: '*',
|
||||
}
|
||||
1
js/cheerio.min.js
vendored
Normal file
1
js/cheerio.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
6140
js/crypto-hiker.js
Normal file
6140
js/crypto-hiker.js
Normal file
File diff suppressed because it is too large
Load Diff
6191
js/crypto-js.js
Normal file
6191
js/crypto-js.js
Normal file
File diff suppressed because it is too large
Load Diff
3761
js/drpy2.js
Normal file
3761
js/drpy2.js
Normal file
File diff suppressed because one or more lines are too long
3108
js/drpy2.min.js
vendored
Normal file
3108
js/drpy2.min.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
577
js/jinja.js
Normal file
577
js/jinja.js
Normal file
@@ -0,0 +1,577 @@
|
||||
/*!
|
||||
* Jinja Templating for JavaScript v0.1.8
|
||||
* https://github.com/sstur/jinja-js
|
||||
*
|
||||
* This is a slimmed-down Jinja2 implementation [http://jinja.pocoo.org/]
|
||||
*
|
||||
* In the interest of simplicity, it deviates from Jinja2 as follows:
|
||||
* - Line statements, cycle, super, macro tags and block nesting are not implemented
|
||||
* - auto escapes html by default (the filter is "html" not "e")
|
||||
* - Only "html" and "safe" filters are built in
|
||||
* - Filters are not valid in expressions; `foo|length > 1` is not valid
|
||||
* - Expression Tests (`if num is odd`) not implemented (`is` translates to `==` and `isnot` to `!=`)
|
||||
*
|
||||
* Notes:
|
||||
* - if property is not found, but method '_get' exists, it will be called with the property name (and cached)
|
||||
* - `{% for n in obj %}` iterates the object's keys; get the value with `{% for n in obj %}{{ obj[n] }}{% endfor %}`
|
||||
* - subscript notation `a[0]` takes literals or simple variables but not `a[item.key]`
|
||||
* - `.2` is not a valid number literal; use `0.2`
|
||||
*
|
||||
*/
|
||||
/*global require, exports, module, define */
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
||||
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
||||
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.jinja = {}));
|
||||
})(this, (function (jinja) {
|
||||
"use strict";
|
||||
var STRINGS = /'(\\.|[^'])*'|"(\\.|[^"'"])*"/g;
|
||||
var IDENTS_AND_NUMS = /([$_a-z][$\w]*)|([+-]?\d+(\.\d+)?)/g;
|
||||
var NUMBER = /^[+-]?\d+(\.\d+)?$/;
|
||||
//non-primitive literals (array and object literals)
|
||||
var NON_PRIMITIVES = /\[[@#~](,[@#~])*\]|\[\]|\{([@i]:[@#~])(,[@i]:[@#~])*\}|\{\}/g;
|
||||
//bare identifiers such as variables and in object literals: {foo: 'value'}
|
||||
var IDENTIFIERS = /[$_a-z][$\w]*/ig;
|
||||
var VARIABLES = /i(\.i|\[[@#i]\])*/g;
|
||||
var ACCESSOR = /(\.i|\[[@#i]\])/g;
|
||||
var OPERATORS = /(===?|!==?|>=?|<=?|&&|\|\||[+\-\*\/%])/g;
|
||||
//extended (english) operators
|
||||
var EOPS = /(^|[^$\w])(and|or|not|is|isnot)([^$\w]|$)/g;
|
||||
var LEADING_SPACE = /^\s+/;
|
||||
var TRAILING_SPACE = /\s+$/;
|
||||
|
||||
var START_TOKEN = /\{\{\{|\{\{|\{%|\{#/;
|
||||
var TAGS = {
|
||||
'{{{': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?\}\}\}/,
|
||||
'{{': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?\}\}/,
|
||||
'{%': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?%\}/,
|
||||
'{#': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?#\}/
|
||||
};
|
||||
|
||||
var delimeters = {
|
||||
'{%': 'directive',
|
||||
'{{': 'output',
|
||||
'{#': 'comment'
|
||||
};
|
||||
|
||||
var operators = {
|
||||
and: '&&',
|
||||
or: '||',
|
||||
not: '!',
|
||||
is: '==',
|
||||
isnot: '!='
|
||||
};
|
||||
|
||||
var constants = {
|
||||
'true': true,
|
||||
'false': false,
|
||||
'null': null
|
||||
};
|
||||
|
||||
function Parser() {
|
||||
this.nest = [];
|
||||
this.compiled = [];
|
||||
this.childBlocks = 0;
|
||||
this.parentBlocks = 0;
|
||||
this.isSilent = false;
|
||||
}
|
||||
|
||||
Parser.prototype.push = function (line) {
|
||||
if (!this.isSilent) {
|
||||
this.compiled.push(line);
|
||||
}
|
||||
};
|
||||
|
||||
Parser.prototype.parse = function (src) {
|
||||
this.tokenize(src);
|
||||
return this.compiled;
|
||||
};
|
||||
|
||||
Parser.prototype.tokenize = function (src) {
|
||||
var lastEnd = 0, parser = this, trimLeading = false;
|
||||
matchAll(src, START_TOKEN, function (open, index, src) {
|
||||
//here we match the rest of the src against a regex for this tag
|
||||
var match = src.slice(index + open.length).match(TAGS[open]);
|
||||
match = (match ? match[0] : '');
|
||||
//here we sub out strings so we don't get false matches
|
||||
var simplified = match.replace(STRINGS, '@');
|
||||
//if we don't have a close tag or there is a nested open tag
|
||||
if (!match || ~simplified.indexOf(open)) {
|
||||
return index + 1;
|
||||
}
|
||||
var inner = match.slice(0, 0 - open.length);
|
||||
//check for white-space collapse syntax
|
||||
if (inner.charAt(0) === '-') var wsCollapseLeft = true;
|
||||
if (inner.slice(-1) === '-') var wsCollapseRight = true;
|
||||
inner = inner.replace(/^-|-$/g, '').trim();
|
||||
//if we're in raw mode and we are not looking at an "endraw" tag, move along
|
||||
if (parser.rawMode && (open + inner) !== '{%endraw') {
|
||||
return index + 1;
|
||||
}
|
||||
var text = src.slice(lastEnd, index);
|
||||
lastEnd = index + open.length + match.length;
|
||||
if (trimLeading) text = trimLeft(text);
|
||||
if (wsCollapseLeft) text = trimRight(text);
|
||||
if (wsCollapseRight) trimLeading = true;
|
||||
if (open === '{{{') {
|
||||
//liquid-style: make {{{x}}} => {{x|safe}}
|
||||
open = '{{';
|
||||
inner += '|safe';
|
||||
}
|
||||
parser.textHandler(text);
|
||||
parser.tokenHandler(open, inner);
|
||||
});
|
||||
var text = src.slice(lastEnd);
|
||||
if (trimLeading) text = trimLeft(text);
|
||||
this.textHandler(text);
|
||||
};
|
||||
|
||||
Parser.prototype.textHandler = function (text) {
|
||||
this.push('write(' + JSON.stringify(text) + ');');
|
||||
};
|
||||
|
||||
Parser.prototype.tokenHandler = function (open, inner) {
|
||||
var type = delimeters[open];
|
||||
if (type === 'directive') {
|
||||
this.compileTag(inner);
|
||||
} else if (type === 'output') {
|
||||
var extracted = this.extractEnt(inner, STRINGS, '@');
|
||||
//replace || operators with ~
|
||||
extracted.src = extracted.src.replace(/\|\|/g, '~').split('|');
|
||||
//put back || operators
|
||||
extracted.src = extracted.src.map(function (part) {
|
||||
return part.split('~').join('||');
|
||||
});
|
||||
var parts = this.injectEnt(extracted, '@');
|
||||
if (parts.length > 1) {
|
||||
var filters = parts.slice(1).map(this.parseFilter.bind(this));
|
||||
this.push('filter(' + this.parseExpr(parts[0]) + ',' + filters.join(',') + ');');
|
||||
} else {
|
||||
this.push('filter(' + this.parseExpr(parts[0]) + ');');
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Parser.prototype.compileTag = function (str) {
|
||||
var directive = str.split(' ')[0];
|
||||
var handler = tagHandlers[directive];
|
||||
if (!handler) {
|
||||
throw new Error('Invalid tag: ' + str);
|
||||
}
|
||||
handler.call(this, str.slice(directive.length).trim());
|
||||
};
|
||||
|
||||
Parser.prototype.parseFilter = function (src) {
|
||||
src = src.trim();
|
||||
var match = src.match(/[:(]/);
|
||||
var i = match ? match.index : -1;
|
||||
if (i < 0) return JSON.stringify([src]);
|
||||
var name = src.slice(0, i);
|
||||
var args = src.charAt(i) === ':' ? src.slice(i + 1) : src.slice(i + 1, -1);
|
||||
args = this.parseExpr(args, {terms: true});
|
||||
return '[' + JSON.stringify(name) + ',' + args + ']';
|
||||
};
|
||||
|
||||
Parser.prototype.extractEnt = function (src, regex, placeholder) {
|
||||
var subs = [], isFunc = typeof placeholder == 'function';
|
||||
src = src.replace(regex, function (str) {
|
||||
var replacement = isFunc ? placeholder(str) : placeholder;
|
||||
if (replacement) {
|
||||
subs.push(str);
|
||||
return replacement;
|
||||
}
|
||||
return str;
|
||||
});
|
||||
return {src: src, subs: subs};
|
||||
};
|
||||
|
||||
Parser.prototype.injectEnt = function (extracted, placeholder) {
|
||||
var src = extracted.src, subs = extracted.subs, isArr = Array.isArray(src);
|
||||
var arr = (isArr) ? src : [src];
|
||||
var re = new RegExp('[' + placeholder + ']', 'g'), i = 0;
|
||||
arr.forEach(function (src, index) {
|
||||
arr[index] = src.replace(re, function () {
|
||||
return subs[i++];
|
||||
});
|
||||
});
|
||||
return isArr ? arr : arr[0];
|
||||
};
|
||||
|
||||
//replace complex literals without mistaking subscript notation with array literals
|
||||
Parser.prototype.replaceComplex = function (s) {
|
||||
var parsed = this.extractEnt(s, /i(\.i|\[[@#i]\])+/g, 'v');
|
||||
parsed.src = parsed.src.replace(NON_PRIMITIVES, '~');
|
||||
return this.injectEnt(parsed, 'v');
|
||||
};
|
||||
|
||||
//parse expression containing literals (including objects/arrays) and variables (including dot and subscript notation)
|
||||
//valid expressions: `a + 1 > b.c or c == null`, `a and b[1] != c`, `(a < b) or (c < d and e)`, 'a || [1]`
|
||||
Parser.prototype.parseExpr = function (src, opts) {
|
||||
opts = opts || {};
|
||||
//extract string literals -> @
|
||||
var parsed1 = this.extractEnt(src, STRINGS, '@');
|
||||
//note: this will catch {not: 1} and a.is; could we replace temporarily and then check adjacent chars?
|
||||
parsed1.src = parsed1.src.replace(EOPS, function (s, before, op, after) {
|
||||
return (op in operators) ? before + operators[op] + after : s;
|
||||
});
|
||||
//sub out non-string literals (numbers/true/false/null) -> #
|
||||
// the distinction is necessary because @ can be object identifiers, # cannot
|
||||
var parsed2 = this.extractEnt(parsed1.src, IDENTS_AND_NUMS, function (s) {
|
||||
return (s in constants || NUMBER.test(s)) ? '#' : null;
|
||||
});
|
||||
//sub out object/variable identifiers -> i
|
||||
var parsed3 = this.extractEnt(parsed2.src, IDENTIFIERS, 'i');
|
||||
//remove white-space
|
||||
parsed3.src = parsed3.src.replace(/\s+/g, '');
|
||||
|
||||
//the rest of this is simply to boil the expression down and check validity
|
||||
var simplified = parsed3.src;
|
||||
//sub out complex literals (objects/arrays) -> ~
|
||||
// the distinction is necessary because @ and # can be subscripts but ~ cannot
|
||||
while (simplified !== (simplified = this.replaceComplex(simplified))) ;
|
||||
//now @ represents strings, # represents other primitives and ~ represents non-primitives
|
||||
//replace complex variables (those with dot/subscript accessors) -> v
|
||||
while (simplified !== (simplified = simplified.replace(/i(\.i|\[[@#i]\])+/, 'v'))) ;
|
||||
//empty subscript or complex variables in subscript, are not permitted
|
||||
simplified = simplified.replace(/[iv]\[v?\]/g, 'x');
|
||||
//sub in "i" for @ and # and ~ and v (now "i" represents all literals, variables and identifiers)
|
||||
simplified = simplified.replace(/[@#~v]/g, 'i');
|
||||
//sub out operators
|
||||
simplified = simplified.replace(OPERATORS, '%');
|
||||
//allow 'not' unary operator
|
||||
simplified = simplified.replace(/!+[i]/g, 'i');
|
||||
var terms = opts.terms ? simplified.split(',') : [simplified];
|
||||
terms.forEach(function (term) {
|
||||
//simplify logical grouping
|
||||
while (term !== (term = term.replace(/\(i(%i)*\)/g, 'i'))) ;
|
||||
if (!term.match(/^i(%i)*/)) {
|
||||
throw new Error('Invalid expression: ' + src + " " + term);
|
||||
}
|
||||
});
|
||||
parsed3.src = parsed3.src.replace(VARIABLES, this.parseVar.bind(this));
|
||||
parsed2.src = this.injectEnt(parsed3, 'i');
|
||||
parsed1.src = this.injectEnt(parsed2, '#');
|
||||
return this.injectEnt(parsed1, '@');
|
||||
};
|
||||
|
||||
Parser.prototype.parseVar = function (src) {
|
||||
var args = Array.prototype.slice.call(arguments);
|
||||
var str = args.pop(), index = args.pop();
|
||||
//quote bare object identifiers (might be a reserved word like {while: 1})
|
||||
if (src === 'i' && str.charAt(index + 1) === ':') {
|
||||
return '"i"';
|
||||
}
|
||||
var parts = ['"i"'];
|
||||
src.replace(ACCESSOR, function (part) {
|
||||
if (part === '.i') {
|
||||
parts.push('"i"');
|
||||
} else if (part === '[i]') {
|
||||
parts.push('get("i")');
|
||||
} else {
|
||||
parts.push(part.slice(1, -1));
|
||||
}
|
||||
});
|
||||
return 'get(' + parts.join(',') + ')';
|
||||
};
|
||||
|
||||
//escapes a name to be used as a javascript identifier
|
||||
Parser.prototype.escName = function (str) {
|
||||
return str.replace(/\W/g, function (s) {
|
||||
return '$' + s.charCodeAt(0).toString(16);
|
||||
});
|
||||
};
|
||||
|
||||
Parser.prototype.parseQuoted = function (str) {
|
||||
if (str.charAt(0) === "'") {
|
||||
str = str.slice(1, -1).replace(/\\.|"/, function (s) {
|
||||
if (s === "\\'") return "'";
|
||||
return s.charAt(0) === '\\' ? s : ('\\' + s);
|
||||
});
|
||||
str = '"' + str + '"';
|
||||
}
|
||||
//todo: try/catch or deal with invalid characters (linebreaks, control characters)
|
||||
return JSON.parse(str);
|
||||
};
|
||||
|
||||
|
||||
//the context 'this' inside tagHandlers is the parser instance
|
||||
var tagHandlers = {
|
||||
'if': function (expr) {
|
||||
this.push('if (' + this.parseExpr(expr) + ') {');
|
||||
this.nest.unshift('if');
|
||||
},
|
||||
'else': function () {
|
||||
if (this.nest[0] === 'for') {
|
||||
this.push('}, function() {');
|
||||
} else {
|
||||
this.push('} else {');
|
||||
}
|
||||
},
|
||||
'elseif': function (expr) {
|
||||
this.push('} else if (' + this.parseExpr(expr) + ') {');
|
||||
},
|
||||
'endif': function () {
|
||||
this.nest.shift();
|
||||
this.push('}');
|
||||
},
|
||||
'for': function (str) {
|
||||
var i = str.indexOf(' in ');
|
||||
var name = str.slice(0, i).trim();
|
||||
var expr = str.slice(i + 4).trim();
|
||||
this.push('each(' + this.parseExpr(expr) + ',' + JSON.stringify(name) + ',function() {');
|
||||
this.nest.unshift('for');
|
||||
},
|
||||
'endfor': function () {
|
||||
this.nest.shift();
|
||||
this.push('});');
|
||||
},
|
||||
'raw': function () {
|
||||
this.rawMode = true;
|
||||
},
|
||||
'endraw': function () {
|
||||
this.rawMode = false;
|
||||
},
|
||||
'set': function (stmt) {
|
||||
var i = stmt.indexOf('=');
|
||||
var name = stmt.slice(0, i).trim();
|
||||
var expr = stmt.slice(i + 1).trim();
|
||||
this.push('set(' + JSON.stringify(name) + ',' + this.parseExpr(expr) + ');');
|
||||
},
|
||||
'block': function (name) {
|
||||
if (this.isParent) {
|
||||
++this.parentBlocks;
|
||||
var blockName = 'block_' + (this.escName(name) || this.parentBlocks);
|
||||
this.push('block(typeof ' + blockName + ' == "function" ? ' + blockName + ' : function() {');
|
||||
} else if (this.hasParent) {
|
||||
this.isSilent = false;
|
||||
++this.childBlocks;
|
||||
blockName = 'block_' + (this.escName(name) || this.childBlocks);
|
||||
this.push('function ' + blockName + '() {');
|
||||
}
|
||||
this.nest.unshift('block');
|
||||
},
|
||||
'endblock': function () {
|
||||
this.nest.shift();
|
||||
if (this.isParent) {
|
||||
this.push('});');
|
||||
} else if (this.hasParent) {
|
||||
this.push('}');
|
||||
this.isSilent = true;
|
||||
}
|
||||
},
|
||||
'extends': function (name) {
|
||||
name = this.parseQuoted(name);
|
||||
var parentSrc = this.readTemplateFile(name);
|
||||
this.isParent = true;
|
||||
this.tokenize(parentSrc);
|
||||
this.isParent = false;
|
||||
this.hasParent = true;
|
||||
//silence output until we enter a child block
|
||||
this.isSilent = true;
|
||||
},
|
||||
'include': function (name) {
|
||||
name = this.parseQuoted(name);
|
||||
var incSrc = this.readTemplateFile(name);
|
||||
this.isInclude = true;
|
||||
this.tokenize(incSrc);
|
||||
this.isInclude = false;
|
||||
}
|
||||
};
|
||||
|
||||
//liquid style
|
||||
tagHandlers.assign = tagHandlers.set;
|
||||
//python/django style
|
||||
tagHandlers.elif = tagHandlers.elseif;
|
||||
|
||||
var getRuntime = function runtime(data, opts) {
|
||||
var defaults = {autoEscape: 'toJson'};
|
||||
var _toString = Object.prototype.toString;
|
||||
var _hasOwnProperty = Object.prototype.hasOwnProperty;
|
||||
var getKeys = Object.keys || function (obj) {
|
||||
var keys = [];
|
||||
for (var n in obj) if (_hasOwnProperty.call(obj, n)) keys.push(n);
|
||||
return keys;
|
||||
};
|
||||
var isArray = Array.isArray || function (obj) {
|
||||
return _toString.call(obj) === '[object Array]';
|
||||
};
|
||||
var create = Object.create || function (obj) {
|
||||
function F() {
|
||||
}
|
||||
|
||||
F.prototype = obj;
|
||||
return new F();
|
||||
};
|
||||
var toString = function (val) {
|
||||
if (val == null) return '';
|
||||
return (typeof val.toString == 'function') ? val.toString() : _toString.call(val);
|
||||
};
|
||||
var extend = function (dest, src) {
|
||||
var keys = getKeys(src);
|
||||
for (var i = 0, len = keys.length; i < len; i++) {
|
||||
var key = keys[i];
|
||||
dest[key] = src[key];
|
||||
}
|
||||
return dest;
|
||||
};
|
||||
//get a value, lexically, starting in current context; a.b -> get("a","b")
|
||||
var get = function () {
|
||||
var val, n = arguments[0], c = stack.length;
|
||||
while (c--) {
|
||||
val = stack[c][n];
|
||||
if (typeof val != 'undefined') break;
|
||||
}
|
||||
for (var i = 1, len = arguments.length; i < len; i++) {
|
||||
if (val == null) continue;
|
||||
n = arguments[i];
|
||||
val = (_hasOwnProperty.call(val, n)) ? val[n] : (typeof val._get == 'function' ? (val[n] = val._get(n)) : null);
|
||||
}
|
||||
return (val == null) ? '' : val;
|
||||
};
|
||||
var set = function (n, val) {
|
||||
stack[stack.length - 1][n] = val;
|
||||
};
|
||||
var push = function (ctx) {
|
||||
stack.push(ctx || {});
|
||||
};
|
||||
var pop = function () {
|
||||
stack.pop();
|
||||
};
|
||||
var write = function (str) {
|
||||
output.push(str);
|
||||
};
|
||||
var filter = function (val) {
|
||||
for (var i = 1, len = arguments.length; i < len; i++) {
|
||||
var arr = arguments[i], name = arr[0], filter = filters[name];
|
||||
if (filter) {
|
||||
arr[0] = val;
|
||||
//now arr looks like [val, arg1, arg2]
|
||||
val = filter.apply(data, arr);
|
||||
} else {
|
||||
throw new Error('Invalid filter: ' + name);
|
||||
}
|
||||
}
|
||||
if (opts.autoEscape && name !== opts.autoEscape && name !== 'safe') {
|
||||
//auto escape if not explicitly safe or already escaped
|
||||
val = filters[opts.autoEscape].call(data, val);
|
||||
}
|
||||
output.push(val);
|
||||
};
|
||||
var each = function (obj, loopvar, fn1, fn2) {
|
||||
if (obj == null) return;
|
||||
var arr = isArray(obj) ? obj : getKeys(obj), len = arr.length;
|
||||
var ctx = {loop: {length: len, first: arr[0], last: arr[len - 1]}};
|
||||
push(ctx);
|
||||
for (var i = 0; i < len; i++) {
|
||||
extend(ctx.loop, {index: i + 1, index0: i});
|
||||
fn1(ctx[loopvar] = arr[i]);
|
||||
}
|
||||
if (len === 0 && fn2) fn2();
|
||||
pop();
|
||||
};
|
||||
var block = function (fn) {
|
||||
push();
|
||||
fn();
|
||||
pop();
|
||||
};
|
||||
var render = function () {
|
||||
return output.join('');
|
||||
};
|
||||
data = data || {};
|
||||
opts = extend(defaults, opts || {});
|
||||
var filters = extend({
|
||||
html: function (val) {
|
||||
return toString(val)
|
||||
.split('&').join('&')
|
||||
.split('<').join('<')
|
||||
.split('>').join('>')
|
||||
.split('"').join('"');
|
||||
},
|
||||
safe: function (val) {
|
||||
return val;
|
||||
},
|
||||
toJson: function (val) {
|
||||
if (typeof val === 'object') {
|
||||
return JSON.stringify(val);
|
||||
}
|
||||
return toString(val);
|
||||
}
|
||||
}, opts.filters || {});
|
||||
var stack = [create(data || {})], output = [];
|
||||
return {
|
||||
get: get,
|
||||
set: set,
|
||||
push: push,
|
||||
pop: pop,
|
||||
write: write,
|
||||
filter: filter,
|
||||
each: each,
|
||||
block: block,
|
||||
render: render
|
||||
};
|
||||
};
|
||||
|
||||
var runtime;
|
||||
|
||||
jinja.compile = function (markup, opts) {
|
||||
opts = opts || {};
|
||||
var parser = new Parser();
|
||||
parser.readTemplateFile = this.readTemplateFile;
|
||||
var code = [];
|
||||
code.push('function render($) {');
|
||||
code.push('var get = $.get, set = $.set, push = $.push, pop = $.pop, write = $.write, filter = $.filter, each = $.each, block = $.block;');
|
||||
code.push.apply(code, parser.parse(markup));
|
||||
code.push('return $.render();');
|
||||
code.push('}');
|
||||
code = code.join('\n');
|
||||
if (opts.runtime === false) {
|
||||
var fn = new Function('data', 'options', 'return (' + code + ')(runtime(data, options))');
|
||||
} else {
|
||||
runtime = runtime || (runtime = getRuntime.toString());
|
||||
fn = new Function('data', 'options', 'return (' + code + ')((' + runtime + ')(data, options))');
|
||||
}
|
||||
return {render: fn};
|
||||
};
|
||||
|
||||
jinja.render = function (markup, data, opts) {
|
||||
var tmpl = jinja.compile(markup);
|
||||
return tmpl.render(data, opts);
|
||||
};
|
||||
|
||||
jinja.templateFiles = [];
|
||||
|
||||
jinja.readTemplateFile = function (name) {
|
||||
var templateFiles = this.templateFiles || [];
|
||||
var templateFile = templateFiles[name];
|
||||
if (templateFile == null) {
|
||||
throw new Error('Template file not found: ' + name);
|
||||
}
|
||||
return templateFile;
|
||||
};
|
||||
|
||||
|
||||
/*!
|
||||
* Helpers
|
||||
*/
|
||||
|
||||
function trimLeft(str) {
|
||||
return str.replace(LEADING_SPACE, '');
|
||||
}
|
||||
|
||||
function trimRight(str) {
|
||||
return str.replace(TRAILING_SPACE, '');
|
||||
}
|
||||
|
||||
function matchAll(str, reg, fn) {
|
||||
//copy as global
|
||||
reg = new RegExp(reg.source, 'g' + (reg.ignoreCase ? 'i' : '') + (reg.multiline ? 'm' : ''));
|
||||
var match;
|
||||
while ((match = reg.exec(str))) {
|
||||
var result = fn(match[0], match.index, str);
|
||||
if (typeof result == 'number') {
|
||||
reg.lastIndex = result;
|
||||
}
|
||||
}
|
||||
}
|
||||
}));
|
||||
1
js/jinja.min.js
vendored
Normal file
1
js/jinja.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
265
js/jsencrypt.js
Normal file
265
js/jsencrypt.js
Normal file
File diff suppressed because one or more lines are too long
1737
js/json5.js
Normal file
1737
js/json5.js
Normal file
File diff suppressed because one or more lines are too long
1
js/madou.js
Normal file
1
js/madou.js
Normal file
File diff suppressed because one or more lines are too long
2
js/node-rsa.js
Normal file
2
js/node-rsa.js
Normal file
File diff suppressed because one or more lines are too long
2
js/pako.min.js
vendored
Normal file
2
js/pako.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
66
js/porn.js
Normal file
66
js/porn.js
Normal file
@@ -0,0 +1,66 @@
|
||||
var rule = {
|
||||
title: 'porn',
|
||||
host: 'https://cn.pornhub.com/',
|
||||
url: '/channels/fyclass/videos?page=fypage',
|
||||
searchUrl: '/video/search?search=**',
|
||||
searchable: 1,
|
||||
quickSearch: 1,
|
||||
class_name: '国产&JAHD①&JAHD②&麻豆', //静态分类名称拼接
|
||||
class_url: 'av-jiali&javhd&jav-hub&asiam', //静态分类标识拼接
|
||||
limit: 999,
|
||||
headers: { 'User-Agent': PC_UA, 'Referer': '' },
|
||||
double: true,
|
||||
一级: $js.toString(() => {
|
||||
let d = [];
|
||||
let html = request(input)
|
||||
let htmm = jsp.pdfa(html, '.container ul .pcVideoListItem')
|
||||
htmm.forEach(it => {
|
||||
let id1 = HOST + jsp.pdfh(it, 'a&&href')
|
||||
let title1 = jsp.pdfh(it, 'img&&alt')
|
||||
let pic1 = jsp.pdfh(it, 'img&&src')
|
||||
let qx1 = jsp.pdfh(it, '.views&&Text')
|
||||
d.push({
|
||||
url: id1,
|
||||
title: title1,
|
||||
img: pic1,
|
||||
desc: qx1,
|
||||
})
|
||||
});
|
||||
setResult(d)
|
||||
}),
|
||||
二级: $js.toString(() => {
|
||||
let urls = [];
|
||||
let html = request(input);
|
||||
let s = jsp.pdfh(html, '.container&&script:eq(4)&&Html');
|
||||
|
||||
function jjj(s) {
|
||||
const start = s.indexOf('"mediaDefinitions":') + '"mediaDefinitions":'.length;
|
||||
const firstBracketIndex = s.indexOf('[', start);
|
||||
let count = 1;
|
||||
let end = firstBracketIndex;
|
||||
|
||||
for (let i = firstBracketIndex + 1; i < s.length; i++) {
|
||||
if (s[i] === '[') count++;
|
||||
else if (s[i] === ']') count--;
|
||||
if (count === 0) {
|
||||
end = i + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (end > firstBracketIndex) {
|
||||
const jsonStr = s.substring(firstBracketIndex, end);
|
||||
return JSON.parse(jsonStr);
|
||||
|
||||
}
|
||||
}
|
||||
jjj(s).forEach(it => {
|
||||
urls.push(it.height + '$' + it.videoUrl);
|
||||
})
|
||||
|
||||
VOD = {
|
||||
vod_play_from: 'XSP',
|
||||
vod_play_url: urls.join('#')
|
||||
}
|
||||
}),
|
||||
搜索: '*',
|
||||
}
|
||||
55
js/xvideos.js
Normal file
55
js/xvideos.js
Normal file
@@ -0,0 +1,55 @@
|
||||
var rule = {
|
||||
title: 'xvideos',
|
||||
host: 'https://www.xvideos.com/',
|
||||
url: 'fyclass&sort=relevance&quality=hd&p=fypage',
|
||||
searchUrl: '?k=**&p=fypage',
|
||||
searchable: 1,
|
||||
quickSearch: 1,
|
||||
filterable: 1,
|
||||
class_name: '1&2&3&4&5&6&7&8&4K', //静态分类名称拼接
|
||||
class_url: '?k=粉嫩美穴&?k=极品丝袜&?k=粉嫩白虎&?k=极品美女&?k=chinese&?k=台湾美女&?k=传媒&?k=高清无码内射&?k=亚洲4k', //静态分类标识拼接
|
||||
limit: 999,
|
||||
double: true,
|
||||
//sniffer: 1,
|
||||
一级: $js.toString(() => {
|
||||
let d = [];
|
||||
let aaa=fetch(input, {onlyHeaders:true});
|
||||
console.log("jdhdh====="+aaa)
|
||||
let html=request(input)
|
||||
let htmm=jsp.pdfa(html,'.cust-nb-cols&&.thumb-block')
|
||||
htmm.forEach(it => {
|
||||
let id1 = HOST+jsp.pdfh(it,'.thumb&&a&&href')
|
||||
let title1 = jsp.pdfh(it,'.title&&Text')
|
||||
let titlel = title1.replace(/https?:\/\/\S+/gi, '');
|
||||
let pic1 = jsp.pdfh(it,'img&&data-src')
|
||||
let qx1 = jsp.pdfh(it,'.video-hd-mark&&Text')
|
||||
d.push({
|
||||
url: id1,
|
||||
title: titlel,
|
||||
img: pic1,
|
||||
desc: qx1,
|
||||
})
|
||||
});
|
||||
setResult(d)
|
||||
}),
|
||||
二级: $js.toString(() => {
|
||||
let urls = [];
|
||||
let html=request(input);
|
||||
let dd=jsp.pdfa(html, '#video-player-bg&&script:eq(-3)').toString();
|
||||
// console.log("djiewdneiin==="+dd)
|
||||
const d = [];
|
||||
const regex = /setVideoUrlLow\('([^']+)'\);|setVideoUrlHigh\('([^']+)'\);|setVideoHLS\('([^']+)'\);/g;
|
||||
let match;
|
||||
while ((match = regex.exec(dd)) !== null) {
|
||||
if (match[1]) d.push(`标清$${match[1]}`);
|
||||
if (match[2]) d.push(`高清$${match[2]}`);
|
||||
if (match[3]) d.push(`超清$${match[3]}`);
|
||||
}
|
||||
// console.log("djiewdneiin==="+d.toString())
|
||||
VOD = {
|
||||
vod_play_from: 'XSP',
|
||||
vod_play_url: d.join('#')
|
||||
}
|
||||
}),
|
||||
搜索: '.cust-nb-cols .thumb-block;.title a&&title;img&&data-src;.video-hd-mark&&Text;.title a&&href',
|
||||
}
|
||||
113
js/小处女.js
Normal file
113
js/小处女.js
Normal file
@@ -0,0 +1,113 @@
|
||||
var rule = {
|
||||
title: '[密] 小chu女',
|
||||
host: 'https://eey.myacetwve.buzz/chu/',
|
||||
url: 'https://eey.myacetwve.buzz/vodtype/fyclass-fypage/',
|
||||
homeUrl: 'https://eey.myacetwve.buzz/chu/',
|
||||
|
||||
searchUrl: 'https://eey.myacetwve.buzz/vodsearch/**----------fypage---/',
|
||||
detailUrl: '',
|
||||
searchable: 1,
|
||||
quickSearch: 1,
|
||||
filterable: 1,
|
||||
limit: 30,
|
||||
编码: 'utf-8',
|
||||
timeout: 5000,
|
||||
headers: {
|
||||
'User-Agent': 'Mozilla/5.0 (Linux; Android 15; RMX3770 Build/AP3A.240617.008) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.58 Mobile Safari/537.36'
|
||||
},
|
||||
class_name: '国产视频&国产主播&91大神&热门事件&传媒自拍&日本有码&日本无码&日韩主播&动漫肉番&女同性恋&中文字幕&强奸乱伦&熟女人妻&制服诱惑&AV解说&女星换脸&欧美精品&日韩无码&强奸乱伦&欧美精品&人妻系列&中文字幕&动漫精品&日韩精品&伦理影片&制服诱惑&自拍偷拍&3P合辑&AV明星&巨乳系列&颜射系列&口交视频&自慰系列&国产精品&SM重味&教师学生&大秀视频&国产精品&华语AV&黑料吃瓜&欧美&禁漫&学生&乱伦&探花&日本有码&日本无码&主播网红&日本素人&精品推荐&国产色情&主播直播&亚洲无码&中文字幕&巨乳美乳&人妻熟女&欧美精品&强奸乱伦&萝莉少女&亚洲有码&伦理三级&成人动漫&自拍偷拍&制服丝袜&口交颜射&日本精品&Cosplay&素人自拍&台湾辣妹&国产情色&自拍偷拍&日本无码&日本有码&人妻熟女&中文字幕&欧美精品&卡通动漫&韩国主播&伦理三级&传媒原创&口爆颜射&岛国素人&岛国女优&萝莉少女&重口调教&美颜巨乳&岛国群交&制服诱惑&同性女优&日韩无码&国产精品&日韩精品&欧美精品&动漫精品&自拍偷拍&伦理影片&中文字幕&人妻系列&制服诱惑&强奸乱伦&AV明星&SM重味&巨乳系列&颜射系列&口交视频&自慰系列&教师学生&大秀视频&明星换脸&国产自拍&日本无码&日本有码&中文字幕&欧美精品&成人动漫&日本素人&高清名优&三级伦理&网红主播&映画传媒&人妻熟女&口爆颜射&萝莉少女&SM调教&美乳巨乳&短视频&制服诱惑&女同性爱&AI换脸&麻豆传媒&精东影业&蜜桃传媒&果冻传媒&星空无限传媒&SA国际传媒&性视界传媒&国产-自拍&国产-偷拍&国产-探花&国产-主播&天美传媒&欧美-高清无码&日本-中文字幕&日本-无码流出&日本-高清有码&皇家华人&欧美-中文字幕&刘玥&玩偶姐姐&国产自拍&主播诱惑&探花约炮&偷拍偷窥&网曝吃瓜&抖阴短片&传媒剧情&日韩主播&日韩无码&中文字幕&AV解说&换脸明星&强奸乱伦&女优明星&欧美激情&重口激情&三级伦理&剧情动漫&SM调教&女同性恋&国产视频&中文字幕&国产传媒&日本有码&日本无码&欧美无码&强奸乱伦&制服诱惑&国产主播&激情动漫&明星换脸&抖阴视频&女优明星&网曝黑料&伦理三级&AV解说&SM调教&萝莉少女&极品媚黑&女同性恋&亚洲无码&亚洲有码&欧美情色&中文字幕&动漫卡通&美女主播&人妻熟女&强奸乱伦&三级伦理&国产自拍&国产传媒&女优合集&国产乱伦&网曝门事件&绿帽淫妻&国产乱伦&AV解说&国产探花&亚洲情色&国产主播&国产自拍&无码专区&欧美性爱&熟女人妻&强奸乱伦&巨乳美乳&中文字幕&制服诱惑&女同性恋&卡通动画&视频伦理&少女萝莉&重口色情&人兽性交&福利姬&制服丝袜&群交淫乱&无码专区&偷拍自拍&卡通动漫&中文字幕&欧美性爱&巨乳美乳&国产裸聊&国产自拍&国产盗摄&伦理三级&女同性恋&少女萝莉&人妖系列&虚拟VR&国产区&AV区&欧美区&动漫区&网红主播&国产传媒&探花系列&人妻熟女&日本无码&美乳巨乳&强制侵犯&制服诱惑&绝色佳人&风俗泡泡浴&家庭乱伦&AV解说&三级电影&少女萝莉&SM调教&绝顶潮吹&麻豆视频&91制片厂&天美传媒&蜜桃传媒&皇家华人&星空传媒&精东影业&大象传媒&91茄子&性视界传媒&兔子先生&杏吧原创&玩偶姐姐&香蕉传媒&SA国际传媒&EDmosaic&PsychoPorn&糖心Vlog&葫芦影业&果冻传媒',
|
||||
//分类: '电影&电视剧&综艺&动漫',
|
||||
class_url: '2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&444&19&20&21&22&23&24&25&26&27&28&29&30&31&32&33&34&35&36&37&38&49&50&51&52&53&54&55&56&57&58&59&60&62&63&64&65&66&67&68&69&70&71&72&73&74&75&76&77&78&79&80&81&105&106&107&108&109&110&111&112&113&114&115&116&117&118&119&120&121&122&123&124&133&134&135&136&137&138&139&140&141&142&143&144&145&146&147&148&149&150&151&152&155&156&157&158&159&160&161&162&163&164&165&166&167&168&169&170&171&172&173&174&187&188&189&190&191&192&193&194&195&196&197&198&199&201&202&203&204&205&207&208&274&275&276&277&278&279&280&281&282&283&284&285&286&287&288&289&290&291&292&293&297&298&299&300&301&302&303&304&305&306&307&308&309&310&311&312&313&314&315&316&322&323&324&325&326&327&328&329&330&331&339&340&341&342&343&344&345&346&348&349&350&351&352&353&354&355&356&357&358&359&360&361&362&363&364&366&367&368&369&370&371&372&373&374&375&376&377&378&379&380&381&383&384&385&386&387&388&389&390&391&392&393&394&395&396&397&398&399&400&401&402&424&425&426&427&428&429&430&431&432&433&434&435&436&437&438&439&440&441&442&443&',
|
||||
// 图片来源: '@Referer=https://xg.acubsam.top/label/sort/@User-Agent=Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36',
|
||||
|
||||
//是否启用辅助嗅探: 1,0
|
||||
sniffer: 0,
|
||||
// 辅助嗅探规则
|
||||
isVideo: 'http((?!http).){26,}\\.(m3u8|mp4|flv|avi|mkv|wmv|mpg|mpeg|mov|ts|3gp|rm|rmvb|asf|m4a|mp3|wma)',
|
||||
play_parse: true,
|
||||
|
||||
lazy: $js.toString(() => {
|
||||
|
||||
/* let kurl = fetch(input).split('const source = \'')[1].split('\'')[0].replace(/\\\//g, '/');
|
||||
|
||||
if (/\.(m3u8|mp4)/.test(kurl)) {
|
||||
input = { jx: 0, parse: 0, url: kurl, header: {'User-Agent': MOBILE_UA, 'Referer': getHome(kurl)} }
|
||||
} else {
|
||||
input = { jx: 0, parse: 1, url: input }
|
||||
}
|
||||
}),*/
|
||||
let kcode = JSON.parse(fetch(input).split('player_data=')[1].split('<')[0]);
|
||||
let kurl = kcode.url;
|
||||
if (/\.(m3u8|mp4)/.test(kurl)) {
|
||||
input = {
|
||||
jx: 0,
|
||||
parse: 0,
|
||||
url: kurl,
|
||||
header: {
|
||||
'User-Agent': MOBILE_UA,
|
||||
'Referer': getHome(kurl)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
input = {
|
||||
jx: 0,
|
||||
parse: 1,
|
||||
url: input
|
||||
}
|
||||
}
|
||||
}),
|
||||
|
||||
double: false,
|
||||
|
||||
tab_rename: {
|
||||
'道长在线': '小chu女'
|
||||
},
|
||||
hikerListCol: "movie_2",
|
||||
hikerClassListCol: "movie_2",
|
||||
推荐: '*',
|
||||
|
||||
一级: $js.toString(() => {
|
||||
let klist = pdfa(request(input), '.item-box:has([href*="/voddetail/"])');
|
||||
let k = [];
|
||||
klist.forEach(it => {
|
||||
k.push({
|
||||
title: pdfh(it, 'a&&title'),
|
||||
pic_url: !pdfh(it, 'img&&data-src').startsWith('http') ? HOST + pdfh(it, 'img&&data-src') : pdfh(it, 'img&&data-src'),
|
||||
|
||||
desc: pdfh(it, 'small:eq(1)&&Text'),
|
||||
url: pdfh(it, 'a&&href'),
|
||||
content: ''
|
||||
})
|
||||
});
|
||||
setResult(k)
|
||||
}),
|
||||
|
||||
// 一级: '.video-item;img&&alt;img&&data-src;.text-white&&Text;a&&href',
|
||||
二级: $js.toString(() => {
|
||||
let html = request(input);
|
||||
VOD = {};
|
||||
VOD.vod_id = input;
|
||||
VOD.vod_name = pdfh(html, 'h1&&Text');
|
||||
VOD.type_name = pdfh(html, '.f-24&&Text');
|
||||
VOD.vod_pic = pd(html, '.detail-image-wrapper&&img&&data-src', input);
|
||||
VOD.vod_content = '瑟瑟才是源动力:' + pdfh(html, 'h1&&Text').replace('剧情介绍:', '');
|
||||
|
||||
let r_ktabs = pdfa(html, 'span.tx-flex-sh');
|
||||
let ktabs = r_ktabs.map(it => pdfh(it, 'Text'));
|
||||
VOD.vod_play_from = ktabs.join('$$$');
|
||||
|
||||
let klists = [];
|
||||
let r_plists = pdfa(html, 'span.tx-flex-sh&&a');
|
||||
r_plists.forEach((rp) => {
|
||||
let klist = pdfa(rp, 'a').map((it) => {
|
||||
return pdfh(it, 'a&&Text') + '$' + pd(it, 'a&&href', input);
|
||||
});
|
||||
klist = klist.join('#');
|
||||
klists.push(klist);
|
||||
});
|
||||
VOD.vod_play_url = klists.join('$$$')
|
||||
}),
|
||||
|
||||
// 二级: '*',
|
||||
搜索: '*',
|
||||
}
|
||||
18
js/色色直播.js
Normal file
18
js/色色直播.js
Normal file
@@ -0,0 +1,18 @@
|
||||
var rule = {
|
||||
title:'ss直播',
|
||||
host:'http://api.hclyz.com:81',
|
||||
homeUrl:'/mf/json.txt',
|
||||
url:'/mf/fyclass',
|
||||
class_name:'all',
|
||||
class_url:'json.txt',
|
||||
headers:{
|
||||
'User-Agent':'MOBILE_UA',
|
||||
},
|
||||
timeout:5000,
|
||||
limit:200,
|
||||
play_parse:true,
|
||||
lazy:'',
|
||||
一级:'json:pingtai;title;xinimg;Number;address',
|
||||
二级:'js:var d=[];var jo=JSON.parse(request(input)).zhubo;VOD={};for(var i=0;i<jo.length;i++){d.push({title:jo[i].title,url:jo[i].address})}VOD.vod_play_from="播放源";VOD.vod_play_url=d.map(function(it){return it.title+"$"+it.url}).join("#");setResult(d);',
|
||||
搜索:'*',
|
||||
}
|
||||
1
js/菜佬爬火车.js
Normal file
1
js/菜佬爬火车.js
Normal file
@@ -0,0 +1 @@
|
||||
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
|
||||
Reference in New Issue
Block a user