Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
言程序plus
dr_py
提交
758abea6
dr_py
项目概览
言程序plus
/
dr_py
与 Fork 源项目一致
从无法访问的项目Fork
通知
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,发现更多精彩内容 >>
提交
758abea6
编写于
11月 02, 2022
作者:
H
hjdhnx
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
合并小雅的解析管理代码
上级
4ddebaec
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
221 addition
and
13 deletion
+221
-13
base/rules.db
base/rules.db
+0
-0
controllers/admin.py
controllers/admin.py
+36
-1
controllers/layui.py
controllers/layui.py
+20
-2
controllers/service.py
controllers/service.py
+118
-1
templates/layui_jxs.html
templates/layui_jxs.html
+47
-9
未找到文件。
base/rules.db
浏览文件 @
758abea6
无法预览此类型文件
controllers/admin.py
浏览文件 @
758abea6
...
...
@@ -5,8 +5,9 @@
# Date : 2022/9/6
import
os
import
ujson
from
flask
import
Blueprint
,
request
,
render_template
,
jsonify
,
make_response
from
controllers.service
import
storage_service
,
rules_service
from
controllers.service
import
storage_service
,
rules_service
,
parse_service
from
base.R
import
R
from
base.database
import
db
from
utils.log
import
logger
...
...
@@ -169,6 +170,40 @@ def admin_rule_order(order=0): # 管理员修改规则顺序
return
R
.
success
(
f
'修改成功,服务器反馈信息为:
{
success_list
}
'
)
@
admin
.
route
(
'/parse/save_data'
,
methods
=
[
'POST'
])
def
admin_parse_save_data
():
# 管理员保存拖拽排序后的解析数据
if
not
verfy_token
():
return
R
.
error
(
'请登录后再试'
)
data
=
getParmas
(
'data'
)
if
not
data
:
return
R
.
success
(
f
'修改失败,没有传递data参数'
)
parse
=
parse_service
()
success_list
=
[]
data
=
ujson
.
loads
(
data
)
for
i
in
range
(
len
(
data
)):
d
=
data
[
i
]
if
not
d
.
get
(
'url'
)
and
d
.
get
(
'name'
)
!=
'🌐Ⓤ'
:
continue
obj
=
{
'name'
:
d
.
get
(
'name'
,
''
),
'url'
:
d
.
get
(
'url'
,
''
),
'state'
:
d
.
get
(
'state'
,
1
),
'type'
:
d
.
get
(
'state'
,
0
),
'order'
:
i
+
1
,
'ext'
:
d
.
get
(
'ext'
,
''
),
'header'
:
d
.
get
(
'header'
,
''
),
}
# print(obj)
try
:
parse
.
saveData
(
obj
)
success_list
.
append
(
f
'parse:
{
d
[
"url"
]
}
'
)
# print(obj)
# print(200,obj)
except
Exception
as
e
:
success_list
.
append
(
d
[
"url"
])
print
(
f
'
{
d
[
"url"
]
}
失败:
{
e
}
'
)
return
R
.
success
(
f
'修改成功,服务器反馈信息为:
{
success_list
}
'
)
@
admin
.
route
(
'/force_update'
)
def
admin_force_update
():
if
not
verfy_token
():
...
...
controllers/layui.py
浏览文件 @
758abea6
...
...
@@ -9,7 +9,7 @@ from flask import Blueprint,request,render_template,jsonify,make_response,redire
from
utils.ua
import
UA
from
utils.web
import
getParmas
,
get_interval
,
layuiBack
,
verfy_token
from
utils.cfg
import
cfg
from
controllers.service
import
storage_service
,
rules_service
from
controllers.service
import
storage_service
,
rules_service
,
parse_service
from
utils.system
import
getHost
from
utils.files
import
getCustonDict
,
custom_merge
from
utils.encode
import
parseText
...
...
@@ -138,7 +138,23 @@ def layui_jx_list():
alists_str
=
''
,
live_url
=
''
,
config
=
new_conf
)
merged_config
=
custom_merge
(
parseText
(
html
),
customConfig
)
parses
=
merged_config
[
'parses'
]
# print(parses)
parse
=
parse_service
()
parse_list
=
parse
.
query_all
()
parse_url_list
=
list
(
map
(
lambda
x
:
x
[
'url'
],
parse_list
))
for
i
in
range
(
len
(
parses
)):
parses
[
i
][
'id'
]
=
i
+
1
if
parses
[
i
][
'url'
]
in
parse_url_list
:
parse_rule
=
parse_list
[
parse_url_list
.
index
(
parses
[
i
][
'url'
])]
parses
[
i
][
'state'
]
=
1
if
parse_rule
[
'state'
]
is
None
else
parse_rule
[
'state'
]
parses
[
i
][
'order'
]
=
0
if
parse_rule
[
'order'
]
is
None
else
parse_rule
[
'order'
]
parses
[
i
][
'write_date'
]
=
0
if
parse_rule
[
'write_date'
]
is
None
else
parse_rule
[
'write_date'
].
timestamp
()
else
:
parses
[
i
][
'state'
]
=
1
parses
[
i
][
'order'
]
=
0
parses
[
i
][
'write_date'
]
=
0
for
i
in
range
(
len
(
parses
)):
if
not
parses
[
i
].
get
(
'header'
):
parses
[
i
][
'header'
]
=
{
'User-Agent'
:
'Mozilla/5.0'
}
...
...
@@ -146,5 +162,7 @@ def layui_jx_list():
parses
[
i
][
'header'
]
=
ujson
.
dumps
(
parses
[
i
][
'header'
],
ensure_ascii
=
False
)
if
isinstance
(
parses
[
i
].
get
(
'ext'
),
dict
):
parses
[
i
][
'ext'
]
=
ujson
.
dumps
(
parses
[
i
][
'ext'
],
ensure_ascii
=
False
)
# parse.setEverything(parses[i]['url'], parses[i]['name'], parses[i]['state'], parses[i]['type'], parses[i]['order'], parses[i]['ext'], parses[i]['header'])
new_parses
=
parses
[(
page
-
1
)
*
limit
:
page
*
limit
]
return
layuiBack
(
'获取成功'
,
new_parses
,
count
=
len
(
parses
))
\ No newline at end of file
controllers/service.py
浏览文件 @
758abea6
...
...
@@ -7,6 +7,7 @@
from
base.R
import
copy_utils
from
models.storage
import
Storage
from
models.ruleclass
import
RuleClass
from
models.vipParse
import
VipParse
from
utils.cfg
import
cfg
from
base.database
import
db
from
datetime
import
datetime
,
timedelta
...
...
@@ -135,4 +136,120 @@ class rules_service(object):
@
staticmethod
def
getHideRules
():
res
=
RuleClass
.
query
.
filter
(
RuleClass
.
state
==
0
).
all
()
return
copy_utils
.
obj_to_list
(
res
)
\ No newline at end of file
return
copy_utils
.
obj_to_list
(
res
)
class
parse_service
(
object
):
@
staticmethod
def
query_all
():
# 查询所有
res
=
VipParse
.
query
.
order_by
(
VipParse
.
order
.
asc
(),
VipParse
.
write_date
.
desc
()).
all
()
# print(res)
# res = RuleClass.query.order_by(RuleClass.write_date.asc()).all()
return
copy_utils
.
obj_to_list
(
res
)
@
classmethod
def
hasItem
(
self
,
key
):
return
VipParse
.
hasItem
(
key
)
def
getState
(
self
,
key
):
res
=
VipParse
.
query
.
filter
(
VipParse
.
url
==
key
).
first
()
if
not
res
:
return
1
# print(res)
state
=
res
.
state
if
state
is
None
:
state
=
1
return
state
or
0
def
setState
(
self
,
key
,
state
=
0
):
res
=
VipParse
.
query
.
filter
(
VipParse
.
url
==
key
).
first
()
if
res
:
res
.
state
=
state
db
.
session
.
add
(
res
)
else
:
res
=
VipParse
(
url
=
key
,
state
=
state
)
db
.
session
.
add
(
res
)
db
.
session
.
flush
()
# 获取id
try
:
db
.
session
.
commit
()
return
res
.
id
except
Exception
as
e
:
print
(
f
'发生了错误:
{
e
}
'
)
return
None
def
setOrder
(
self
,
key
,
order
=
0
):
res
=
VipParse
.
query
.
filter
(
VipParse
.
url
==
key
).
first
()
if
res
:
res
.
order
=
order
# print(f'{res.name}设置order为:{order}')
if
res
.
order
==
order
:
res
.
write_date
=
datetime
.
now
()
# res.write_date = res.write_date + timedelta(hours=2)
db
.
session
.
add
(
res
)
else
:
res
=
VipParse
(
url
=
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
def
setEverything
(
self
,
key
,
name
,
state
,
typeno
,
order
,
ext
,
header
):
res
=
VipParse
.
query
.
filter
(
VipParse
.
url
==
key
).
first
()
if
res
:
res
.
name
=
name
res
.
state
=
state
res
.
type
=
typeno
res
.
order
=
order
res
.
ext
=
ext
res
.
header
=
header
res
.
write_date
=
datetime
.
now
()
db
.
session
.
add
(
res
)
else
:
res
=
VipParse
(
name
=
name
,
url
=
key
,
state
=
state
,
type
=
typeno
,
order
=
order
,
ext
=
ext
,
header
=
header
)
db
.
session
.
add
(
res
)
db
.
session
.
flush
()
# 获取id
try
:
db
.
session
.
commit
()
return
res
.
id
except
Exception
as
e
:
print
(
f
'发生了错误:
{
e
}
'
)
return
None
def
saveData
(
self
,
obj
):
"""
db.session.add_all([]) 可以一次性保存多条数据,但是这里用不到,因为涉及修改和新增一起的
:param obj:
:return:
"""
# res = VipParse.query.filter(VipParse.url == obj['url']).first()
res
=
VipParse
.
query
.
filter_by
(
url
=
obj
[
'url'
]).
first
()
if
res
:
# res.update(obj)
res
.
name
=
obj
[
'name'
]
res
.
state
=
obj
[
'state'
]
res
.
type
=
obj
[
'type'
]
res
.
order
=
obj
[
'order'
]
res
.
ext
=
obj
[
'ext'
]
res
.
header
=
obj
[
'header'
]
db
.
session
.
add
(
res
)
else
:
res
=
VipParse
(
**
obj
)
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
=
VipParse
.
query
.
filter
(
VipParse
.
state
==
0
).
all
()
return
copy_utils
.
obj_to_list
(
res
)
templates/layui_jxs.html
浏览文件 @
758abea6
...
...
@@ -8,11 +8,12 @@
<link
rel=
"stylesheet"
href=
"/static/plugin/layui/ext/soulTable/soulTable.css"
media=
"all"
/>
</head>
<body>
<table
id=
"myTable"
></table>
<table
id=
"myTable"
lay-filter=
"myTable"
></table>
<script
type=
"text/html"
id=
"toolbar"
>
<
div
>
<
div
class
=
"
layui-btn-container
"
>
<!--
<
button
class
=
"
layui-btn layui-btn-sm
"
lay
-
event
=
"
clearFilter
"
>
清除所有筛选条件
<
/button>--
>
<
button
class
=
"
layui-btn layui-btn-sm
"
lay
-
event
=
"
getData
"
>
获取当前页数据
<
/button
>
<!--
<
button
class
=
"
layui-btn layui-btn-sm
"
lay
-
event
=
"
getData
"
>
获取当前页数据
<
/button>--
>
<
button
class
=
"
layui-btn layui-btn-sm
"
lay
-
event
=
"
saveData
"
>
保存拖拽排序结果
<
/button
>
<
/div
>
</script>
<script
type=
"text/html"
id=
"bar"
>
...
...
@@ -36,6 +37,7 @@
layui
.
use
([
'
form
'
,
'
table
'
,
'
soulTable
'
],
function
()
{
var
table
=
layui
.
table
,
soulTable
=
layui
.
soulTable
;
var
$
=
layui
.
$
;
soulTable
.
config
({
rowDrag
:
true
});
...
...
@@ -51,9 +53,12 @@
,
limits
:[
20
,
40
,
60
,
80
,
100
,
150
,
200
,
300
,
500
]
,
cols
:
[[
{
type
:
'
checkbox
'
,
fixed
:
'
left
'
},
{
field
:
'
id
'
,
title
:
'
编号
'
,
width
:
80
,
sort
:
true
},
{
field
:
'
name
'
,
title
:
'
名称
'
,
width
:
200
,
sort
:
true
,
filter
:
true
},
{
field
:
'
url
'
,
title
:
'
接口
'
,
minWidth
:
200
,
sort
:
true
,
filter
:
true
},
{
field
:
'
type
'
,
title
:
'
类型
'
,
width
:
100
,
filter
:
true
},
{
field
:
'
state
'
,
title
:
'
状态
'
,
width
:
60
},
{
field
:
'
order
'
,
title
:
'
顺序
'
,
width
:
80
,
sort
:
true
},
{
field
:
'
url
'
,
title
:
'
接口
'
,
minWidth
:
200
,
sort
:
true
},
{
field
:
'
type
'
,
title
:
'
类型
'
,
width
:
80
,
filter
:
true
},
// {field: 'header', title: '请求头', width: 112, filter: {split:','}, sort:true},
{
field
:
'
header
'
,
title
:
'
请求头
'
,
width
:
200
,
sort
:
true
},
{
field
:
'
ext
'
,
title
:
'
扩展信息
'
,
minWidth
:
200
,
sort
:
true
},
...
...
@@ -64,26 +69,59 @@
}
});
function
saveData
(
data
){
if
(
!
Array
.
isArray
(
data
)
||
data
.
length
<
1
){
return
layer
.
msg
(
'
待保存的数据有误
'
);
}
let
params
=
{
"
data
"
:
JSON
.
stringify
(
data
)};
// console.log(params);
$
.
post
(
"
/admin/parse/save_data
"
,
params
,
function
(
res
,
status
){
console
.
log
(
res
);
if
(
res
.
code
===
200
){
table
.
reload
(
'
myTable
'
,
{
// page: {
// curr: 3 //重新从第 1 页开始
// }
});
}
else
{
console
.
log
(
'
修改失败了...
'
);
return
false
}
});
}
// 工具栏事件
table
.
on
(
'
toolbar(myTable)
'
,
function
(
obj
){
var
id
=
obj
.
config
.
id
;
console
.
log
(
id
);
//
console.log(id);
if
(
obj
.
event
===
'
clearFilter
'
)
{
// 清除所有筛选条件并重载表格
// 参数: tableId
soulTable
.
clearFilter
(
'
myTable
'
)
}
else
if
(
obj
.
event
===
'
getData
'
){
var
getData
=
table
.
getData
(
id
);
console
.
log
(
getData
);
//
console.log(getData);
layer
.
alert
(
layui
.
util
.
escape
(
JSON
.
stringify
(
getData
)));
}
else
if
(
obj
.
event
===
'
saveData
'
){
layer
.
confirm
(
'
确定保存当前的排序结果?保存后将刷新数据库和当前页面
'
,
function
(
index
){
var
getData
=
table
.
getData
(
id
);
// console.log(getData);
saveData
(
getData
);
layer
.
close
(
index
);
});
}
});
//触发单元格工具事件
table
.
on
(
'
tool(
bar
)
'
,
function
(
obj
)
{
// 双击 toolDouble
table
.
on
(
'
tool(
myTable
)
'
,
function
(
obj
)
{
// 双击 toolDouble
console
.
log
(
obj
);
if
(
obj
.
event
===
'
del
'
){
alert
(
'
删除...
'
)
layer
.
msg
(
'
未开发功能:删除...
'
)
}
else
if
(
obj
.
event
===
'
set_top
'
){
layer
.
msg
(
'
未开发功能:置顶...
'
)
}
else
if
(
obj
.
event
===
'
set_bottom
'
){
layer
.
msg
(
'
未开发功能:置底...
'
)
}
});
// }, null, 'define');
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录