From ee2bdb71f1be79ce800b71161aaa35bbb739e930 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=99=9A=E9=A3=8E=E6=8B=82=E6=9F=B3=E9=A2=9C?= <434857005@qq.com> Date: Fri, 12 Jan 2024 00:44:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0bd=E5=BD=B1=E8=A7=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- base/custom.conf | 6 +-- js/version.txt | 2 +- txt/hipy/bdys.jar | Bin 0 -> 4980 bytes txt/hipy/哔滴影视.py | 90 +++++++++++++++++++++++++------------------ 4 files changed, 56 insertions(+), 42 deletions(-) create mode 100644 txt/hipy/bdys.jar diff --git a/base/custom.conf b/base/custom.conf index b8b21c5..e262fa3 100644 --- a/base/custom.conf +++ b/base/custom.conf @@ -103,11 +103,11 @@ "key":"hipy_t4_哔滴影视", "name":"哔滴影视(hipy_t4)", "type":4, - "api":"http://192.168.31.49:5707/api/v1/vod/哔滴影视", + "api":"http://192.168.31.49:5707/api/v1/vod/哔滴影视?api_ext={{host}}/txt/hipy/bdys.jar", "searchable":1, "quickSearch":0, "filterable":1, - "ext":"" + "ext":"{{host}}/txt/hipy/bdys.jar" }, { "key": "hipy_t3_哔滴影视", @@ -117,7 +117,7 @@ "searchable": 1, "quickSearch": 0, "filterable": 1, - "ext": "" + "ext": "{{host}}/txt/hipy/bdys.jar" }, {"key":"Test_jsapi","name":"Test_jsapi(drpy)","type":3,"api":"{{host}}/libs/drpy2.min.js","searchable":2,"quickSearch":0,"filterable":0,"ext":"{{host}}/js/jsapi.js","jar":"{{host}}/libs/jar/custom_jsapi.jar"}, diff --git a/js/version.txt b/js/version.txt index 4e11386..c51eea0 100644 --- a/js/version.txt +++ b/js/version.txt @@ -1 +1 @@ -3.9.49beta22 \ No newline at end of file +3.9.49beta23 \ No newline at end of file diff --git a/txt/hipy/bdys.jar b/txt/hipy/bdys.jar new file mode 100644 index 0000000000000000000000000000000000000000..9f7e3560e448a15278d7ebdb79c4604df03db70d GIT binary patch literal 4980 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 Ikp8*-7ZSQu0RR91 literal 0 HcmV?d00001 diff --git a/txt/hipy/哔滴影视.py b/txt/hipy/哔滴影视.py index c13d651..9ddc6fb 100644 --- a/txt/hipy/哔滴影视.py +++ b/txt/hipy/哔滴影视.py @@ -15,9 +15,9 @@ try: except ImportError: from t4.base.spider import BaseSpider -import json from pathlib import Path import base64 +from cachetools import cached, TTLCache # 可以缓存curd的函数,指定里面的key """ 配置示例: @@ -46,6 +46,16 @@ api里会自动含有ext参数是base64编码后的选中的筛选条件 """ +def envkey(self, url: str): + return url + + +# 全局变量 +gParam = { + "inited": False, +} + + class Spider(BaseSpider): # 元类 默认的元类 type api: str = 'https://www.bdys03.com/api/v1' @@ -58,22 +68,27 @@ class Spider(BaseSpider): # 元类 默认的元类 type def getName(self): return "哔滴影视" + @cached(cache=TTLCache(maxsize=3, ttl=3600), key=envkey) + def get_init_api(self, url): + try: + print('get_init_api请求URL:', url) + r = self.fetch(url) + ret = None + if r.status_code == 200: + self.log(f'url:{url},文件体积:{len(r.content)}') + ret = r.content + return ret + except Exception as e: + print(f'get_init_api请求URL发生错误:{e}') + return {} + def init_api_ext_file(self): """ 这个函数用于初始化py文件对应的json文件,用于存筛选规则。 执行此函数会自动生成筛选文件 @return: """ - ext_file = __file__.replace('.py', '.json') - print(f'ext_file:{ext_file}') - ext_file_dict = { - "分类1": [{"key": "letter", "name": "首字母", "value": [{"n": "A", "v": "A"}, {"n": "B", "v": "B"}]}], - "分类2": [{"key": "letter", "name": "首字母", "value": [{"n": "A", "v": "A"}, {"n": "B", "v": "B"}]}, - {"key": "year", "name": "年份", - "value": [{"n": "2024", "v": "2024"}, {"n": "2023", "v": "2023"}]}], - } - with open(ext_file, mode='w+', encoding='utf-8') as f: - f.write(json.dumps(ext_file_dict, ensure_ascii=False)) + pass def init(self, extend=""): """ @@ -81,35 +96,32 @@ class Spider(BaseSpider): # 元类 默认的元类 type @param extend: @return: """ - - def init_file(ext_file): - """ - 根据与py对应的json文件去扩展规则的筛选条件 - """ - ext_file = Path(ext_file).as_posix() - if os.path.exists(ext_file): - with open(ext_file, mode='r', encoding='utf-8') as f: - try: - ext_dict = json.loads(f.read()) - self.config['filter'].update(ext_dict) - except Exception as e: - print(f'更新扩展筛选条件发生错误:{e}') - + global gParam ext = self.extend - print(f"============{extend}============") + if isinstance(ext, str) and ext: - if ext.startswith('./'): - ext_file = os.path.join(os.path.dirname(__file__), ext) - init_file(ext_file) - elif ext.startswith('http'): - try: - r = self.fetch(ext) - self.config['filter'].update(r.json()) - except Exception as e: - print(f'更新扩展筛选条件发生错误:{e}') - elif not ext.startswith('./') and not ext.startswith('http'): - ext_file = os.path.join(os.path.dirname(__file__), './' + ext + '.json') - init_file(ext_file) + if ext.endswith('.jar'): + jar_path = os.path.join(os.path.dirname(__file__), './jars') + os.makedirs(jar_path, exist_ok=True) + jar_file = os.path.join(os.path.dirname(__file__), './jars/bdys.jar') + jar_file = Path(jar_file).as_posix() + need_down = False + msg = '' + if not gParam['inited'] and not os.path.exists(jar_file): + need_down = True + msg = f'未inited,且文件不存在。开始下载文件' + elif gParam['inited'] and not os.path.exists(jar_file): + need_down = True + msg = f'已inited,但文件不存在。开始下载文件' + # elif not gParam['inited'] and os.path.exists(jar_file): + # need_down = True + # msg = f'未inited,但文件已存在。重新下载文件' + + if need_down: + self.log(msg) + content = self.get_init_api(ext) + with open(jar_file, mode='wb+') as f: + f.write(content) # 装载模块,这里只要一个就够了 if isinstance(extend, list): @@ -126,6 +138,8 @@ class Spider(BaseSpider): # 元类 默认的元类 type self.token = str(self.class1.getToken()) self.headers.update({'token': self.token}) + gParam['inited'] = True + def isVideoFormat(self, url): pass