From ccbda173e3baa00f55d66263fbb58c3dd0126ee0 Mon Sep 17 00:00:00 2001 From: Kataick <24969684+Kataick@users.noreply.github.com> Date: Sun, 30 Jul 2023 03:18:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9downloaded=5Fprocessor?= =?UTF-8?q?=E6=89=80=E5=9C=A8=E4=BD=8D=E7=BD=AE=E4=B8=8E=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E5=8F=82=E6=95=B0(=E4=B8=8B=E6=92=AD?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E5=92=8C=E8=A7=86=E9=A2=91=E5=88=97=E8=A1=A8?= =?UTF-8?q?)=20(#563)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 修改downloaded_processor所在位置与增加返回参数(下播时间和视频列表) * 删除多余的输出 * 修改upload_list的初始化位置 * downloaded_processor上移 * 补充toml配置downloaded_processor的等号 --------- Co-authored-by: CoolZxp <54017765+CoolZxp@users.noreply.github.com> --- biliup/engine/download.py | 23 +++-------------------- biliup/handler.py | 21 ++++++++++++++++----- public/config.toml | 6 +++--- public/config.yaml | 4 ++-- 4 files changed, 24 insertions(+), 30 deletions(-) diff --git a/biliup/engine/download.py b/biliup/engine/download.py index 0458c1a..fba95a5 100644 --- a/biliup/engine/download.py +++ b/biliup/engine/download.py @@ -207,7 +207,7 @@ class DownloadBase: else: if retry_count < 3: retry_count += 1 - logger.info(f'获取流失败:{self.__class__.__name__} - {self.fname},将在 10 秒后重试,重试次数 {retry_count} / 3') + logger.info(f'获取流失败:{self.__class__.__name__} - {self.fname},重试次数 {retry_count} / 3,等待 10 秒') time.sleep(10) continue if self.is_download: @@ -217,7 +217,7 @@ class DownloadBase: if delay: retry_count_delay += 1 if retry_count_delay > delay_all_retry_count: - # logger.info(f'下播延迟检测结束:{self.__class__.__name__}:{self.fname}') + logger.info(f'下播延迟检测结束:{self.__class__.__name__}:{self.fname}') break else: if delay < 60: @@ -269,9 +269,6 @@ class DownloadBase: logger.exception(f'封面下载失败:{self.__class__.__name__} - {self.fname}') logger.info(f'退出下载:{self.__class__.__name__} - {self.fname}') - if config['streamers'].get(self.fname, {}).get('downloaded_processor'): - downloaded_processor(config['streamers'].get(self.fname, {}).get('downloaded_processor'), - f'{{"name": "{self.fname}", "url": "{self.url}", "room_title": "{self.room_title}", "start_time": "{time.strftime("%Y-%m-%d %H:%M:%S", date)}"}}') return { 'name': self.fname, 'url': self.url, @@ -341,18 +338,4 @@ def get_valid_filename(name): s = re.sub(r"(?u)[^-\w.%{}\[\]【】「」\s]", "", str(name)) if s in {"", ".", ".."}: raise RuntimeError("Could not derive file name from '%s'" % name) - return s - - -def downloaded_processor(processors, data): - for processor in processors: - if processor.get('run'): - try: - process_output = subprocess.check_output( - processor['run'], shell=True, - input=data, - stderr=subprocess.STDOUT, text=True) - logger.info(process_output.rstrip()) - except subprocess.CalledProcessError as e: - logger.exception(e.output) - continue + return s \ No newline at end of file diff --git a/biliup/handler.py b/biliup/handler.py index 8861115..e78a64e 100644 --- a/biliup/handler.py +++ b/biliup/handler.py @@ -1,6 +1,7 @@ import copy import logging import subprocess +import time from . import plugins from .downloader import download @@ -8,6 +9,7 @@ from .engine import invert_dict, Plugin from biliup.config import config from .engine.event import Event, EventManager from .uploader import upload +from .engine.upload import UploadBase TO_MODIFY = 'to_modify' DOWNLOAD = 'download' @@ -43,6 +45,11 @@ def process(name, url): 'name': name, 'url': url, } + + start_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + if config['streamers'].get(name, {}).get('preprocessor'): + processor(config['streamers'].get(name, {}).get('preprocessor'), f'{{"name": "{name}", "url": "{url}", "start_time": "{start_time}"}}') + url_status = event_manager.context['url_status'] # 下载开始 url_status[url] = 1 @@ -53,6 +60,13 @@ def process(name, url): if suffix: kwargs['suffix'] = suffix stream_info = download(name, url, **kwargs) + + + video_list = [file.video for file in UploadBase.file_list(stream_info['name'])] + + if config['streamers'].get(name, {}).get('downloaded_processor'): + processor(config['streamers'].get(name, {}).get('downloaded_processor'), + f'{{"name": "{name}", "url": "{url}", "room_title": "{stream_info.get("title", "")}", "start_time": "{start_time}", "end_time": "{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())}", "file_list": "{video_list}"}}') finally: # 下载结束 url_status[url] = 0 @@ -90,11 +104,8 @@ class KernelFunc: # ????? logger.debug('无人直播') return - name = self.inverted_index[url] - if config['streamers'].get(name, {}).get('preprocessor'): - preprocessor(config['streamers'].get(name, {}).get('preprocessor'), f'{{"name": "{name}", "url": "{url}"}}') - logger.debug(f'{name}刚刚开播,去下载') + logger.debug(f'{name} 刚刚开播,去下载') return Event(DOWNLOAD, args=(name, url)) def get_url_status(self): @@ -110,7 +121,7 @@ class KernelFunc: return url_status -def preprocessor(processors, data): +def processor(processors, data): for processor in processors: if processor.get('run'): try: diff --git a/public/config.toml b/public/config.toml index d527444..291f7a3 100644 --- a/public/config.toml +++ b/public/config.toml @@ -216,11 +216,11 @@ tags = [ "biliup", "视频标签" ] #format = "mp4" ### 视频保存格式。如需使用mp4格式,必须切换downloader为ffmpeg或者streamlink。 ### 开始下载直播时触发,将按自定义顺序执行自定义操作 注:preprocessor仅支持shell指令 #preprocessor = [ -# {run = "sh ./run.sh"}, ### 执行任意命令,等同于在shell中运行,preprocessor输出的数据为JSON格式,包含主播名字(name)和开播地址(url)信息 +# {run = "sh ./run.sh"}, ### 执行任意命令,等同于在shell中运行,preprocessor输出的数据为JSON格式,包含主播名字(name)、开播地址(url)和开播时间(start_time) #] ### 结束下载直播时触发,将按自定义顺序执行自定义操作 注:downloaded_processor仅支持shell指令 -#downloaded_processor[ -# {run = "sh ./run.sh"}, ### 执行任意命令,等同于在shell中运行,downloaded_processor输出的数据为JSON格式,包含主播名字(name)、直播间地址(url)、直播间标题(room_title)以及开播时间(start_time)信息 +#downloaded_processor = [ +# {run = "sh ./run.sh"}, ### 执行任意命令,等同于在shell中运行,downloaded_processor输出的数据为JSON格式,包含主播名字(name)、直播间地址(url)、直播间标题(room_title)、开播时间(start_time)、下播时间(end_time)和视频列表(file_list) #] ### 上传完成后触发,将按自定义顺序执行自定义操作 当postprocessor不存在时 默认执行删除文件操作 #postprocessor = [ diff --git a/public/config.yaml b/public/config.yaml index e395954..e8ac9d0 100644 --- a/public/config.yaml +++ b/public/config.yaml @@ -212,9 +212,9 @@ streamers: - biliup - 视频标签 #preprocessor: ### 开始下载直播时触发,将按自定义顺序执行自定义操作 注:preprocessor仅支持shell指令 - #- run: sh ./run.sh, ### 执行任意命令,等同于在shell中运行,preprocessor输出的数据为JSON格式,包含主播名字(name)和开播地址(url)信息 + #- run: sh ./run.sh, ### 执行任意命令,等同于在shell中运行,preprocessor输出的数据为JSON格式,包含主播名字(name)、开播地址(url)和开播时间(start_time) #downloaded_processor: ### 结束下载直播时触发,将按自定义顺序执行自定义操作 注:downloaded_processor仅支持shell指令 - # - run: sh ./run.sh, ### 执行任意命令,等同于在shell中运行,downloaded_processor输出的数据为JSON格式,包含主播名字(name)、直播间地址(url)、直播间标题(room_title)以及开播时间(start_time)信息 + # - run: sh ./run.sh, ### 执行任意命令,等同于在shell中运行,downloaded_processor输出的数据为JSON格式,包含主播名字(name)、直播间地址(url)、直播间标题(room_title)、开播时间(start_time)、下播时间(end_time)和视频列表(file_list) #postprocessor: ### 上传完成后触发,将按自定义顺序执行自定义操作 当postprocessor不存在时 默认执行删除文件操作 # - run: echo hello! ### 执行任意命令,等同于在shell中运行,视频文件路径作为标准输入传入 # - mv: backup/ ### 移动文件到backup目录下