Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Mk644
dr_py
提交
4770d5df
dr_py
项目概览
Mk644
/
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,体验更适合开发者的 AI 搜索 >>
提交
4770d5df
编写于
10月 24, 2022
作者:
H
hjdhnx
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
升级至 v3.9.17
上级
cad9b936
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
238 addition
and
39 deletion
+238
-39
base/rules.db
base/rules.db
+0
-0
controllers/admin.py
controllers/admin.py
+22
-0
controllers/home.py
controllers/home.py
+36
-1
controllers/layui.py
controllers/layui.py
+6
-2
controllers/service.py
controllers/service.py
+16
-0
controllers/vod.py
controllers/vod.py
+42
-19
js/version.txt
js/version.txt
+1
-1
readme.md
readme.md
+4
-0
templates/layui_list.html
templates/layui_list.html
+111
-16
未找到文件。
base/rules.db
浏览文件 @
4770d5df
无法预览此类型文件
controllers/admin.py
浏览文件 @
4770d5df
...
...
@@ -145,6 +145,28 @@ def admin_rule_state(state=0): # 管理员修改规则状态
return
R
.
success
(
f
'修改成功,服务器反馈信息为:
{
success_list
}
'
)
@
admin
.
route
(
'/rule_order/<int:order>'
,
methods
=
[
'POST'
])
def
admin_rule_order
(
order
=
0
):
# 管理员修改规则顺序
if
not
verfy_token
():
return
R
.
error
(
'请登录后再试'
)
names
=
getParmas
(
'names'
)
if
not
names
:
return
R
.
success
(
f
'修改失败,没有传递names参数'
)
rule_list
=
names
.
split
(
','
)
rules
=
rules_service
()
# print(rules.query_all())
# print(rules.getState(rule_list[0]))
# print(rule_list)
success_list
=
[]
for
rule
in
rule_list
:
try
:
res_id
=
rules
.
setOrder
(
rule
,
order
)
success_list
.
append
(
f
'
{
rule
}
:
{
res_id
}
'
)
except
:
success_list
.
append
(
rule
)
return
R
.
success
(
f
'修改成功,服务器反馈信息为:
{
success_list
}
'
)
@
admin
.
route
(
'/force_update'
)
def
admin_force_update
():
if
not
verfy_token
():
...
...
controllers/home.py
浏览文件 @
4770d5df
...
...
@@ -210,6 +210,7 @@ def merged_hide(merged_config):
@
home
.
route
(
'/config/<int:mode>'
)
def
config_render
(
mode
):
# print(dict(app.config))
tt
=
time
()
UA
=
request
.
headers
[
'User-Agent'
]
ISTVB
=
'okhttp/3'
in
UA
logger
.
info
(
UA
)
...
...
@@ -244,15 +245,46 @@ def config_render(mode):
html
=
render_template
(
'config.txt'
,
UA
=
UA
,
xr_mode
=
xr_mode
,
ISTVB
=
ISTVB
,
pys
=
pys
,
rules
=
rules
,
host
=
host
,
mode
=
mode
,
js_mode
=
js_mode
,
jxs
=
jxs
,
alists
=
alists
,
alists_str
=
alists_str
,
live_url
=
live_url
,
config
=
new_conf
)
merged_config
=
custom_merge
(
parseText
(
html
),
customConfig
)
# print(merged_config['sites'])
merged_hide
(
merged_config
)
# response = make_response(html)
# print(len(merged_config['sites']))
# print(merged_config['sites'])
merged_config
[
'sites'
]
=
sort_sites_by_order
(
merged_config
[
'sites'
],
js_mode
)
response
=
make_response
(
json
.
dumps
(
merged_config
,
ensure_ascii
=
False
,
indent
=
1
))
# response = make_response(str(merged_config))
response
.
headers
[
'Content-Type'
]
=
'application/json; charset=utf-8'
logger
.
info
(
f
'自动生成动态配置共计耗时:
{
get_interval
(
tt
)
}
毫秒'
)
return
response
def
sort_sites_by_order
(
sites
,
js_mode
=
0
):
rules
=
rules_service
()
rule_list
=
rules
.
query_all
()
# print(rule_list)
rule_names
=
list
(
map
(
lambda
x
:
x
[
'name'
],
rule_list
))
# print(rule_names)
# print(sites)
for
i
in
range
(
len
(
sites
)):
# sites[i]['id'] = i+1
site_name
=
sites
[
i
][
'api'
].
split
(
'rule='
)[
1
].
split
(
'&'
)[
0
]
if
'rule='
in
sites
[
i
][
'api'
]
else
sites
[
i
][
'key'
]
if
js_mode
and
str
(
site_name
).
startswith
(
'dr'
):
site_name
=
site_name
.
replace
(
'dr_'
,
''
)
# print(site_name)
if
site_name
in
rule_names
:
site_rule
=
rule_list
[
rule_names
.
index
(
site_name
)]
sites
[
i
][
'state'
]
=
1
if
site_rule
[
'state'
]
is
None
else
site_rule
[
'state'
]
sites
[
i
][
'order'
]
=
0
if
site_rule
[
'order'
]
is
None
else
site_rule
[
'order'
]
else
:
sites
[
i
][
'state'
]
=
1
sites
[
i
][
'order'
]
=
0
# sites[i]['site_name'] = site_name
# print(sites)
sites
.
sort
(
key
=
lambda
x
:
x
[
'order'
],
reverse
=
False
)
# print(sites)
for
site
in
sites
:
del
site
[
'state'
]
del
site
[
'order'
]
return
sites
@
home
.
route
(
'/configs'
)
def
config_gen
():
# 生成文件
...
...
@@ -285,12 +317,14 @@ def config_gen():
customConfig
=
getCustonDict
(
host0
,
ali_token
)
set_dict
=
custom_merge
(
parseText
(
set_local
),
customConfig
)
merged_hide
(
set_dict
)
set_dict
[
'sites'
]
=
sort_sites_by_order
(
set_dict
[
'sites'
],
js_mode
)
# set_dict = json.loads(set_local)
f
.
write
(
json
.
dumps
(
set_dict
,
ensure_ascii
=
False
,
indent
=
4
))
with
open
(
'txt/pycms1.json'
,
'w+'
,
encoding
=
'utf-8'
)
as
f
:
customConfig
=
getCustonDict
(
host1
,
ali_token
)
set_dict
=
custom_merge
(
parseText
(
set_area
),
customConfig
)
merged_hide
(
set_dict
)
set_dict
[
'sites'
]
=
sort_sites_by_order
(
set_dict
[
'sites'
],
js_mode
)
# set_dict = json.loads(set_area)
f
.
write
(
json
.
dumps
(
set_dict
,
ensure_ascii
=
False
,
indent
=
4
))
...
...
@@ -298,6 +332,7 @@ def config_gen():
customConfig
=
getCustonDict
(
host2
,
ali_token
)
set_dict
=
custom_merge
(
parseText
(
set_online
),
customConfig
)
merged_hide
(
set_dict
)
set_dict
[
'sites'
]
=
sort_sites_by_order
(
set_dict
[
'sites'
],
js_mode
)
# set_dict = json.loads(set_online)
f
.
write
(
json
.
dumps
(
set_dict
,
ensure_ascii
=
False
,
indent
=
4
))
files
=
[
os
.
path
.
abspath
(
rf
'txt\pycms
{
i
}
.json'
)
for
i
in
range
(
3
)]
...
...
controllers/layui.py
浏览文件 @
4770d5df
...
...
@@ -44,7 +44,9 @@ def layui_rule_list():
# print(pys)
alists
=
[]
live_url
=
[]
html
=
render_template
(
'config.txt'
,
pys
=
pys
,
rules
=
getRules
(
'js'
),
host
=
host
,
mode
=
2
,
jxs
=
jxs
,
alists
=
alists
,
local_rules
=
getRules
(
'js'
)
# print(local_rules)
html
=
render_template
(
'config.txt'
,
pys
=
pys
,
rules
=
local_rules
,
host
=
host
,
mode
=
2
,
jxs
=
jxs
,
alists
=
alists
,
alists_str
=
'[]'
,
live_url
=
live_url
,
config
=
new_conf
)
merged_config
=
custom_merge
(
parseText
(
html
),
customConfig
)
sites
=
merged_config
[
'sites'
]
...
...
@@ -52,7 +54,8 @@ def layui_rule_list():
rule_list
=
rules
.
query_all
()
rule_names
=
list
(
map
(
lambda
x
:
x
[
'name'
],
rule_list
))
# print(rule_list)
# print(rule_names)
print
(
rule_names
)
# print(sites)
for
i
in
range
(
len
(
sites
)):
sites
[
i
][
'id'
]
=
i
+
1
site_name
=
sites
[
i
][
'api'
].
split
(
'rule='
)[
1
].
split
(
'&'
)[
0
]
if
'rule='
in
sites
[
i
][
'api'
]
else
sites
[
i
][
'key'
]
...
...
@@ -66,6 +69,7 @@ def layui_rule_list():
sites
[
i
][
'order'
]
=
0
sites
[
i
][
'site_name'
]
=
site_name
sites
.
sort
(
key
=
lambda
x
:
x
[
'order'
],
reverse
=
False
)
new_sites
=
sites
[(
page
-
1
)
*
limit
:
page
*
limit
]
# print(new_sites)
return
layuiBack
(
'获取成功'
,
new_sites
,
count
=
len
(
sites
))
controllers/service.py
浏览文件 @
4770d5df
...
...
@@ -109,6 +109,22 @@ class rules_service(object):
print
(
f
'发生了错误:
{
e
}
'
)
return
None
def
setOrder
(
self
,
key
,
order
=
0
):
res
=
RuleClass
.
query
.
filter
(
RuleClass
.
name
==
key
).
first
()
if
res
:
res
.
order
=
order
db
.
session
.
add
(
res
)
else
:
res
=
RuleClass
(
name
=
key
,
order
=
order
)
db
.
session
.
add
(
res
)
db
.
session
.
flush
()
# 获取id
try
:
db
.
session
.
commit
()
return
res
.
id
except
Exception
as
e
:
print
(
f
'发生了错误:
{
e
}
'
)
return
None
@
staticmethod
def
getHideRules
():
res
=
RuleClass
.
query
.
filter
(
RuleClass
.
state
==
0
).
all
()
...
...
controllers/vod.py
浏览文件 @
4770d5df
...
...
@@ -18,7 +18,7 @@ from base.database import db
from
models.ruleclass
import
RuleClass
from
models.playparse
import
PlayParse
from
js.rules
import
getRules
from
controllers.service
import
storage_service
from
controllers.service
import
storage_service
,
rules_service
from
concurrent.futures
import
ThreadPoolExecutor
,
as_completed
,
thread
# 引入线程池
from
quickjs
import
Function
,
Context
import
ujson
...
...
@@ -116,6 +116,25 @@ def multi_search2(wd):
return
jsonify
(
result
)
def
merged_hide
(
merged_rules
):
t1
=
time
()
store_rule
=
rules_service
()
hide_rules
=
store_rule
.
getHideRules
()
hide_rule_names
=
list
(
map
(
lambda
x
:
x
[
'name'
],
hide_rules
))
# print('隐藏:',hide_rule_names)
all_cnt
=
len
(
merged_rules
)
def
filter_show
(
x
):
# name = x['api'].split('rule=')[1].split('&')[0] if 'rule=' in x['api'] else x['key'].replace('dr_','')
name
=
x
# print(name)
return
name
not
in
hide_rule_names
merged_rules
=
list
(
filter
(
filter_show
,
merged_rules
))
# print('隐藏后:',merged_rules)
logger
.
info
(
f
'数据库筛选隐藏规则耗时
{
get_interval
(
t1
)
}
毫秒,共计
{
all_cnt
}
条规则,隐藏后可渲染
{
len
(
merged_rules
)
}
条规则'
)
return
merged_rules
def
multi_search
(
wd
):
lsg
=
storage_service
()
t1
=
time
()
...
...
@@ -128,31 +147,35 @@ def multi_search(wd):
rules_exclude
=
[
'drpy'
]
new_rules
=
list
(
filter
(
lambda
x
:
x
.
get
(
'searchable'
,
0
)
and
x
.
get
(
'name'
,
''
)
not
in
rules_exclude
,
rules
))
search_sites
=
[
new_rule
[
'name'
]
for
new_rule
in
new_rules
]
# print(search_sites)
nosearch_sites
=
set
(
rule_names
)
^
set
(
search_sites
)
nosearch_sites
.
remove
(
'drpy'
)
# print(nosearch_sites)
logger
.
info
(
f
'开始聚搜
{
wd
}
,共计
{
len
(
search_sites
)
}
个规则,聚搜超时
{
timeout
}
秒'
)
logger
.
info
(
f
'不支持聚搜的规则,共计
{
len
(
nosearch_sites
)
}
个规则:
{
","
.
join
(
nosearch_sites
)
}
'
)
search_sites
=
merged_hide
(
search_sites
)
# print(search_sites)
# search_sites = []
res
=
[]
with
open
(
'js/模板.js'
,
encoding
=
'utf-8'
)
as
f
:
before
=
f
.
read
().
split
(
'export'
)[
0
]
with
ThreadPoolExecutor
(
max_workers
=
len
(
search_sites
))
as
executor
:
to_do
=
[]
for
site
in
search_sites
:
future
=
executor
.
submit
(
search_one
,
site
,
wd
,
before
)
to_do
.
append
(
future
)
try
:
for
future
in
as_completed
(
to_do
,
timeout
=
timeout
):
# 并发执行
ret
=
future
.
result
()
# print(ret)
if
ret
and
isinstance
(
ret
,
dict
)
and
ret
.
get
(
'list'
):
res
.
extend
(
ret
[
'list'
])
except
Exception
as
e
:
print
(
f
'发生错误:
{
e
}
'
)
import
atexit
atexit
.
unregister
(
thread
.
_python_exit
)
executor
.
shutdown
=
lambda
wait
:
None
if
len
(
search_sites
)
>
0
:
with
open
(
'js/模板.js'
,
encoding
=
'utf-8'
)
as
f
:
before
=
f
.
read
().
split
(
'export'
)[
0
]
with
ThreadPoolExecutor
(
max_workers
=
len
(
search_sites
))
as
executor
:
to_do
=
[]
for
site
in
search_sites
:
future
=
executor
.
submit
(
search_one
,
site
,
wd
,
before
)
to_do
.
append
(
future
)
try
:
for
future
in
as_completed
(
to_do
,
timeout
=
timeout
):
# 并发执行
ret
=
future
.
result
()
# print(ret)
if
ret
and
isinstance
(
ret
,
dict
)
and
ret
.
get
(
'list'
):
res
.
extend
(
ret
[
'list'
])
except
Exception
as
e
:
print
(
f
'发生错误:
{
e
}
'
)
import
atexit
atexit
.
unregister
(
thread
.
_python_exit
)
executor
.
shutdown
=
lambda
wait
:
None
logger
.
info
(
f
'drpy聚搜
{
len
(
search_sites
)
}
个源共计耗时
{
get_interval
(
t1
)
}
毫秒'
)
return
jsonify
({
"list"
:
res
...
...
js/version.txt
浏览文件 @
4770d5df
3.9.16beta1
\ No newline at end of file
3.9.17
\ No newline at end of file
readme.md
浏览文件 @
4770d5df
...
...
@@ -47,6 +47,10 @@
[
dockerfile教程
](
https://blog.csdn.net/qq_46158060/article/details/125718218
)
[
获取本地设备信息
](
https://blog.csdn.net/cui_yonghua/article/details/125508991
)
[
获取本地设备信息
](
https://m.jb51.net/article/140716.htm
)
###### 2022/10/24
-
[X] v3.9.17
-
[X] drpy(道长) 服务端聚搜支持自动排除未来功能里隐藏的源
-
[X] 未来功能增加源置顶和置底功能 测试性增加排序功能(指定输入数字)
###### 2022/10/23
-
[X] 新增几个源 包括虎牙直播
-
[X] 设置中心增加仙人模式开关(自动识别不同设备返回不同的drpy接口,关闭的话只会走drpy.min.js)
...
...
templates/layui_list.html
浏览文件 @
4770d5df
...
...
@@ -48,7 +48,8 @@
</script>
<script
type=
"text/html"
id=
"barDemo"
>
<
a
class
=
"
layui-btn layui-btn-xs
"
lay
-
event
=
"
edit
"
>
编辑
<
/a
>
<!--
<
a
class
=
"
layui-btn layui-btn-xs
"
lay
-
event
=
"
edit
"
>
编辑
<
/a>--
>
<
a
class
=
"
layui-btn layui-btn-xs
"
lay
-
event
=
"
set_top
"
>
置顶
<
/a
>
<
a
class
=
"
layui-btn layui-btn-danger layui-btn-xs
"
lay
-
event
=
"
del
"
>
隐藏
<
/a
>
</script>
...
...
@@ -96,6 +97,34 @@ layui.use(['table', 'dropdown'], function(){
});
}
function
setOrder
(
data
,
to_set_order
){
if
(
data
.
length
<
1
){
return
layer
.
msg
(
'
请至少选择一行
'
);
}
to_set_order
=
to_set_order
||
0
;
console
.
log
(
data
);
let
site_names
=
data
.
map
(
it
=>
it
.
site_name
);
let
site_names_str
=
site_names
.
join
(
'
,
'
);
console
.
log
(
'
准备将
'
+
site_names_str
+
'
的显示状态设置为:
'
+
to_set_order
);
let
params
=
{
"
names
"
:
site_names_str
};
console
.
log
(
params
);
$
.
post
(
"
/admin/rule_order/
"
+
to_set_order
,
params
,
function
(
data
,
status
){
console
.
log
(
data
);
if
(
data
.
code
===
200
){
// alert(data.msg);
// location.reload();
table
.
reload
(
'
test
'
,
{
// page: {
// curr: 3 //重新从第 1 页开始
// }
});
}
else
{
console
.
log
(
'
修改失败了...
'
);
return
false
}
});
}
// 创建渲染实例
table
.
render
({
elem
:
'
#test
'
...
...
@@ -111,11 +140,11 @@ layui.use(['table', 'dropdown'], function(){
// ,totalRow: true // 开启合计行
,
page
:
true
,
limit
:
12
,
limits
:[
10
,
12
,
15
,
20
,
40
,
60
,
80
,
100
,
150
,
200
]
,
limits
:[
10
,
12
,
15
,
20
,
40
,
60
,
80
,
100
,
150
,
200
,
300
,
500
]
,
cols
:
[[
{
type
:
'
checkbox
'
,
fixed
:
'
left
'
}
// ,{field: 'id', fixed: 'left',title: 'ID', width: 20, sort: true,totalRowText: '合计:'}
,{
field
:
'
id
'
,
title
:
'
ID
'
,
width
:
2
0
,
sort
:
true
}
,{
field
:
'
id
'
,
title
:
'
ID
'
,
width
:
6
0
,
sort
:
true
}
,{
field
:
'
site_name
'
,
title
:
'
存储名称
'
,
width
:
120
}
,
{
field
:
'
state
'
,
title
:
'
显示状态
'
,
minWidth
:
100
,
templet
:
function
(
res
)
{
...
...
@@ -219,20 +248,34 @@ layui.use(['table', 'dropdown'], function(){
elem
:
'
#moreTest
'
//可绑定在任意元素中,此处以上述按钮为例
,
data
:
[{
id
:
'
show
'
,
title
:
'
显示
'
title
:
'
🟢
显示
'
},{
id
:
'
hide
'
,
title
:
'
隐藏
'
},{
id
:
'
add
'
,
title
:
'
添加
'
},{
id
:
'
update
'
,
title
:
'
编辑
'
},{
id
:
'
delete
'
,
title
:
'
删除
'
}]
title
:
'
🔴隐藏
'
},
{
id
:
'
set_top
'
,
title
:
'
⬆️置顶
'
,
},
{
id
:
'
set_order_number
'
,
title
:
'
↕️指定序号
'
,
},
{
id
:
'
set_bottom
'
,
title
:
'
⬇️置底
'
,
},
// {
// id: 'add',
// title: '添加'
// },{
// id: 'update',
// title: '编辑'
// },{
// id: 'delete',
// title: '删除'
// }
]
//菜单被点击的事件
,
click
:
function
(
obj
){
var
checkStatus
=
table
.
checkStatus
(
id
)
...
...
@@ -244,7 +287,35 @@ layui.use(['table', 'dropdown'], function(){
break
;
case
'
hide
'
:
// console.log(obj);
setState
(
data
,
0
)
setState
(
data
,
0
);
break
;
case
'
set_top
'
:
// console.log(obj);
setOrder
(
data
,
0
);
break
;
case
'
set_order_number
'
:
layer
.
prompt
({
formType
:
0
,
value
:
''
,
title
:
'
请输入指定的排序序号,数字越小排名越靠前
'
,
btn
:
[
'
确定
'
,
'
取消
'
],
//按钮,
btnAlign
:
'
c
'
},
function
(
value
,
index
){
console
.
log
(
'
value:
'
+
value
);
var
reg
=
/^
[\d]
+$/
;
if
(
!
reg
.
test
(
value
)){
layer
.
msg
(
'
请输入有效数字!
'
,{
time
:
500
});
}
else
{
setOrder
(
data
,
Number
(
value
));
layer
.
close
(
index
);
layer
.
msg
(
'
请设置顺序为
'
+
value
,{
time
:
1000
});
}
});
// setOrder(data,0);
break
;
case
'
set_bottom
'
:
// console.log(obj);
setOrder
(
data
,
9999
)
break
;
case
'
add
'
:
layer
.
open
({
...
...
@@ -360,6 +431,30 @@ layui.use(['table', 'dropdown'], function(){
area
:
[
'
80%
'
,
'
80%
'
],
content
:
'
<div style="padding: 16px;">自定义表单元素</div>
'
});
}
else
if
(
obj
.
event
===
'
set_top
'
){
let
obj_name
;
try
{
obj_name
=
obj
.
data
.
api
.
match
(
/rule=
(
.*
)
/
)[
1
].
split
(
'
&
'
)[
0
];
}
catch
(
e
){
obj_name
=
obj
.
data
.
key
;
}
console
.
log
(
obj
);
let
params
=
{
"
names
"
:[
obj_name
].
join
(
'
,
'
)};
console
.
log
(
params
);
$
.
post
(
"
/admin/rule_order/0
"
,
params
,
function
(
res
,
status
){
console
.
log
(
res
);
if
(
res
.
code
===
200
){
data
.
order
=
0
;
obj
.
update
({
order
:
data
.
order
});
layer
.
msg
(
'
已置顶
'
);
}
else
{
console
.
log
(
'
修改失败了...
'
);
layer
.
msg
(
'
置顶失败,具体错误看日志
'
);
return
false
}
});
}
});
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录