修改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:
1 parent
1b4791f1c5
commit
ccbda173e3
4 files changed
+24
-30
No files matched your search
@@ -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
@@ -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
@@ -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
@@ -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目录下
|
||||
|
||||
Reference in new issue
Block a user