修改downloaded_processor所在位置与增加返回参数(下播时间和视频列表) (#563)

* 修改downloaded_processor所在位置与增加返回参数(下播时间和视频列表)

* 删除多余的输出

* 修改upload_list的初始化位置

* downloaded_processor上移

* 补充toml配置downloaded_processor的等号

---------

Co-authored-by: CoolZxp <54017765+CoolZxp@users.noreply.github.com>
This commit is contained in:
KataickandCoolZxp authored and GitHub committed 2023-07-29 19:18:52 +00:00
1 parent 1b4791f1c5
commit ccbda173e3
4 files changed
+24 -30

No files matched your search

+3 -20
View File
@@ -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
+16 -5
View File
@@ -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:
+3 -3
View File
@@ -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 = [
+2 -2
View File
@@ -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目录下