mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-04-13 10:19:47 +08:00
2.5.7 fix rename module
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -171,3 +171,4 @@ cython_debug/
|
||||
|
||||
/auto_bangumi/parser/analyser/tmdb.py
|
||||
|
||||
/auto_bangumi/run_debug.sh
|
||||
|
||||
@@ -18,6 +18,6 @@ def qb_connect_failed_wait(func):
|
||||
except Exception as e:
|
||||
logger.debug(f"URL: {args[0]}")
|
||||
logger.warning("Cannot connect to qBittorrent. Wait 5 min and retry...")
|
||||
time.sleep(3)
|
||||
time.sleep(300)
|
||||
times += 1
|
||||
return wrapper
|
||||
|
||||
@@ -31,6 +31,12 @@ def get_data():
|
||||
return data
|
||||
|
||||
|
||||
@app.get("/api/v1/log")
|
||||
def get_log():
|
||||
with open(settings.log_path, "r") as f:
|
||||
return f.read()
|
||||
|
||||
|
||||
@app.get("/api/v1/resetRule")
|
||||
def reset_rule():
|
||||
data = {}
|
||||
@@ -46,7 +52,7 @@ class RuleName(BaseModel):
|
||||
def remove_rule(name: RuleName):
|
||||
datas = json_config.load(settings.info_path)["bangumi_info"]
|
||||
for data in datas:
|
||||
if re.search(name.name, data["raw_title"]) is not None:
|
||||
if re.search(name.name.lower(), data["title_raw"].lower()) is not None:
|
||||
datas.remove(data)
|
||||
json_config.save(settings.info_path, datas)
|
||||
return "Success"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
|
||||
DEFAULT_SETTINGS = {
|
||||
"version": "2.5.5",
|
||||
"version": "2.5.6",
|
||||
"data_version": 4.0,
|
||||
"host_ip": "localhost:8080",
|
||||
"sleep_time": 7200,
|
||||
@@ -26,7 +26,8 @@ DEFAULT_SETTINGS = {
|
||||
"socks": None,
|
||||
"enable_rss_collector": True,
|
||||
"enable_rename": True,
|
||||
"reset_folder": False
|
||||
"reset_folder": False,
|
||||
"log_path": "/config/log.txt",
|
||||
}
|
||||
|
||||
ENV_TO_ATTR = {
|
||||
|
||||
@@ -7,6 +7,8 @@ def setup_logger():
|
||||
DATE_FORMAT = "%Y-%m-%d %X"
|
||||
LOGGING_FORMAT = "%(asctime)s %(levelname)s: %(message)s"
|
||||
logging.basicConfig(
|
||||
filename=settings.log_path,
|
||||
filemode="w",
|
||||
level=level,
|
||||
datefmt=DATE_FORMAT,
|
||||
format=LOGGING_FORMAT,
|
||||
|
||||
@@ -63,7 +63,6 @@ class Renamer:
|
||||
continue
|
||||
except:
|
||||
logger.warning(f"{path_name} rename failed")
|
||||
logger.debug(f"origin: {name}")
|
||||
if settings.remove_bad_torrent:
|
||||
self.client.delete_torrent(torrent_hash)
|
||||
self.print_result(torrent_count, rename_count)
|
||||
|
||||
@@ -20,7 +20,6 @@ class RSSAnalyser:
|
||||
rss_titles = self._request.get_titles(settings.rss_link)
|
||||
self._request.close_session()
|
||||
for raw_title in rss_titles:
|
||||
logger.debug(raw_title)
|
||||
extra_add = True
|
||||
if bangumi_info is not []:
|
||||
for d in bangumi_info:
|
||||
@@ -47,7 +46,6 @@ class RSSAnalyser:
|
||||
download_client.add_rules(bangumi_info, rss_link=settings.rss_link)
|
||||
except Exception as e:
|
||||
logger.debug(e)
|
||||
logger.info("Connection error.")
|
||||
logger.info("Finished")
|
||||
|
||||
|
||||
|
||||
@@ -27,7 +27,6 @@ CHINESE_NUMBER_MAP = {
|
||||
|
||||
|
||||
class RawParser:
|
||||
|
||||
@staticmethod
|
||||
def get_group(name: str) -> str:
|
||||
return re.split(r"[\[\]]", name)[1]
|
||||
@@ -66,7 +65,7 @@ class RawParser:
|
||||
@staticmethod
|
||||
def name_process(name: str):
|
||||
name = name.strip()
|
||||
split = re.split("/| |- ", name.replace("(仅限港澳台地区)", ""))
|
||||
split = re.split("/|\s{2}|-\s{2}", name.replace("(仅限港澳台地区)", ""))
|
||||
while "" in split:
|
||||
split.remove("")
|
||||
if len(split) == 1:
|
||||
@@ -79,22 +78,19 @@ class RawParser:
|
||||
r"([^\x00-\xff]{1,})(\s)([\x00-\xff]{4,})", name)
|
||||
if match_obj is not None:
|
||||
return match_obj.group(3), split
|
||||
compare = 0
|
||||
for name in split:
|
||||
compare, compare_idx = 0, 0
|
||||
for idx, name in list(enumerate(split)):
|
||||
l = re.findall("[aA-zZ]{1}", name).__len__()
|
||||
if l > compare:
|
||||
compare = l
|
||||
for name in split:
|
||||
if re.findall("[aA-zZ]{1}", name).__len__() == compare:
|
||||
return name.strip(), split
|
||||
raise ValueError()
|
||||
compare_idx = idx
|
||||
return split[compare_idx], split
|
||||
|
||||
@staticmethod
|
||||
def find_tags(other):
|
||||
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
|
||||
@@ -152,12 +148,9 @@ class RawParser:
|
||||
return None
|
||||
info = Episode()
|
||||
info.title = name
|
||||
info.season_info.number = season
|
||||
info.season_info.raw = sr
|
||||
info.season_info.number, info.season_info.raw = season, sr
|
||||
info.ep_info.number = episode
|
||||
info.subtitle = sub
|
||||
info.dpi = dpi
|
||||
info.source = source
|
||||
info.subtitle, info.dpi, info.source = sub, dpi, source
|
||||
info.title_info.group = ng
|
||||
info.group = group
|
||||
return info
|
||||
@@ -165,5 +158,5 @@ class RawParser:
|
||||
|
||||
if __name__ == "__main__":
|
||||
test = RawParser()
|
||||
ep = test.analyse("[Lilith-Raws] 神渣☆偶像 / Kami Kuzu☆Idol - 01 [Baha][WEB-DL][1080p][AVC AAC][CHT][MP4]")
|
||||
ep = test.analyse("[ANi] Classroom of the Elite S2 - 欢迎来到实力至上主义的教室 第二季 - 01 [1080P][Baha][WEB-DL][AAC AVC][CHT][MP4]")
|
||||
print(ep.title, ep.dpi)
|
||||
|
||||
@@ -18,7 +18,9 @@ class DownloadParser:
|
||||
r"(.*)第(\d*\.*\d*)話(?:END)?(.*)",
|
||||
]
|
||||
|
||||
def rename_normal(self, name, season):
|
||||
def rename_normal(self, info_dict):
|
||||
name = info_dict["name"]
|
||||
season = info_dict["season"]
|
||||
for rule in self.rules:
|
||||
match_obj = re.match(rule, name, re.I)
|
||||
if match_obj is not None:
|
||||
@@ -26,7 +28,9 @@ class DownloadParser:
|
||||
new_name = f"{title} S{season}E{match_obj.group(2)}{match_obj.group(3)}"
|
||||
return new_name
|
||||
|
||||
def rename_pn(self, name, season):
|
||||
def rename_pn(self, info_dict):
|
||||
name = info_dict["name"]
|
||||
season = info_dict["season"]
|
||||
n = re.split(r"[\[\]()【】()]", name)
|
||||
file_name = name.replace(f"[{n[1]}]", "")
|
||||
if season < 10:
|
||||
@@ -42,7 +46,10 @@ class DownloadParser:
|
||||
)
|
||||
return new_name
|
||||
|
||||
def rename_advance(self, name, folder_name, season):
|
||||
def rename_advance(self, info_dict):
|
||||
name = info_dict["name"]
|
||||
folder_name = info_dict["folder_name"]
|
||||
season = info_dict["season"]
|
||||
n = re.split(r"[\[\]()【】()]", name)
|
||||
file_name = name.replace(f"[{n[1]}]", "")
|
||||
if season < 10:
|
||||
@@ -57,7 +64,8 @@ class DownloadParser:
|
||||
)
|
||||
return new_name
|
||||
|
||||
def rename_no_season_pn(self, name):
|
||||
def rename_no_season_pn(self, info_dict):
|
||||
name = info_dict["name"]
|
||||
n = re.split(r"[\[\]()【】()]", name)
|
||||
file_name = name.replace(f"[{n[1]}]", "")
|
||||
for rule in self.rules:
|
||||
@@ -72,20 +80,33 @@ class DownloadParser:
|
||||
return new_name
|
||||
|
||||
def download_rename(self, name, folder_name, season, method):
|
||||
if method.lower() == "pn":
|
||||
return self.rename_pn(name, season)
|
||||
elif method.lower() == "normal":
|
||||
return self.rename_normal(name, season)
|
||||
elif method.lower() == "none":
|
||||
return name
|
||||
elif method.lower() == "advance":
|
||||
return self.rename_advance(name, folder_name, season)
|
||||
elif method.lower() == "no_season_pn":
|
||||
return self.rename_no_season_pn(name)
|
||||
info_dict = {
|
||||
"name": name,
|
||||
"folder_name": folder_name,
|
||||
"season": season,
|
||||
}
|
||||
method_dict = {
|
||||
"normal": self.rename_normal,
|
||||
"pn": self.rename_pn,
|
||||
"advance": self.rename_advance,
|
||||
"no_season_pn": self.rename_no_season_pn,
|
||||
}
|
||||
logger.debug(f"Name: {folder_name}, File type: {path.splitext(name)[-1]}, Season {season}")
|
||||
return method_dict[method](info_dict)
|
||||
# if method.lower() == "pn":
|
||||
# return self.rename_pn(name, season)
|
||||
# elif method.lower() == "normal":
|
||||
# return self.rename_normal(name, season)
|
||||
# elif method.lower() == "none":
|
||||
# return name
|
||||
# elif method.lower() == "advance":
|
||||
# return self.rename_advance(name, folder_name, season)
|
||||
# elif method.lower() == "no_season_pn":
|
||||
# return self.rename_no_season_pn(name)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
name = "[Nekomoe kissaten][Summer Time Rendering - 11 [1080p][JPTC][9900E95].mp4"
|
||||
name = "[NC-Raws] 來自深淵 烈日的黃金鄉 - 01 (Baha 1920x1080 AVC AAC MP4) [89D4923F].mp4"
|
||||
rename = DownloadParser()
|
||||
new_name = rename.rename_pn(name, 1)
|
||||
new_name = rename.download_rename(name, "Made abyess", 1, "pn")
|
||||
print(new_name)
|
||||
@@ -46,6 +46,7 @@ class TitleParser:
|
||||
"added": False,
|
||||
"eps_collect": True if settings.eps_complete else False,
|
||||
}
|
||||
logger.debug(f"RAW:{raw} >> {episode.title}")
|
||||
return data
|
||||
except Exception as e:
|
||||
logger.debug(e)
|
||||
|
||||
@@ -41,6 +41,8 @@ services:
|
||||
- auto_bangumi
|
||||
volumes:
|
||||
- auto_bangumi:/config
|
||||
ports:
|
||||
- 7892:7892
|
||||
dns:
|
||||
- 8.8.8.8
|
||||
- 223.5.5.5
|
||||
|
||||
@@ -18,6 +18,8 @@ services:
|
||||
- AB_SEASON_ONE=True
|
||||
networks:
|
||||
- auto_bangumi
|
||||
ports:
|
||||
- 7892:7892
|
||||
volumes:
|
||||
- auto_bangumi:/config
|
||||
dns:
|
||||
|
||||
@@ -36,11 +36,12 @@ services:
|
||||
- AB_RSS=${RSS}
|
||||
- AB_DEBUG_MODE=False
|
||||
- AB_EP_COMPLETE=False
|
||||
- AB_SEASON_ONE=True
|
||||
volumes:
|
||||
- auto_bangumi:/config
|
||||
networks:
|
||||
- auto_bangumi
|
||||
ports:
|
||||
- 7892:7892
|
||||
dns:
|
||||
- 8.8.8.8
|
||||
- 223.5.5.5
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
anyio==3.6.1
|
||||
beautifulsoup4==4.11.1
|
||||
lxml
|
||||
certifi==2022.6.15
|
||||
charset-normalizer==2.1.0
|
||||
charset-normalizer
|
||||
click==8.1.3
|
||||
fastapi==0.78.0
|
||||
h11==0.13.0
|
||||
@@ -9,12 +10,10 @@ idna==3.3
|
||||
pydantic==1.9.1
|
||||
PySocks==1.7.1
|
||||
qbittorrent-api==2022.5.32
|
||||
requests==2.28.1
|
||||
requests
|
||||
six==1.16.0
|
||||
sniffio==1.2.0
|
||||
soupsieve==2.3.2.post1
|
||||
starlette==0.19.1
|
||||
thefuzz==0.19.0
|
||||
soupsieve
|
||||
typing_extensions==4.3.0
|
||||
urllib3==1.26.9
|
||||
uvicorn==0.18.2
|
||||
uvicorn
|
||||
|
||||
Reference in New Issue
Block a user