提交 98930727 编写于 作者: H hjdhnx

发布新版本,重大升级

上级 1ef5ebed
......@@ -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)
......
......@@ -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
......@@ -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
......@@ -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
#!/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
......@@ -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')
......
3.8.5
\ No newline at end of file
3.9.1
\ No newline at end of file
......@@ -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()
......
......@@ -4,19 +4,19 @@
<a href="https://alist.nn.ci"><img height="100px" alt="logo" src="https://gitcode.net/qq_32394351/dr_py/-/raw/1fe0e082b1ceacc4469d7f175a605cc2edf0bab0/static/img/icon.png"/></a>
<p><em>🗂️A webServer convert web and x5 movie sites to cms api data</em></p>
<a href="https://gitcode.net/qq_32394351/dr_py/-/releases">
<img src="https://img.shields.io/badge/version-3.8.1-blue" alt="latest version" />
<img src="https://img.shields.io/badge/version-3.9.0-blue" alt="latest version" />
</a>
<a href="https://gitcode.net/qq_32394351/dr_py/-/issues">
<img src="https://img.shields.io/badge/discussions-2-orange" alt="discussions" />
</a>
<a href="https://gitcode.net/qq_32394351/dr_py/-/releases">
<img src="https://img.shields.io/badge/downloads-2837-blue" alt="Downloads" />
<img src="https://img.shields.io/badge/downloads-5329-blue" alt="Downloads" />
</a>
<a href="https://wwi.lanzoup.com/i02Vp0c3hpkd">
<img src="https://img.shields.io/badge/蓝奏云下载-3.7.0-blue" alt="Downloads" />
<a href="https://wwi.lanzoup.com/igPCG0dlqouf">
<img src="https://img.shields.io/badge/蓝奏云下载-3.9.0-blue" alt="Downloads" />
</a>
......@@ -30,7 +30,7 @@
</a>
<a href="https://gitcode.net/qq_32394351/dr_py">
<img src="https://img.shields.io/badge/coverage-80%25-yellowgreen" alt="License" />
<img src="https://img.shields.io/badge/coverage-99.9%25-yellowgreen" alt="License" />
</a>
</div>
......@@ -46,6 +46,9 @@
[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/10/11
- [X] 增加自建解析加密示例
- [X] 发布3.9.0镜像,重大升级,优化js装载速度
###### 2022/10/09
- [X] 1.v3.8.2 本地drpy.js抄了一下影魔代码实现了base64加解密和md5加密并且引入全局的CryptoJS对象
- [X] 2.v3.8.3 本地drpy.js抄了一下影魔代码不用import模板改成init加载模板解决换源冲突问题
......
......@@ -14,4 +14,6 @@ gunicorn ; python_version >= '3.6'
supervisor ; sys_platform != 'win32'
func_timeout
easydict
jsonpath
\ No newline at end of file
jsonpath
quickjs
ujson
\ No newline at end of file
......@@ -13,7 +13,7 @@ apt install python3
##### 特殊-docker直装(支持amd64/armv7/arm64)
##### 不知道自己架构的通过arch命令查看
###### 可以通过点此下载获得最小必要文件压缩包
[蓝奏云下载](https://wwi.lanzoup.com/i02Vp0c3hpkd)
[蓝奏云下载](https://wwi.lanzoup.com/igPCG0dlqouf)
##### 三架构自动识别(测试功能)
```shell
......@@ -22,15 +22,15 @@ docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/
##### amd64/x86架构(主流设备)
```shell
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.7.0
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.9.0
```
##### armv7架构(树莓派,机顶盒,软路由等)
```shell
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:armv7-v3.7.0
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:armv7-v3.9.0
```
##### arm64架构(部分服务器)
```shell
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:arm64-v3.7.0
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:arm64-v3.9.0
```
##### 上面代码如果成功了下面都可以忽略
......@@ -40,10 +40,10 @@ docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/
```
```shell
# 运行容器-小白只需要这一条命令(存在问题是不能在远程面板上正确获取配置地址和进程管理地址,但自己知道地址就不影响使用,可进入容器自行修改config)
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.7.0
docker run -it -p 5705:5705 -p 9001:9001 --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.9.0
# 稍微懂一点可以运行下面的操作
先把本项目拷贝到 /home/pywork/dr_py
docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.7.0
docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.9.0
# 进入容器然后修改config.py文件改配置里面自己的远程地址等信息,改完退出容器再重启容器(或者通过进程管理9001端口在线重启flask服务)
docker exec -it drpy bash
vi ./base/config.py
......
......@@ -81,6 +81,7 @@ find . -iname drpy.txt
# 推荐drpy项目映射方案:
-v /home/pywork/kod/data/files/dr_py:/root/sd/pywork/dr_py
# 道长用完整命令
# 道长用完整命令
docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/kod/data/files/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy
docker run -it -p 5705:5705 -p 9001:9001 -v /home/pywork/kod/data/files/dr_py:/root/sd/pywork/dr_py --restart=always --name drpy -d hjdhnx/drpy:amd64-v3.9.0
```
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册