diff --git a/app.py b/app.py index 252016c0c1c8caf7bd7fa9f2a5b6cef6d9baa6a0..38f9cfcade98c68441064714a8b618f21c148cd4 100644 --- a/app.py +++ b/app.py @@ -5,7 +5,8 @@ # Date : 2022/8/25 from flask import Flask, jsonify, abort,request,redirect,make_response,render_template - +from js.rules import rule_list +from utils import error,parser import sys import codecs sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach()) @@ -20,6 +21,22 @@ headers = { 'user-agent': UA, } +def getParmas(key=None): + """ + 获取链接参数 + :param key: + :return: + """ + args = {} + if request.method == 'POST': + args = request.json + elif request.method == 'GET': + args = request.args + if key: + return args.get(key,'') + else: + return args + @app.route('/') def forbidden(): # put application's code here abort(403) @@ -28,5 +45,23 @@ def forbidden(): # put application's code here def index(): # put application's code here return render_template('index.html') +@app.route('/vod') +def vod(): + rule = getParmas('rule') + if not rule: + return jsonify(error.failed('规则字段必填')) + if not rule in rule_list: + msg = f'仅支持以下规则:{",".join(rule_list)}' + return jsonify(error.failed(msg)) + + # with open(f'js/{rule}.js',mode='r',encoding='utf-8') as f: + # js_code = f.read() + js_path = f'js/{rule}.js' + ctx,js_code = parser.runJs(js_path) + a = ctx.eval('rule') + print(a) + print(type(a)) + return jsonify({'rule':rule,'js_code':js_code}) + if __name__ == '__main__': app.run(host="0.0.0.0", port=9000) \ No newline at end of file diff --git a/js/rules.py b/js/rules.py new file mode 100644 index 0000000000000000000000000000000000000000..34dc7891b213e04f8f4fb539301bdbe7b124fc7a --- /dev/null +++ b/js/rules.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# File : rules.py.py +# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ +# Date : 2022/8/25 + +rule_list = [ + '鸭奈飞' +] diff --git "a/js/\351\270\255\345\245\210\351\243\236.js" "b/js/\351\270\255\345\245\210\351\243\236.js" new file mode 100644 index 0000000000000000000000000000000000000000..f03244ec47bd67eb10c2f06429fec35783d0dcb1 --- /dev/null +++ "b/js/\351\270\255\345\245\210\351\243\236.js" @@ -0,0 +1,10 @@ +var rule = { + url:'https://yanetflix.com/vodshow/dianying--------fypage---.html', + searchUrl:'/vodsearch/**----------fypage---.html', + ua:'MOBILE_UA', + class_name:'', + class_url:'测试', + 一级:'', + 二级:'', + 搜索:'', +} \ No newline at end of file diff --git a/utils/error.py b/utils/error.py new file mode 100644 index 0000000000000000000000000000000000000000..b3449eefe5f01b44f8116200c57085bfeb0ddacf --- /dev/null +++ b/utils/error.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# File : error.py +# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ +# Date : 2022/8/25 + +def failed(msg): + return { + 'msg':msg, + 'code':404, + } + +def success(msg): + return { + 'msg':msg, + 'code':200, + } \ No newline at end of file diff --git a/utils/parser.py b/utils/parser.py new file mode 100644 index 0000000000000000000000000000000000000000..286dca1a0ea9b718afaa359218efff12511bbf93 --- /dev/null +++ b/utils/parser.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# File : parser.py +# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ +# Date : 2022/8/25 + +import os +from flask import make_response,jsonify +from functools import partial # 这玩意儿能锁定一个函数的参数 +import subprocess +subprocess.Popen = partial(subprocess.Popen, encoding="utf-8") # 固定写法 +# 解决execjs执行js时产生的乱码报错,需要在导入该模块之前,让Popen的encoding参数锁定为utf-8 +import execjs + +# os.environ["EXECJS_RUNTIME"] = "JScript" +# print(execjs.get().name) + +def runJs(jsPath): + # base_path = os.path.dirname(os.path.abspath(__file__)) # 当前文件所在目录 + # base_path = os.path.dirname(os.getcwd()) # 当前主程序所在工作目录 + # base_path = os.path.dirname(os.path.abspath('.')) # 上级目录 + base_path = os.path.dirname(os.path.abspath(os.path.dirname(__file__))) # 上级目录 + js_path = os.path.join(base_path, jsPath) + with open(js_path, 'r', encoding='UTF-8') as fp: + js_code = fp.read() + # print(js_code) + loader = execjs.compile(js_code) + return loader,js_code + +def toJs(jsPath): + base_path = os.path.dirname(os.path.abspath(os.path.dirname(__file__))) # 上级目录 + js_path = os.path.join(base_path, jsPath) + if not os.path.exists(js_path): + return jsonify({'code': -2, 'msg': f'非法猥亵,文件不存在'}) + with open(js_path, 'r', encoding='UTF-8') as fp: + js = fp.read() + response = make_response(js) + response.headers['Content-Type'] = 'text/javascript; charset=utf-8' + return response + +def toHtml(jsPath): + base_path = os.path.dirname(os.path.abspath(os.path.dirname(__file__))) # 上级目录 + js_path = os.path.join(base_path, jsPath) + with open(js_path, 'r', encoding='UTF-8') as fp: + js = fp.read() + response = make_response(js) + response.headers['Content-Type'] = 'text/html; charset=utf-8' + return response