From 3a39e9ecba8ba57c467f964d84b682daacef51fc Mon Sep 17 00:00:00 2001 From: zhbaor Date: Tue, 29 Apr 2025 17:05:43 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Support=20pages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- badl/manager/__init__.py | 4 +++- badl/video/__init__.py | 28 +++++++++++++++++++--------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/badl/manager/__init__.py b/badl/manager/__init__.py index a4a79ba..152bd57 100644 --- a/badl/manager/__init__.py +++ b/badl/manager/__init__.py @@ -16,7 +16,9 @@ class Manager: def get_info_worker(self): while not self.queue.empty(): video: Video = self.queue.get() - video.get_info() + idx = self.video_list.index(video) + plist = video.get_info() + self.video_list = self.video_list[:idx] + plist + self.video_list[idx + 1 :] sleep(1) def add_videos_by_number(self, video_numbers: list[str]): diff --git a/badl/video/__init__.py b/badl/video/__init__.py index 54d1827..4b0e01b 100644 --- a/badl/video/__init__.py +++ b/badl/video/__init__.py @@ -1,7 +1,11 @@ -from .exceptions import * -from bilibili_api import video, sync -from httpx import stream +from copy import deepcopy from os import PathLike +from typing import Self + +from bilibili_api import sync, video +from httpx import stream + +from .exceptions import * HEADERS = { "User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/110.0", @@ -10,10 +14,11 @@ HEADERS = { class Video: - def __init__(self, video_number: str): + def __init__(self, video_number: str, page: int = 0): self.title = None self.received_bytes = 0 self.length = 0 + self.page = page video_number = video_number.strip() if len(video_number) <= 2: raise InvalidVideoNumberException( @@ -34,17 +39,22 @@ class Video: self.number = "BV" + video_number[2:] self.v = video.Video(bvid=self.number) - def get_info(self): + def get_info(self) -> list[Self]: try: - info = sync(self.v.get_info()) - print(sync(self.v.get_pages())) + info = sync(self.v.get_pages()) except: raise BiliBiliAPIException("Error happens with bilibili-api-python.") - self.title = info["title"] + result = [] + for i in info: + v = deepcopy(self) + v.title = i["part"] + v.page = i["page"] - 1 + result.append(v) + return result def get_url(self): try: - download_url_data = sync(self.v.get_download_url(0)) + download_url_data = sync(self.v.get_download_url(self.page)) detecter = video.VideoDownloadURLDataDetecter(data=download_url_data) streams = detecter.detect_best_streams() except: