提交 7f3919da 编写于 作者: H hjdhnx

完成解析管理功能

上级 e4491c63
无法预览此类型文件
......@@ -4,11 +4,12 @@
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2022/9/6
import json
import ujson
import os
import re
from flask import Blueprint,abort,render_template,render_template_string,url_for,redirect,make_response,send_from_directory,request
from controllers.service import storage_service,rules_service
from controllers.service import storage_service,rules_service,parse_service
from controllers.classes import getClasses,getClassInfo
from utils.files import getPics,custom_merge,getAlist,get_live_url,get_multi_rules,getCustonDict
......@@ -255,12 +256,29 @@ def config_render(mode):
# print(len(merged_config['sites']))
# print(merged_config['sites'])
merged_config['sites'] = sort_sites_by_order(merged_config['sites'],js_mode)
# print(merged_config['parses'])
parses = sort_parses_by_order(merged_config['parses'],host)
# print(parses)
merged_config['parses'] = parses
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 comp(x, y):
if x['order'] > y['order']:
return 1
elif x['order'] < y['order']:
return - 1
else:
if x['write_date'] < y['write_date']:
return 1
elif x['write_date'] > y['write_date']:
return -1
else:
return 0
def sort_sites_by_order(sites,js_mode=0):
rules = rules_service()
rule_list = rules.query_all()
......@@ -285,18 +303,6 @@ def sort_sites_by_order(sites,js_mode=0):
sites[i]['write_date'] = 0
# sites[i]['site_name'] = site_name
# print(sites)
def comp(x, y):
if x['order'] > y['order']:
return 1
elif x['order'] < y['order']:
return - 1
else:
if x['write_date'] < y['write_date']:
return 1
elif x['write_date'] > y['write_date']:
return -1
else:
return 0
# sites.sort(key=lambda x: x['order'], reverse=False)
sites.sort(key=functools.cmp_to_key(comp), reverse=False)
# print(sites)
......@@ -306,6 +312,44 @@ def sort_sites_by_order(sites,js_mode=0):
del site['write_date']
return sites
def sort_parses_by_order(parses,host):
t1 = time()
parse = parse_service()
parse_list = parse.query_all()
parse_url_list = list(map(lambda x: x['url'], parse_list))
new_parses = []
for i in range(len(parses)):
# parses[i]['id'] = i + 1
# 去重
if parses[i]['url'] in new_parses:
continue
if str(parses[i]['url']).startswith(host):
parses[i]['url'] = parses[i]['url'].replace(host,'')
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
if not parses[i].get('header'):
parses[i]['header'] = {'User-Agent': 'Mozilla/5.0'}
if str(parses[i]['url']).startswith('/'):
parses[i]['url'] = host + parses[i]['url']
new_parses.append(parses[i])
new_parses.sort(key=functools.cmp_to_key(comp), reverse=False)
# print(sites)
for par in new_parses:
del par['state']
del par['order']
del par['write_date']
# print(new_parses)
logger.info(f'{len(parses)}条解析解析排序耗时:{get_interval(t1)}毫秒')
return new_parses
@home.route('/configs')
def config_gen():
# 生成文件
......@@ -335,11 +379,17 @@ def config_gen():
jxs = getJxs(host=host2)
set_online = render_template('config.txt',js0_password=js0_password,pys=pys,rules=rules,alists=alists,alists_str=alists_str,live_url=get_live_url(new_conf,2),mode=1,js_mode=js_mode,host=host2,jxs=jxs)
ali_token = new_conf.ALI_TOKEN
# parses = []
with open('txt/pycms0.json','w+',encoding='utf-8') as f:
customConfig = getCustonDict(host0,ali_token,js0_password)
set_dict = custom_merge(parseText(set_local), customConfig)
merged_hide(set_dict)
set_dict['sites'] = sort_sites_by_order(set_dict['sites'], js_mode)
# if not parses:
# print('生成静态配置时初始化排序parses')
# parses = sort_parses_by_order(set_dict['parses'])
# set_dict['parses'] = parses
set_dict['parses'] = sort_parses_by_order(set_dict['parses'],host0)
# 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:
......@@ -347,6 +397,7 @@ def config_gen():
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['parses'] = sort_parses_by_order(set_dict['parses'],host1)
# set_dict = json.loads(set_area)
f.write(json.dumps(set_dict,ensure_ascii=False,indent=4))
......@@ -355,6 +406,7 @@ def config_gen():
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['parses'] = sort_parses_by_order(set_dict['parses'],host2)
# 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)]
......
......@@ -37,6 +37,20 @@ def layui_jxs(): # put application's code here
return render_template('login.html')
return render_template('layui_jxs.html')
def comp(x, y):
if x['order'] > y['order']:
return 1
elif x['order'] < y['order']:
return - 1
else:
if x['write_date'] < y['write_date']:
return 1
elif x['write_date'] > y['write_date']:
return -1
else:
return 0
@layui.route('/api/list')
def layui_rule_list():
page = int(getParmas('page',1))
......@@ -95,19 +109,6 @@ def layui_rule_list():
sites.sort(key=lambda x:x[key], reverse=reverse)
return sites
def comp(x, y):
if x['order'] > y['order']:
return 1
elif x['order'] < y['order']:
return - 1
else:
if x['write_date'] < y['write_date']:
return 1
elif x['write_date'] > y['write_date']:
return -1
else:
return 0
# multisort(sites, (('order', False), ('write_date', True)))
# sites.sort(key=lambda x:x['order'],reverse=False)
sites.sort(key=functools.cmp_to_key(comp),reverse=False)
......@@ -145,6 +146,8 @@ def layui_jx_list():
for i in range(len(parses)):
parses[i]['id'] = i+1
if str(parses[i]['url']).startswith(host):
parses[i]['url'] = parses[i]['url'].replace(host,'')
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']
......@@ -155,14 +158,13 @@ def layui_jx_list():
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'}
if isinstance(parses[i].get('header'),dict):
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'])
parses.sort(key=functools.cmp_to_key(comp), reverse=False)
new_parses = parses[(page - 1) * limit:page * limit]
return layuiBack('获取成功', new_parses, count=len(parses))
\ No newline at end of file
3.9.18beta8
\ No newline at end of file
3.9.19
\ No newline at end of file
......@@ -47,6 +47,8 @@
[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/11/02
- [X] 合并小雅代码,未来功能完善解析管理,可正常拖拽排序
###### 2022/10/30
- [X] 3.9.18beta4 修复lives?path=接口漏洞,修复js0设置密码后播放解析没自动带密码Bug
###### 2022/10/28
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册