diff --git a/controllers/vod.py b/controllers/vod.py
index 6b7cbfdbb12303dcb8856df97b1c83c081e10cca..1bbc418b50210d7c0b2c6f085c8483052c632e37 100644
--- a/controllers/vod.py
+++ b/controllers/vod.py
@@ -20,6 +20,8 @@ from models.playparse import PlayParse
from js.rules import getRules
from controllers.service import storage_service
from concurrent.futures import ThreadPoolExecutor,as_completed,thread # 引入线程池
+from quickjs import Function,Context
+import ujson
vod = Blueprint("vod", __name__)
@@ -163,13 +165,29 @@ def vod_home():
# logger.info(f'js读取耗时:{get_interval(t1)}毫秒')
logger.info(f'参数检验js读取共计耗时:{get_interval(t0)}毫秒')
t2 = time()
- ctx, js_code = parser.runJs(js_path,before=before)
- if not js_code:
+
+
+ # ctx, js_code = parser.runJs(js_path,before=before)
+ # if not js_code:
+ # return R.failed('爬虫规则加载失败')
+ # # rule = ctx.eval('rule')
+ # # print(type(ctx.rule.lazy()),ctx.rule.lazy().toString())
+ # ruleDict = ctx.rule.to_dict()
+
+ ctx = Context()
+ try:
+ with open(js_path,encoding='utf-8') as f2:
+ jscode = f2.read()
+ jscode = before + jscode
+ ctx.eval(jscode)
+ js_ret = ctx.get('rule')
+ ruleDict = ujson.loads(js_ret.json())
+ except Exception as e:
+ logger.info(f'{e}')
return R.failed('爬虫规则加载失败')
- # rule = ctx.eval('rule')
- # print(type(ctx.rule.lazy()),ctx.rule.lazy().toString())
- ruleDict = ctx.rule.to_dict()
+ # print(type(ruleDict))
+ # print(ruleDict)
ruleDict['id'] = rule # 把路由请求的id装到字典里,后面播放嗅探才能用
# print(ruleDict)
# print(rule)
diff --git a/docker/amd64_dockerfile.txt b/docker/amd64_dockerfile.txt
index 34e531424c85781f74ea6c1ac541a28e47505e35..b83e56c2b4fc7d53756f62c77d7f93f28f7b1cfd 100644
--- a/docker/amd64_dockerfile.txt
+++ b/docker/amd64_dockerfile.txt
@@ -8,6 +8,13 @@ RUN rm -rf /root/sd/pywork/dr_py && mkdir -p /root/sd/pywork/dr_py
# 复制文件及目录过去
COPY . /root/sd/pywork/dr_py
+# 装依赖
+# RUN pip install -i https://mirrors.cloud.tencent.com/pypi/simple --upgrade pip \
+# && pip config set global.index-url https://mirrors.cloud.tencent.com/pypi/simple
+
+# 执行指令,安装依赖
+RUN pip install -r requirements.txt
+
# 设置语言支持中文打印
# ENV LANG C.UTF-8
# ENV LC_ALL C.UTF-8
@@ -16,9 +23,9 @@ COPY . /root/sd/pywork/dr_py
# vi /etc/resolv.conf 加了两行也不行??
# systemctl daemon-reload
# systemctl restart docker
-# docker build -f amd64_dockerfile.txt -t hjdhnx/drpy:amd64-v3.7.0 .
-# docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.7.0
-# docker push hjdhnx/drpy:amd64-v3.7.0
+# docker build -f amd64_dockerfile.txt -t hjdhnx/drpy:amd64-v3.9.0 .
+# docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.9.0
+# docker push hjdhnx/drpy:amd64-v3.9.0
# docker cp . drpy:/root/sd/pywork/
# CMD supervisord -c /root/sd/pywork/dr_py/super/flask.conf && /bin/bash
ENTRYPOINT ["/etc/autostart/app.sh","flask"]
\ No newline at end of file
diff --git a/docker/arm64_dockerfile.txt b/docker/arm64_dockerfile.txt
index 5f182de25ab33b2ac212bec59dcf2d9083d6daf8..f5572cc29ea246b5e1d57c1fb0a69825c041a1ff 100644
--- a/docker/arm64_dockerfile.txt
+++ b/docker/arm64_dockerfile.txt
@@ -8,11 +8,14 @@ WORKDIR /root/sd/pywork/dr_py
# 复制文件及目录过去
COPY . /root/sd/pywork/dr_py
+# 执行指令,安装依赖
+RUN pip install -r requirements.txt
+
# 设置语言支持中文打印
# ENV LANG C.UTF-8
# ENV LC_ALL C.UTF-8
-# docker buildx build --platform linux/arm64 -f arm64_dockerfile.txt -t hjdhnx/drpy:arm64-v3.7.0 --push .
-# docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:arm64-v3.7.0
-# docker push hjdhnx/drpy:arm64-v3.7.0
+# docker buildx build --platform linux/arm64 -f arm64_dockerfile.txt -t hjdhnx/drpy:arm64-v3.9.0 --push .
+# docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:arm64-v3.9.0
+# docker push hjdhnx/drpy:arm64-v3.9.0
# CMD supervisord -c /root/sd/pywork/dr_py/super/flask.conf && /bin/bash
ENTRYPOINT ["/etc/autostart/app.sh","flask"]
\ No newline at end of file
diff --git a/docker/armv7_dockerfile.txt b/docker/armv7_dockerfile.txt
index f8fb3997003a37eb26516d9a92f59b6eac40ba0f..81c5ef35fac1472789da70e82e8038d1123b6202 100644
--- a/docker/armv7_dockerfile.txt
+++ b/docker/armv7_dockerfile.txt
@@ -8,11 +8,14 @@ WORKDIR /root/sd/pywork/dr_py
# 复制文件及目录过去
COPY . /root/sd/pywork/dr_py
+# 执行指令,安装依赖
+RUN pip3 install -r requirements.txt
+
# 设置语言支持中文打印
# ENV LANG C.UTF-8
# ENV LC_ALL C.UTF-8
-# docker buildx build --platform linux/arm/v7 -f armv7_dockerfile.txt -t hjdhnx/drpy:armv7-v3.7.0 --push .
-# docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:armv7-v3.7.0
-# docker push hjdhnx/drpy:armv7-v3.7.0
+# docker buildx build --platform linux/arm/v7 -f armv7_dockerfile.txt -t hjdhnx/drpy:armv7-v3.9.0 --push .
+# docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:armv7-v3.9.0
+# docker push hjdhnx/drpy:armv7-v3.9.0
# CMD supervisord -c /root/sd/pywork/dr_py/super/flask.conf && /bin/bash
ENTRYPOINT ["/etc/autostart/app.sh","flask"]
\ No newline at end of file
diff --git a/docker/merge.sh b/docker/merge.sh
index f22f4ac42746ab5de417705f4d1436c21708f2ff..561b613d93d1fcac5766d03f797d586ba3c85ae7 100644
--- a/docker/merge.sh
+++ b/docker/merge.sh
@@ -1,10 +1,10 @@
#!/bin/bash
#kill -9 $(cat supervisord.pid) # 杀掉进程
docker manifest rm hjdhnx/drpy
-docker manifest create hjdhnx/drpy hjdhnx/drpy:amd64-v3.7.0 hjdhnx/drpy:arm64-v3.7.0 hjdhnx/drpy:armv7-v3.7.0
-docker manifest annotate hjdhnx/drpy hjdhnx/drpy:amd64-v3.7.0 --os linux --arch amd64
-docker manifest annotate hjdhnx/drpy hjdhnx/drpy:arm64-v3.7.0 --os linux --arch arm64/v8
-docker manifest annotate hjdhnx/drpy hjdhnx/drpy:armv7-v3.7.0 --os linux --arch arm/v7
+docker manifest create hjdhnx/drpy hjdhnx/drpy:amd64-v3.9.0 hjdhnx/drpy:arm64-v3.9.0 hjdhnx/drpy:armv7-v3.9.0
+docker manifest annotate hjdhnx/drpy hjdhnx/drpy:amd64-v3.9.0 --os linux --arch amd64
+docker manifest annotate hjdhnx/drpy hjdhnx/drpy:arm64-v3.9.0 --os linux --arch arm64/v8
+docker manifest annotate hjdhnx/drpy hjdhnx/drpy:armv7-v3.9.0 --os linux --arch arm/v7
docker manifest push hjdhnx/drpy
# 保留一个 bash
#/bin/bash
\ No newline at end of file
diff --git a/js/rules.py b/js/rules.py
index 9505a164e509e663e919aa4593bb85b624bec50f..2b81990365584f1bb05a353bf6742a237d1793a7 100644
--- a/js/rules.py
+++ b/js/rules.py
@@ -7,10 +7,12 @@ import json
import os
from time import time
import js2py
+from quickjs import Function,Context
from utils.log import logger
# from utils.web import get_interval,UA
from utils.ua import UA,get_interval
from flask import render_template_string
+import ujson
def getRuleLists():
base_path = os.path.dirname(os.path.abspath(__file__)) # 当前文件所在目录
@@ -29,7 +31,7 @@ def getCacheCount():
file_name = list(filter(lambda x: str(x).endswith('.js') and str(x).find('模板') < 0, file_name))
return len(file_name)
-def getRules(path='cache',js_mode=0):
+def getRulesJs2py(path='cache',js_mode=0):
t1 = time()
base_path = path+'/' # 当前文件所在目录
@@ -64,11 +66,11 @@ def getRules(path='cache',js_mode=0):
for i in range(len(js_path)):
rule_codes.append(ctx.eval(f'rule{i}'))
- # print(rule_codes)
# print(type(rule_codes[0]),rule_codes[0])
# print(rule_codes[0].title)
# print(rule_codes[0].searchable)
# print(rule_codes[0].quickSearch)
+ # rule_codes 是个 js2py.base.JsObjectWrapper 类型,所以下面才能用. 获取属性
new_rule_list = []
for i in range(len(rule_list)):
if js_mode == 1 and rule_list[i] == 'drpy':
@@ -92,6 +94,60 @@ def getRules(path='cache',js_mode=0):
logger.info(f'自动配置装载耗时:{get_interval(t1)}毫秒')
return rules
+def getRules(path='cache',js_mode=0):
+ t1 = time()
+
+ base_path = path+'/' # 当前文件所在目录
+ os.makedirs(base_path,exist_ok=True)
+ file_name = os.listdir(base_path)
+ file_name = list(filter(lambda x: str(x).endswith('.js') and str(x).find('模板') < 0, file_name))
+ rule_list = [file.replace('.js', '') for file in file_name]
+ js_path = [f'{path}/{rule}.js' for rule in rule_list]
+ with open('js/模板.js', encoding='utf-8') as f:
+ before = f.read().split('export')[0]
+ rule_codes = []
+ ctx = Context()
+ codes = []
+ for i in range(len(js_path)):
+ js = js_path[i]
+ with open(js,encoding='utf-8') as f:
+ code = f.read()
+ new_code = 'var muban = JSON.parse(JSON.stringify(mubanDict));\n'+code.replace('rule',f'rule{i}',1)
+ # new_code = ''+code.replace('rule',f'rule{i}',1)
+ codes.append(new_code)
+ newCodes = before + '\n'+ '\n'.join(codes)
+ # print(newCodes)
+ try:
+ ctx.eval(newCodes)
+ for i in range(len(js_path)):
+ rule_codes.append(ctx.get(f'rule{i}'))
+
+ # rule_codes 是个 js2py.base.JsObjectWrapper 类型,所以下面才能用. 获取属性
+ new_rule_list = []
+ for i in range(len(rule_list)):
+ if js_mode == 1 and rule_list[i] == 'drpy':
+ continue
+ rule_codes[i] = ujson.loads(rule_codes[i].json())
+ sable = rule_codes[i].get('searchable',0)
+ tmpObj = {
+ 'name':rule_list[i],
+ # 'searchable':1 if (js_mode==1 and sable==2) else sable, # 对js模式1开放软件聚搜(还是算了,服务器遭不住)
+ 'searchable':sable,
+ 'quickSearch': rule_codes[i].get('quickSearch',0),
+ 'filterable': rule_codes[i].get('filterable',0),
+ }
+ # print(tmpObj)
+ if rule_codes[i].get('multi'):
+ tmpObj['multi'] = 1
+ new_rule_list.append(tmpObj)
+ # print(new_rule_list)
+ rules = {'list': new_rule_list, 'count': len(rule_list)}
+ except Exception as e:
+ logger.info(f'装载js内置源列表失败,置空内置源')
+ rules = []
+ logger.info(f'自动配置装载耗时:{get_interval(t1)}毫秒')
+ return rules
+
def jxTxt2Json(text:str,host:str):
try:
data = render_template_string(text,host=host).strip().split('\n')
diff --git a/js/version.txt b/js/version.txt
index 8c1da59dbb3a01e6f335d2e73d9b42affb230219..33f465d1ad3b7c3181aa7fcad2cac51d642457dc 100644
--- a/js/version.txt
+++ b/js/version.txt
@@ -1 +1 @@
-3.8.5
\ No newline at end of file
+3.9.1
\ No newline at end of file
diff --git a/py/qkjs/quick.py b/py/qkjs/quick.py
index fde210525a6f213940a02a05baf8a71e46832a4d..9d9fa5641ff6815606e53279f24f0041cb2e9c3a 100644
--- a/py/qkjs/quick.py
+++ b/py/qkjs/quick.py
@@ -88,15 +88,22 @@ ctx.add_callable('request',request)
ctx.eval('bd()')
t1 = time()
-with open('../../js/兔小贝.js',encoding='utf-8') as f1:
+rule_file = '555影视.js'
+with open('../../js/模板.js', encoding='utf-8') as f:
+ before = f.read().split('export')[0]
+
+with open(f'../../js/{rule_file}',encoding='utf-8') as f1:
jscode = f1.read()
+ jscode = before + jscode
print(jscode)
ctx1 = Context()
ctx1.eval(jscode)
ret = ctx1.get('rule')
-print(type(ret.json()),ret.json())
-print(json.loads(ret.json()))
+# print(type(ret.json()),ret.json())
+# print(json.loads(ret.json()))
+ret = json.loads(ret.json())
+print(type(ret),ret)
t2 = time()
print(f'quickjs耗时:{round((t2-t1)*1000,2)}毫秒')
tt1 = time()
@@ -108,9 +115,10 @@ tt2 = time()
print(f'quickjs第2次耗时:{round((tt2-tt1)*1000,2)}毫秒')
t3 = time()
-with open('../../js/兔小贝.js',encoding='utf-8') as f1:
+with open(f'../../js/{rule_file}',encoding='utf-8') as f1:
jscode = f1.read()
- print(jscode)
+ jscode = before + jscode
+ # print(jscode)
ctx2 = js2py.EvalJs({},enable_require=False) # enable_require启用require关键字,会自动获取系统nodejs环境
ctx2.execute(jscode)
ret = ctx2.rule.to_dict()
diff --git a/readme.md b/readme.md
index 0ea4b3840490fc4ff5df658d12f9f8c3373e614d..2a43cb25434e1cac2ee8d9c459f89eb535464454 100644
--- a/readme.md
+++ b/readme.md
@@ -4,19 +4,19 @@
🗂️A webServer convert web and x5 movie sites to cms api data
-