提交 f5ade05d 编写于 作者: H hjdhnx

解决execjs中文乱码问题

上级 a9e011a0
......@@ -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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# File : rules.py.py
# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------
# Date : 2022/8/25
rule_list = [
'鸭奈飞'
]
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
#!/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
#!/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
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册