From a9fd23df9befc706db772b44ea334726d87aa5a8 Mon Sep 17 00:00:00 2001 From: ForgQi <34411314+ForgQi@users.noreply.github.com> Date: Wed, 1 Mar 2023 02:09:44 +0800 Subject: [PATCH] Reduce unnecessary levels --- biliup/engine/download.py | 22 ++- biliup/plugins/Danmaku/__init__.py | 136 ++++++++++++++++++ biliup/plugins/Danmaku/{src => }/bilibili.py | 0 biliup/plugins/Danmaku/danmaku_main.py | 53 ------- biliup/plugins/Danmaku/{src => }/douyu.py | 0 biliup/plugins/Danmaku/{src => }/huya.py | 0 biliup/plugins/Danmaku/src/__init__.py | 136 ------------------ .../Danmaku/{src => }/tars/EndpointF.py | 2 +- .../plugins/Danmaku/{src => }/tars/QueryF.py | 0 .../Danmaku/{src => }/tars/__TimeoutQueue.py | 0 .../Danmaku/{src => }/tars/__adapterproxy.py | 0 .../plugins/Danmaku/{src => }/tars/__async.py | 6 +- .../Danmaku/{src => }/tars/__init__.py | 0 .../Danmaku/{src => }/tars/__logger.py | 0 .../Danmaku/{src => }/tars/__packet.py | 0 .../plugins/Danmaku/{src => }/tars/__rpc.py | 0 .../Danmaku/{src => }/tars/__servantproxy.py | 12 +- .../plugins/Danmaku/{src => }/tars/__tars.py | 0 .../plugins/Danmaku/{src => }/tars/__trans.py | 0 .../plugins/Danmaku/{src => }/tars/__tup.py | 0 .../plugins/Danmaku/{src => }/tars/__util.py | 0 biliup/plugins/Danmaku/{src => }/tars/core.py | 8 +- .../Danmaku/{src => }/tars/exception.py | 0 .../{src => }/tars/tars/EndpointF.tars | 0 .../Danmaku/{src => }/tars/tars/QueryF.tars | 0 .../Danmaku/{src => }/tars/tars/__init__.py | 0 biliup/plugins/bilibili.py | 26 ++-- biliup/plugins/douyu.py | 24 ++-- biliup/plugins/huya.py | 18 +-- 29 files changed, 192 insertions(+), 251 deletions(-) rename biliup/plugins/Danmaku/{src => }/bilibili.py (100%) delete mode 100644 biliup/plugins/Danmaku/danmaku_main.py rename biliup/plugins/Danmaku/{src => }/douyu.py (100%) rename biliup/plugins/Danmaku/{src => }/huya.py (100%) delete mode 100644 biliup/plugins/Danmaku/src/__init__.py rename biliup/plugins/Danmaku/{src => }/tars/EndpointF.py (97%) rename biliup/plugins/Danmaku/{src => }/tars/QueryF.py (100%) rename biliup/plugins/Danmaku/{src => }/tars/__TimeoutQueue.py (100%) rename biliup/plugins/Danmaku/{src => }/tars/__adapterproxy.py (100%) rename biliup/plugins/Danmaku/{src => }/tars/__async.py (96%) rename biliup/plugins/Danmaku/{src => }/tars/__init__.py (100%) rename biliup/plugins/Danmaku/{src => }/tars/__logger.py (100%) rename biliup/plugins/Danmaku/{src => }/tars/__packet.py (100%) rename biliup/plugins/Danmaku/{src => }/tars/__rpc.py (100%) rename biliup/plugins/Danmaku/{src => }/tars/__servantproxy.py (96%) rename biliup/plugins/Danmaku/{src => }/tars/__tars.py (100%) rename biliup/plugins/Danmaku/{src => }/tars/__trans.py (100%) rename biliup/plugins/Danmaku/{src => }/tars/__tup.py (100%) rename biliup/plugins/Danmaku/{src => }/tars/__util.py (100%) rename biliup/plugins/Danmaku/{src => }/tars/core.py (87%) rename biliup/plugins/Danmaku/{src => }/tars/exception.py (100%) rename biliup/plugins/Danmaku/{src => }/tars/tars/EndpointF.tars (100%) rename biliup/plugins/Danmaku/{src => }/tars/tars/QueryF.tars (100%) rename biliup/plugins/Danmaku/{src => }/tars/tars/__init__.py (100%) diff --git a/biliup/engine/download.py b/biliup/engine/download.py index 8f3696d..4f5e72e 100644 --- a/biliup/engine/download.py +++ b/biliup/engine/download.py @@ -1,16 +1,16 @@ +import asyncio import logging import os import re import subprocess import sys +import threading import time +from urllib.parse import urlparse import stream_gears from biliup.config import config -from urllib.parse import urlparse - -from biliup.plugins.Danmaku.danmaku_main import Danmaku logger = logging.getLogger('biliup') @@ -63,11 +63,13 @@ class DownloadBase: else: filename = f'{self.fname}%Y-%m-%dT%H_%M_%S' filename = get_valid_filename(filename) + fmtname = time.strftime(filename.encode("unicode-escape").decode()).encode().decode("unicode-escape") + threading.Thread(target=asyncio.run, args=(self.danmaku_download_start(fmtname),)).start() if self.downloader == 'stream-gears': stream_gears_download(self.raw_stream_url, self.fake_headers, filename, config.get('segment_time'), config.get('file_size')) else: - self.ffmpeg_download(filename) + self.ffmpeg_download(fmtname) def ffmpeg_download(self, filename): default_input_args = ['-headers', ''.join('%s: %s\r\n' % x for x in self.fake_headers.items()), @@ -81,13 +83,12 @@ class DownloadBase: '-c', 'copy', '-f', self.suffix] if config.get('segment_time'): args += ['-f', 'segment', - f'{(time.strftime(filename).encode("unicode-escape").decode()).encode().decode("unicode-escape")} part-%03d.{self.suffix}'] + f'{filename} part-%03d.{self.suffix}'] else: args += [ - f'{(time.strftime(filename).encode("unicode-escape").decode()).encode().decode("unicode-escape")}.{self.suffix}.part'] + f'{filename}.{self.suffix}.part'] proc = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - self.danmaku_download_start(filename) try: with proc.stdout as stdout: for line in iter(stdout.readline, b''): # b'\n'-separated lines @@ -95,18 +96,13 @@ class DownloadBase: print(decode_line, end='', file=sys.stderr) logger.debug(decode_line.rstrip()) retval = proc.wait() - self.danmaku_download_stop() except KeyboardInterrupt: - self.danmaku_download_stop() if sys.platform != 'win32': proc.communicate(b'q') raise return retval - def danmaku_download_start(self, filename): - pass - - def danmaku_download_stop(self): + async def danmaku_download_start(self, filename): pass def run(self): diff --git a/biliup/plugins/Danmaku/__init__.py b/biliup/plugins/Danmaku/__init__.py index 8b13789..ce5bf64 100644 --- a/biliup/plugins/Danmaku/__init__.py +++ b/biliup/plugins/Danmaku/__init__.py @@ -1 +1,137 @@ +# 部分弹幕功能代码来自项目:https://github.com/IsoaSFlus/danmaku,感谢大佬 +# 快手弹幕代码来源及思路:https://github.com/py-wuhao/ks_barrage,感谢大佬 +# 仅抓取用户弹幕,不包括入场提醒、礼物赠送等。 +import asyncio +import os +import re +import ssl +import time + +import lxml.etree as etree +import aiofiles +import aiohttp + +from biliup.plugins.Danmaku.douyu import Douyu +from biliup.plugins.Danmaku.huya import Huya +from biliup.plugins.Danmaku.bilibili import Bilibili + +__all__ = ['DanmakuClient'] + + +class DanmakuClient: + def __init__(self, url, filename): + self.__starttime = time.time() + self.__filename = filename + self.__url = '' + self.__site = None + self.__hs = None + self.__ws = None + self.__stop = False + self.__dm_queue = None + self.__link_status = True + + if 'http://' == url[:7] or 'https://' == url[:8]: + self.__url = url + else: + self.__url = 'http://' + url + for u, s in {'douyu.com': Douyu, 'huya.com': Huya, 'live.bilibili.com': Bilibili}.items(): + if re.match(r'^(?:http[s]?://)?.*?%s/(.+?)$' % u, url): + self.__site = s + self.__u = u + break + if self.__site is None: + print('Invalid link!') + exit() + + async def init_ws(self): + ws_url, reg_datas = await self.__site.get_ws_info(self.__url) + ctx = ssl.create_default_context() + ctx.set_ciphers('DEFAULT') + self.__ws = await self.__hs.ws_connect(ws_url, ssl_context=ctx) + if reg_datas: + for reg_data in reg_datas: + await self.__ws.send_bytes(reg_data) + if not os.path.exists(self.__filename): + async with aiofiles.open(self.__filename, mode='w') as f: + await f.write("\n" + "\n" + "" + ) + + async def heartbeats(self): + while not self.__stop and self.__site.heartbeat: + await asyncio.sleep(self.__site.heartbeatInterval) + try: + await self.__ws.send_bytes(self.__site.heartbeat) + except Exception as Error: + print(f"捕获到异常:{Error}") + await self.__hs.close() + + async def fetch_danmaku(self): + # while not self.__stop: + await asyncio.sleep(1) + await self.init_ws() + await asyncio.sleep(1) + async for msg in self.__ws: + if self.__stop: + await self.__dm_queue.put(None) + return + self.__link_status = True + ms = self.__site.decode_msg(msg.data) + for m in ms: + await self.__dm_queue.put(m) + + async def print_danmaku(self): + parser = etree.XMLParser(recover=True) + tree = etree.parse(self.__filename, parser=parser) + root = tree.getroot() + msg_i = 0 + msg_col = {'0': '16777215', '1': '16717077', '2': '2000880', '3': '8046667', '4': '16744192', '5': '10172916', + '6': '16738740'} + while not self.__stop: + try: + m = await self.__dm_queue.get() + if m is None: + return + # print(m) + if m['msg_type'] == 'danmaku': + d = etree.SubElement(root, 'd') + if 'col' in m: + color = msg_col[m["col"]] + elif 'color' in m: + color = m["color"] + # else: + # color = '16777215' + msg_time = format(time.time() - self.__starttime, '.3f') + d.set('p', f"{msg_time},1,25,{color},0,0,0,0") + d.text = m["content"] + + if msg_i >= 5: + etree.indent(root, "\t") + tree.write(self.__filename, encoding="UTF-8", xml_declaration=True, pretty_print=True) + msg_i = 0 + else: + msg_i = msg_i + 1 + + except Exception as Error: + print(f"捕获到异常:{Error}") + + async def start(self): + self.__dm_queue = asyncio.Queue() + self.__hs = aiohttp.ClientSession() + await self.init_ws() + await asyncio.gather( + self.heartbeats(), + self.fetch_danmaku(), + self.print_danmaku(), + ) + print("弹幕录制结束") + + def stop(self): + self.__stop = True + + + +# 虎牙直播:https://www.huya.com/lpl +# 斗鱼直播:https://www.douyu.com/9999 \ No newline at end of file diff --git a/biliup/plugins/Danmaku/src/bilibili.py b/biliup/plugins/Danmaku/bilibili.py similarity index 100% rename from biliup/plugins/Danmaku/src/bilibili.py rename to biliup/plugins/Danmaku/bilibili.py diff --git a/biliup/plugins/Danmaku/danmaku_main.py b/biliup/plugins/Danmaku/danmaku_main.py deleted file mode 100644 index 582e0b3..0000000 --- a/biliup/plugins/Danmaku/danmaku_main.py +++ /dev/null @@ -1,53 +0,0 @@ -# 部分弹幕功能代码来自项目:https://github.com/IsoaSFlus/danmaku,感谢大佬 -# 快手弹幕代码来源及思路:https://github.com/py-wuhao/ks_barrage,感谢大佬 -# 仅抓取用户弹幕,不包括入场提醒、礼物赠送等。 - -import asyncio -import queue -import threading -import time -from concurrent.futures import ThreadPoolExecutor - -from biliup.plugins.Danmaku import src - -# stop_queue = asyncio.Queue() -# url_o = '' -# filename = '' - - -# def thread_danmaku(loop): -# asyncio.set_event_loop(loop) -# dmc = src.DanmakuClient(url_o, stop_queue, filename) -# loop.run_until_complete(dmc.start()) -# -# -# async def danmaku_main(url): -# global url_o -# url_o = url -# executor1 = ThreadPoolExecutor(max_workers=1) -# loop = asyncio.new_event_loop() -# loop.run_in_executor(executor1, thread_danmaku, loop) -# input("输入回车停止运行:\n") -# await stop_queue.put(True) - - -class Danmaku(threading.Thread): - def __init__(self, filename, url): - threading.Thread.__init__(self) - self.stop_queue = asyncio.Queue() - self.url_ = url - self.filename = f"{time.strftime(filename)}.xml" - - def run(self): - loop = asyncio.new_event_loop() - asyncio.set_event_loop(loop) - dmc = src.DanmakuClient(self.url_, self.filename, self.stop_queue) - loop.create_task(dmc.start()) - loop.run_forever() - - async def stop(self): - await self.stop_queue.put(True) - - -# 虎牙直播:https://www.huya.com/lpl -# 斗鱼直播:https://www.douyu.com/9999 diff --git a/biliup/plugins/Danmaku/src/douyu.py b/biliup/plugins/Danmaku/douyu.py similarity index 100% rename from biliup/plugins/Danmaku/src/douyu.py rename to biliup/plugins/Danmaku/douyu.py diff --git a/biliup/plugins/Danmaku/src/huya.py b/biliup/plugins/Danmaku/huya.py similarity index 100% rename from biliup/plugins/Danmaku/src/huya.py rename to biliup/plugins/Danmaku/huya.py diff --git a/biliup/plugins/Danmaku/src/__init__.py b/biliup/plugins/Danmaku/src/__init__.py deleted file mode 100644 index 32b79b4..0000000 --- a/biliup/plugins/Danmaku/src/__init__.py +++ /dev/null @@ -1,136 +0,0 @@ -import asyncio -import json -import os -import queue -import re -import ssl -import time - -import lxml.etree as etree -import aiofiles -import aiohttp - -from .douyu import Douyu -from .huya import Huya -from .bilibili import Bilibili - -__all__ = ['DanmakuClient'] - - -class DanmakuClient: - def __init__(self, url, filename, stop_queue): - self.__starttime = time.time() - self.__filename = filename - self.__url = '' - self.__site = None - self.__hs = None - self.__ws = None - self.__stop = False - self.__dm_queue = asyncio.Queue() - self.__link_status = True - self.__stop_queue = stop_queue - - if 'http://' == url[:7] or 'https://' == url[:8]: - self.__url = url - else: - self.__url = 'http://' + url - for u, s in {'douyu.com': Douyu, 'huya.com': Huya, 'live.bilibili.com': Bilibili}.items(): - if re.match(r'^(?:http[s]?://)?.*?%s/(.+?)$' % u, url): - self.__site = s - self.__u = u - break - if self.__site is None: - print('Invalid link!') - exit() - self.__hs = aiohttp.ClientSession() - - async def init_ws(self): - ws_url, reg_datas = await self.__site.get_ws_info(self.__url) - ctx = ssl.create_default_context() - ctx.set_ciphers('DEFAULT') - self.__ws = await self.__hs.ws_connect(ws_url, ssl_context=ctx) - if reg_datas: - for reg_data in reg_datas: - await self.__ws.send_bytes(reg_data) - if not os.path.exists(self.__filename): - async with aiofiles.open(self.__filename, mode='w') as f: - await f.write("\n" - "\n" - "" - ) - - async def heartbeats(self): - while not self.__stop and self.__site.heartbeat: - await asyncio.sleep(self.__site.heartbeatInterval) - try: - await self.__ws.send_bytes(self.__site.heartbeat) - except Exception as Error: - print(f"捕获到异常:{Error}") - - async def fetch_danmaku(self): - while not self.__stop: - async for msg in self.__ws: - self.__link_status = True - ms = self.__site.decode_msg(msg.data) - for m in ms: - await self.__dm_queue.put(m) - await asyncio.sleep(1) - await self.init_ws() - await asyncio.sleep(1) - - async def print_danmaku(self): - parser = etree.XMLParser(recover=True) - tree = etree.parse(self.__filename, parser=parser) - root = tree.getroot() - msg_i = 0 - msg_col = {'0': '16777215', '1': '16717077', '2': '2000880', '3': '8046667', '4': '16744192', '5': '10172916', - '6': '16738740'} - while not self.__stop: - try: - m = await self.__dm_queue.get() - # print(m) - if m['msg_type'] == 'danmaku': - d = etree.SubElement(root, 'd') - if 'col' in m: - color = msg_col[m["col"]] - elif 'color' in m: - color = m["color"] - # else: - # color = '16777215' - msg_time = format(time.time() - self.__starttime, '.3f') - d.set('p', f"{msg_time},1,25,{color},0,0,0,0") - d.text = m["content"] - - if msg_i >= 5: - etree.indent(root, "\t") - tree.write(self.__filename, encoding="UTF-8", xml_declaration=True, pretty_print=True) - msg_i = 0 - else: - msg_i = msg_i + 1 - - except Exception as Error: - print(f"捕获到异常:{Error}") - - async def start(self): - await self.init_ws() - await asyncio.gather( - self.heartbeats(), - self.fetch_danmaku(), - self.print_danmaku(), - self.stop_check(), - ) - - async def stop(self): - await self.__hs.close() - self.__stop = True - - async def stop_check(self): - while True: - await asyncio.sleep(1) - try: - stop_tag = self.__stop_queue.get_nowait() - if stop_tag: - await self.stop() - break - except asyncio.QueueEmpty: - pass diff --git a/biliup/plugins/Danmaku/src/tars/EndpointF.py b/biliup/plugins/Danmaku/tars/EndpointF.py similarity index 97% rename from biliup/plugins/Danmaku/src/tars/EndpointF.py rename to biliup/plugins/Danmaku/tars/EndpointF.py index 9ea27bb..4d61b12 100644 --- a/biliup/plugins/Danmaku/src/tars/EndpointF.py +++ b/biliup/plugins/Danmaku/tars/EndpointF.py @@ -13,7 +13,7 @@ # specific language governing permissions and limitations under the License. # -from biliup.plugins.Danmaku.src.tars.core import tarscore +from biliup.plugins.Danmaku.tars.core import tarscore class EndpointF(tarscore.struct): diff --git a/biliup/plugins/Danmaku/src/tars/QueryF.py b/biliup/plugins/Danmaku/tars/QueryF.py similarity index 100% rename from biliup/plugins/Danmaku/src/tars/QueryF.py rename to biliup/plugins/Danmaku/tars/QueryF.py diff --git a/biliup/plugins/Danmaku/src/tars/__TimeoutQueue.py b/biliup/plugins/Danmaku/tars/__TimeoutQueue.py similarity index 100% rename from biliup/plugins/Danmaku/src/tars/__TimeoutQueue.py rename to biliup/plugins/Danmaku/tars/__TimeoutQueue.py diff --git a/biliup/plugins/Danmaku/src/tars/__adapterproxy.py b/biliup/plugins/Danmaku/tars/__adapterproxy.py similarity index 100% rename from biliup/plugins/Danmaku/src/tars/__adapterproxy.py rename to biliup/plugins/Danmaku/tars/__adapterproxy.py diff --git a/biliup/plugins/Danmaku/src/tars/__async.py b/biliup/plugins/Danmaku/tars/__async.py similarity index 96% rename from biliup/plugins/Danmaku/src/tars/__async.py rename to biliup/plugins/Danmaku/tars/__async.py index 5bb0b01..5ae90a8 100644 --- a/biliup/plugins/Danmaku/src/tars/__async.py +++ b/biliup/plugins/Danmaku/tars/__async.py @@ -27,9 +27,9 @@ import threading from urllib3.connectionpool import xrange -from biliup.plugins.Danmaku.src.tars.__logger import tarsLogger -from biliup.plugins.Danmaku.src.tars.__packet import ResponsePacket -from biliup.plugins.Danmaku.src.tars.__servantproxy import ServantProxy +from biliup.plugins.Danmaku.tars.__logger import tarsLogger +from biliup.plugins.Danmaku.tars.__packet import ResponsePacket +from biliup.plugins.Danmaku.tars.__servantproxy import ServantProxy class AsyncProcThread: diff --git a/biliup/plugins/Danmaku/src/tars/__init__.py b/biliup/plugins/Danmaku/tars/__init__.py similarity index 100% rename from biliup/plugins/Danmaku/src/tars/__init__.py rename to biliup/plugins/Danmaku/tars/__init__.py diff --git a/biliup/plugins/Danmaku/src/tars/__logger.py b/biliup/plugins/Danmaku/tars/__logger.py similarity index 100% rename from biliup/plugins/Danmaku/src/tars/__logger.py rename to biliup/plugins/Danmaku/tars/__logger.py diff --git a/biliup/plugins/Danmaku/src/tars/__packet.py b/biliup/plugins/Danmaku/tars/__packet.py similarity index 100% rename from biliup/plugins/Danmaku/src/tars/__packet.py rename to biliup/plugins/Danmaku/tars/__packet.py diff --git a/biliup/plugins/Danmaku/src/tars/__rpc.py b/biliup/plugins/Danmaku/tars/__rpc.py similarity index 100% rename from biliup/plugins/Danmaku/src/tars/__rpc.py rename to biliup/plugins/Danmaku/tars/__rpc.py diff --git a/biliup/plugins/Danmaku/src/tars/__servantproxy.py b/biliup/plugins/Danmaku/tars/__servantproxy.py similarity index 96% rename from biliup/plugins/Danmaku/src/tars/__servantproxy.py rename to biliup/plugins/Danmaku/tars/__servantproxy.py index 5c66712..fa22c99 100644 --- a/biliup/plugins/Danmaku/src/tars/__servantproxy.py +++ b/biliup/plugins/Danmaku/tars/__servantproxy.py @@ -26,12 +26,12 @@ import threading import time # from __packet import ResponsePacket -from biliup.plugins.Danmaku.src.tars.__TimeoutQueue import ReqMessage -from biliup.plugins.Danmaku.src.tars.__logger import tarsLogger -from biliup.plugins.Danmaku.src.tars.__packet import RequestPacket -from biliup.plugins.Danmaku.src.tars.__util import util -from biliup.plugins.Danmaku.src.tars import exception -from biliup.plugins.Danmaku.src.tars.exception import TarsException +from biliup.plugins.Danmaku.tars.__TimeoutQueue import ReqMessage +from biliup.plugins.Danmaku.tars.__logger import tarsLogger +from biliup.plugins.Danmaku.tars.__packet import RequestPacket +from biliup.plugins.Danmaku.tars.__util import util +from biliup.plugins.Danmaku.tars import exception +from biliup.plugins.Danmaku.tars.exception import TarsException class ServantProxy(object): diff --git a/biliup/plugins/Danmaku/src/tars/__tars.py b/biliup/plugins/Danmaku/tars/__tars.py similarity index 100% rename from biliup/plugins/Danmaku/src/tars/__tars.py rename to biliup/plugins/Danmaku/tars/__tars.py diff --git a/biliup/plugins/Danmaku/src/tars/__trans.py b/biliup/plugins/Danmaku/tars/__trans.py similarity index 100% rename from biliup/plugins/Danmaku/src/tars/__trans.py rename to biliup/plugins/Danmaku/tars/__trans.py diff --git a/biliup/plugins/Danmaku/src/tars/__tup.py b/biliup/plugins/Danmaku/tars/__tup.py similarity index 100% rename from biliup/plugins/Danmaku/src/tars/__tup.py rename to biliup/plugins/Danmaku/tars/__tup.py diff --git a/biliup/plugins/Danmaku/src/tars/__util.py b/biliup/plugins/Danmaku/tars/__util.py similarity index 100% rename from biliup/plugins/Danmaku/src/tars/__util.py rename to biliup/plugins/Danmaku/tars/__util.py diff --git a/biliup/plugins/Danmaku/src/tars/core.py b/biliup/plugins/Danmaku/tars/core.py similarity index 87% rename from biliup/plugins/Danmaku/src/tars/core.py rename to biliup/plugins/Danmaku/tars/core.py index 567e2ce..09c1e12 100644 --- a/biliup/plugins/Danmaku/src/tars/core.py +++ b/biliup/plugins/Danmaku/tars/core.py @@ -19,10 +19,10 @@ __version__ = "0.0.1" -from biliup.plugins.Danmaku.src.tars.__tars import TarsInputStream -from biliup.plugins.Danmaku.src.tars.__tars import TarsOutputStream -from biliup.plugins.Danmaku.src.tars.__tup import TarsUniPacket -from biliup.plugins.Danmaku.src.tars.__util import util +from biliup.plugins.Danmaku.tars.__tars import TarsInputStream +from biliup.plugins.Danmaku.tars.__tars import TarsOutputStream +from biliup.plugins.Danmaku.tars.__tup import TarsUniPacket +from biliup.plugins.Danmaku.tars.__util import util class tarscore: diff --git a/biliup/plugins/Danmaku/src/tars/exception.py b/biliup/plugins/Danmaku/tars/exception.py similarity index 100% rename from biliup/plugins/Danmaku/src/tars/exception.py rename to biliup/plugins/Danmaku/tars/exception.py diff --git a/biliup/plugins/Danmaku/src/tars/tars/EndpointF.tars b/biliup/plugins/Danmaku/tars/tars/EndpointF.tars similarity index 100% rename from biliup/plugins/Danmaku/src/tars/tars/EndpointF.tars rename to biliup/plugins/Danmaku/tars/tars/EndpointF.tars diff --git a/biliup/plugins/Danmaku/src/tars/tars/QueryF.tars b/biliup/plugins/Danmaku/tars/tars/QueryF.tars similarity index 100% rename from biliup/plugins/Danmaku/src/tars/tars/QueryF.tars rename to biliup/plugins/Danmaku/tars/tars/QueryF.tars diff --git a/biliup/plugins/Danmaku/src/tars/tars/__init__.py b/biliup/plugins/Danmaku/tars/tars/__init__.py similarity index 100% rename from biliup/plugins/Danmaku/src/tars/tars/__init__.py rename to biliup/plugins/Danmaku/tars/tars/__init__.py diff --git a/biliup/plugins/bilibili.py b/biliup/plugins/bilibili.py index c5b44b6..a4c5e39 100644 --- a/biliup/plugins/bilibili.py +++ b/biliup/plugins/bilibili.py @@ -1,12 +1,12 @@ -import asyncio +import os +import random +import re import requests -import os -import re -import random -from . import match1, logger + from biliup.config import config -from .Danmaku.danmaku_main import Danmaku +from . import match1, logger +from biliup.plugins.Danmaku import DanmakuClient from ..engine.decorators import Plugin from ..engine.download import DownloadBase @@ -132,15 +132,17 @@ class Bilibili(DownloadBase): break return True - def danmaku_download_start(self, filename): + async def danmaku_download_start(self, filename): if self.bilibili_danmaku: - self.danmaku = None - self.danmaku = Danmaku(filename, self.url) - self.danmaku.start() + logger.info("开始弹幕录制") + self.danmaku = DanmakuClient(self.url, filename + ".xml") + await self.danmaku.start() - def danmaku_download_stop(self): + def close(self): if self.bilibili_danmaku: - asyncio.run(self.danmaku.stop()) + self.danmaku.stop() + logger.info("结束弹幕录制") + # asyncio.run(self.danmaku.stop()) def get_play_info(s, custom_api, official_api_host, params): diff --git a/biliup/plugins/douyu.py b/biliup/plugins/douyu.py index 66d73f4..7d6b113 100644 --- a/biliup/plugins/douyu.py +++ b/biliup/plugins/douyu.py @@ -1,18 +1,13 @@ -import asyncio -import subprocess -import sys from collections import namedtuple -import time -from urllib.parse import urlparse import requests - from ykdl.util.match import match1 + from biliup.config import config +from biliup.plugins.Danmaku import DanmakuClient from ..engine.decorators import Plugin -from ..engine.download import DownloadBase, get_valid_filename, stream_gears_download +from ..engine.download import DownloadBase from ..plugins import logger -from .Danmaku.danmaku_main import Danmaku @Plugin.download(regexp=r'(?:https?://)?(?:(?:www|m)\.)?douyu\.com') @@ -62,12 +57,13 @@ class Douyu(DownloadBase): self.room_title = roominfo['room_name'] return True - def danmaku_download_start(self, filename): + async def danmaku_download_start(self, filename): if self.douyu_danmaku: - self.danmaku = None - self.danmaku = Danmaku(filename, self.url) - self.danmaku.start() + logger.info("开始弹幕录制") + self.danmaku = DanmakuClient(self.url, filename + ".xml") + await self.danmaku.start() - def danmaku_download_stop(self): + def close(self): if self.douyu_danmaku: - asyncio.run(self.danmaku.stop()) + self.danmaku.stop() + logger.info("结束弹幕录制") diff --git a/biliup/plugins/huya.py b/biliup/plugins/huya.py index 1496c47..3f76ec9 100644 --- a/biliup/plugins/huya.py +++ b/biliup/plugins/huya.py @@ -1,4 +1,3 @@ -import asyncio import base64 import html import json @@ -6,10 +5,10 @@ import json import requests from biliup.config import config -from .Danmaku.danmaku_main import Danmaku +from biliup.plugins.Danmaku import DanmakuClient from ..engine.decorators import Plugin -from ..plugins import match1, logger from ..engine.download import DownloadBase +from ..plugins import match1, logger @Plugin.download(regexp=r'(?:https?://)?(?:(?:www|m)\.)?huya\.com') @@ -53,12 +52,13 @@ class Huya(DownloadBase): self.room_title = json.loads(huya)['data'][0]['gameLiveInfo']['introduction'] return True - def danmaku_download_start(self, filename): + async def danmaku_download_start(self, filename): if self.huya_danmaku: - self.danmaku = None - self.danmaku = Danmaku(filename, self.url) - self.danmaku.start() + logger.info("开始弹幕录制") + self.danmaku = DanmakuClient(self.url, filename + ".xml") + await self.danmaku.start() - def danmaku_download_stop(self): + def close(self): if self.huya_danmaku: - asyncio.run(self.danmaku.stop()) \ No newline at end of file + self.danmaku.stop() + logger.info("结束弹幕录制") \ No newline at end of file