layui.py 5.9 KB
Newer Older
H
hjdhnx 已提交
1 2 3 4 5
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File  : layui.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date  : 2022/9/14
H
hjdhnx 已提交
6
import ujson
H
hjdhnx 已提交
7
from flask import Blueprint,request,render_template,jsonify,make_response,redirect
H
hjdhnx 已提交
8 9

from utils.ua import UA
H
hjdhnx 已提交
10
from utils.web import getParmas,get_interval,layuiBack,verfy_token
H
hjdhnx 已提交
11
from utils.cfg import cfg
H
hjdhnx 已提交
12
from controllers.service import storage_service,rules_service
H
hjdhnx 已提交
13 14 15
from utils.system import getHost
from utils.files import getCustonDict,custom_merge
from utils.encode import parseText
H
hjdhnx 已提交
16
from js.rules import getRules,getPys,getJxs
H
hjdhnx 已提交
17 18
from operator import itemgetter, attrgetter
import functools
H
hjdhnx 已提交
19 20 21 22 23 24 25 26 27 28

layui = Blueprint("layui", __name__)

@layui.route('/')
def hello():  # put application's code here
    return jsonify({'msg':'hello layui'})

@layui.route('/index')
def layui_index():  # put application's code here
    # return render_template('layui_index.html')
H
hjdhnx 已提交
29 30
    if not verfy_token():
        return render_template('login.html')
H
hjdhnx 已提交
31 32
    return render_template('layui_list.html')

H
hjdhnx 已提交
33 34 35 36 37 38 39
@layui.route('/jxs')
def layui_jxs():  # put application's code here
    # return render_template('layui_index.html')
    if not verfy_token():
        return render_template('login.html')
    return render_template('layui_jxs.html')

H
hjdhnx 已提交
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
@layui.route('/api/list')
def layui_rule_list():
    page = int(getParmas('page',1))
    limit = int(getParmas('limit',10))
    # print(f'page:{page},limit:{limit}')
    new_conf = cfg
    lsg = storage_service()
    store_conf_dict = lsg.getStoreConfDict()
    new_conf.update(store_conf_dict)
    host = getHost(2)
    customConfig = getCustonDict(host)
    jxs = []
    lsg = storage_service()
    use_py = lsg.getItem('USE_PY')
    pys = getPys() if use_py else []
    # print(pys)
    alists = []
    live_url = []
H
hjdhnx 已提交
58 59 60
    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,
H
hjdhnx 已提交
61 62 63
                           alists_str='[]', live_url=live_url, config=new_conf)
    merged_config = custom_merge(parseText(html), customConfig)
    sites = merged_config['sites']
H
hjdhnx 已提交
64 65 66 67
    rules = rules_service()
    rule_list = rules.query_all()
    rule_names = list(map(lambda x:x['name'],rule_list))
    # print(rule_list)
H
hjdhnx 已提交
68 69
    print(rule_names)
    # print(sites)
H
hjdhnx 已提交
70 71
    for i in range(len(sites)):
        sites[i]['id'] = i+1
H
hjdhnx 已提交
72 73 74 75 76
        site_name = sites[i]['api'].split('rule=')[1].split('&')[0] if 'rule=' in sites[i]['api'] else sites[i]['key']
        # 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']
77
            sites[i]['order'] = 0 if site_rule['order'] is None else site_rule['order']
H
hjdhnx 已提交
78
            sites[i]['write_date'] = 0 if site_rule['write_date'] is None else site_rule['write_date'].timestamp()
H
hjdhnx 已提交
79 80
        else:
            sites[i]['state'] = 1
81
            sites[i]['order'] = 0
H
hjdhnx 已提交
82
            sites[i]['write_date'] = 0
H
hjdhnx 已提交
83 84
        sites[i]['site_name'] = site_name

H
hjdhnx 已提交
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
    def multisort(sites, specs):
        """
        https://zhuanlan.zhihu.com/p/109269549?utm_id=0
        多重排序,来自知乎的代码.明显只对了最后的元素进行排序.看完评论和实践发现不对
        :param sites:
        :param specs:
        :return:
        """
        for key, reverse in specs:
            # sites.sort(key=attrgetter(key), reverse=reverse)
            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)
H
hjdhnx 已提交
114
    new_sites = sites[(page-1)*limit:page*limit]
H
hjdhnx 已提交
115
    # print(new_sites)
H
hjdhnx 已提交
116
    return layuiBack('获取成功',new_sites,count=len(sites))
H
hjdhnx 已提交
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150

@layui.route('/api/jx_list')
def layui_jx_list():
    # 拖拽排序教程 https://blog.csdn.net/qq_41829337/article/details/126610406
    host = request.host_url  # 获取当前访问链接对应的host
    page = int(getParmas('page',1))
    limit = int(getParmas('limit',10))
    new_conf = cfg
    lsg = storage_service()
    store_conf_dict = lsg.getStoreConfDict()
    new_conf.update(store_conf_dict)
    ali_token = new_conf.ALI_TOKEN
    xr_mode = new_conf.XR_MODE
    js0_password = new_conf.JS0_PASSWORD
    js_mode = int(new_conf.JS_MODE or 0)
    customConfig = getCustonDict(host, ali_token, js0_password)
    jxs = getJxs(host=host)
    rules = {'list': [{"key": "dr_MXONE", "name": "MXONE(道长)", "type": 1, "api": "{{host}}/vod?{% if js0_password %}pwd={{js0_password}}&{% endif %}rule=MXONE&ext=txt/js/tg/MXONE.js", "searchable": 2, "quickSearch": 0, "filterable": 0},
], 'count': 1}
    html = render_template('config.txt', js0_password=js0_password, UA=UA, xr_mode=xr_mode, ISTVB=False, pys=[],
                           rules=rules, host=host, mode=2, js_mode=js_mode, jxs=jxs, alists=[],
                           alists_str='', live_url='', config=new_conf)
    merged_config = custom_merge(parseText(html), customConfig)
    parses = merged_config['parses']
    # print(parses)
    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)
    new_parses = parses[(page - 1) * limit:page * limit]
    return layuiBack('获取成功', new_parses, count=len(parses))