From 227d62c2780fe9fcd8114ad95b5df1a542ce9718 Mon Sep 17 00:00:00 2001 From: EstrellaXD Date: Sun, 17 Jul 2022 10:31:32 +0800 Subject: [PATCH] =?UTF-8?q?2.5.14=20-=20=E4=B8=BA=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E4=BA=9B=E5=A5=87=E6=80=AA=E7=9A=84=E5=AD=97=E5=B9=95=E7=BB=84?= =?UTF-8?q?=E5=81=9A=E4=BA=86=E4=B8=80=E4=BA=9B=E5=BE=AE=E5=B0=8F=E7=9A=84?= =?UTF-8?q?=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/conf/const.py | 2 +- src/core/api_func.py | 2 +- src/parser/analyser/raw_parser.py | 19 +++++++++---------- src/parser/title_parser.py | 14 ++++++++------ 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/conf/const.py b/src/conf/const.py index 715604cc..1ec26c67 100644 --- a/src/conf/const.py +++ b/src/conf/const.py @@ -1,7 +1,7 @@ # -*- encoding: utf-8 -*- DEFAULT_SETTINGS = { - "version": "2.5.13", + "version": "2.5.14", "data_version": 4.0, "host_ip": "localhost:8080", "sleep_time": 7200, diff --git a/src/core/api_func.py b/src/core/api_func.py index 00b4badd..5e2df136 100644 --- a/src/core/api_func.py +++ b/src/core/api_func.py @@ -41,7 +41,7 @@ class APIProcess: def remove_rule(name): datas = json_config.load(settings.info_path)["bangumi_info"] for data in datas: - if re.search(name.lower(), data["title_raw"].lower()) is not None: + if re.search(name.lower(), data["title_raw"].lower()): datas.remove(data) json_config.save(settings.info_path, datas) return "Success" diff --git a/src/parser/analyser/raw_parser.py b/src/parser/analyser/raw_parser.py index 15bcf229..a9b3b8c2 100644 --- a/src/parser/analyser/raw_parser.py +++ b/src/parser/analyser/raw_parser.py @@ -30,9 +30,9 @@ CHINESE_NUMBER_MAP = { @dataclass class Episode: - title_en: str - title_zh: str - title_jp: str + title_en: str or None + title_zh: str or None + title_jp: str or None season: int season_raw: str episode: int @@ -79,7 +79,7 @@ class RawParser: @staticmethod def name_process(name: str): - name_en, name_zh, name_jp = "", "", "" + name_en, name_zh, name_jp = None, None, None name = name.strip() split = re.split("/|\s{2}|-\s{2}", name.replace("(仅限港澳台地区)", "")) while "" in split: @@ -96,11 +96,11 @@ class RawParser: split = [item.strip(), " ".join(split_space[idx+1:]).strip()] break for item in split: - if re.search(r"[\u0800-\u4e00]{2,}", item): + if re.search(r"[\u0800-\u4e00]{2,}", item) and not name_jp: name_jp = item.strip() - elif re.search(r"[\u4e00-\u9fa5]{2,}", item): + elif re.search(r"[\u4e00-\u9fa5]{2,}", item) and not name_zh: name_zh = item.strip() - elif re.search(r"[a-zA-Z]{3,}", item): + elif re.search(r"[a-zA-Z]{3,}", item) and not name_en: name_en = item.strip() return name_en, name_zh, name_jp @@ -122,7 +122,6 @@ class RawParser: def clean_sub(sub: str | None) -> str | None: if sub is None: return sub - # TODO: 这里需要改成更精准的匹配,可能不止 _MP4 ? return re.sub(r"_MP4|_MKV", "", sub) def process(self, raw_title: str): @@ -163,5 +162,5 @@ class RawParser: if __name__ == "__main__": test = RawParser() test_txt = "[SWSUB][7月新番][继母的拖油瓶是我的前女友 / 継母の连れ子が元カノだった][001][GB_JP][AVC][1080P][网盘][无修正] [331.6MB] [复制磁连]" - en, zh, jp = test.name_process("继母的拖油瓶是我的前女友 / 継母の连れ子が元カノだった") - print(f"en:{en}, zh:{zh}, jp:{jp}") + ep = test.analyse(test_txt) + print(f"en:{ep.title_en}, zh:{ep.title_zh}, jp:{ep.title_jp}") diff --git a/src/parser/title_parser.py b/src/parser/title_parser.py index 0a7758b4..720815ab 100644 --- a/src/parser/title_parser.py +++ b/src/parser/title_parser.py @@ -19,6 +19,7 @@ class TitleParser: return self._download_parser.download_rename(download_raw, folder_name, season, suffix, method) def tmdb_parser(self, title: str, season: int): + official_title, tmdb_season = None, None try: tmdb_info = self._tmdb_parser.tmdb_search(title) logger.debug(f"TMDB Matched, title is {tmdb_info.title_zh}") @@ -29,14 +30,15 @@ class TitleParser: official_title = f"{tmdb_info.title_zh} ({tmdb_info.year_number})" elif settings.title_language == "jp": official_title = f"{tmdb_info.title_jp} ({tmdb_info.year_number})" - season = tmdb_info.last_season - return official_title, season + tmdb_season = tmdb_info.last_season if tmdb_info.last_season else season + official_title = official_title if official_title else title + return official_title, tmdb_season def return_dict(self, raw: str): try: episode = self.raw_parser(raw) - title_search = episode.title_zh if episode.title_zh != "" else episode.title_en - title_raw = episode.title_en if episode.title_en != "" else episode.title_zh + title_search = episode.title_zh if episode.title_zh else episode.title_en + title_raw = episode.title_en if episode.title_en else episode.title_zh if settings.enable_tmdb: official_title, season = self.tmdb_parser(title_search, episode.season) else: @@ -45,7 +47,7 @@ class TitleParser: data = { "official_title": official_title, "title_raw": title_raw, - "season": season if season is not None else episode.season, + "season": season, "season_raw": episode.season_raw, "group": episode.group, "dpi": episode.resolution, @@ -65,7 +67,7 @@ if __name__ == '__main__': from conf.const_dev import DEV_SETTINGS settings.init(DEV_SETTINGS) T = TitleParser() - raw = "[Lilith-Raws] 在地下城寻求邂逅是否搞错了什么/Danmachi [无修正][01][Baha][WEB-DL][1080p][AVC AAC][CHT][MP4]" + raw = "[Lilith-Raws] 在地下城寻求邂逅是否搞错了什么/Danmachi S4[01][Baha][WEB-DL][1080p][AVC AAC][CHT][MP4]" season = int(re.search(r"\d{1,2}", "S02").group()) dict = T.return_dict(raw) print(dict)