mirror of
https://github.com/ls125781003/tvboxtg.git
synced 2025-12-12 07:02:18 +00:00
128
天天开心/api.json
128
天天开心/api.json
@@ -240,16 +240,6 @@
|
||||
"order_num": 87,
|
||||
"ext": "./js/好趣网.js"
|
||||
},
|
||||
{
|
||||
"key": "4K_XYQHiker",
|
||||
"name": "🎦4K┃XYQHiker",
|
||||
"type": 3,
|
||||
"api": "csp_XYQHiker",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"filterable": 1,
|
||||
"ext": "./json/4kav.json"
|
||||
},
|
||||
{
|
||||
"key": "荐片",
|
||||
"name": "🎦荐片┃P2P",
|
||||
@@ -387,19 +377,6 @@
|
||||
"filterable": 1,
|
||||
"timeout": 10
|
||||
},
|
||||
{
|
||||
"key": "厂长弹幕版",
|
||||
"name": "🌸厂长┃弹幕",
|
||||
"type": 3,
|
||||
"api": "csp_Czzy",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"filterable": 1,
|
||||
"ext": {
|
||||
"danmu": true
|
||||
},
|
||||
"timeout": 10
|
||||
},
|
||||
{
|
||||
"key": "荐片弹幕版",
|
||||
"name": "⚔️荐片┃手机",
|
||||
@@ -479,17 +456,6 @@
|
||||
"filterable": 1,
|
||||
"ext": "http://rzys.xyz/"
|
||||
},
|
||||
{
|
||||
"key": "csp_AppDaMi",
|
||||
"name": "🍚大米┃影视",
|
||||
"type": 3,
|
||||
"playerType": "2",
|
||||
"api": "csp_AppDaMi",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"filterable": 1,
|
||||
"ext": "https://app-v1.ecoliving168.com/"
|
||||
},
|
||||
{
|
||||
"key": "ddys_js",
|
||||
"name": "🍄低端┃在线",
|
||||
@@ -501,6 +467,17 @@
|
||||
"ext": "./txt/ddys.txt",
|
||||
"timeout": 15
|
||||
},
|
||||
{
|
||||
"key": "果果4K解析_js",
|
||||
"name": "🌞果果4K(解析)",
|
||||
"type": 3,
|
||||
"api": "./api/drpy2.min.js",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"filterable": 1,
|
||||
"order_num": 0,
|
||||
"ext": "./js/果果4K.js"
|
||||
},
|
||||
{
|
||||
"key": "🌞腾腾4K解析_js",
|
||||
"name": "🌞腾腾4K(解析)",
|
||||
@@ -563,16 +540,6 @@
|
||||
"filterable": 1,
|
||||
"ext": "./json/河马短剧.json"
|
||||
},
|
||||
{
|
||||
"key": "csp_XYQHiker_短剧屋",
|
||||
"name": "🎦短剧屋",
|
||||
"type": 3,
|
||||
"api": "csp_XYQHiker",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"filterable": 1,
|
||||
"ext": "./json/短剧屋.json"
|
||||
},
|
||||
{
|
||||
"key": "js_星芽短剧",
|
||||
"name": "🎦星芽短剧",
|
||||
@@ -1121,27 +1088,6 @@
|
||||
"order_num": 0,
|
||||
"ext": "./js/宇航影视.js"
|
||||
},
|
||||
{
|
||||
"key": "js_subaibai",
|
||||
"name": "🎦白白影视",
|
||||
"type": 3,
|
||||
"api": "./api/drpy2.min.js",
|
||||
"playerType": 1,
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"filterable": 1,
|
||||
"ext": "./js/素白白[优].js"
|
||||
},
|
||||
{
|
||||
"key": "csp_XYQHiker_七新影视",
|
||||
"name": "🎦七新影视",
|
||||
"type": 3,
|
||||
"api": "csp_XYQHiker",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"filterable": 1,
|
||||
"ext": "./json/七新影视.json"
|
||||
},
|
||||
{
|
||||
"key": "csp_XYQHiker_可可影视",
|
||||
"name": "🎦可可影视",
|
||||
@@ -1287,20 +1233,6 @@
|
||||
"filterable": 1,
|
||||
"ext": "./json/xcys.json"
|
||||
},
|
||||
{
|
||||
"key": " 百姓 ",
|
||||
"name": "🎦农民影视2",
|
||||
"type": 3,
|
||||
"api": "csp_XBPQ",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"filterable": 1,
|
||||
"ext": {
|
||||
"简介": "⚠️特别提醒您⚠️请勿相信影片中的广告,以免上当受骗❗️+剧情介绍:&&</p >",
|
||||
"分类url": "https://www.gymboreejn.com/vodshow/{cateId}-{area}--{class}-----{catePg}---{year}.html[https://www.gymboreejn.com/vodtype/{cateId}.html]",
|
||||
"分类": "电影$1#剧集$2#综艺$3#动漫$4#动画片$29#短剧$31#影视解说$32#邵氏电影$39"
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "三米ys",
|
||||
"name": "🎦三米影视",
|
||||
@@ -1426,16 +1358,6 @@
|
||||
"filterable": 1,
|
||||
"ext": "./json/qiyou.json"
|
||||
},
|
||||
{
|
||||
"key": "光棍影视",
|
||||
"name": "🎦光棍",
|
||||
"type": 3,
|
||||
"api": "csp_XBPQ",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"filterable": 1,
|
||||
"ext": "./json/guangun.json"
|
||||
},
|
||||
{
|
||||
"key": "子子影视",
|
||||
"name": "🎦子子影视",
|
||||
@@ -1553,16 +1475,6 @@
|
||||
"api": "./api/drpy2.min.js",
|
||||
"ext": "./js/搜狗.js"
|
||||
},
|
||||
{
|
||||
"key": "360影视",
|
||||
"name": "🎦360影视(官)",
|
||||
"type": 3,
|
||||
"api": "csp_SP360",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"filterable": 1,
|
||||
"changeable": 0
|
||||
},
|
||||
{
|
||||
"key": "木偶网盘",
|
||||
"name": "📀木偶┃网盘",
|
||||
@@ -1992,7 +1904,7 @@
|
||||
"ratio": 1.433
|
||||
},
|
||||
"ext": {
|
||||
"cookie": ".file://TV/bili_cookie.txt",
|
||||
"cookie": "file://TV/bili_cookie.txt",
|
||||
"json": "./json/哔哩戏曲.json"
|
||||
},
|
||||
"timeout": 20
|
||||
@@ -2010,7 +1922,7 @@
|
||||
"ratio": 1.433
|
||||
},
|
||||
"ext": {
|
||||
"cookie": ".file://TV/bili_cookie.txt",
|
||||
"cookie": "file://TV/bili_cookie.txt",
|
||||
"json": "./json/哔哩相声.json"
|
||||
},
|
||||
"timeout": 20
|
||||
@@ -2028,7 +1940,7 @@
|
||||
"ratio": 1.433
|
||||
},
|
||||
"ext": {
|
||||
"cookie": ".file://TV/bili_cookie.txt",
|
||||
"cookie": "file://TV/bili_cookie.txt",
|
||||
"json": "./json/哔哩综合.json"
|
||||
},
|
||||
"timeout": 20
|
||||
@@ -2046,7 +1958,7 @@
|
||||
"ratio": 1.433
|
||||
},
|
||||
"ext": {
|
||||
"cookie": ".file://TV/bili_cookie.txt",
|
||||
"cookie": "file://TV/bili_cookie.txt",
|
||||
"json": "./json/演唱会.json"
|
||||
},
|
||||
"timeout": 20
|
||||
@@ -2064,7 +1976,7 @@
|
||||
"ratio": 1.433
|
||||
},
|
||||
"ext": {
|
||||
"cookie": ".file://TV/bili_cookie.txt",
|
||||
"cookie": "file://TV/bili_cookie.txt",
|
||||
"json": "./json/女团热舞.json"
|
||||
},
|
||||
"timeout": 20
|
||||
@@ -2082,7 +1994,7 @@
|
||||
"ratio": 1.433
|
||||
},
|
||||
"ext": {
|
||||
"cookie": ".file://TV/bili_cookie.txt"
|
||||
"cookie": "file://TV/bili_cookie.txt"
|
||||
},
|
||||
"timeout": 10
|
||||
},
|
||||
@@ -2099,7 +2011,7 @@
|
||||
"ratio": 1.433
|
||||
},
|
||||
"ext": {
|
||||
"cookie": ".file://TV/bili_cookie.txt",
|
||||
"cookie": "file://TV/bili_cookie.txt",
|
||||
"json": "./txt/哔哩合集.txt"
|
||||
},
|
||||
"timeout": 20
|
||||
@@ -2117,7 +2029,7 @@
|
||||
"ratio": 1.433
|
||||
},
|
||||
"ext": {
|
||||
"cookie": ".file://TV/bili_cookie.txt",
|
||||
"cookie": "file://TV/bili_cookie.txt",
|
||||
"json": "./json/学习园地.json"
|
||||
},
|
||||
"timeout": 20
|
||||
@@ -2135,7 +2047,7 @@
|
||||
"ratio": 1.433
|
||||
},
|
||||
"ext": {
|
||||
"cookie": ".file://TV/bili_cookie.txt",
|
||||
"cookie": "file://TV/bili_cookie.txt",
|
||||
"json": "./json/学外语.json"
|
||||
},
|
||||
"timeout": 20
|
||||
|
||||
4
天天开心/api/drpy2.min.js
vendored
4
天天开心/api/drpy2.min.js
vendored
File diff suppressed because one or more lines are too long
1739
天天开心/api/qyg4.js
1739
天天开心/api/qyg4.js
File diff suppressed because one or more lines are too long
579
天天开心/api/qyg5.js
579
天天开心/api/qyg5.js
File diff suppressed because one or more lines are too long
1737
天天开心/api/qyg8.js
Normal file
1737
天天开心/api/qyg8.js
Normal file
File diff suppressed because one or more lines are too long
577
天天开心/api/qyg9.js
Normal file
577
天天开心/api/qyg9.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}));
|
||||
File diff suppressed because one or more lines are too long
1
天天开心/js/果果4K.js
Normal file
1
天天开心/js/果果4K.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,66 +0,0 @@
|
||||
{
|
||||
"规则名": "4K",
|
||||
"规则作者": "香雅情",
|
||||
"请求头参数": "User-Agent$Mozilla/5.0 (iPhone; CPU iPhone OS 15_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1#Referer$https://4k-av.com/",
|
||||
"网页编码格式": "UTF-8",
|
||||
"图片是否需要代理": "0",
|
||||
"是否开启获取首页数据": "1",
|
||||
"首页推荐链接": "https://4k-av.com",
|
||||
"首页列表数组规则": "#recommlist",
|
||||
"首页片单列表数组规则": "ul&&li",
|
||||
"首页片单是否Jsoup写法": "1",
|
||||
"首页片单标题": "h2&&Text",
|
||||
"首页片单链接": "a&&href",
|
||||
"首页片单图片": "img&&src",
|
||||
"首页片单副标题": "span&&Text",
|
||||
"首页片单链接加前缀": "https://4k-av.com",
|
||||
"分类起始页码": "0",
|
||||
"分类链接": "https://4k-av.com/{cateId}/page-{catePg}.html",
|
||||
"分类名称": "电影&电视剧",
|
||||
"分类名称替换词": "movie&tv",
|
||||
"分类截取模式": "1",
|
||||
"分类列表数组规则": "#MainContent_newestlist&&.NTMitem",
|
||||
"分类片单是否Jsoup写法": "1",
|
||||
"分类片单标题": "h2&&Text",
|
||||
"分类片单链接": "a&&href",
|
||||
"分类片单图片": "img&&src",
|
||||
"分类片单副标题": "div.resyear&&Text",
|
||||
"分类片单链接加前缀": "https://4k-av.com",
|
||||
"分类片单链接加后缀": "",
|
||||
"搜索请求头参数": "User-Agent$Mozilla/5.0 (iPhone; CPU iPhone OS 15_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1#Referer$https://4k-av.com/",
|
||||
"搜索链接": "https://4k-av.com/s?q={wd}",
|
||||
"POST请求数据": "",
|
||||
"搜索截取模式": "1",
|
||||
"搜索列表数组规则": "#MainContent_newestlist&&.NTMitem",
|
||||
"搜索片单是否Jsoup写法": "1",
|
||||
"搜索片单图片": "img&&src",
|
||||
"搜索片单标题": "h2&&Text",
|
||||
"搜索片单链接": "a&&href",
|
||||
"搜索片单副标题": "div.resyear&&Text",
|
||||
"搜索片单链接加前缀": "https://4k-av.com",
|
||||
"搜索片单链接加后缀": "",
|
||||
"链接是否直接播放": "0",
|
||||
"直接播放链接加前缀": "",
|
||||
"直接播放链接加后缀": "#isVideo=true#",
|
||||
"直接播放直链视频请求头": "",
|
||||
"详情是否Jsoup写法": "1",
|
||||
"类型详情": "#MainContent_tags&&Text!标签: ",
|
||||
"年代详情": "label:contains(年份: )&&a&&Text",
|
||||
"地区详情": "",
|
||||
"演员详情": "h2&&Text",
|
||||
"简介详情": "p&&Text",
|
||||
"线路列表数组规则": "",
|
||||
"线路标题": "",
|
||||
"播放列表数组规则": "ul#rtlist",
|
||||
"选集列表数组规则": "ul&&li",
|
||||
"选集标题链接是否Jsoup写法": "1",
|
||||
"选集标题": "span&&Text",
|
||||
"选集链接": "img&&src!screenshot.jpg",
|
||||
"是否反转选集序列": "0",
|
||||
"选集链接加前缀": "",
|
||||
"选集链接加后缀": "",
|
||||
"分析MacPlayer": "0",
|
||||
"是否开启手动嗅探": "1",
|
||||
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv",
|
||||
"手动嗅探视频链接过滤词": ".html#=http"
|
||||
}
|
||||
@@ -1,372 +0,0 @@
|
||||
{
|
||||
|
||||
"作者":"荷城茶秀",
|
||||
|
||||
"站名":"光棍影视",
|
||||
|
||||
"主页url":"https://www.ggdy.net/",
|
||||
|
||||
"简介":"该站点无完整的剧情介绍,暂时无法提供简介…",
|
||||
|
||||
"导演":"导演:&&</p>",
|
||||
|
||||
"主演":"主演:&&</p>",
|
||||
|
||||
"影片状态":"状态:&&</p>",
|
||||
|
||||
"影片类型":"类型:&&</p>",
|
||||
|
||||
"影片地区":"地区:&&</p>",
|
||||
|
||||
"影片年代":"#a29999\">(&&)</font>",
|
||||
|
||||
"数组":"stui-vodlist__thumb&&</a>",
|
||||
|
||||
"标题":"title=\"&&\"",
|
||||
|
||||
"副标题":"text-right\">&&</span>",
|
||||
|
||||
"图片":"data-original=\"&&\"",
|
||||
|
||||
"链接":"href=\"&&\"",
|
||||
|
||||
"搜索url":"/so/-------------.html;post;wd={wd}",
|
||||
|
||||
"搜索数组":"stui-vodlist__thumb&&</a>",
|
||||
|
||||
"搜索标题":"title=\"&&\"",
|
||||
|
||||
"搜索副标题":"text-right\">&&</span>",
|
||||
|
||||
"搜索图片":"data-original=\"&&\"",
|
||||
|
||||
"搜索链接":"href=\"&&\"",
|
||||
|
||||
"线路数组":"<h3 class=\"title\"&&/h3>[不包含:ikun资源#卧龙资源#闪电资源#红牛资源]",
|
||||
|
||||
"线路标题":">&&<",
|
||||
|
||||
"播放数组":"stui-content__playlist clearfix&&</ul>",
|
||||
|
||||
"播放标题":">&&<",
|
||||
|
||||
"播放列表":"<a&&/a>",
|
||||
|
||||
"分类url":"https://www.ggdy.net/show/{cateId}-{area}-{by}-{class}-{lang}----{catePg}---{year}.html;;ak",
|
||||
|
||||
"分类":"电影$1#电视剧$2#综艺$3#动漫$4",
|
||||
|
||||
"筛选":{
|
||||
"1":[
|
||||
{"key":"cateId","name":"类型","value":[
|
||||
{"n":"全部类型","v":"1"},
|
||||
{"n":"动作片","v":"6"},
|
||||
{"n":"喜剧片","v":"7"},
|
||||
{"n":"爱情片","v":"8"},
|
||||
{"n":"科幻片","v":"9"},
|
||||
{"n":"恐怖片","v":"10"},
|
||||
{"n":"剧情片","v":"11"},
|
||||
{"n":"战争片","v":"12"},
|
||||
{"n":"动画片","v":"21"},
|
||||
{"n":"纪录片","v":"20"}
|
||||
]
|
||||
},
|
||||
{"key":"class","name":"剧情","value":[
|
||||
{"n":"全部剧情","v":""},
|
||||
{"n":"喜剧","v":"喜剧"},
|
||||
{"n":"动作","v":"动作"},
|
||||
{"n":"爱情","v":"爱情"},
|
||||
{"n":"科幻","v":"科幻"},
|
||||
{"n":"悬疑","v":"悬疑"},
|
||||
{"n":"惊悚","v":"惊悚"},
|
||||
{"n":"恐怖","v":"恐怖"},
|
||||
{"n":"犯罪","v":"犯罪"},
|
||||
{"n":"同性","v":"同性"},
|
||||
{"n":"音乐","v":"音乐"},
|
||||
{"n":"歌舞","v":"歌舞"},
|
||||
{"n":"传记","v":"传记"}
|
||||
]
|
||||
},
|
||||
{"key":"area","name":"地区","value":[
|
||||
{"n":"全部地区","v":""},
|
||||
{"n":"中国大陆","v":"中国大陆"},
|
||||
{"n":"美国","v":"美国"},
|
||||
{"n":"香港","v":"香港"},
|
||||
{"n":"台湾","v":"台湾"},
|
||||
{"n":"日本","v":"日本"},
|
||||
{"n":"韩国","v":"韩国"},
|
||||
{"n":"英国","v":"英国"},
|
||||
{"n":"法国","v":"法国"},
|
||||
{"n":"德国","v":"德国"},
|
||||
{"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":"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":"2011","v":"2011"},
|
||||
{"n":"2010","v":"2010"},
|
||||
{"n":"更早","v":"更早"}
|
||||
]
|
||||
},
|
||||
{"key":"lang","name":"语言","value":[
|
||||
{"n":"全部语言","v":""},
|
||||
{"n":"国语","v":"国语"},
|
||||
{"n":"英语","v":"英语"},
|
||||
{"n":"粤语","v":"粤语"},
|
||||
{"n":"闽南语","v":"闽南语"},
|
||||
{"n":"韩语","v":"韩语"},
|
||||
{"n":"日语","v":"日语"},
|
||||
{"n":"法语","v":"法语"},
|
||||
{"n":"德语","v":"德语"},
|
||||
{"n":"其它","v":"其它"}
|
||||
]
|
||||
},
|
||||
{"key":"by","name":"排序","value":[
|
||||
{"n":"时间排序","v":"time"},
|
||||
{"n":"人气排序","v":"hits"},
|
||||
{"n":"评分排序","v":"score"}
|
||||
]
|
||||
}
|
||||
],
|
||||
"2":[
|
||||
{"key":"cateId","name":"类型","value":[
|
||||
{"n":"全部类型","v":"2"},
|
||||
{"n":"国产剧","v":"13"},
|
||||
{"n":"港台剧","v":"14"},
|
||||
{"n":"日韩剧","v":"15"},
|
||||
{"n":"欧美剧","v":"16"},
|
||||
{"n":"海外剧","v":"22"}
|
||||
]
|
||||
},
|
||||
{"key":"class","name":"剧情","value":[
|
||||
{"n":"全部剧情","v":""},
|
||||
{"n":"古装","v":"古装"},
|
||||
{"n":"战争","v":"战争"},
|
||||
{"n":"青春偶像","v":"青春偶像"},
|
||||
{"n":"喜剧","v":"喜剧"},
|
||||
{"n":"家庭","v":"家庭"},
|
||||
{"n":"犯罪","v":"犯罪"},
|
||||
{"n":"动作","v":"动作"},
|
||||
{"n":"奇幻","v":"奇幻"},
|
||||
{"n":"剧情","v":"剧情"},
|
||||
{"n":"历史","v":"历史"},
|
||||
{"n":"经典","v":"经典"},
|
||||
{"n":"乡村","v":"乡村"},
|
||||
{"n":"情景","v":"情景"}
|
||||
]
|
||||
},
|
||||
{"key":"area","name":"地区","value":[
|
||||
{"n":"全部地区","v":""},
|
||||
{"n":"中国大陆","v":"中国大陆"},
|
||||
{"n":"美国","v":"美国"},
|
||||
{"n":"香港","v":"香港"},
|
||||
{"n":"台湾","v":"台湾"},
|
||||
{"n":"日本","v":"日本"},
|
||||
{"n":"韩国","v":"韩国"},
|
||||
{"n":"英国","v":"英国"},
|
||||
{"n":"法国","v":"法国"},
|
||||
{"n":"德国","v":"德国"},
|
||||
{"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":"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":"2011","v":"2011"},
|
||||
{"n":"2010","v":"2010"},
|
||||
{"n":"更早","v":"更早"}
|
||||
]
|
||||
},
|
||||
{"key":"lang","name":"语言","value":[
|
||||
{"n":"全部语言","v":""},
|
||||
{"n":"国语","v":"国语"},
|
||||
{"n":"英语","v":"英语"},
|
||||
{"n":"粤语","v":"粤语"},
|
||||
{"n":"闽南语","v":"闽南语"},
|
||||
{"n":"韩语","v":"韩语"},
|
||||
{"n":"日语","v":"日语"},
|
||||
{"n":"其它","v":"其它"}
|
||||
]
|
||||
},
|
||||
{"key":"by","name":"排序排序","value":[
|
||||
{"n":"时间排序","v":"time"},
|
||||
{"n":"人气排序","v":"hits"},
|
||||
{"n":"评分排序","v":"score"}
|
||||
]
|
||||
}
|
||||
],
|
||||
"3":[
|
||||
{"key":"class","name":"剧情","value":[
|
||||
{"n":"全部剧情","v":""},
|
||||
{"n":"选秀","v":"选秀"},
|
||||
{"n":"情感","v":"情感"},
|
||||
{"n":"访谈","v":"访谈"},
|
||||
{"n":"播报","v":"播报"},
|
||||
{"n":"旅游","v":"旅游"},
|
||||
{"n":"音乐","v":"音乐"},
|
||||
{"n":"美食","v":"美食"},
|
||||
{"n":"纪实","v":"纪实"},
|
||||
{"n":"曲艺","v":"曲艺"},
|
||||
{"n":"生活","v":"生活"},
|
||||
{"n":"游戏互动","v":"游戏互动"},
|
||||
{"n":"财经","v":"财经"},
|
||||
{"n":"求职","v":"求职"}
|
||||
]
|
||||
},
|
||||
{"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":"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":"2011","v":"2011"},
|
||||
{"n":"2010","v":"2010"},
|
||||
{"n":"更早","v":"更早"}
|
||||
]
|
||||
},
|
||||
{"key":"lang","name":"语言","value":[
|
||||
{"n":"全部语言","v":""},
|
||||
{"n":"国语","v":"国语"},
|
||||
{"n":"英语","v":"英语"},
|
||||
{"n":"粤语","v":"粤语"},
|
||||
{"n":"闽南语","v":"闽南语"},
|
||||
{"n":"韩语","v":"韩语"},
|
||||
{"n":"日语","v":"日语"},
|
||||
{"n":"其它","v":"其它"}
|
||||
]
|
||||
},
|
||||
{"key":"by","name":"排序","value":[
|
||||
{"n":"时间排序","v":"time"},
|
||||
{"n":"人气排序","v":"hits"},
|
||||
{"n":"评分排序","v":"score"}
|
||||
]
|
||||
}
|
||||
],
|
||||
"4":[
|
||||
{"key":"class","name":"剧情","value":[
|
||||
{"n":"全部剧情","v":""},
|
||||
{"n":"情感","v":"情感"},
|
||||
{"n":"科幻","v":"科幻"},
|
||||
{"n":"热血","v":"热血"},
|
||||
{"n":"推理","v":"推理"},
|
||||
{"n":"搞笑","v":"搞笑"},
|
||||
{"n":"冒险","v":"冒险"},
|
||||
{"n":"萝莉","v":"萝莉"},
|
||||
{"n":"校园","v":"校园"},
|
||||
{"n":"动作","v":"动作"},
|
||||
{"n":"机战","v":"机战"},
|
||||
{"n":"运动","v":"运动"},
|
||||
{"n":"战争","v":"战争"},
|
||||
{"n":"少年","v":"少年"}
|
||||
]
|
||||
},
|
||||
{"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":"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":"2011","v":"2011"},
|
||||
{"n":"2010","v":"2010"},
|
||||
{"n":"更早","v":"更早"}
|
||||
]
|
||||
},
|
||||
{"key":"lang","name":"语言","value":[
|
||||
{"n":"全部语言","v":""},
|
||||
{"n":"国语","v":"国语"},
|
||||
{"n":"英语","v":"英语"},
|
||||
{"n":"粤语","v":"粤语"},
|
||||
{"n":"闽南语","v":"闽南语"},
|
||||
{"n":"韩语","v":"韩语"},
|
||||
{"n":"日语","v":"日语"},
|
||||
{"n":"其它","v":"其它"}
|
||||
]
|
||||
},
|
||||
{"key":"by","name":"排序","value":[
|
||||
{"n":"时间排序","v":"time"},
|
||||
{"n":"人气排序","v":"hits"},
|
||||
{"n":"评分排序","v":"score"}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,81 +0,0 @@
|
||||
{
|
||||
"规则名": "七新影视",
|
||||
"规则作者": "",
|
||||
"请求头参数": "手机",
|
||||
"网页编码格式": "UTF-8",
|
||||
"图片是否需要代理": "0",
|
||||
"是否开启获取首页数据": "1",
|
||||
"首页推荐链接": "http://www.7xdy.com",
|
||||
"首页列表数组规则": "body&&.stui-vodlist:has(h4)",
|
||||
"首页片单列表数组规则": "li",
|
||||
"首页片单是否Jsoup写法": "1",
|
||||
"分类起始页码": "1",
|
||||
"分类链接": "http://www.7xdy.com/{cateId}/index{catePg}.html[firstPage=http://www.7xdy.com/{cateId}/index.html]",
|
||||
"分类名称": "电影&电视剧&综艺&动漫",
|
||||
"分类名称替换词": "dianyingpian&dianshiju&zongyi&dongman",
|
||||
//"筛选数据": {},
|
||||
"筛选数据": "ext",
|
||||
//{cateId}
|
||||
"筛选子分类名称": "动作片&爱情片&科幻片&恐怖片&战争片&喜剧片&一直播&剧情片||国产剧&港台剧&欧美剧&日韩剧",
|
||||
"筛选子分类替换词": "dongzuopian&aiqingpian&kehuanpian&kongbupian&zhanzhengpian&xijupian&jilupian&juqingpian||guocanju&gangtaiju&oumeiju&rihanju",
|
||||
//{class}
|
||||
"筛选类型名称": "",
|
||||
"筛选类型替换词": "*",
|
||||
//{area}
|
||||
"筛选地区名称": "",
|
||||
"筛选地区替换词": "*",
|
||||
//{year}
|
||||
"筛选年份名称": "",
|
||||
"筛选年份替换词": "*",
|
||||
//{lang}
|
||||
"筛选语言名称": "",
|
||||
"筛选语言替换词": "*",
|
||||
//{by}
|
||||
"筛选排序名称": "时间&人气&评分",
|
||||
"筛选排序替换词": "time&hits&score",
|
||||
"分类截取模式": "1",
|
||||
"分类列表数组规则": ".stui-vodlist&&li",
|
||||
"分类片单是否Jsoup写法": "1",
|
||||
"分类片单标题": "h4&&a&&Text",
|
||||
"分类片单链接": "h4&&a&&href",
|
||||
"分类片单图片": ".lazyload&&data-original",
|
||||
"分类片单副标题": ".pic-text&&Text",
|
||||
"分类片单链接加前缀": "http://www.7xdy.com",
|
||||
"分类片单链接加后缀": "",
|
||||
"搜索请求头参数": "User-Agent$手机",
|
||||
"搜索链接": "http://www.7xdy.com/search.php?page=1&searchword={wd}&searchtype=",
|
||||
"POST请求数据": "searchword={wd}",
|
||||
"搜索截取模式": "1",
|
||||
"搜索列表数组规则": ".stui-vodlist__media&&li",
|
||||
"搜索片单是否Jsoup写法": "1",
|
||||
"搜索片单图片": ".lazyload&&data-original",
|
||||
"搜索片单标题": "h3&&a&&Text",
|
||||
"搜索片单链接": "h3&&a&&href",
|
||||
"搜索片单副标题": ".pic-text&&Text",
|
||||
"搜索片单链接加前缀": "http://www.7xdy.com",
|
||||
"搜索片单链接加后缀": "",
|
||||
"链接是否直接播放": "0",
|
||||
"直接播放链接加前缀": "",
|
||||
"直接播放链接加后缀": "",
|
||||
"直接播放直链视频请求头": "",
|
||||
"详情是否Jsoup写法": "0",
|
||||
"类型详情": "类型:</span>&&</a>",
|
||||
"年代详情": "年份:</span>&&</a>",
|
||||
"地区详情": "地区:</span>&&</a>",
|
||||
"演员详情": "主演:</span>&&</p>",
|
||||
"简介详情": "简介:</span>&&</p>",
|
||||
"线路列表数组规则": "body&&#playlist",
|
||||
"线路标题": "h3&&Text",
|
||||
"播放列表数组规则": "body&&.stui-content__playlist",
|
||||
"选集列表数组规则": "li",
|
||||
"选集标题链接是否Jsoup写法": "1",
|
||||
"选集标题": "a&&Text",
|
||||
"选集链接": "a&&href",
|
||||
"是否反转选集序列": "1",
|
||||
"选集链接加前缀": "http://www.7xdy.com",
|
||||
"选集链接加后缀": "",
|
||||
"分析MacPlayer": "0",
|
||||
"是否开启手动嗅探": "0",
|
||||
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
|
||||
"手动嗅探视频链接过滤词": ".html#=http"
|
||||
}
|
||||
@@ -1,81 +0,0 @@
|
||||
{
|
||||
"规则名": "短剧屋",
|
||||
"规则作者": "",
|
||||
"请求头参数": "手机",
|
||||
"网页编码格式": "UTF-8",
|
||||
"图片是否需要代理": "0",
|
||||
"是否开启获取首页数据": "1",
|
||||
"首页推荐链接": "http://www.metaysw.com",
|
||||
"首页列表数组规则": "body&&.vod-vodlist",
|
||||
"首页片单列表数组规则": "li",
|
||||
"首页片单是否Jsoup写法": "1",
|
||||
"分类起始页码": "1",
|
||||
"分类链接": "http://www.metaysw.com/type/{cateId}-{catePg}.html",
|
||||
"分类名称": "短剧",
|
||||
"分类名称替换词": "lianxuju",
|
||||
"筛选数据": {},
|
||||
//"筛选数据": "ext",
|
||||
//{cateId}
|
||||
"筛选子分类名称": "",
|
||||
"筛选子分类替换词": "",
|
||||
//{class}
|
||||
"筛选类型名称": "",
|
||||
"筛选类型替换词": "*",
|
||||
//{area}
|
||||
"筛选地区名称": "",
|
||||
"筛选地区替换词": "*",
|
||||
//{year}
|
||||
"筛选年份名称": "",
|
||||
"筛选年份替换词": "*",
|
||||
//{lang}
|
||||
"筛选语言名称": "",
|
||||
"筛选语言替换词": "*",
|
||||
//{by}
|
||||
"筛选排序名称": "时间&人气&评分",
|
||||
"筛选排序替换词": "time&hits&score",
|
||||
"分类截取模式": "1",
|
||||
"分类列表数组规则": ".vod-vodlist&&li",
|
||||
"分类片单是否Jsoup写法": "1",
|
||||
"分类片单标题": ".vod-vodlist__title&&Text",
|
||||
"分类片单链接": "a&&href",
|
||||
"分类片单图片": ".lazyload&&data-original",
|
||||
"分类片单副标题": ".pic-text&&Text",
|
||||
"分类片单链接加前缀": "http://www.metaysw.com",
|
||||
"分类片单链接加后缀": "",
|
||||
"搜索请求头参数": "User-Agent$手机",
|
||||
"搜索链接": "http://www.metaysw.com/search/page/{SearchPg}/wd/{wd}.html",
|
||||
"POST请求数据": "",
|
||||
"搜索截取模式": "1",
|
||||
"搜索列表数组规则": ".vod-vodlist&&li",
|
||||
"搜索片单是否Jsoup写法": "1",
|
||||
"搜索片单图片": ".lazyload&&data-original",
|
||||
"搜索片单标题": ".vod-vodlist__title&&Text",
|
||||
"搜索片单链接": "a&&href",
|
||||
"搜索片单副标题": ".pic-text&&Text",
|
||||
"搜索片单链接加前缀": "http://www.metaysw.com",
|
||||
"搜索片单链接加后缀": "",
|
||||
"链接是否直接播放": "0",
|
||||
"直接播放链接加前缀": "https://live.52sf.ga/huya/",
|
||||
"直接播放链接加后缀": "#isVideo=true#",
|
||||
"直接播放直链视频请求头": "authority$ku.peizq.online#Referer$https://play.peizq.online",
|
||||
"详情是否Jsoup写法": "1",
|
||||
"类型详情": "",
|
||||
"年代详情": "",
|
||||
"地区详情": "",
|
||||
"演员详情": ".vod-content__detail&&p,2&&Text!主演:",
|
||||
"简介详情": "",
|
||||
"线路列表数组规则": ".dropdown-menu&&li",
|
||||
"线路标题": "a&&Text",
|
||||
"播放列表数组规则": "body&&.vod-content__playlist",
|
||||
"选集列表数组规则": "li",
|
||||
"选集标题链接是否Jsoup写法": "1",
|
||||
"选集标题": "a&&Text",
|
||||
"选集链接": "a&&href",
|
||||
"是否反转选集序列": "0",
|
||||
"选集链接加前缀": "http://www.metaysw.com",
|
||||
"选集链接加后缀": "",
|
||||
"分析MacPlayer": "0",
|
||||
"是否开启手动嗅探": "0",
|
||||
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
|
||||
"手动嗅探视频链接过滤词": ".html#=http"
|
||||
}
|
||||
3344
天天开心/lives/①live.txt
3344
天天开心/lives/①live.txt
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,172 +1,23 @@
|
||||
#EXTM3U x-tvg-url=""
|
||||
|
||||
#EXTINF:1 aktv-server-group="AKTV" tvg-id="aktv/28ai" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 28 AI 智慧賽馬
|
||||
http://aktv.top/AKTV/live/aktv/28ai/AKTV.m3u8
|
||||
|
||||
#EXTINF:2 aktv-server-group="AKTV" tvg-id="aktv/channel5hd" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", Channel 5 HD
|
||||
http://aktv.top/AKTV/live/aktv/channel5hd/AKTV.m3u8
|
||||
|
||||
#EXTINF:3 aktv-server-group="AKTV" tvg-id="aktv/channel8hd" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", Channel 8 HD
|
||||
http://aktv.top/AKTV/live/aktv/channel8hd/AKTV.m3u8
|
||||
|
||||
#EXTINF:4 aktv-server-group="AKTV" tvg-id="aktv/channeluhd" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", Channel U HD
|
||||
http://aktv.top/AKTV/live/aktv/channeluhd/AKTV.m3u8
|
||||
|
||||
#EXTINF:5 aktv-server-group="AKTV" tvg-id="aktv/hoy78" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", Hoy 78
|
||||
http://aktv.top/AKTV/live/aktv/hoy78/AKTV.m3u8
|
||||
|
||||
#EXTINF:6 aktv-server-group="AKTV" tvg-id="aktv/mytvsuper18" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", myTV SUPER 18台
|
||||
http://aktv.top/AKTV/live/aktv/mytvsuper18/AKTV.m3u8
|
||||
|
||||
#EXTINF:7 aktv-server-group="AKTV" tvg-id="aktv/popc" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", PopC
|
||||
http://aktv.top/AKTV/live/aktv/popc/AKTV.m3u8
|
||||
|
||||
#EXTINF:8 aktv-server-group="AKTV" tvg-id="aktv/rockaction" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", ROCK Action
|
||||
http://aktv.top/AKTV/live/aktv/rockaction/AKTV.m3u8
|
||||
|
||||
#EXTINF:9 aktv-server-group="AKTV" tvg-id="aktv/tvbplus" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", TVB Plus
|
||||
http://aktv.top/AKTV/live/aktv/tvbplus/AKTV.m3u8
|
||||
|
||||
#EXTINF:10 aktv-server-group="AKTV" tvg-id="aktv/tvbs" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", TVBS
|
||||
http://aktv.top/AKTV/live/aktv/tvbs/AKTV.m3u8
|
||||
|
||||
#EXTINF:11 aktv-server-group="AKTV" tvg-id="aktv/tvbs-1" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", TVBS-新聞台
|
||||
http://aktv.top/AKTV/live/aktv/tvbs-1/AKTV.m3u8
|
||||
|
||||
#EXTINF:12 aktv-server-group="AKTV" tvg-id="aktv/tvn" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", tvN
|
||||
http://aktv.top/AKTV/live/aktv/tvn/AKTV.m3u8
|
||||
|
||||
#EXTINF:13 aktv-server-group="AKTV" tvg-id="aktv/null-12" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 中天亞洲台
|
||||
http://aktv.top/AKTV/live/aktv/null-12/AKTV.m3u8
|
||||
|
||||
#EXTINF:14 aktv-server-group="AKTV" tvg-id="aktv/null-8" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 中天新聞台
|
||||
http://aktv.top/AKTV/live/aktv/null-8/AKTV.m3u8
|
||||
|
||||
#EXTINF:15 aktv-server-group="AKTV" tvg-id="aktv/null-10" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 中視
|
||||
http://aktv.top/AKTV/live/aktv/null-10/AKTV.m3u8
|
||||
|
||||
#EXTINF:16 aktv-server-group="AKTV" tvg-id="aktv/null-15" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 千禧經典台
|
||||
http://aktv.top/AKTV/live/aktv/null-15/AKTV.m3u8
|
||||
|
||||
#EXTINF:17 aktv-server-group="AKTV" tvg-id="aktv/hk" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 娛樂新聞台(HK)
|
||||
http://aktv.top/AKTV/live/aktv/hk/AKTV.m3u8
|
||||
|
||||
#EXTINF:18 aktv-server-group="AKTV" tvg-id="aktv/null-9" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 寰宇新聞台
|
||||
http://aktv.top/AKTV/live/aktv/null-9/AKTV.m3u8
|
||||
|
||||
#EXTINF:19 aktv-server-group="AKTV" tvg-id="aktv/null-13" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 日本全天新聞
|
||||
http://aktv.top/AKTV/live/aktv/null-13/AKTV.m3u8
|
||||
|
||||
#EXTINF:20 aktv-server-group="AKTV" tvg-id="aktv/null-19" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 明珠剧集台(北美)
|
||||
http://aktv.top/AKTV/live/aktv/null-19/AKTV.m3u8
|
||||
|
||||
#EXTINF:21 aktv-server-group="AKTV" tvg-id="aktv/null-2" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 明珠台
|
||||
http://aktv.top/AKTV/live/aktv/null-2/AKTV.m3u8
|
||||
|
||||
#EXTINF:22 aktv-server-group="AKTV" tvg-id="aktv/null-1" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 無線新聞台
|
||||
http://aktv.top/AKTV/live/aktv/null-1/AKTV.m3u8
|
||||
|
||||
#EXTINF:23 aktv-server-group="AKTV" tvg-id="aktv/hk-1" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 美亞電影台(HK)
|
||||
http://aktv.top/AKTV/live/aktv/hk-1/AKTV.m3u8
|
||||
|
||||
#EXTINF:24 aktv-server-group="AKTV" tvg-id="aktv/null-18" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 翡翠剧集台(北美)
|
||||
http://aktv.top/AKTV/live/aktv/null-18/AKTV.m3u8
|
||||
|
||||
#EXTINF:25 aktv-server-group="AKTV" tvg-id="aktv/null" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 翡翠台
|
||||
http://aktv.top/AKTV/live/aktv/null/AKTV.m3u8
|
||||
|
||||
#EXTINF:26 aktv-server-group="AKTV" tvg-id="aktv/null-17" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 翡翠综合台(北美)
|
||||
http://aktv.top/AKTV/live/aktv/null-17/AKTV.m3u8
|
||||
|
||||
#EXTINF:27 aktv-server-group="AKTV" tvg-id="aktv/null-11" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 華視
|
||||
http://aktv.top/AKTV/live/aktv/null-11/AKTV.m3u8
|
||||
|
||||
#EXTINF:28 aktv-server-group="AKTV" tvg-id="aktv/null-6" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 靖天電影台
|
||||
http://aktv.top/AKTV/live/aktv/null-6/AKTV.m3u8
|
||||
|
||||
#EXTINF:29 aktv-server-group="AKTV" tvg-id="aktv/null-3" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 鳳凰中文
|
||||
http://aktv.top/AKTV/live/aktv/null-3/AKTV.m3u8
|
||||
|
||||
#EXTINF:30 aktv-server-group="AKTV" tvg-id="aktv/null-4" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 鳳凰資訊
|
||||
http://aktv.top/AKTV/live/aktv/null-4/AKTV.m3u8
|
||||
|
||||
#EXTINF:31 aktv-server-group="AKTV" tvg-id="aktv/null-5" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 鳳凰香港
|
||||
http://aktv.top/AKTV/live/aktv/null-5/AKTV.m3u8
|
||||
|
||||
#EXTINF:32 aktv-server-group="AKTV" tvg-id="aktv/null-21" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 黃金翡翠台
|
||||
http://aktv.top/AKTV/live/aktv/null-21/AKTV.m3u8
|
||||
|
||||
#EXTINF:33 aktv-server-group="AKTV" tvg-id="aktv/null-22" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 龍華日韓台
|
||||
http://aktv.top/AKTV/live/aktv/null-22/AKTV.m3u8
|
||||
|
||||
#EXTINF:34 aktv-server-group="AKTV" tvg-id="aktv/null-7" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 龍華經典台
|
||||
http://aktv.top/AKTV/live/aktv/null-7/AKTV.m3u8
|
||||
|
||||
#EXTINF:35 aktv-server-group="AKTV" tvg-id="aktv/null-23" tvg-logo="" provider="AKTV" provider-logo="" provider-type="iptv", 龍華電影台
|
||||
http://aktv.top/AKTV/live/aktv/null-23/AKTV.m3u8
|
||||
|
||||
#EXTINF:36 aktv-server-group="AKTV2" tvg-id="aktv2/now" tvg-logo="" provider="AKTV2" provider-logo="" provider-type="iptv", Now星影台
|
||||
http://aktv.top/AKTV/live/aktv2/now/AKTV.m3u8
|
||||
|
||||
#EXTINF:37 aktv-server-group="AKTV2" tvg-id="aktv2/tvb" tvg-logo="" provider="AKTV2" provider-logo="" provider-type="iptv", TVB 星河台
|
||||
http://aktv.top/AKTV/live/aktv2/tvb/AKTV.m3u8
|
||||
|
||||
#EXTINF:38 aktv-server-group="AKTV2" tvg-id="aktv2/viutv99" tvg-logo="" provider="AKTV2" provider-logo="" provider-type="iptv", viutv 99
|
||||
http://aktv.top/AKTV/live/aktv2/viutv99/AKTV.m3u8
|
||||
|
||||
#EXTINF:39 aktv-server-group="AKTV2" tvg-id="aktv2/viutv696" tvg-logo="" provider="AKTV2" provider-logo="" provider-type="iptv", viutv6 96
|
||||
http://aktv.top/AKTV/live/aktv2/viutv696/AKTV.m3u8
|
||||
|
||||
#EXTINF:40 aktv-server-group="AKTV2" tvg-id="aktv2/null-1" tvg-logo="" provider="AKTV2" provider-logo="" provider-type="iptv", 无线新闻台(北美)
|
||||
http://aktv.top/AKTV/live/aktv2/null-1/AKTV.m3u8
|
||||
|
||||
#EXTINF:41 aktv-server-group="AKTV2" tvg-id="aktv2/null" tvg-logo="" provider="AKTV2" provider-logo="" provider-type="iptv", 爆谷台
|
||||
http://aktv.top/AKTV/live/aktv2/null/AKTV.m3u8
|
||||
|
||||
#EXTINF:42 aktv-server-group="AKTV3" tvg-id="aktv3/animaxhk" tvg-logo="" provider="AKTV3" provider-logo="" provider-type="iptv", Animax-HK
|
||||
http://aktv.top/AKTV/live/aktv3/animaxhk/AKTV.m3u8
|
||||
|
||||
#EXTINF:43 aktv-server-group="AKTV3" tvg-id="aktv3/c" tvg-logo="" provider="AKTV3" provider-logo="" provider-type="iptv", C+台
|
||||
http://aktv.top/AKTV/live/aktv3/c/AKTV.m3u8
|
||||
|
||||
#EXTINF:44 aktv-server-group="AKTV3" tvg-id="aktv3/dw" tvg-logo="" provider="AKTV3" provider-logo="" provider-type="iptv", DW
|
||||
http://aktv.top/AKTV/live/aktv3/dw/AKTV.m3u8
|
||||
|
||||
#EXTINF:45 aktv-server-group="AKTV3" tvg-id="aktv3/france24" tvg-logo="" provider="AKTV3" provider-logo="" provider-type="iptv", France 24
|
||||
http://aktv.top/AKTV/live/aktv3/france24/AKTV.m3u8
|
||||
|
||||
#EXTINF:46 aktv-server-group="AKTV3" tvg-id="aktv3/kix" tvg-logo="" provider="AKTV3" provider-logo="" provider-type="iptv", KIX
|
||||
http://aktv.top/AKTV/live/aktv3/kix/AKTV.m3u8
|
||||
|
||||
#EXTINF:47 aktv-server-group="AKTV3" tvg-id="aktv3/lovenaturehd" tvg-logo="" provider="AKTV3" provider-logo="" provider-type="iptv", Love Nature HD
|
||||
http://aktv.top/AKTV/live/aktv3/lovenaturehd/AKTV.m3u8
|
||||
|
||||
#EXTINF:48 aktv-server-group="AKTV3" tvg-id="aktv3/nhkworldjapan" tvg-logo="" provider="AKTV3" provider-logo="" provider-type="iptv", NHK World-Japan
|
||||
http://aktv.top/AKTV/live/aktv3/nhkworldjapan/AKTV.m3u8
|
||||
|
||||
#EXTINF:49 aktv-server-group="AKTV3" tvg-id="aktv3/nickjr" tvg-logo="" provider="AKTV3" provider-logo="" provider-type="iptv", Nick Jr
|
||||
http://aktv.top/AKTV/live/aktv3/nickjr/AKTV.m3u8
|
||||
|
||||
#EXTINF:50 aktv-server-group="AKTV3" tvg-id="aktv3/nickelodeon" tvg-logo="" provider="AKTV3" provider-logo="" provider-type="iptv", Nickelodeon
|
||||
http://aktv.top/AKTV/live/aktv3/nickelodeon/AKTV.m3u8
|
||||
|
||||
#EXTINF:51 aktv-server-group="AKTV3" tvg-id="aktv3/rockaction" tvg-logo="" provider="AKTV3" provider-logo="" provider-type="iptv", ROCK Action
|
||||
http://aktv.top/AKTV/live/aktv3/rockaction/AKTV.m3u8
|
||||
|
||||
#EXTINF:52 aktv-server-group="AKTV3" tvg-id="aktv3/thrill" tvg-logo="" provider="AKTV3" provider-logo="" provider-type="iptv", Thrill
|
||||
http://aktv.top/AKTV/live/aktv3/thrill/AKTV.m3u8
|
||||
|
||||
#EXTINF:53 aktv-server-group="AKTV3" tvg-id="aktv3/zoomoo" tvg-logo="" provider="AKTV3" provider-logo="" provider-type="iptv", ZooMoo
|
||||
http://aktv.top/AKTV/live/aktv3/zoomoo/AKTV.m3u8
|
||||
|
||||
#EXTINF:54 aktv-server-group="AKTV3" tvg-id="aktv3/null-3" tvg-logo="" provider="AKTV3" provider-logo="" provider-type="iptv", 亞洲新聞台
|
||||
http://aktv.top/AKTV/live/aktv3/null-3/AKTV.m3u8
|
||||
|
||||
#EXTINF:55 aktv-server-group="AKTV3" tvg-id="aktv3/null" tvg-logo="" provider="AKTV3" provider-logo="" provider-type="iptv", 東方衛視國際頻道
|
||||
http://aktv.top/AKTV/live/aktv3/null/AKTV.m3u8
|
||||
|
||||
#EXTINF:56 aktv-server-group="AKTV3" tvg-id="aktv3/null-2" tvg-logo="" provider="AKTV3" provider-logo="" provider-type="iptv", 無線衛星新聞台
|
||||
http://aktv.top/AKTV/live/aktv3/null-2/AKTV.m3u8
|
||||
|
||||
#EXTINF:57 aktv-server-group="AKTV3" tvg-id="aktv3/null-1" tvg-logo="" provider="AKTV3" provider-logo="" provider-type="iptv", 神州新聞台
|
||||
http://aktv.top/AKTV/live/aktv3/null-1/AKTV.m3u8
|
||||
#EXTM3U
|
||||
#EXT-X-VERSION:3
|
||||
#EXT-X-MEDIA-SEQUENCE:7
|
||||
#EXT-X-DISCONTINUITY-SEQUENCE:0
|
||||
#EXT-X-TARGETDURATION:4
|
||||
#EXT-X-INDEPENDENT-SEGMENTS
|
||||
#EXTINF:8.333333,
|
||||
/web/error_video/02/output1.ts
|
||||
#EXTINF:8.333333,
|
||||
/web/error_video/02/output2.ts
|
||||
#EXTINF:8.333333,
|
||||
/web/error_video/02/output3.ts
|
||||
#EXTINF:8.333333,
|
||||
/web/error_video/02/output4.ts
|
||||
#EXTINF:16.666667,
|
||||
/web/error_video/02/output5.ts
|
||||
#EXTINF:8.333333,
|
||||
/web/error_video/02/output6.ts
|
||||
#EXTINF:8.333333,
|
||||
/web/error_video/02/output7.ts
|
||||
#EXTINF:8.333333,
|
||||
/web/error_video/02/output8.ts
|
||||
# cURL Error: Failed to connect to 127.0.0.1 port 1234: Connection refused
|
||||
12
小米/api.json
12
小米/api.json
@@ -146,6 +146,18 @@
|
||||
"type": 3,
|
||||
"api": "csp_Nkdy"
|
||||
},
|
||||
{
|
||||
"key": "xiongmao2",
|
||||
"name": "🐼猫咪┃1080P",
|
||||
"type": 3,
|
||||
"api": "./api/drpy2.min.js",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"filterable": 1,
|
||||
"order_num": 0,
|
||||
"changeable": 0,
|
||||
"ext": "./js/xiongmao.js"
|
||||
},
|
||||
{
|
||||
"key": "hipy_js_腾云驾雾[官]",
|
||||
"name": "🌞腾腾┃解析",
|
||||
|
||||
194
小米/js/xiongmao.js
Normal file
194
小米/js/xiongmao.js
Normal file
@@ -0,0 +1,194 @@
|
||||
globalThis.h_ost = ' http://154.221.17.127:8188/';
|
||||
var key = CryptoJS.enc.Base64.parse("YWU3MTU4ODgyN2EzODAzNg==");
|
||||
var iv = CryptoJS.enc.Base64.parse("YWU3MTU4ODgyN2EzODAzNg==");
|
||||
globalThis.AES_Decrypt = function (word) {
|
||||
try {
|
||||
var decrypt = CryptoJS.AES.decrypt(word, key, {
|
||||
iv: iv,
|
||||
mode: CryptoJS.mode.CBC,
|
||||
padding: CryptoJS.pad.Pkcs7,
|
||||
});
|
||||
const decryptedText = decrypt.toString(CryptoJS.enc.Utf8);
|
||||
if (!decryptedText) {
|
||||
throw new Error("解密后的内容为空");
|
||||
}
|
||||
return decryptedText;
|
||||
} catch (e) {
|
||||
console.error("解密失败:", e);
|
||||
return null;
|
||||
}
|
||||
};
|
||||
globalThis.AES_Encrypt = function (word) {
|
||||
var encrypted = CryptoJS.AES.encrypt(word, key, {
|
||||
iv: iv,
|
||||
mode: CryptoJS.mode.CBC,
|
||||
padding: CryptoJS.pad.Pkcs7
|
||||
});
|
||||
return encrypted.toString();
|
||||
};
|
||||
|
||||
globalThis.vod1 = function (t,pg){
|
||||
let html1 = request( h_ost + 'api.php/getappapi.index/typeFilterVodList', {
|
||||
body: {
|
||||
area: '全部',
|
||||
year: '全部',
|
||||
type_id: t,
|
||||
page: pg,
|
||||
sort: '最新',
|
||||
lang: '全部',
|
||||
class: '全部'
|
||||
},
|
||||
headers: { 'User-Agent': 'okhttp/3.14.9',
|
||||
'Content-Type': 'application/x-www-form-urlencoded'},
|
||||
'method': 'POST'
|
||||
}, true);
|
||||
let html = JSON.parse(html1);
|
||||
return(AES_Decrypt(html.data));
|
||||
}
|
||||
globalThis.vodids = function (ids) {
|
||||
let html1 = fetch(h_ost + 'api.php/getappapi.index/vodDetail', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'User-Agent': 'okhttp/3.14.9',
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
},
|
||||
body: {
|
||||
vod_id: ids,
|
||||
}
|
||||
});
|
||||
let html = JSON.parse(html1);
|
||||
const rdata = JSON.parse(AES_Decrypt(html.data));
|
||||
const data = {
|
||||
vod_id: ids,
|
||||
vod_name: rdata.vod.vod_name,
|
||||
vod_remarks: '小米:'+ rdata.vod.vod_remarks,
|
||||
vod_actor: rdata.vod.vod_actor,
|
||||
vod_director: rdata.vod.vod_director,
|
||||
vod_content: '小米提醒您:请勿相信任何广告谢谢'+ rdata.vod.vod_content,
|
||||
vod_play_from: '',
|
||||
vod_play_url: ''
|
||||
};
|
||||
|
||||
rdata.vod_play_list.forEach((value) => {
|
||||
data.vod_play_from += value.player_info.show + '|小米|广告勿信$$$';
|
||||
value.urls.forEach((v) => {
|
||||
data.vod_play_url += v.name + '$' + (value.player_info.parse || '') + v.url + '#';
|
||||
});
|
||||
data.vod_play_url += '$$$';
|
||||
});
|
||||
return data;
|
||||
}
|
||||
//搜索
|
||||
globalThis.ssvod = function (wd) {
|
||||
var html1 = fetch(h_ost + 'api.php/getappapi.index/searchList', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'User-Agent': 'okhttp/3.14.9',
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
},
|
||||
body: {
|
||||
keywords: wd,
|
||||
typepage_id: 1,
|
||||
}
|
||||
});
|
||||
let html = JSON.parse(html1);
|
||||
return AES_Decrypt(html.data);
|
||||
}
|
||||
//解析
|
||||
globalThis.jxx = function (id, url) {
|
||||
/* if(""!=='104847347'){
|
||||
return 'https://mp4.ziyuan.wang/view.php/3c120366111dde9c318be64962b5684f.mp4';
|
||||
}*/
|
||||
if (id.startsWith('http')) {
|
||||
let purl = JSON.parse(request(id+url)).url;
|
||||
return { parse: 0, url: purl , jx: 0,danmaku:'http://dm.sds11.top/tdm.php?url='+url};
|
||||
}
|
||||
if (id == 0) {
|
||||
return { parse: 0, url: id+url , jx: 1,
|
||||
danmaku:'http://dm.sds11.top/tdm.php?url='+url};
|
||||
}
|
||||
|
||||
let html1 = request(h_ost + 'api.php/getappapi.index/vodParse', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'User-Agent': 'okhttp/3.14.9',
|
||||
'Content-Type': 'application/x-www-form-urlencoded'
|
||||
},
|
||||
body: {
|
||||
parse_api: id,
|
||||
url: AES_Encrypt(url),
|
||||
}
|
||||
});
|
||||
let html = AES_Decrypt(JSON.parse(html1).data);
|
||||
console.log(html);
|
||||
let decry = html.replace(/\n/g, '').replace(/\\/g, '');
|
||||
let matches = decry.match(/"url":"([^"]+)"/);
|
||||
if (!matches || matches[1] === null) {
|
||||
matches = decry.match(/"url": "([^"]+)"/);
|
||||
}
|
||||
return { parse: 0, url: matches[1] , jx: 0,danmaku:'http://dm.sds11.top/tdm.php?url='+url};
|
||||
}
|
||||
|
||||
var rule = {
|
||||
title: '小米|熊猫',
|
||||
host: '',
|
||||
detailUrl: 'fyid',
|
||||
searchUrl: '**',
|
||||
url: 'fyclass',
|
||||
searchable: 2,
|
||||
quickSearch: 1,
|
||||
filterable: 0,
|
||||
class_name: '电影&电视剧&动漫&综艺',
|
||||
class_url: '1&2&3&4&综艺',
|
||||
play_parse: true,
|
||||
lazy: $js.toString(() => {
|
||||
const parts = input.split('|');
|
||||
input = jxx(parts[0],parts[1]);
|
||||
}),
|
||||
推荐: $js.toString(() => {
|
||||
let data =vod1(0,0);
|
||||
let bata = JSON.parse(data).recommend_list;
|
||||
bata.forEach(it => {
|
||||
d.push({
|
||||
url: it.vod_id,
|
||||
title: it.vod_name,
|
||||
img: it.vod_pic,
|
||||
desc: it.vod_remarks
|
||||
});
|
||||
});
|
||||
setResult(d);
|
||||
}),
|
||||
一级: $js.toString(() => {
|
||||
let data =vod1(input,MY_PAGE);
|
||||
let bata = JSON.parse(data).recommend_list;
|
||||
bata.forEach(it => {
|
||||
d.push({
|
||||
url: it.vod_id,
|
||||
title: it.vod_name,
|
||||
img: it.vod_pic,
|
||||
desc: it.vod_remarks
|
||||
});
|
||||
});
|
||||
setResult(d);
|
||||
}),
|
||||
二级: $js.toString(() => {
|
||||
console.log("调试信息2"+ input);
|
||||
let data =vodids(input);
|
||||
//console.log(data);
|
||||
VOD = data;
|
||||
}),
|
||||
搜索: $js.toString(() => {
|
||||
let data =ssvod(input);
|
||||
let bata = JSON.parse(data).search_list;
|
||||
bata.forEach(it => {
|
||||
d.push({
|
||||
url: it.vod_id,
|
||||
title: it.vod_name,
|
||||
img: it.vod_pic,
|
||||
desc: it.vod_remarks
|
||||
});
|
||||
});
|
||||
// console.log(data);
|
||||
setResult(d);
|
||||
}),
|
||||
}
|
||||
@@ -298,40 +298,34 @@ http://[2409:8087:5e08:24::11]:6610/000000001000/2000000004000000013/index.m3u8?
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/百事通.png" group-title="•数字「IPV6」",你叫啥都行 𝟠「IPV6」
|
||||
http://[2409:8087:5e08:24::11]:6610/000000001000/2000000004000000017/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000017&IASHttpSessionId=OTT19019320240419154124000281&yang-1989
|
||||
#INSERT_HERE
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」01:50 精英联赛阶段 利雅得胜利 vs 艾因 刘畅
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「意甲」03:35 联赛 热那亚 vs 科莫 乔迁
|
||||
https://tv.iill.top/FB/1
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」01:50 二级小组赛 塞帕罕 vs 沙迦 张天翼
|
||||
https://tv.iill.top/FB/2
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」17:45 精英联赛阶段 浦项铁人 vs 山东泰山足球俱乐部 梁祥宇 李彦 姚安妮
|
||||
https://tv.iill.top/FB/3
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」17:50 精英联赛阶段 横滨水手 vs 武里南联 周楚雄
|
||||
https://tv.iill.top/FB/4
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」19:50 二级小组赛 曼谷联 vs 理文 鹿中原
|
||||
https://tv.iill.top/FB/5
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」19:50 二级小组赛 南定 vs 淡滨尼流浪者 盛斌
|
||||
https://tv.iill.top/FB/6
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」21:50 二级小组赛 纳萨夫 vs 伊尔比德侯赛因 张天翼
|
||||
https://tv.iill.top/FB/7
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」21:50 二级小组赛 金色世纪 vs 布赖代合作 王子睿
|
||||
https://tv.iill.top/FB/8
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」23:50 二级小组赛 科威特竞技 vs 迪拜青年国民 鹿中原
|
||||
https://tv.iill.top/FB/9
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」23:50 二级小组赛 永恒体育 vs 巴格达空军 谭逸雄
|
||||
https://tv.iill.top/FB/10
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」23:50 二级小组赛 大不里士拖拉机 vs 库洛布光 乔迁
|
||||
https://tv.iill.top/FB/11
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」01:30 法兰克福冠军赛:男女单打1/16决赛
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」08:45 常规赛 公牛 vs 森林狼 孙博 闫宇峰 秋童
|
||||
https://tv.iill.top/NBA/1
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」08:45 常规赛 公牛 vs 森林狼 英文原声
|
||||
https://tv.iill.top/NBA/2
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」08:55 常规赛 马刺 vs 开拓者 王晓晨
|
||||
https://tv.iill.top/NBA/3
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」08:55 常规赛 马刺 vs 开拓者 英文原声
|
||||
https://tv.iill.top/NBA/4
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」08:55 常规赛 雄鹿 vs 爵士 张浩岳
|
||||
https://tv.iill.top/NBA/5
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」01:30 法兰克福冠军赛:男女单打1/8决赛 周冠达
|
||||
https://tv.iill.top/Migu/1
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「咪咕」08:00 《体育日报》第30期 《体育日报》第三十期
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」01:30 法兰克福冠军赛:男女单打1/8决赛 清流
|
||||
https://tv.iill.top/Migu/2
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「KPL」17:30 济南RW侠 vs 重庆狼队 济南RW侠 vs 重庆狼队 官方解说
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」01:30 法兰克福冠军赛:男女单打1/8决赛 英文解说
|
||||
https://tv.iill.top/Migu/3
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」20:30 法兰克福冠军赛:男女单打1/8决赛 周冠达 侯英超
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「咪咕」08:00 《体育日报》第32期 《体育日报》第三十二期
|
||||
https://tv.iill.top/Migu/4
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」20:30 法兰克福冠军赛:男女单打1/8决赛 清流
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「KPL」17:30 待定 vs 待定 重庆狼队 vs 武汉eStarPro 官方解说
|
||||
https://tv.iill.top/Migu/5
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」20:30 法兰克福冠军赛:男女单打1/8决赛 英文解说
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」20:30 法兰克福冠军赛:男女单打1/4决赛 周冠达 侯英超
|
||||
https://tv.iill.top/Migu/6
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」20:30 法兰克福冠军赛:男女单打1/4决赛 清流
|
||||
https://tv.iill.top/Migu/7
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」20:30 法兰克福冠军赛:男女单打1/4决赛 英文解说
|
||||
https://tv.iill.top/Migu/8
|
||||
#EXTINF:-1 tvg-id="CCTV1" tvg-name="CCTV1" tvg-logo="https://epg.iill.top/logo/CCTV1.png" group-title="•咪咕「TV」",CCTV 1 综合
|
||||
https://tv.iill.top/migu/cctv1
|
||||
#EXTINF:-1 tvg-id="CCTV2" tvg-name="CCTV2" tvg-logo="https://epg.iill.top/logo/CCTV2.png" group-title="•咪咕「TV」",CCTV 2 财经
|
||||
|
||||
1290
小米/lives/直播2.txt
1290
小米/lives/直播2.txt
File diff suppressed because it is too large
Load Diff
24
王二小/api.json
24
王二小/api.json
@@ -49,6 +49,14 @@
|
||||
"searchable": 1,
|
||||
"changeable": 1
|
||||
},
|
||||
{
|
||||
"key": "Wexbiliys",
|
||||
"name": "💓哔哩┃影视💓",
|
||||
"type": 3,
|
||||
"api": "csp_Wexbiliys",
|
||||
"searchable": 1,
|
||||
"changeable": 1
|
||||
},
|
||||
{
|
||||
"key": "115",
|
||||
"name": "💓115┃4K💓",
|
||||
@@ -173,22 +181,6 @@
|
||||
"searchable": 1,
|
||||
"changeable": 1
|
||||
},
|
||||
{
|
||||
"key": "Wex4Kav",
|
||||
"name": "🎇急速┃秒播🎇",
|
||||
"type": 3,
|
||||
"api": "csp_Wex4Kav",
|
||||
"searchable": 1,
|
||||
"changeable": 1
|
||||
},
|
||||
{
|
||||
"key": "Subaibai",
|
||||
"name": "🎇拜拜┃秒播🎇",
|
||||
"type": 3,
|
||||
"api": "csp_Subaibai",
|
||||
"searchable": 1,
|
||||
"changeable": 1
|
||||
},
|
||||
{
|
||||
"key": "Wexsaohuo",
|
||||
"name": "🎇火火┃秒播🎇",
|
||||
|
||||
@@ -298,40 +298,34 @@ http://[2409:8087:5e08:24::11]:6610/000000001000/2000000004000000013/index.m3u8?
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/百事通.png" group-title="•数字「IPV6」",你叫啥都行 𝟠「IPV6」
|
||||
http://[2409:8087:5e08:24::11]:6610/000000001000/2000000004000000017/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000017&IASHttpSessionId=OTT19019320240419154124000281&yang-1989
|
||||
#INSERT_HERE
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」01:50 精英联赛阶段 利雅得胜利 vs 艾因 刘畅
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「意甲」03:35 联赛 热那亚 vs 科莫 乔迁
|
||||
https://tv.iill.top/FB/1
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」01:50 二级小组赛 塞帕罕 vs 沙迦 张天翼
|
||||
https://tv.iill.top/FB/2
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」17:45 精英联赛阶段 浦项铁人 vs 山东泰山足球俱乐部 梁祥宇 李彦 姚安妮
|
||||
https://tv.iill.top/FB/3
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」17:50 精英联赛阶段 横滨水手 vs 武里南联 周楚雄
|
||||
https://tv.iill.top/FB/4
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」19:50 二级小组赛 曼谷联 vs 理文 鹿中原
|
||||
https://tv.iill.top/FB/5
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」19:50 二级小组赛 南定 vs 淡滨尼流浪者 盛斌
|
||||
https://tv.iill.top/FB/6
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」21:50 二级小组赛 纳萨夫 vs 伊尔比德侯赛因 张天翼
|
||||
https://tv.iill.top/FB/7
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」21:50 二级小组赛 金色世纪 vs 布赖代合作 王子睿
|
||||
https://tv.iill.top/FB/8
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」23:50 二级小组赛 科威特竞技 vs 迪拜青年国民 鹿中原
|
||||
https://tv.iill.top/FB/9
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」23:50 二级小组赛 永恒体育 vs 巴格达空军 谭逸雄
|
||||
https://tv.iill.top/FB/10
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/足球.png" group-title="•咪咕「足球」", 「亚冠」23:50 二级小组赛 大不里士拖拉机 vs 库洛布光 乔迁
|
||||
https://tv.iill.top/FB/11
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」01:30 法兰克福冠军赛:男女单打1/16决赛
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」08:45 常规赛 公牛 vs 森林狼 孙博 闫宇峰 秋童
|
||||
https://tv.iill.top/NBA/1
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」08:45 常规赛 公牛 vs 森林狼 英文原声
|
||||
https://tv.iill.top/NBA/2
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」08:55 常规赛 马刺 vs 开拓者 王晓晨
|
||||
https://tv.iill.top/NBA/3
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」08:55 常规赛 马刺 vs 开拓者 英文原声
|
||||
https://tv.iill.top/NBA/4
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/NBA.png" group-title="•咪咕「NBA」", 「NBA」08:55 常规赛 雄鹿 vs 爵士 张浩岳
|
||||
https://tv.iill.top/NBA/5
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」01:30 法兰克福冠军赛:男女单打1/8决赛 周冠达
|
||||
https://tv.iill.top/Migu/1
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「咪咕」08:00 《体育日报》第30期 《体育日报》第三十期
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」01:30 法兰克福冠军赛:男女单打1/8决赛 清流
|
||||
https://tv.iill.top/Migu/2
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「KPL」17:30 济南RW侠 vs 重庆狼队 济南RW侠 vs 重庆狼队 官方解说
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」01:30 法兰克福冠军赛:男女单打1/8决赛 英文解说
|
||||
https://tv.iill.top/Migu/3
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」20:30 法兰克福冠军赛:男女单打1/8决赛 周冠达 侯英超
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「咪咕」08:00 《体育日报》第32期 《体育日报》第三十二期
|
||||
https://tv.iill.top/Migu/4
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」20:30 法兰克福冠军赛:男女单打1/8决赛 清流
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「KPL」17:30 待定 vs 待定 重庆狼队 vs 武汉eStarPro 官方解说
|
||||
https://tv.iill.top/Migu/5
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」20:30 法兰克福冠军赛:男女单打1/8决赛 英文解说
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」20:30 法兰克福冠军赛:男女单打1/4决赛 周冠达 侯英超
|
||||
https://tv.iill.top/Migu/6
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」20:30 法兰克福冠军赛:男女单打1/4决赛 清流
|
||||
https://tv.iill.top/Migu/7
|
||||
#EXTINF:-1 tvg-logo="https://epg.iill.top/logo/咪咕.png" group-title="•咪咕「体育」", 「WTT」20:30 法兰克福冠军赛:男女单打1/4决赛 英文解说
|
||||
https://tv.iill.top/Migu/8
|
||||
#EXTINF:-1 tvg-id="CCTV1" tvg-name="CCTV1" tvg-logo="https://epg.iill.top/logo/CCTV1.png" group-title="•咪咕「TV」",CCTV 1 综合
|
||||
https://tv.iill.top/migu/cctv1
|
||||
#EXTINF:-1 tvg-id="CCTV2" tvg-name="CCTV2" tvg-logo="https://epg.iill.top/logo/CCTV2.png" group-title="•咪咕「TV」",CCTV 2 财经
|
||||
|
||||
BIN
王二小/spider.jar
BIN
王二小/spider.jar
Binary file not shown.
@@ -454,7 +454,7 @@
|
||||
"api": "csp_Push",
|
||||
"playerType": "1",
|
||||
"searchable": 0,
|
||||
"ext": "file://TV/token.txt"
|
||||
"ext": "file://TV/ken.txt"
|
||||
}
|
||||
],
|
||||
"parses": [
|
||||
|
||||
68
肥猫/api/gbk.js
Normal file
68
肥猫/api/gbk.js
Normal file
File diff suppressed because one or more lines are too long
577
肥猫/api/jinja.js
Normal file
577
肥猫/api/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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}));
|
||||
1737
肥猫/api/json5.js
Normal file
1737
肥猫/api/json5.js
Normal file
File diff suppressed because one or more lines are too long
0
天天开心/api/qyg1.js → 肥猫/api/pako.min.js
vendored
0
天天开心/api/qyg1.js → 肥猫/api/pako.min.js
vendored
304
肥猫/api/模板.js
Normal file
304
肥猫/api/模板.js
Normal file
@@ -0,0 +1,304 @@
|
||||
if (typeof Object.assign != 'function') {
|
||||
Object.assign = function () {
|
||||
var target = arguments[0];
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
var source = arguments[i];
|
||||
for (var key in source) {
|
||||
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
return target;
|
||||
};
|
||||
}
|
||||
function getMubans() {
|
||||
var mubanDict = { // 模板字典
|
||||
mxpro: {
|
||||
title: '',
|
||||
host: '',
|
||||
// homeUrl:'/',
|
||||
url: '/vodshow/fyclass--------fypage---.html',
|
||||
searchUrl: '/vodsearch/**----------fypage---.html',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
headers: {//网站的请求头,完整支持所有的,常带ua和cookies
|
||||
'User-Agent': 'MOBILE_UA',
|
||||
// "Cookie": "searchneed=ok"
|
||||
},
|
||||
class_parse: '.navbar-items li:gt(2):lt(8);a&&Text;a&&href;/(\\d+).html',
|
||||
play_parse: true,
|
||||
lazy: '',
|
||||
limit: 6,
|
||||
推荐: '.tab-list.active;a.module-poster-item.module-item;.module-poster-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href',
|
||||
double: true, // 推荐内容是否双层定位
|
||||
一级: 'body a.module-poster-item.module-item;a&&title;.lazyload&&data-original;.module-item-note&&Text;a&&href',
|
||||
二级: {
|
||||
"title": "h1&&Text;.module-info-tag&&Text",
|
||||
"img": ".lazyload&&data-original",
|
||||
"desc": ".module-info-item:eq(1)&&Text;.module-info-item:eq(2)&&Text;.module-info-item:eq(3)&&Text",
|
||||
"content": ".module-info-introduction&&Text",
|
||||
"tabs": ".module-tab-item",
|
||||
"lists": ".module-play-list:eq(#id) a"
|
||||
},
|
||||
搜索: 'body .module-item;.module-card-item-title&&Text;.lazyload&&data-original;.module-item-note&&Text;a&&href;.module-info-item-content&&Text',
|
||||
},
|
||||
mxone5: {
|
||||
title: '',
|
||||
host: '',
|
||||
url: '/show/fyclass--------fypage---.html',
|
||||
searchUrl: '/search/**----------fypage---.html',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
class_parse: '.nav-menu-items&&li;a&&Text;a&&href;.*/(.*?).html',
|
||||
play_parse: true,
|
||||
lazy: '',
|
||||
limit: 6,
|
||||
推荐: '.module-list;.module-items&&.module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
|
||||
double: true, // 推荐内容是否双层定位
|
||||
一级: '.module-items .module-item;a&&title;img&&data-src;.module-item-text&&Text;a&&href',
|
||||
二级: {
|
||||
"title": "h1&&Text;.tag-link&&Text",
|
||||
"img": ".module-item-pic&&img&&data-src",
|
||||
"desc": ".video-info-items:eq(0)&&Text;.video-info-items:eq(1)&&Text;.video-info-items:eq(2)&&Text;.video-info-items:eq(3)&&Text",
|
||||
"content": ".vod_content&&Text",
|
||||
"tabs": ".module-tab-item",
|
||||
"lists": ".module-player-list:eq(#id)&&.scroll-content&&a"
|
||||
},
|
||||
搜索: '.module-items .module-search-item;a&&title;img&&data-src;.video-serial&&Text;a&&href',
|
||||
},
|
||||
首图: {
|
||||
title: '',
|
||||
host: '',
|
||||
url: '/vodshow/fyclass--------fypage---/',
|
||||
searchUrl: '/vodsearch/**----------fypage---.html',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
headers: {//网站的请求头,完整支持所有的,常带ua和cookies
|
||||
'User-Agent': 'MOBILE_UA',
|
||||
// "Cookie": "searchneed=ok"
|
||||
},
|
||||
class_parse: '.myui-header__menu li.hidden-sm:gt(0):lt(5);a&&Text;a&&href;/(\\d+).html',
|
||||
play_parse: true,
|
||||
lazy: '',
|
||||
limit: 6,
|
||||
推荐: 'ul.myui-vodlist.clearfix;li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
||||
double: true, // 推荐内容是否双层定位
|
||||
一级: '.myui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
||||
二级: {
|
||||
"title": ".myui-content__detail .title&&Text;.myui-content__detail p:eq(-2)&&Text",
|
||||
"img": ".myui-content__thumb .lazyload&&data-original",
|
||||
"desc": ".myui-content__detail p:eq(0)&&Text;.myui-content__detail p:eq(1)&&Text;.myui-content__detail p:eq(2)&&Text",
|
||||
"content": ".content&&Text",
|
||||
"tabs": ".nav-tabs:eq(0) li",
|
||||
"lists": ".myui-content__list:eq(#id) li"
|
||||
},
|
||||
搜索: '#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
|
||||
},
|
||||
首图2: {
|
||||
title: '',
|
||||
host: '',
|
||||
url: '/list/fyclass-fypage.html',
|
||||
searchUrl: '/vodsearch/**----------fypage---.html',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
headers: {
|
||||
'User-Agent': 'UC_UA',
|
||||
// "Cookie": ""
|
||||
},
|
||||
// class_parse:'.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;/(\\d+).html',
|
||||
class_parse: '.stui-header__menu li:gt(0):lt(7);a&&Text;a&&href;.*/(.*?).html',
|
||||
play_parse: true,
|
||||
lazy: '',
|
||||
limit: 6,
|
||||
推荐: 'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;.pic-text&&Text;a&&href',
|
||||
double: true, // 推荐内容是否双层定位
|
||||
一级: '.stui-vodlist li;a&&title;a&&data-original;.pic-text&&Text;a&&href',
|
||||
二级: {
|
||||
"title": ".stui-content__detail .title&&Text;.stui-content__detail p:eq(-2)&&Text",
|
||||
"img": ".stui-content__thumb .lazyload&&data-original",
|
||||
"desc": ".stui-content__detail p:eq(0)&&Text;.stui-content__detail p:eq(1)&&Text;.stui-content__detail p:eq(2)&&Text",
|
||||
"content": ".detail&&Text",
|
||||
"tabs": ".stui-vodlist__head h3",
|
||||
"lists": ".stui-content__playlist:eq(#id) li"
|
||||
},
|
||||
搜索: 'ul.stui-vodlist__media:eq(0) li,ul.stui-vodlist:eq(0) li,#searchList li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
|
||||
搜索1: 'ul.stui-vodlist&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
|
||||
搜索2: 'ul.stui-vodlist__media&&li;a&&title;.lazyload&&data-original;.text-muted&&Text;a&&href;.text-muted:eq(-1)&&Text',
|
||||
},
|
||||
默认: {
|
||||
title: '',
|
||||
host: '',
|
||||
url: '/vodshow/fyclass--------fypage---.html',
|
||||
searchUrl: '/vodsearch/-------------.html?wd=**',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
headers: {
|
||||
'User-Agent': 'MOBILE_UA',
|
||||
},
|
||||
play_parse: true,
|
||||
lazy: '',
|
||||
limit: 6,
|
||||
double: true, // 推荐内容是否双层定位
|
||||
},
|
||||
vfed: {
|
||||
title: '',
|
||||
host: '',
|
||||
url: '/index.php/vod/show/id/fyclass/page/fypage.html',
|
||||
searchUrl: '/index.php/vod/search/page/fypage/wd/**.html',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
headers: {
|
||||
'User-Agent': 'UC_UA',
|
||||
},
|
||||
// class_parse:'.fed-pops-navbar&&ul.fed-part-rows&&a.fed-part-eone:gt(0):lt(5);a&&Text;a&&href;.*/(.*?).html',
|
||||
class_parse: '.fed-pops-navbar&&ul.fed-part-rows&&a;a&&Text;a&&href;.*/(.*?).html',
|
||||
play_parse: true,
|
||||
lazy: '',
|
||||
limit: 6,
|
||||
推荐: 'ul.fed-list-info.fed-part-rows;li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
|
||||
double: true, // 推荐内容是否双层定位
|
||||
一级: '.fed-list-info&&li;a.fed-list-title&&Text;a&&data-original;.fed-list-remarks&&Text;a&&href',
|
||||
二级: {
|
||||
"title": "h1.fed-part-eone&&Text;.fed-deta-content&&.fed-part-rows&&li&&Text",
|
||||
"img": ".fed-list-info&&a&&data-original",
|
||||
"desc": ".fed-deta-content&&.fed-part-rows&&li:eq(1)&&Text;.fed-deta-content&&.fed-part-rows&&li:eq(2)&&Text;.fed-deta-content&&.fed-part-rows&&li:eq(3)&&Text",
|
||||
"content": ".fed-part-esan&&Text",
|
||||
"tabs": ".fed-drop-boxs&&.fed-part-rows&&li",
|
||||
"lists": ".fed-play-item:eq(#id)&&ul:eq(1)&&li"
|
||||
},
|
||||
搜索: '.fed-deta-info;h1&&Text;.lazyload&&data-original;.fed-list-remarks&&Text;a&&href;.fed-deta-content&&Text',
|
||||
},
|
||||
海螺3: {
|
||||
title: '',
|
||||
host: '',
|
||||
searchUrl: '/v_search/**----------fypage---.html',
|
||||
url: '/vod_____show/fyclass--------fypage---.html',
|
||||
headers: {
|
||||
'User-Agent': 'MOBILE_UA'
|
||||
},
|
||||
timeout: 5000,
|
||||
class_parse: 'body&&.hl-nav li:gt(0);a&&Text;a&&href;.*/(.*?).html',
|
||||
cate_exclude: '明星|专题|最新|排行',
|
||||
limit: 40,
|
||||
play_parse: true,
|
||||
lazy: '',
|
||||
推荐: '.hl-vod-list;li;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
||||
double: true,
|
||||
一级: '.hl-vod-list&&.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
||||
二级: {
|
||||
"title": ".hl-infos-title&&Text;.hl-text-conch&&Text",
|
||||
"img": ".hl-lazy&&data-original",
|
||||
"desc": ".hl-infos-content&&.hl-text-conch&&Text",
|
||||
"content": ".hl-content-text&&Text",
|
||||
"tabs": ".hl-tabs&&a",
|
||||
"lists": ".hl-plays-list:eq(#id)&&li"
|
||||
},
|
||||
搜索: '.hl-list-item;a&&title;a&&data-original;.remarks&&Text;a&&href',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
},
|
||||
海螺2: {
|
||||
title: '',
|
||||
host: '',
|
||||
searchUrl: '/index.php/vod/search/page/fypage/wd/**/',
|
||||
url: '/index.php/vod/show/id/fyclass/page/fypage/',
|
||||
headers: {
|
||||
'User-Agent': 'MOBILE_UA'
|
||||
},
|
||||
timeout: 5000,
|
||||
class_parse: '#nav-bar li;a&&Text;a&&href;id/(.*?)/',
|
||||
limit: 40,
|
||||
play_parse: true,
|
||||
lazy: '',
|
||||
推荐: '.list-a.size;li;a&&title;.lazy&&data-original;.bt&&Text;a&&href',
|
||||
double: true,
|
||||
一级: '.list-a&&li;a&&title;.lazy&&data-original;.list-remarks&&Text;a&&href',
|
||||
二级: {
|
||||
"title": "h2&&Text;.deployment&&Text",
|
||||
"img": ".lazy&&data-original",
|
||||
"desc": ".deployment&&Text",
|
||||
"content": ".ec-show&&Text",
|
||||
"tabs": "#tag&&a",
|
||||
"lists": ".play_list_box:eq(#id)&&li"
|
||||
},
|
||||
搜索: '.search-list;a&&title;.lazy&&data-original;.deployment&&Text;a&&href',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
},
|
||||
短视: {
|
||||
title: '',
|
||||
host: '',
|
||||
// homeUrl:'/',
|
||||
url: '/channel/fyclass-fypage.html',
|
||||
searchUrl: '/search.html?wd=**',
|
||||
searchable: 2,//是否启用全局搜索,
|
||||
quickSearch: 0,//是否启用快速搜索,
|
||||
filterable: 0,//是否启用分类筛选,
|
||||
headers: {//网站的请求头,完整支持所有的,常带ua和cookies
|
||||
'User-Agent': 'MOBILE_UA',
|
||||
// "Cookie": "searchneed=ok"
|
||||
},
|
||||
class_parse: '.menu_bottom ul li;a&&Text;a&&href;.*/(.*?).html',
|
||||
cate_exclude: '解析|动态',
|
||||
play_parse: true,
|
||||
lazy: '',
|
||||
limit: 6,
|
||||
推荐: '.indexShowBox;ul&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
|
||||
double: true, // 推荐内容是否双层定位
|
||||
一级: '.pic-list&&li;a&&title;img&&data-src;.s1&&Text;a&&href',
|
||||
二级: {
|
||||
"title": "h1&&Text;.content-rt&&p:eq(0)&&Text",
|
||||
"img": ".img&&img&&data-src",
|
||||
"desc": ".content-rt&&p:eq(1)&&Text;.content-rt&&p:eq(2)&&Text;.content-rt&&p:eq(3)&&Text;.content-rt&&p:eq(4)&&Text;.content-rt&&p:eq(5)&&Text",
|
||||
"content": ".zkjj_a&&Text",
|
||||
"tabs": ".py-tabs&&option",
|
||||
"lists": ".player:eq(#id) li"
|
||||
},
|
||||
搜索: '.sr_lists&&ul&&li;h3&&Text;img&&data-src;.int&&p:eq(0)&&Text;a&&href',
|
||||
},
|
||||
短视2:{
|
||||
title: '',
|
||||
host: '',
|
||||
class_name:'电影&电视剧&综艺&动漫',
|
||||
class_url:'1&2&3&4',
|
||||
searchUrl: '/index.php/ajax/suggest?mid=1&wd=**&limit=50',
|
||||
searchable: 2,
|
||||
quickSearch: 0,
|
||||
headers:{'User-Agent':'MOBILE_UA'},
|
||||
url: '/index.php/api/vod#type=fyclass&page=fypage',
|
||||
filterable:0,//是否启用分类筛选,
|
||||
filter_url:'',
|
||||
filter: {},
|
||||
filter_def:{},
|
||||
detailUrl:'/index.php/vod/detail/id/fyid.html',
|
||||
play_parse: true,
|
||||
lazy: '',
|
||||
limit: 6,
|
||||
推荐:'.list-vod.flex .public-list-box;a&&title;.lazy&&data-original;.public-list-prb&&Text;a&&href',
|
||||
一级:'js:let body=input.split("#")[1];let t=Math.round(new Date/1e3).toString();let key=md5("DS"+t+"DCC147D11943AF75");let url=input.split("#")[0];body=body+"&time="+t+"&key="+key;print(body);fetch_params.body=body;let html=post(url,fetch_params);let data=JSON.parse(html);VODS=data.list.map(function(it){it.vod_pic=urljoin2(input.split("/i")[0],it.vod_pic);return it});',
|
||||
二级:{
|
||||
"title":".slide-info-title&&Text;.slide-info:eq(3)--strong&&Text",
|
||||
"img":".detail-pic&&data-original",
|
||||
"desc":".fraction&&Text;.slide-info-remarks:eq(1)&&Text;.slide-info-remarks:eq(2)&&Text;.slide-info:eq(2)--strong&&Text;.slide-info:eq(1)--strong&&Text",
|
||||
"content":"#height_limit&&Text",
|
||||
"tabs":".anthology.wow.fadeInUp.animated&&.swiper-wrapper&&a",
|
||||
"tab_text":".swiper-slide&&Text",
|
||||
"lists":".anthology-list-box:eq(#id) li"
|
||||
},
|
||||
搜索:'json:list;name;pic;;id',
|
||||
}
|
||||
};
|
||||
return JSON.parse(JSON.stringify(mubanDict));
|
||||
}
|
||||
var mubanDict = getMubans();
|
||||
var muban = getMubans();
|
||||
export default {muban,getMubans};
|
||||
BIN
肥猫/spider.jar
BIN
肥猫/spider.jar
Binary file not shown.
1290
饭太硬/lives/平台直播.txt
1290
饭太硬/lives/平台直播.txt
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user