提交 6662861e 编写于 作者: H hjdhnx

提交quickjs引擎的测试报告,与python交互不如js2py方便,其他的都很优秀

上级 68c15c66
from quickjs import Function,Context
import requests
import json
ctx = Context()
ctx.add_callable("print", print)
def print2(text):
print('print2:',text)
# ctx.set('print2',print2)
ctx.add_callable("print2", print2)
# ctx.add_callable("ua", 'mobile')
gg="""
function adder(a, b) {
c=[1,2].filter(it=>it>1);
print(c);
print(ua);
print(c.join('$'))
print(typeof c)
print(Array.isArray(c))
return a + b+`你这个a是${a},c是${c}`;
}
function bd(){
let html = request('https://www.baidu.com/')
}
function f(a, b) {
let e = print2;
e(2222);
return adder(a, b);
}
var d = 123;
print2('我是注入的');
print2(typeof(ccc));
var gs = {a:1};
print2(gs)
// print2(ccc(gs))
var qw = [1,2,3]
print2(mmp)
"""
# f = Function("f",gg)
#print(f(1,3))
#assert f(1, 2) == 3
# ctx.add_callable("f", f)
# ctx.add_callable("f", f)
ctx.set('ua','mobile')
cc = {
# "json":json
"json":'22323'
# json:json
}
def ccc(aa):
return json.dumps(aa)
# ctx.add_callable('json',json)
# ctx.set('cc',cc) # 报错
ctx.add_callable('ccc',ccc)
# ctx.eval(gg)
ctx.set('mmp','我的mm')
#ctx.eval(f(1,3))
ctx.eval(gg+'let lg = print;lg(111);lg(f(1,3))')
ctx.set("v", 10**25)
print('v',type(ctx.eval("v")),ctx.eval("v"))
print(ctx.get('d'))
gs = ctx.get('gs')
qw = ctx.get('qw')
print('qw',qw)
print(qw.json())
print('gs',gs)
print(gs.json())
print(json.loads(gs.json()))
print(ctx.get('e'))
print(ctx.get('print2'))
print(11,ctx.parse_json('{"a":1}'))
def request(url):
r = requests.get(url)
r.encoding = r.apparent_encoding
html = r.text
print(html)
return html
ctx.add_callable('request',request)
ctx.eval('bd()')
# 报错提示:(没法把python对象给qkjs,基础数据类型字典也不行,json等包更不行了) Unsupported type when converting a Python object to quickjs: dict.
\ No newline at end of file
import concurrent.futures
import gc
import json
import unittest
import quickjs
class LoadModule(unittest.TestCase):
def test_42(self):
self.assertEqual(quickjs.test(), 42)
class Context(unittest.TestCase):
def setUp(self):
self.context = quickjs.Context()
def test_eval_int(self):
self.assertEqual(self.context.eval("40 + 2"), 42)
def test_eval_float(self):
self.assertEqual(self.context.eval("40.0 + 2.0"), 42.0)
def test_eval_str(self):
self.assertEqual(self.context.eval("'4' + '2'"), "42")
def test_eval_bool(self):
self.assertEqual(self.context.eval("true || false"), True)
self.assertEqual(self.context.eval("true && false"), False)
def test_eval_null(self):
self.assertIsNone(self.context.eval("null"))
def test_eval_undefined(self):
self.assertIsNone(self.context.eval("undefined"))
def test_wrong_type(self):
with self.assertRaises(TypeError):
self.assertEqual(self.context.eval(1), 42)
def test_context_between_calls(self):
self.context.eval("x = 40; y = 2;")
self.assertEqual(self.context.eval("x + y"), 42)
def test_function(self):
self.context.eval("""
function special(x) {
return 40 + x;
}
""")
self.assertEqual(self.context.eval("special(2)"), 42)
def test_get(self):
self.context.eval("x = 42; y = 'foo';")
self.assertEqual(self.context.get("x"), 42)
self.assertEqual(self.context.get("y"), "foo")
self.assertEqual(self.context.get("z"), None)
def test_set(self):
self.context.eval("x = 'overriden'")
self.context.set("x", 42)
self.context.set("y", "foo")
self.assertTrue(self.context.eval("x == 42"))
self.assertTrue(self.context.eval("y == 'foo'"))
def test_module(self):
self.context.module("""
export function test() {
return 42;
}
""")
def test_error(self):
with self.assertRaisesRegex(quickjs.JSException, "ReferenceError: 'missing' is not defined"):
self.context.eval("missing + missing")
def test_lifetime(self):
def get_f():
context = quickjs.Context()
f = context.eval("""
a = function(x) {
return 40 + x;
}
""")
return f
f = get_f()
self.assertTrue(f)
# The context has left the scope after f. f needs to keep the context alive for the
# its lifetime. Otherwise, we will get problems.
def test_backtrace(self):
try:
self.context.eval("""
function funcA(x) {
x.a.b = 1;
}
function funcB(x) {
funcA(x);
}
funcB({});
""")
except Exception as e:
msg = str(e)
else:
self.fail("Expected exception.")
self.assertIn("at funcA (<input>:3)\n", msg)
self.assertIn("at funcB (<input>:6)\n", msg)
def test_memory_limit(self):
code = """
(function() {
let arr = [];
for (let i = 0; i < 1000; ++i) {
arr.push(i);
}
})();
"""
self.context.eval(code)
self.context.set_memory_limit(1000)
with self.assertRaisesRegex(quickjs.JSException, "null"):
self.context.eval(code)
self.context.set_memory_limit(1000000)
self.context.eval(code)
def test_time_limit(self):
code = """
(function() {
let arr = [];
for (let i = 0; i < 100000; ++i) {
arr.push(i);
}
return arr;
})();
"""
self.context.eval(code)
self.context.set_time_limit(0)
with self.assertRaisesRegex(quickjs.JSException, "InternalError: interrupted"):
self.context.eval(code)
self.context.set_time_limit(-1)
self.context.eval(code)
def test_memory_usage(self):
self.assertIn("memory_used_size", self.context.memory().keys())
def test_json_simple(self):
self.assertEqual(self.context.parse_json("42"), 42)
def test_json_error(self):
with self.assertRaisesRegex(quickjs.JSException, "unexpected token"):
self.context.parse_json("a b c")
def test_execute_pending_job(self):
self.context.eval("obj = {}")
self.assertEqual(self.context.execute_pending_job(), False)
self.context.eval("Promise.resolve().then(() => {obj.x = 1;})")
self.assertEqual(self.context.execute_pending_job(), True)
self.assertEqual(self.context.eval("obj.x"), 1)
self.assertEqual(self.context.execute_pending_job(), False)
def test_global(self):
self.context.set("f", self.context.globalThis)
self.assertTrue(isinstance(self.context.globalThis, quickjs.Object))
self.assertTrue(self.context.eval("f === globalThis"))
with self.assertRaises(AttributeError):
self.context.globalThis = 1
class CallIntoPython(unittest.TestCase):
def setUp(self):
self.context = quickjs.Context()
def test_make_function(self):
self.context.add_callable("f", lambda x: x + 2)
self.assertEqual(self.context.eval("f(40)"), 42)
self.assertEqual(self.context.eval("f.name"), "f")
def test_make_two_functions(self):
for i in range(10):
self.context.add_callable("f", lambda x: i + x + 2)
self.context.add_callable("g", lambda x: i + x + 40)
f = self.context.get("f")
g = self.context.get("g")
self.assertEqual(f(40) - i, 42)
self.assertEqual(g(2) - i, 42)
self.assertEqual(self.context.eval("((f, a) => f(a))")(f, 40) - i, 42)
def test_make_function_call_from_js(self):
self.context.add_callable("f", lambda x: x + 2)
g = self.context.eval("""(
function() {
return f(20) + 20;
}
)""")
self.assertEqual(g(), 42)
def test_python_function_raises(self):
def error(a):
raise ValueError("A")
self.context.add_callable("error", error)
with self.assertRaisesRegex(quickjs.JSException, "Python call failed"):
self.context.eval("error(0)")
def test_python_function_not_callable(self):
with self.assertRaisesRegex(TypeError, "Argument must be callable."):
self.context.add_callable("not_callable", 1)
def test_python_function_no_slots(self):
for i in range(2**16):
self.context.add_callable(f"a{i}", lambda i=i: i + 1)
self.assertEqual(self.context.eval("a0()"), 1)
self.assertEqual(self.context.eval(f"a{2**16 - 1}()"), 2**16)
def test_function_after_context_del(self):
def make():
ctx = quickjs.Context()
ctx.add_callable("f", lambda: 1)
f = ctx.get("f")
del ctx
return f
gc.collect()
f = make()
self.assertEqual(f(), 1)
def test_python_function_unwritable(self):
self.context.eval("""
Object.defineProperty(globalThis, "obj", {
value: "test",
writable: false,
});
""")
with self.assertRaisesRegex(TypeError, "Failed adding the callable."):
self.context.add_callable("obj", lambda: None)
def test_python_function_is_function(self):
self.context.add_callable("f", lambda: None)
self.assertTrue(self.context.eval("f instanceof Function"))
self.assertTrue(self.context.eval("typeof f === 'function'"))
def test_make_function_two_args(self):
def concat(a, b):
return a + b
self.context.add_callable("concat", concat)
result = self.context.eval("concat(40, 2)")
self.assertEqual(result, 42)
concat = self.context.get("concat")
result = self.context.eval("((f, a, b) => 22 + f(a, b))")(concat, 10, 10)
self.assertEqual(result, 42)
def test_make_function_two_string_args(self):
"""Without the JS_DupValue in js_c_function, this test crashes."""
def concat(a, b):
return a + "-" + b
self.context.add_callable("concat", concat)
concat = self.context.get("concat")
result = concat("aaa", "bbb")
self.assertEqual(result, "aaa-bbb")
def test_can_eval_in_same_context(self):
self.context.add_callable("f", lambda: 40 + self.context.eval("1 + 1"))
self.assertEqual(self.context.eval("f()"), 42)
def test_can_call_in_same_context(self):
inner = self.context.eval("(function() { return 42; })")
self.context.add_callable("f", lambda: inner())
self.assertEqual(self.context.eval("f()"), 42)
def test_delete_function_from_inside_js(self):
self.context.add_callable("f", lambda: None)
# Segfaults if js_python_function_finalizer does not handle threading
# states carefully.
self.context.eval("delete f")
self.assertIsNone(self.context.get("f"))
def test_invalid_argument(self):
self.context.add_callable("p", lambda: 42)
self.assertEqual(self.context.eval("p()"), 42)
with self.assertRaisesRegex(quickjs.JSException, "Python call failed"):
self.context.eval("p(1)")
with self.assertRaisesRegex(quickjs.JSException, "Python call failed"):
self.context.eval("p({})")
def test_time_limit_disallowed(self):
self.context.add_callable("f", lambda x: x + 2)
self.context.set_time_limit(1000)
with self.assertRaises(quickjs.JSException):
self.context.eval("f(40)")
def test_conversion_failure_does_not_raise_system_error(self):
# https://github.com/PetterS/quickjs/issues/38
def test_list():
return [1, 2, 3]
self.context.add_callable("test_list", test_list)
with self.assertRaises(quickjs.JSException):
# With incorrect error handling, this (safely) made Python raise a SystemError
# instead of a JS exception.
self.context.eval("test_list()")
class Object(unittest.TestCase):
def setUp(self):
self.context = quickjs.Context()
def test_function_is_object(self):
f = self.context.eval("""
a = function(x) {
return 40 + x;
}
""")
self.assertIsInstance(f, quickjs.Object)
def test_function_call_int(self):
f = self.context.eval("""
f = function(x) {
return 40 + x;
}
""")
self.assertEqual(f(2), 42)
def test_function_call_int_two_args(self):
f = self.context.eval("""
f = function(x, y) {
return 40 + x + y;
}
""")
self.assertEqual(f(3, -1), 42)
def test_function_call_many_times(self):
n = 1000
f = self.context.eval("""
f = function(x, y) {
return x + y;
}
""")
s = 0
for i in range(n):
s += f(1, 1)
self.assertEqual(s, 2 * n)
def test_function_call_str(self):
f = self.context.eval("""
f = function(a) {
return a + " hej";
}
""")
self.assertEqual(f("1"), "1 hej")
def test_function_call_str_three_args(self):
f = self.context.eval("""
f = function(a, b, c) {
return a + " hej " + b + " ho " + c;
}
""")
self.assertEqual(f("1", "2", "3"), "1 hej 2 ho 3")
def test_function_call_object(self):
d = self.context.eval("d = {data: 42};")
f = self.context.eval("""
f = function(d) {
return d.data;
}
""")
self.assertEqual(f(d), 42)
# Try again to make sure refcounting works.
self.assertEqual(f(d), 42)
self.assertEqual(f(d), 42)
def test_function_call_unsupported_arg(self):
f = self.context.eval("""
f = function(x) {
return 40 + x;
}
""")
with self.assertRaisesRegex(TypeError, "Unsupported type"):
self.assertEqual(f({}), 42)
def test_json(self):
d = self.context.eval("d = {data: 42};")
self.assertEqual(json.loads(d.json()), {"data": 42})
def test_call_nonfunction(self):
d = self.context.eval("({data: 42})")
with self.assertRaisesRegex(quickjs.JSException, "TypeError: not a function"):
d(1)
def test_wrong_context(self):
context1 = quickjs.Context()
context2 = quickjs.Context()
f = context1.eval("(function(x) { return x.a; })")
d = context2.eval("({a: 1})")
with self.assertRaisesRegex(ValueError, "Can not mix JS objects from different contexts."):
f(d)
class FunctionTest(unittest.TestCase):
def test_adder(self):
f = quickjs.Function(
"adder", """
function adder(x, y) {
return x + y;
}
""")
self.assertEqual(f(1, 1), 2)
self.assertEqual(f(100, 200), 300)
self.assertEqual(f("a", "b"), "ab")
def test_identity(self):
identity = quickjs.Function(
"identity", """
function identity(x) {
return x;
}
""")
for x in [True, [1], {"a": 2}, 1, 1.5, "hej", None]:
self.assertEqual(identity(x), x)
def test_bool(self):
f = quickjs.Function(
"f", """
function f(x) {
return [typeof x ,!x];
}
""")
self.assertEqual(f(False), ["boolean", True])
self.assertEqual(f(True), ["boolean", False])
def test_empty(self):
f = quickjs.Function("f", "function f() { }")
self.assertEqual(f(), None)
def test_lists(self):
f = quickjs.Function(
"f", """
function f(arr) {
const result = [];
arr.forEach(function(elem) {
result.push(elem + 42);
});
return result;
}""")
self.assertEqual(f([0, 1, 2]), [42, 43, 44])
def test_dict(self):
f = quickjs.Function(
"f", """
function f(obj) {
return obj.data;
}""")
self.assertEqual(f({"data": {"value": 42}}), {"value": 42})
def test_time_limit(self):
f = quickjs.Function(
"f", """
function f() {
let arr = [];
for (let i = 0; i < 100000; ++i) {
arr.push(i);
}
return arr;
}
""")
f()
f.set_time_limit(0)
with self.assertRaisesRegex(quickjs.JSException, "InternalError: interrupted"):
f()
f.set_time_limit(-1)
f()
def test_garbage_collection(self):
f = quickjs.Function(
"f", """
function f() {
let a = {};
let b = {};
a.b = b;
b.a = a;
a.i = 42;
return a.i;
}
""")
initial_count = f.memory()["obj_count"]
for i in range(10):
prev_count = f.memory()["obj_count"]
self.assertEqual(f(run_gc=False), 42)
current_count = f.memory()["obj_count"]
self.assertGreater(current_count, prev_count)
f.gc()
self.assertLessEqual(f.memory()["obj_count"], initial_count)
def test_deep_recursion(self):
f = quickjs.Function(
"f", """
function f(v) {
if (v <= 0) {
return 0;
} else {
return 1 + f(v - 1);
}
}
""")
self.assertEqual(f(100), 100)
limit = 500
with self.assertRaises(quickjs.StackOverflow):
f(limit)
f.set_max_stack_size(2000 * limit)
self.assertEqual(f(limit), limit)
def test_add_callable(self):
f = quickjs.Function(
"f", """
function f() {
return pfunc();
}
""")
f.add_callable("pfunc", lambda: 42)
self.assertEqual(f(), 42)
def test_execute_pending_job(self):
f = quickjs.Function(
"f", """
obj = {x: 0, y: 0};
async function a() {
obj.x = await 1;
}
a();
Promise.resolve().then(() => {obj.y = 1});
function f() {
return obj.x + obj.y;
}
""")
self.assertEqual(f(), 0)
self.assertEqual(f.execute_pending_job(), True)
self.assertEqual(f(), 1)
self.assertEqual(f.execute_pending_job(), True)
self.assertEqual(f(), 2)
self.assertEqual(f.execute_pending_job(), False)
def test_global(self):
f = quickjs.Function(
"f", """
function f() {
}
""")
self.assertTrue(isinstance(f.globalThis, quickjs.Object))
with self.assertRaises(AttributeError):
f.globalThis = 1
class JavascriptFeatures(unittest.TestCase):
def test_unicode_strings(self):
identity = quickjs.Function(
"identity", """
function identity(x) {
return x;
}
""")
context = quickjs.Context()
for x in ["äpple", "≤≥", "☺"]:
self.assertEqual(identity(x), x)
self.assertEqual(context.eval('(function(){ return "' + x + '";})()'), x)
def test_es2020_optional_chaining(self):
f = quickjs.Function(
"f", """
function f(x) {
return x?.one?.two;
}
""")
self.assertIsNone(f({}))
self.assertIsNone(f({"one": 12}))
self.assertEqual(f({"one": {"two": 42}}), 42)
def test_es2020_null_coalescing(self):
f = quickjs.Function(
"f", """
function f(x) {
return x ?? 42;
}
""")
self.assertEqual(f(""), "")
self.assertEqual(f(0), 0)
self.assertEqual(f(11), 11)
self.assertEqual(f(None), 42)
def test_symbol_conversion(self):
context = quickjs.Context()
context.eval("a = Symbol();")
context.set("b", context.eval("a"))
self.assertTrue(context.eval("a === b"))
def test_large_python_integers_to_quickjs(self):
context = quickjs.Context()
# Without a careful implementation, this made Python raise a SystemError/OverflowError.
context.set("v", 10**25)
# There is precision loss occurring in JS due to
# the floating point implementation of numbers.
self.assertTrue(context.eval("v == 1e25"))
def test_bigint(self):
context = quickjs.Context()
self.assertEqual(context.eval(f"BigInt('{10**100}')"), 10**100)
self.assertEqual(context.eval(f"BigInt('{-10**100}')"), -10**100)
class Threads(unittest.TestCase):
def setUp(self):
self.context = quickjs.Context()
self.executor = concurrent.futures.ThreadPoolExecutor()
def tearDown(self):
self.executor.shutdown()
def test_concurrent(self):
"""Demonstrates that the execution will crash unless the function executes on the same
thread every time.
If the executor in Function is not present, this test will fail.
"""
data = list(range(1000))
jssum = quickjs.Function(
"sum", """
function sum(data) {
return data.reduce((a, b) => a + b, 0)
}
""")
futures = [self.executor.submit(jssum, data) for _ in range(10)]
expected = sum(data)
for future in concurrent.futures.as_completed(futures):
self.assertEqual(future.result(), expected)
def test_concurrent_own_executor(self):
data = list(range(1000))
jssum1 = quickjs.Function("sum",
"""
function sum(data) {
return data.reduce((a, b) => a + b, 0)
}
""",
own_executor=True)
jssum2 = quickjs.Function("sum",
"""
function sum(data) {
return data.reduce((a, b) => a + b, 0)
}
""",
own_executor=True)
futures = [self.executor.submit(f, data) for _ in range(10) for f in (jssum1, jssum2)]
expected = sum(data)
for future in concurrent.futures.as_completed(futures):
self.assertEqual(future.result(), expected)
class QJS(object):
def __init__(self):
self.interp = quickjs.Context()
self.interp.eval('var foo = "bar";')
class QuickJSContextInClass(unittest.TestCase):
def test_github_issue_7(self):
# This used to give stack overflow internal error, due to how QuickJS calculates stack
# frames. Passes with the 2021-03-27 release.
qjs = QJS()
self.assertEqual(qjs.interp.eval('2+2'), 4)
//微信公众号【云星日记】制作分享
//QQ频道搜索云星日记加入频道交流
//关注公众号回复【接口】获取在线接口
//关注公众号回复【本地接口】获取本地接口
//保存外链网址实时在线更新
//直接把在线网址外链输入TvBox就可以同步更新
//打造属于自己的app,请看下面微信公号文章链接
//TvBox生成项目打包教程:https://mp.weixin.qq.com/s/FDa4OSDwHemy8uDyhn-1UQ
//TVBox在线接口地址:https://mp.weixin.qq.com/s/uCipLSKxHvEdwKpIaQTFlw
//云星旗下话费充值折扣公众号:【云优惠生活】
//详情查看文章介绍:https://mp.weixin.qq.com/s/Bbm6mQtu_DjNJPXcXW0VOA
{
"sites": [
{
"key": "精工厂",
"name": "精工厂",
"type": 0,
"api": "https://jgczyapi.com/home/cjapi/kld2/mc/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "91md",
"name": "91",
"type": 1,
"api": "https://91md.me/api.php/provide/vod/from/mdm3u8/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "影库资源",
"name": "影库资源",
"type": 1,
"api": "https://api.ykapi.net/api.php/provide/vod/from/ykm3u8/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "速播",
"name": "速播",
"type": 1,
"api": "https://api.suboapi.com/api.php/provide/vod/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "美少女",
"name": "美少女",
"type": 0,
"api": "https://www.msnii.com/api/xml.php",
"searchable": 1,
"quickSearch": 1,
"filterable": 1
},
{
"key": "点点",
"name": "点点",
"type": 0,
"api": "https://xx55zyapi.com/home/cjapi/ascf/mc/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "屌丝",
"name": "屌丝",
"type": 0,
"api": "https://sdszyapi.com/home/cjapi/asbb/sea/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "哥哥妹妹",
"name": "哥哥妹妹",
"type": 0,
"api": "http://www.ggmmzy.com:9999/inc/xml",
"searchable": 0,
"quickSearch": 0,
"filterable": 0
},
{
"key": "CK资源",
"name": "CK资源",
"type": 1,
"api": "http://www.feifei67.com/api.php/provide/vod/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "博天堂",
"name": "天堂",
"type": 0,
"api": "http://bttcj.com/inc/sapi.php",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "白嫖资源",
"name": "白嫖",
"type": 0,
"api": "https://www.kxgav.com/api/xml.php",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp028",
"name": "zp028",
"type": 0,
"api": "http://mygzycj.com/sapi.php?ac=list",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp020",
"name": "zp020",
"type": 0,
"api": "http://m.7777688.com/inc/api.php",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "色色资源",
"name": "涩涩",
"type": 0,
"api": "http://secj8.com/inc/sapi.php?ac=videolist",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "点点娱乐",
"name": "点点",
"type": 0,
"api": "https://xx55zyapi.com/home/cjapi/ascf/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "淫水机资源",
"name": "粥水",
"type": 0,
"api": "https://www.xrbsp.com/api/xml.php",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "小湿妹资源",
"name": "小湿妹资源",
"type": 0,
"api": "https://www.afasu.com/api/xml.php",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "香奶儿资源",
"name": "香奶儿",
"type": 0,
"api": "https://www.gdlsp.com/api/xml.php",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "酷豆采集",
"name": "酷豆",
"type": 1,
"api": "https://api.kdapi.info/api.php/provide/vod/?ac=list",
"playUrl": "https://jx.kubohk.com/jx/?url=",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "色屌丝资源",
"name": "色屌丝资源",
"type": 0,
"api": "http://sdszyapi.com/home/cjapi/asbb/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "秀色采集",
"name": "秀色av",
"type": 0,
"api": "https://api.xiuseapi.com/api.php/provide/vod/from/xiuse/at/xml/",
"playUrl": "https://api.xiusebf.com/m3u8/?url=",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "爱播采集",
"name": "爱播av",
"type": 1,
"api": "https://cj.apiabzy.com/api.php/provide/vod/?ac=list",
"playUrl": "https://player.aibozyplayer.com/m3u8/?url=",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "奶茶采集",
"name": "奶茶av",
"type": 0,
"api": "https://caiji.naichaapi.com/inc/api.php",
"playUrl": "https://jiexi.naichaapi.com/?url=",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "大地采集",
"name": "大地av",
"type": 0,
"api": "https://dadiapi.com/apple_m3u8.php",
"playUrl": "https://play.dadiapi.com/watch?url=",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp157",
"name": "熊猫资源",
"type": 0,
"api": "http://jcspcj8.com/api?ac=list",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "字幕网",
"name": "字幕网",
"type": 0,
"api": "http://zmcj88.com/sapi?ac=videolist",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "咪咪资源",
"name": "咪咪资源",
"type": 0,
"api": "http://www.caiji25.com/home/cjapi/p0as/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp116",
"name": "泡芙资源",
"type": 0,
"api": "http://zmcj88.com/api?ac=list",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "小姐姐资源",
"name": "小姐姐资源",
"type": 0,
"api": "https://xjjzyapi.com/home/cjapi/askl/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "精工厂资源",
"name": "精工厂资源",
"type": 0,
"api": "https://jgczyapi.com/home/cjapi/kld2/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "草榴视频",
"name": "草榴视频",
"type": 0,
"api": "https://www.caiji02.com/home/cjapi/cfas/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "52AVAV",
"name": "52AVAV",
"type": 0,
"api": "https://52zyapi.com/home/cjapi/asda/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp067",
"name": "环亚资源-无码",
"type": 0,
"api": "http://wmcj8.com/inc/sapi.php",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "大MM资源",
"name": "大MM资源",
"type": 0,
"api": "https://www.dmmapi.com/home/cjapi/asd2c7/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "酷伦理",
"name": "酷伦理",
"type": 1,
"api": "https://api.kudian70.com/api.php/provide/vod/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "万影色",
"name": "万影色",
"type": 1,
"api": "https://wanying4.com/api.php/provide/vod/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "美少女资源",
"name": "美少女资源",
"type": 0,
"api": "https://www.msnii.com/api/xml.php",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "玖玖资源",
"name": "玖玖资源",
"type": 0,
"api": "http://99zywcj.com/inc/sapi.php?ac=videolist",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "久草资源",
"name": "久草资源",
"type": 0,
"api": "http://jcspcj8.com/api?ac=videolist",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "狼少年",
"name": "狼少年",
"type": 0,
"api": "http://cjmygzy.com/inc/sapi.php?ac=videolist",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "利来资源",
"name": "利来资源",
"type": 0,
"api": "http://llzxcj.com/inc/sck.php?ac=videolist",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "佳丽资源",
"name": "佳丽资源",
"type": 1,
"api": "http://www.jializyzapi.com/api.php/provide/vod/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp128",
"name": "鲨鱼影视",
"type": 0,
"api": "https://shayuapi.com/api.php/Seacms/vod/at/xml/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "速度资源",
"name": "速度资源",
"type": 0,
"api": "http://www.ggmmzy.com:9999/inc/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "KK写真资源",
"name": "KK写真资源-伦理",
"type": 1,
"api": "https://kkzy.me/api.php/provide/vod/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp024",
"name": "BT天堂-伦理",
"type": 0,
"api": "http://bttcj.com/inc/sapi.php",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp011",
"name": "78乐播",
"type": 0,
"api": "https://lbapi9.com/api.php/provide/vod/at/xml/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp059",
"name": "番号资源",
"type": 0,
"api": "http://fhapi9.com/api.php/provide/vod/at/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "富二代资源",
"name": "富二代资源",
"type": 0,
"api": "http://f2dcj6.com/sapi?ac=videolist",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp066",
"name": "花椒资源",
"type": 0,
"api": "https://api.apilyzy.com/api.php/provide/vod/at/xml/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp099",
"name": "老鸭资源",
"type": 0,
"api": "https://apihjzy.com/api.php/provide/vod/at/xml/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp134",
"name": "速播资源",
"type": 0,
"api": "http://api.suboapi.com/api.php/provide/vod/at/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "一本道资源",
"name": "一本道资源",
"type": 0,
"api": "https://www.caiji03.com/home/cjapi/cfg8/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "鲍鱼AV",
"name": "鲍鱼AV",
"type": 0,
"api": "http://caiji26.com/home/cjapi/p0g8/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "日本AV在线",
"name": "日本AV在线",
"type": 0,
"api": "https://www.caiji07.com/home/cjapi/cfcf/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "久久热在线",
"name": "久久热在线",
"type": 0,
"api": "https://www.caiji06.com/home/cjapi/cfbb/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "青青草视频",
"name": "青青草视频",
"type": 0,
"api": "https://www.caiji05.com/home/cjapi/cfda/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "丝袜资源",
"name": "丝袜资源",
"type": 1,
"api": "https://siwazyw.cc/api.php/provide/vod/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "麻豆视频",
"name": "麻豆视频",
"type": 0,
"api": "https://www.caiji04.com/home/cjapi/cfc7/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "亚洲成人在线",
"name": "亚洲成人在线",
"type": 0,
"api": "https://www.caiji01.com/home/cjapi/cfd2/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "天噜啦资源",
"name": "天噜啦资源",
"type": 0,
"api": "http://www.987caiji.com/api/max.php",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "010爱资源",
"name": "010爱资源",
"type": 0,
"api": "http://www.010aizy.com/API/macs.php",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "爱操资源",
"name": "爱操资源",
"type": 1,
"api": "https://aicaozy.com/api.php/provide/vod/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp100",
"name": "乐播",
"type": 0,
"api": "https://lbapi9.com/api.php/provide/vod/at/xml/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "花魁资源",
"name": "花魁资源",
"type": 1,
"api": "https://caiji.huakuiapi.com/inc/apijson_vod.php",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "夜夜撸资源",
"name": "夜夜撸资源",
"type": 0,
"api": "https://www.caiji23.com/home/cjapi/kls6/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "AV集中淫",
"name": "AV集中淫",
"type": 0,
"api": "https://www.caiji22.com/home/cjapi/klp0/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "黄瓜TV资源",
"name": "黄瓜TV资源",
"type": 0,
"api": "https://www.caiji10.com/home/cjapi/cfs6/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "快播盒子资源",
"name": "快播盒子资源",
"type": 0,
"api": "https://www.caiji09.com/home/cjapi/cfp0/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "大香蕉资源",
"name": "大香蕉资源",
"type": 0,
"api": "https://www.caiji08.com/home/cjapi/cfkl/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "523采集",
"name": "523av",
"type": 0,
"api": "https://caiji.523zyw.com/inc/api.php",
"playUrl": "https://api.523zyw.com/?url=",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "我要啪啪",
"name": "我要啪啪",
"type": 0,
"api": "http://www.caiji21.com/home/cjapi/klkl/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "4000资源",
"name": "4000资源",
"type": 1,
"api": "https://www.4000zy.com/inc/apijson_vod.php",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "大屌丝资源",
"name": "大屌丝资源",
"type": 0,
"api": "http://www.caiji24.com/home/cjapi/p0d2/mc10/vod/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "水蜜桃",
"name": "水蜜桃",
"type": 1,
"api": "http://51smt4.xyz/api.php/provide/vod/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "草莓资源",
"name": "草莓资源(慢)",
"type": 1,
"api": "https://caiji.caomeiapi.com/inc/apijson_vod.php",
"searchable": 1,
"quickSearch": 0,
"filterable": 0
},
{
"key": "zp123",
"name": "色猫资源(慢)",
"type": 0,
"api": "https://api.maozyapi.com/inc/api.php/provide/vod/at/xml/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "色窝资源",
"name": "色窝资源-慢",
"type": 1,
"api": "https://sewozyapi.com/api.php/provide/vod/",
"searchable": 1,
"quickSearch": 0,
"filterable": 0
},
{
"key": "zp137",
"name": "探探资源(慢)",
"type": 0,
"api": "https://apittzy.com/api.php/provide/vod/at/xml/",
"playUrl": "https://jiexi.ttbfp1.com/m3u8/?url=",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "爱看资源",
"name": "爱看资源(慢)",
"type": 1,
"api": "http://www.aikanzyz9.com/inc/apijson_vod.php",
"searchable": 1,
"quickSearch": 0,
"filterable": 0
},
{
"key": "葡萄资源",
"name": "葡萄资源-慢",
"type": 1,
"api": "https://api.putaozy.net/inc/apijson_vod.php",
"searchable": 1,
"quickSearch": 0,
"filterable": 0
},
{
"key": "2345_spider",
"name": "2345(以下重复)",
"type": 3,
"api": "csp_YS2345",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"ext": "https://gitee.com/xuexing007/cs/raw/master/2345.bmp"
},
{
"key": "zp029",
"name": "JAV名优",
"type": 0,
"api": "http://mygzycj.com/sapi.php?ac=videolist",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "JAV名优馆",
"name": "JAV名优馆",
"type": 0,
"api": "http://mygzycj.com/api.php?ac=videolist",
"searchable": 1,
"quickSearch": 0,
"filterable": 0
},
{
"key": "AVZY6888资源",
"name": "AVZY6888资源",
"type": 1,
"api": "http://m.7777688.com/inc/apijson.php",
"searchable": 1,
"quickSearch": 0,
"filterable": 0
},
{
"key": "zp125",
"name": "AVZY6888资源",
"type": 0,
"api": "http://m.7777688.com/inc/api.php",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp068",
"name": "环亚资源",
"type": 0,
"api": "http://wmcj8.com/inc/sapi.php?ac=videolist",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp126",
"name": "色色资源",
"type": 0,
"api": "http://secj8.com/inc/api.php",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp129",
"name": "鲨鱼资源",
"type": 0,
"api": "https://shayuapi.com/api.php/provide/vod/at/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp127",
"name": "色色资源",
"type": 0,
"api": "http://secj8.com/inc/sapi.php?ac=videolist",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp085",
"name": "玖玖资源",
"type": 0,
"api": "http://99zywcj.com/inc/sapi.php?ac=videolist",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp061",
"name": "富二代资源",
"type": 0,
"api": "http://f2dcj6.com/sapi/?ac=videolist",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "速播资源",
"name": "速播资源",
"type": 1,
"api": "https://api.suboapi.com/api.php/provide/vod/",
"searchable": 1,
"quickSearch": 0,
"filterable": 0
},
{
"key": "zp143",
"name": "天堂福利",
"type": 0,
"api": "https://bttcj.com/inc/sapi.php",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "酷豆资源",
"name": "酷豆资源",
"type": 1,
"api": "https://kudouzy.com/api.php/provide/vod/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "酷豆2",
"name": "酷豆2",
"type": 1,
"api": "https://api.kdapi.info/api.php/provide/vod/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "秀色资源",
"name": "秀色资源",
"type": 1,
"api": "https://api.xiuseapi.com/api.php/provide/vod/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "爱播资源",
"name": "爱播资源",
"type": 1,
"api": "https://cj.apiabzy.com/api.php/provide/vod/",
"searchable": 1,
"quickSearch": 0,
"filterable": 0
},
{
"key": "奶茶资源",
"name": "奶茶资源",
"type": 1,
"api": "https://caiji.naichaapi.com/inc/apijson_vod.php",
"searchable": 1,
"quickSearch": 0,
"filterable": 0
},
{
"key": "zp124",
"name": "色猫资源",
"type": 0,
"api": "https://api.maozyapi.com/inc/api.php",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp053",
"name": "大地资源",
"type": 0,
"api": "https://dadiapi.com/api.php/provide/vod/at/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "大地资源",
"name": "大地资源",
"type": 0,
"api": "https://dadiapi.com/api.php",
"searchable": 1,
"quickSearch": 0,
"filterable": 0
},
{
"key": "鲨鱼资源",
"name": "鲨鱼资源",
"type": 1,
"api": "https://shayuapi.com/api.php/provide/vod/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "乐播资源",
"name": "乐播资源",
"type": 1,
"api": "https://lbapi9.com/api.php/provide/vod/",
"searchable": 1,
"quickSearch": 0,
"filterable": 0
},
{
"key": "zp136",
"name": "速度资源",
"type": 0,
"api": "http://www.ggmmzy.com:9999/inc/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp065",
"name": "花椒,",
"type": 0,
"api": "https://apihjzy.com/api.php/provide/vod/at/xml/",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
},
{
"key": "zp098",
"name": "老鸭资源",
"type": 0,
"api": "http://laoyazy.vip/api.php/provide/vod/at/xml",
"searchable": 1,
"quickSearch": 1,
"filterable": 0
}
],
"lives": [
{
"group": "redirect",
"channels": [
{
"name": "redirect",
"urls": [
"proxy://do=live&type=txt&ext=aHR0cHM6Ly9naXRlYS5jb20veHlnZy9mcmVlL3Jhdy9icmFuY2gvbWFzdGVyLzE4amluLzE4amluemhpYm8udHh0"
]
}
]
}
],
"parses": [
{
"name": "解析聚合",
"type": 3,
"url": "Demo"
},
{
"name": "Json并发",
"type": 2,
"url": "Parallel"
},
{
"name": "Json轮询",
"type": 2,
"url": "Sequence"
},
{
"name": "飞捷",
"type": 1,
"url": "https://fjkkk.cn/toujiexisiquanjia.php?url=",
"ext": {
"flag": [
"qq",
"腾讯",
"letv",
"乐视",
"mgtv",
"芒果",
"youku",
"优酷",
"qiyi",
"iqiyi",
"爱奇艺",
"奇艺"
]
}
},
{
"name": "集象",
"type": 1,
"url": "http://110.42.2.115:880/analysis/json/?uid=2245&my=cdfhirsuwyEGIPU346&url=",
"ext": {
"flag": [
"qq",
"腾讯",
"qiyi",
"爱奇艺",
"奇艺",
"youku",
"优酷",
"sohu",
"搜狐",
"letv",
"乐视",
"mgtv",
"芒果",
"CL4K",
"renrenmi",
"ltnb",
"xigua"
]
}
},
{
"name": "急速1",
"type": 1,
"url": "https://www.daina.hk/api/?key=RXpzyrbMFYySN0sNps&url=",
"ext": {
"flag": [
"qq",
"腾讯",
"qiyi",
"爱奇艺",
"奇艺",
"youku",
"优酷",
"sohu",
"搜狐",
"letv",
"乐视",
"mgtv",
"芒果",
"CL4K",
"renrenmi",
"ltnb",
"xigua"
]
}
},
{
"name": "急速3",
"type": 1,
"url": "https://jx.parwix.com:4433/player/?url=",
"ext": {
"flag": [
"qq",
"腾讯",
"qiyi",
"爱奇艺",
"奇艺",
"youku",
"优酷",
"mgtv",
"芒果",
"letv",
"乐视",
"pptv",
"PPTV",
"sohu",
"bilibili",
"哔哩哔哩",
"哔哩"
]
}
},
{
"name": "VIP3",
"type": 1,
"url": "http://jifei.mrcy0.com/home/api?type=ys&uid=2752189&key=aefghtACLNRSZ01247&url=",
"ext": {
"flag": [
"qq",
"腾讯",
"letv",
"乐视",
"mgtv",
"芒果",
"youku",
"优酷",
"qiyi",
"iqiyi",
"爱奇艺",
"奇艺"
]
}
},
{
"name": "急速6",
"type": 1,
"url": "http://api.vip123kan.vip/?url=",
"ext": {
"flag": [
"youku",
"优酷",
"mgtv",
"芒果",
"qq",
"腾讯",
"qiyi",
"爱奇艺",
"qq",
"奇艺"
]
}
},
{
"name": "急速8",
"type": 1,
"url": "http://yaluan.520say.cn/home/api?type=ys&uid=65588&key=cdeghikortvAFGI078&url=",
"ext": {
"flag": [
"CL4K",
"饭后独播",
"芒果视频",
"youku",
"rx",
"ltnb",
"优酷",
"qiyi",
"爱奇艺",
"奇艺",
"renrenmi",
"qq",
"腾讯",
"腾讯视频",
"letv",
"乐视"
]
}
},
{
"name": "急速4",
"type": 1,
"url": "https://jf.96ym.cn/home/api?type=ys&uid=1319830&key=cefgnoprtvxyzBGKP6&url=",
"ext": {
"flag": [
"qq",
"腾讯",
"letv",
"乐视",
"mgtv",
"芒果",
"youku",
"优酷",
"qiyi",
"iqiyi",
"爱奇艺",
"奇艺"
]
}
},
{
"name": "急速5",
"type": 1,
"url": "http://ck.laobandq.com/3515240842.php?pltfrom=1100&url=",
"ext": {
"flag": [
"qq",
"腾讯",
"qiyi",
"爱奇艺",
"奇艺",
"youku",
"优酷",
"sohu",
"搜狐",
"letv",
"乐视",
"mgtv",
"芒果",
"CL4K",
"renrenmi",
"ltnb",
"xigua"
]
}
},
{
"name": "急速9",
"type": 1,
"url": "https://api.exeyz.cc/api/Json.php?url="
},
{
"name": "海星解析",
"type": 1,
"url": "http://110.42.2.115:880/analysis/json/?uid=1735&my=hjklmsuwyzDGHIKXY3&url=",
"ext": {
"flag": [
"qq",
"腾讯",
"letv",
"乐视",
"mgtv",
"芒果",
"youku",
"优酷",
"qiyi",
"iqiyi",
"爱奇艺",
"奇艺"
]
}
},
{
"name": "VIP1",
"type": 1,
"url": "http://110.42.2.115:880/analysis/json/?uid=2233&my=eginqstBCJMNSUX689&url=",
"ext": {
"flag": [
"qq",
"腾讯",
"letv",
"乐视",
"mgtv",
"芒果",
"youku",
"优酷",
"qiyi",
"iqiyi",
"爱奇艺",
"奇艺"
]
}
},
{
"name": "MuX蓝光解析(辉夜)",
"type": 1,
"url": "https://vvip.funsline.cn/api/?key=8vMzuXb87MWtyJeECE&url=",
"ext": {
"flag": [
"qq",
"腾讯",
"qiyi",
"爱奇艺",
"奇艺",
"youku",
"优酷",
"sohu",
"搜狐",
"letv",
"乐视",
"mgtv",
"芒果",
"CL4K",
"renrenmi",
"ltnb",
"xigua",
"rongxing",
"rx",
"xfy",
"xueren"
]
}
},
{
"name": "猫群专用解析y1",
"type": 1,
"url": "http://chaloli.cn/home/api?type=ys&uid=705072&key=abcdegipstBCFMSVZ6&url=",
"ext": {
"flag": [
"youku",
"qq",
"iqiyi",
"qiyi",
"letv",
"sohu",
"letv",
"tudou",
"pptv",
"mgtv",
"wasu",
"bilibili",
"leduo",
"fq3",
"fq4",
"xueren",
"duoduo",
"duoduozy",
"miaoparty",
"miaoparty2",
"miaoparty3",
"renrenmi",
"优酷",
"芒果",
"腾讯",
"爱奇艺",
"奇艺",
"ltnb",
"rx",
"CL4K",
"xfyun",
"wuduzy"
]
}
},
{
"name": "猫群专用解析y2",
"type": 1,
"url": "http://chaloli.cn/home/api?type=ys&uid=705072&key=abcdegipstBCFMSVZ6&fs=sm&url=",
"ext": {
"flag": [
"youku",
"qq",
"iqiyi",
"qiyi",
"letv",
"sohu",
"letv",
"tudou",
"pptv",
"mgtv",
"wasu",
"bilibili",
"leduo",
"fq3",
"fq4",
"xueren",
"duoduo",
"duoduozy",
"miaoparty",
"miaoparty2",
"miaoparty3",
"renrenmi",
"优酷",
"芒果",
"腾讯",
"爱奇艺",
"奇艺",
"ltnb",
"rx",
"CL4K",
"xfyun",
"wuduzy"
]
}
},
{
"name": "猫群专用解析y3",
"type": 1,
"url": "http://chaloli.cn/home/api?type=ys&uid=705072&key=abcdegipstBCFMSVZ6&fs=hz&url=",
"ext": {
"flag": [
"youku",
"qq",
"iqiyi",
"qiyi",
"letv",
"sohu",
"letv",
"tudou",
"pptv",
"mgtv",
"wasu",
"bilibili",
"leduo",
"fq3",
"fq4",
"xueren",
"duoduo",
"duoduozy",
"miaoparty",
"miaoparty2",
"miaoparty3",
"renrenmi",
"优酷",
"芒果",
"腾讯",
"爱奇艺",
"奇艺",
"ltnb",
"rx",
"CL4K",
"xfyun",
"wuduzy"
]
}
},
{
"name": "猫群专用解析02",
"type": 1,
"url": "https://json.pangujiexi.com/json.php?url=",
"ext": {
"flag": [
"youku",
"优酷",
"qq",
"腾讯",
"qiyi",
"爱奇艺",
"奇艺"
]
}
},
{
"name": "猫群专用解析03",
"type": 1,
"url": "https://vip.aiaine.com/api/?key=8FN8gNAySnvJiMllxZ&url=",
"ext": {
"flag": [
"Itnb",
"wuduzy"
]
}
},
{
"name": "猫群专用解析04",
"type": 1,
"url": "http://api.vip123kan.vip/?url=",
"ext": {
"flag": [
"youku",
"优酷",
"mgtv",
"芒果",
"qq",
"腾讯",
"qiyi",
"爱奇艺",
"qq",
"xigua",
"奇艺"
]
}
},
{
"name": "猫群专用解析05",
"type": 1,
"url": "https://a.dxzj88.com/jxrrm/jiami.php?url=",
"ext": {
"flag": [
"qq",
"腾讯",
"qiyi",
"爱奇艺",
"奇艺",
"youku",
"优酷",
"sohu",
"芒果",
"mgtv",
"xigua",
"wuduzy",
"bilibili",
"pptv",
"leduo",
"Clk4",
"哔哩",
"renrenmi",
"ltnb",
"rx"
]
}
},
{
"name": "猫群专用解析06",
"type": 1,
"url": "https://sz.dxzj88.com/jxrjrm/jiaomi.php?url=",
"ext": {
"flag": [
"qq",
"腾讯",
"qiyi",
"爱奇艺",
"奇艺",
"youku",
"优酷",
"sohu",
"芒果",
"mgtv",
"xigua",
"wuduzy",
"bilibili",
"pptv",
"leduo",
"Clk4",
"哔哩",
"renrenmi",
"ltnb",
"rx"
]
}
},
{
"name": "急速2",
"type": 1,
"url": "https://api.m3u8.tv:5678/home/api?type=ys&uid=1931000&key=gktuvyzABEORSYZ135&url=",
"ext": {
"flag": [
"youku",
"优酷",
"qq",
"腾讯",
"mgtv",
"芒果"
]
}
},
{
"name": "群鑫影视",
"type": 1,
"url": "http://cl.yjhan.com:8090/home/api?type=ys&uid=651075&key=aehuDFGIJSVWX24589&url=",
"ext": {
"flag": [
"youku",
"优酷",
"qiyi",
"爱奇艺",
"奇艺",
"qq",
"腾讯"
]
}
}
],
"flags": [
"youku",
"qq",
"iqiyi",
"qiyi",
"letv",
"sohu",
"tudou",
"pptv",
"mgtv",
"wasu",
"bilibili",
"renrenmi",
"优酷",
"芒果",
"腾讯",
"爱奇艺",
"奇艺",
"ltnb",
"rx",
"CL4K",
"xfyun",
"wuduzy"
],
"ijk": [
{
"group": "软解码",
"options": [
{
"category": 4,
"name": "opensles",
"value": "0"
},
{
"category": 4,
"name": "overlay-format",
"value": "842225234"
},
{
"category": 4,
"name": "framedrop",
"value": "1"
},
{
"category": 4,
"name": "soundtouch",
"value": "1"
},
{
"category": 4,
"name": "start-on-prepared",
"value": "1"
},
{
"category": 1,
"name": "http-detect-range-support",
"value": "0"
},
{
"category": 1,
"name": "fflags",
"value": "fastseek"
},
{
"category": 2,
"name": "skip_loop_filter",
"value": "48"
},
{
"category": 4,
"name": "reconnect",
"value": "1"
},
{
"category": 4,
"name": "enable-accurate-seek",
"value": "0"
},
{
"category": 4,
"name": "mediacodec",
"value": "0"
},
{
"category": 4,
"name": "mediacodec-auto-rotate",
"value": "0"
},
{
"category": 4,
"name": "mediacodec-handle-resolution-change",
"value": "0"
},
{
"category": 4,
"name": "mediacodec-hevc",
"value": "0"
},
{
"category": 1,
"name": "dns_cache_timeout",
"value": "600000000"
}
]
},
{
"group": "硬解码",
"options": [
{
"category": 4,
"name": "opensles",
"value": "0"
},
{
"category": 4,
"name": "overlay-format",
"value": "842225234"
},
{
"category": 4,
"name": "framedrop",
"value": "1"
},
{
"category": 4,
"name": "soundtouch",
"value": "1"
},
{
"category": 4,
"name": "start-on-prepared",
"value": "1"
},
{
"category": 1,
"name": "http-detect-range-support",
"value": "0"
},
{
"category": 1,
"name": "fflags",
"value": "fastseek"
},
{
"category": 2,
"name": "skip_loop_filter",
"value": "48"
},
{
"category": 4,
"name": "reconnect",
"value": "1"
},
{
"category": 4,
"name": "enable-accurate-seek",
"value": "0"
},
{
"category": 4,
"name": "mediacodec",
"value": "1"
},
{
"category": 4,
"name": "mediacodec-auto-rotate",
"value": "1"
},
{
"category": 4,
"name": "mediacodec-handle-resolution-change",
"value": "1"
},
{
"category": 4,
"name": "mediacodec-hevc",
"value": "1"
},
{
"category": 1,
"name": "dns_cache_timeout",
"value": "600000000"
}
]
}
],
"ads": [
"mimg.0c1q0l.cn",
"www.googletagmanager.com",
"www.google-analytics.com",
"mc.usihnbcq.cn",
"mg.g1mm3d.cn",
"mscs.svaeuzh.cn",
"cnzz.hhttm.top",
"tp.vinuxhome.com",
"cnzz.mmstat.com",
"www.baihuillq.com",
"s23.cnzz.com",
"z3.cnzz.com",
"c.cnzz.com",
"stj.v1vo.top",
"z12.cnzz.com",
"img.mosflower.cn",
"tips.gamevvip.com",
"ehwe.yhdtns.com",
"xdn.cqqc3.com",
"www.jixunkyy.cn",
"sp.chemacid.cn",
"hm.baidu.com",
"s9.cnzz.com",
"z6.cnzz.com",
"um.cavuc.com",
"mav.mavuz.com",
"wofwk.aoidf3.com",
"z5.cnzz.com",
"xc.hubeijieshikj.cn",
"tj.tianwenhu.com",
"xg.gars57.cn",
"k.jinxiuzhilv.com",
"cdn.bootcss.com",
"ppl.xunzhuo123.com",
"xomk.jiangjunmh.top",
"img.xunzhuo123.com",
"z1.cnzz.com",
"s13.cnzz.com",
"xg.huataisangao.cn",
"z7.cnzz.com",
"xg.huataisangao.cn",
"z2.cnzz.com",
"s96.cnzz.com",
"q11.cnzz.com",
"thy.dacedsfa.cn",
"xg.whsbpw.cn",
"s19.cnzz.com",
"z8.cnzz.com",
"s4.cnzz.com",
"f5w.as12df.top",
"ae01.alicdn.com",
"www.92424.cn",
"k.wudejia.com",
"vivovip.mmszxc.top",
"qiu.xixiqiu.com",
"cdnjs.hnfenxun.com",
"cms.qdwght.com"
],
"wallpaper": "https://picsum.photos/1080/",
"spider": "https://gitea.com/xygg/free/raw/branch/master/18jin/18jin.jar"
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册