From 1095955daf4a59709c06471ce672007c9c47b5f3 Mon Sep 17 00:00:00 2001 From: hjdhnx Date: Mon, 29 Aug 2022 14:31:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=91=E5=8F=88=E5=8F=AF=E4=BB=A5=E4=BA=86?= =?UTF-8?q?=EF=BC=8Cjs=E5=85=8D=E5=97=85=E8=82=9D=E5=87=BA=E6=9D=A5?= =?UTF-8?q?=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- classes/cms.py | 21 +++++-- ...62\351\245\255\345\275\261\350\247\206.js" | 3 +- models/rules.db | Bin 16384 -> 16384 bytes "py/\345\271\262\351\245\255.js" | 28 ++++----- readme.md | 1 + utils/encode.py | 57 ++++++++++++++++++ 6 files changed, 86 insertions(+), 24 deletions(-) create mode 100644 utils/encode.py diff --git a/classes/cms.py b/classes/cms.py index a13f9cd..ed92615 100644 --- a/classes/cms.py +++ b/classes/cms.py @@ -11,6 +11,7 @@ from utils.web import * from models import * from utils.config import config from utils.log import logger +from utils.encode import base64Encode,baseDecode,fetch,post from utils.safePython import safePython from utils.parser import runPy,runJScode from utils.htmlParser import jsoup @@ -19,6 +20,11 @@ from concurrent.futures import ThreadPoolExecutor # 引入线程池 from flask import url_for,redirect from easydict import EasyDict as edict +py_ctx = { +'requests':requests,'print':print,'base64Encode':base64Encode,'baseDecode':baseDecode, +'log':logger.info,'fetch':fetch,'post':post +} + class CMS: def __init__(self, rule, db=None, RuleClass=None, PlayParse=None,new_conf=None): if new_conf is None: @@ -223,7 +229,7 @@ class CMS: logger.info(f"{name}使用缓存播放地址:{real_url}") return real_url else: - return [] + return '' def saveParse(self, play_url,real_url): if not self.db: @@ -632,11 +638,14 @@ class CMS: jscode = str(self.lazy).split('js:')[1] # jscode = f'var input={play_url};{jscode}' # print(jscode) - loader,_ = runJScode(jscode,ctx={'input':play_url, - 'requests':requests,'print':print,'d':self.d, - 'log':logger.info,'pdfh':self.d.jsp.pdfh, - 'pdfa': self.d.jsp.pdfa,'pd':self.d.jsp.pd, - }) + py_ctx.update({ + 'input': play_url, + 'd': self.d, + 'pdfh': self.d.jsp.pdfh, + 'pdfa': self.d.jsp.pdfa, 'pd': self.d.jsp.pd, + }) + ctx = py_ctx + loader,_ = runJScode(jscode,ctx=ctx) # print(loader.toString()) play_url = loader.eval('input') print('play_url:',play_url) diff --git "a/js/\345\271\262\351\245\255\345\275\261\350\247\206.js" "b/js/\345\271\262\351\245\255\345\275\261\350\247\206.js" index aec33b9..0b5b309 100644 --- "a/js/\345\271\262\351\245\255\345\275\261\350\247\206.js" +++ "b/js/\345\271\262\351\245\255\345\275\261\350\247\206.js" @@ -13,7 +13,8 @@ var rule = { play_parse:true, // lazy:'干饭', // lazy:'@js:cacheUrl = d.getParse(input);print(cacheUrl);input=cacheUrl', - lazy:'js:cacheUrl = d.getParse(input);print(cacheUrl);input=cacheUrl', + // lazy:'js:cacheUrl = d.getParse(input);print(cacheUrl);input=cacheUrl', + lazy:'js:cacheUrl=d.getParse(input);if(cacheUrl){input=cacheUrl}else{try{let html=fetch(input,{headers:d.headers,timeout:d.timeout,encoding:d.encoding});let ret=html.match(/var player_(.*?)=(.*?)10){real_url="https://player.buyaotou.xyz/?url="+url;d.saveParse(input,real_url);input=real_url}}catch(e){print("网络请求发生错误:"+e.message)}}', limit:5, 推荐:'ul.stui-vodlist.clearfix;li;a&&title;.lazyload&&data-original;;a&&href', double:true, // 推荐内容是否双层定位 diff --git a/models/rules.db b/models/rules.db index 12a367d5ca974532fe9709b02d88a3ac3d169f79..6e3ea3bb14ebf28efbdce6937c8ccece297f32f5 100644 GIT binary patch delta 688 zcmZ9|PjAw27zc0)>tKu)=O!98bGpPW!$p2S${c^Pq#FarXqT3@Ko4e>3P}GLCl+Wt z(2HkH--2&|_zpaHBI?nzufv0scBJwCdA`s0dB$U8JVrj{s7RiRYMmhyLl$y+{@_7Ioihqba=t@TbFgg)6o1F!AP!ghoJ zhqEw1%wQewQ3lnZOqypa;^~Vtx}Tml6Y`tGWxN`a9$_OL7~|v>=#FS_OJZ9oyk9#y_V6$a~c9&P&^oOAPUn5v+rLX z?Rs<*@3o8?s1%!ZI^*3Cj<2GDj#aj|3J>Q4X>VZnw#*#^kz=n~&pS{WW!}hT@Xks` z7twGLZ56gL_CivXAt$hvSA5o<6cXW`6(@PHNG7g539EW(Sk-9bWi3loA#KQ-Fsedu m&@{;b)guRTk<8G#_`WsDDpZk7QD$k-f_+2wYJ8pM2=pKRP0q^z delta 57 zcmZo@U~Fh$oFL7pJyFJ)QF~*;5`7U4t}_h$X?$n+jCeD6j`2uvS8<)$*tms@xlx;A N@ 10){ + real_url = 'https://player.buyaotou.xyz/?url='+url; + d.saveParse(input,real_url); + input = real_url; } }catch (e) { - print('发生错误:'+e.message); + print('网络请求发生错误:'+e.message); } -} +} \ No newline at end of file diff --git a/readme.md b/readme.md index c97390d..c20bd9f 100644 --- a/readme.md +++ b/readme.md @@ -3,6 +3,7 @@ ###### 2022/08/29 - [X] 1.更换js引擎,速度更快性能更好 - [X] 2.新版js支持与python互动,后期可能支持js免嗅(lazy:'@js:xxx') +- [X] 3.支持了js免嗅和常用的fetch,post方法 ###### 2022/08/28 - [X] 1.增加linux进程启动,命令 supervisord -c manager.conf - [X] 2.转移文本文件到txt目录 diff --git a/utils/encode.py b/utils/encode.py new file mode 100644 index 0000000..0b9ef85 --- /dev/null +++ b/utils/encode.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# File : encode.py +# Author: DaShenHan&道长-----先苦后甜,任凭晚风拂柳颜------ +# Date : 2022/8/29 + +import base64 +import requests + +def base64Encode(text): + return base64.b64encode(text.encode("utf8")).decode("utf-8") #base64编码 + +def baseDecode(text): + return base64.b64decode(text).decode("utf-8") #base64解码 + +def base_request(url,obj,method='get'): + url = str(url).replace("'", "") + encoding = obj.get('encoding') or 'utf-8' + encoding = str(encoding).replace("'", "") + # print(type(url),url) + # headers = dict(obj.get('headers')) if obj.get('headers') else {} + # headers = obj.get('headers').to_dict() if obj.get('headers') else {} + headers = obj.get('headers') if obj.get('headers') else {} + new_headers = {} + # print(type(headers),headers) + for i in headers: + new_headers[str(i).replace("'", "")] = str(headers[i]).replace("'", "") + # print(type(new_headers), new_headers) + + timeout = float(obj.get('timeout').to_int()) if obj.get('timeout') else None + # print(type(timeout), timeout) + body = obj.get('body') if obj.get('body') else {} + new_body = {} + for i in body: + new_body[str(i).replace("'", "")] = str(body[i]).replace("'", "") + # print(type(new_body), new_body) + try: + # r = requests.get(url, headers=headers, params=body, timeout=timeout) + if method.lower() == 'get': + r = requests.get(url, headers=new_headers, params=new_body, timeout=timeout) + else: + r = requests.post(url, headers=new_headers, data=new_body, timeout=timeout) + # r = requests.get(url, timeout=timeout) + # r = requests.get(url) + # print(encoding) + r.encoding = encoding + # print(f'源码:{r.text}') + return r.text + except Exception as e: + print(f'{method}请求发生错误:{e}') + return '' + +def fetch(url,obj): + return base_request(url,obj) + +def post(url,obj): + return base_request(url,obj,'post') \ No newline at end of file -- GitLab