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