diff --git a/py/qkjs/quick.py b/py/qkjs/quick.py new file mode 100644 index 0000000000000000000000000000000000000000..f53a315258b88a0fef347d48891c3f6e879a8411 --- /dev/null +++ b/py/qkjs/quick.py @@ -0,0 +1,88 @@ +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 diff --git a/py/qkjs/test_quickjs.py b/py/qkjs/test_quickjs.py new file mode 100644 index 0000000000000000000000000000000000000000..1f6dec7ccd15092e98e80a9139ae2acff359b010 --- /dev/null +++ b/py/qkjs/test_quickjs.py @@ -0,0 +1,675 @@ +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 (:3)\n", msg) + self.assertIn("at funcB (: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) diff --git a/txt/json/E8plus.json b/txt/json/E8plus.json new file mode 100644 index 0000000000000000000000000000000000000000..53a3a745d62e23693cc39937f4b5044d93dcb51e --- /dev/null +++ b/txt/json/E8plus.json @@ -0,0 +1,1815 @@ +//微信公众号【云星日记】制作分享 +//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" +}