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"
+}