feat(anime): 자막/토렌트 파이프라인 대폭 개선
- Blogspot Atom Feed API로 전체 에피소드 자막 URL 발견 - AniList prequel 체인 기반 시즌 에피소드 오프셋 자동 감지 - Nyaa S-tag 감지 → 절대/시즌 번호 체계 자동 판별 - 기존 자막 에피소드 스킵 (URL 페치 전 pre-skip) - 오프셋 적용 자막 리네임 (시즌번호→절대번호 매칭) - ASW HEVC 토렌트 우선 정렬 (truncation 방지) - 토렌트 완료 대기 → 자동 삭제 라이프사이클 - 중복 자막 자동 삭제 - .smi 자막 확장자 지원
This commit is contained in:
@@ -218,7 +218,7 @@ class SubtitleDownloader:
|
||||
seen_urls = {r.download_url for r in results}
|
||||
|
||||
# HTML <a href="...">
|
||||
for gurl in re.findall(r'href="([^"]+\.(?:ass|srt|ssa|sub|zip|7z)(?:\?[^"]*)?)"', html, re.IGNORECASE):
|
||||
for gurl in re.findall(r'href="([^"]+\.(?:ass|srt|ssa|sub|smi|zip|7z)(?:\?[^"]*)?)"', html, re.IGNORECASE):
|
||||
if gurl not in seen_urls:
|
||||
seen_urls.add(gurl)
|
||||
filename = unquote(gurl.split("/")[-1].split("?")[0])
|
||||
@@ -230,7 +230,7 @@ class SubtitleDownloader:
|
||||
))
|
||||
|
||||
# 마크다운 [텍스트](url) — Blogspot 등
|
||||
for text, gurl in re.findall(r'\[([^\]]+)\]\((https?://[^)]+\.(?:ass|srt|ssa|sub|zip|7z)[^)]*)\)', html, re.IGNORECASE):
|
||||
for text, gurl in re.findall(r'\[([^\]]+)\]\((https?://[^)]+\.(?:ass|srt|ssa|sub|smi|zip|7z)[^)]*)\)', html, re.IGNORECASE):
|
||||
if gurl not in seen_urls:
|
||||
seen_urls.add(gurl)
|
||||
results.append(SubtitleFile(
|
||||
@@ -307,7 +307,7 @@ class SubtitleDownloader:
|
||||
if name.endswith("/"):
|
||||
continue
|
||||
ext = Path(name).suffix.lower()
|
||||
if ext in (".ass", ".srt", ".ssa", ".sub"):
|
||||
if ext in (".ass", ".srt", ".ssa", ".sub", ".smi"):
|
||||
# 중첩 폴더 무시, 파일만 추출
|
||||
out_name = Path(name).name
|
||||
out_path = target_dir / out_name
|
||||
|
||||
Reference in New Issue
Block a user