From 1fd4358a8786498fedc8d7cf2055cfa827a50546 Mon Sep 17 00:00:00 2001 From: EstrellaXD Date: Tue, 5 Jul 2022 16:24:21 +0800 Subject: [PATCH] 2.5.4 fix rename module --- auto_bangumi/ab_decorator/__init__.py | 23 ++++++++++ auto_bangumi/api.py | 3 +- auto_bangumi/downloader/qb_downloader.py | 2 + auto_bangumi/parser/analyser/bangumi_api.py | 27 ++++++++++++ auto_bangumi/parser/analyser/raw_parser.py | 44 ++++++++++++++++--- auto_bangumi/parser/analyser/rename_parser.py | 2 +- 6 files changed, 93 insertions(+), 8 deletions(-) create mode 100644 auto_bangumi/ab_decorator/__init__.py create mode 100644 auto_bangumi/parser/analyser/bangumi_api.py diff --git a/auto_bangumi/ab_decorator/__init__.py b/auto_bangumi/ab_decorator/__init__.py new file mode 100644 index 00000000..379a6e4c --- /dev/null +++ b/auto_bangumi/ab_decorator/__init__.py @@ -0,0 +1,23 @@ +import logging +import time + +import requests + +from conf import settings + + +logger = logging.getLogger(__name__) + + +def qb_connect_failed_wait(func): + def wrapper(*args, **kwargs): + times = 0 + while times < 5: + try: + return func(*args, **kwargs) + except Exception as e: + logger.debug(f"URL: {args[0]}") + logger.warning("Cannot connect to qBittorrent. Wait 5 min and retry...") + time.sleep(3) + times += 1 + return wrapper diff --git a/auto_bangumi/api.py b/auto_bangumi/api.py index 4aebd77f..3367d84f 100644 --- a/auto_bangumi/api.py +++ b/auto_bangumi/api.py @@ -94,8 +94,7 @@ class AddRule(BaseModel): @app.post("/api/v1/addrule") async def add_rule(info: AddRule): - - return "success" + return "Nothing Happened" def run(): diff --git a/auto_bangumi/downloader/qb_downloader.py b/auto_bangumi/downloader/qb_downloader.py index 738dbce0..a74307fe 100644 --- a/auto_bangumi/downloader/qb_downloader.py +++ b/auto_bangumi/downloader/qb_downloader.py @@ -5,12 +5,14 @@ from qbittorrentapi import Client, LoginFailed from qbittorrentapi.exceptions import Conflict409Error from conf import settings +from ab_decorator import qb_connect_failed_wait from downloader.exceptions import ConflictError logger = logging.getLogger(__name__) +@qb_connect_failed_wait class QbDownloader: def __init__(self, host, username, password): self._client = Client( diff --git a/auto_bangumi/parser/analyser/bangumi_api.py b/auto_bangumi/parser/analyser/bangumi_api.py new file mode 100644 index 00000000..604b0ce2 --- /dev/null +++ b/auto_bangumi/parser/analyser/bangumi_api.py @@ -0,0 +1,27 @@ +import re +import time + +from network import RequestContent +from conf import settings + + +class BangumiAPI: + def __init__(self): + self.search_url = lambda e: \ + f"https://api.bgm.tv/search/subject/{e}?type=2" + self.info_url = lambda e: \ + f"https://api.bgm.tv/subject/{e}" + self._request = RequestContent() + + def search(self, title): + url = self.search_url(title) + contents = self._request.get_json(url)["list"] + if contents.__len__() == 0: + return None + return contents[0]["name"], contents[0]["name_cn"] + + + +if __name__ == '__main__': + BGM = BangumiAPI() + print(BGM.search("辉夜大小姐")) \ No newline at end of file diff --git a/auto_bangumi/parser/analyser/raw_parser.py b/auto_bangumi/parser/analyser/raw_parser.py index f653f387..ee984598 100644 --- a/auto_bangumi/parser/analyser/raw_parser.py +++ b/auto_bangumi/parser/analyser/raw_parser.py @@ -6,7 +6,7 @@ logger = logging.getLogger(__name__) EPISODE_RE = re.compile(r"\d{1,3}") TITLE_RE = re.compile( - r"(.*|\[.*])( -? \d{1,3} |\[\d{1,3}]|\[\d{1,3}.?[vV]\d{1}]|[第]\d{1,3}[话話集]|\[\d{1,3}.?END])(.*)" + r"(.*|\[.*])( -? \d{1,3} |\[\d{1,3}]|\[\d{1,3}.?[vV]\d{1}]|[第]\d{1,3}[话話集]|\[\d{1,3}.?END]|)(.*)" ) RESOLUTION_RE = re.compile(r"1080|720|2160|4K") SOURCE_RE = re.compile(r"B-Global|[Bb]aha|[Bb]ilibili|AT-X|Web") @@ -27,7 +27,6 @@ CHINESE_NUMBER_MAP = { class RawParser: - @staticmethod def get_group(name: str) -> str: return re.split(r"[\[\]]", name)[1] @@ -94,7 +93,6 @@ class RawParser: elements = re.sub(r"[\[\]()()]", " ", other).split(" ") # find CHT sub, resolution, source = None, None, None - for element in filter(lambda x: x != "", elements): if SUB_RE.search(element): sub = element @@ -163,7 +161,43 @@ class RawParser: return info +class RawParserV2: + def __init__(self): + pass + + @staticmethod + def split_title(raw_title: str): + raw_title = raw_title.strip() + content_title = RawParser.pre_process(raw_title) + contents = re.split(r"[\[\]()]| - ", content_title) + return contents + + @staticmethod + def remove_blanks(contents: list): + while "" in contents: + contents.remove("") + return contents + + @staticmethod + def get_other_info(contents: list): + group = contents[0] + contents.remove(group) + for item in contents: + if re.search(RESOLUTION_RE, item): + resolution = item + contents.remove(item) + elif re.search(SOURCE_RE, item): + source = item + contents.remove(item) + elif re.search(SUB_RE, item): + sub = item + contents.remove(item) + for item in contents: + if re.search(r"\d+", item): + episode = item + contents.remove(item) + if __name__ == "__main__": test = RawParser() - ep = test.analyse("[Nekomoe kissaten][Summer Time Rendering - 11 [1080p][JPTC].mp4") - print(ep.title, ep.dpi) + ep = test.analyse("【幻樱字幕组】【7月新番】【异世界舅舅 Isekai Ojisan】【01_先行版】【GB_MP4】【1280X720】") + print(ep.title, ep.season_info.number) diff --git a/auto_bangumi/parser/analyser/rename_parser.py b/auto_bangumi/parser/analyser/rename_parser.py index 869f043f..0ff89b92 100644 --- a/auto_bangumi/parser/analyser/rename_parser.py +++ b/auto_bangumi/parser/analyser/rename_parser.py @@ -85,7 +85,7 @@ class DownloadParser: if __name__ == "__main__": - name = "[Nekomoe kissaten][Summer Time Rendering - 11 [1080p][JPTC].mp4" + name = "[Nekomoe kissaten][Summer Time Rendering - 11 [1080p][JPTC][9900E95].mp4" rename = DownloadParser() new_name = rename.rename_pn(name, 1) print(new_name) \ No newline at end of file