diff --git a/classes/cms.py b/classes/cms.py index a13f9cdb9291fb6fdf26d2c02a41c75dce1dc389..ed92615819a705c507f532806ec003b14b0ab7a6 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 aec33b9ca2a32a59e7c93fee4c11fbe3a27c30eb..0b5b309ec01aca117ad31902ceb33d6fe076528d 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 Binary files a/models/rules.db and b/models/rules.db differ diff --git "a/py/\345\271\262\351\245\255.js" "b/py/\345\271\262\351\245\255.js" index e64396193278b29645ef5abc423dfc5d25140f33..8b59e39b47ce9dae6b7411cdca768811c61ca29f 100644 --- "a/py/\345\271\262\351\245\255.js" +++ "b/py/\345\271\262\351\245\255.js" @@ -1,28 +1,22 @@ js: cacheUrl = d.getParse(input); -print(cacheUrl); +// print(cacheUrl); if(cacheUrl){ input=cacheUrl; }else{ try { - r = requests.get(input, headers=d.headers,timeout=d.timeout); - r.encoding = d.encoding; - html = r.text; + // let html = fetch([input, {headers:d.headers,timeout:d.timeout,encoding:d.encoding}]); + let html = fetch(input, {headers:d.headers,timeout:d.timeout,encoding:d.encoding}); + // js = pdfh(html,'.stui-player__video script:eq(0)&&Html'); + // print(js); 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); + print('网络请求发生错误:'+e.message); } -} +} \ No newline at end of file diff --git a/readme.md b/readme.md index c97390db5b198d4057f379b3656327cc673105d2..c20bd9fd90fc608c4aa076cd90c32e7e1dbc2632 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 0000000000000000000000000000000000000000..0b9ef857efa3d06db795f4d4bb0caf0aed05cebb --- /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