add comicinfo.xml update cbz

This commit is contained in:
cwx committed 2025-02-10 19:45:01 +08:00
1 parent 97449dca0b
commit cfae12f9b2
6 files changed
+83 -32

No files matched your search

+1
View File
@@ -69,6 +69,7 @@ class Extractor:
"""提取漫画信息并返回 MangaInfo 实例"""
selectors = self.config.get_selector('manga_list')
info_data = {}
info_data['base_url'] = self.config.base_url
for key, selector in selectors.items():
if isinstance(selector, str):
element = self.processor.select(tree, selector)
+12 -2
View File
@@ -72,6 +72,14 @@ class Chapter(BaseModel):
#images: List[ImageItem] = []
class ListManga(BaseModel):
base_url: str
"""漫画网站域名"""
@field_validator('base_url', mode='before')
def validate_base_url(cls, v):
cls.base_url = v
return v
title: List[str]
url: List[HttpUrl]
@@ -81,10 +89,12 @@ class ListManga(BaseModel):
list_url = []
for url in v:
if isinstance(url, str) and not url.startswith('http'):
list_url.append(HttpUrl("https://rouman5.com" + url))
list_url.append(HttpUrl(cls.base_url + url))
return list_url
created_at: List[str] = []
updated_at: List[str] = []
last_updated: List[str] = []
class MangaInfo(BaseModel):
project: str
+16 -11
View File
@@ -730,18 +730,22 @@ class MangaUtils:
save_data = []
for manga in self.data:
created_at = manga["created_at"]
if isinstance(created_at, datetime):
updated_at = manga["updated_at"]
last_updated = manga["last_updated"]
if isinstance(updated_at, datetime):
str_strftime = '%Y%m%d'
created_at = created_at.strftime(str_strftime)
save_data.append({"name" : manga["name"] , "created_at" : created_at})
updated_at = updated_at.strftime(str_strftime)
if isinstance(last_updated, datetime):
str_strftime = '%Y%m%d'
last_updated = last_updated.strftime(str_strftime)
save_data.append({"name" : manga["name"] , "updated_at" : updated_at , "last_updated" : last_updated})
with self.lock:
with open(temp_path, 'w', encoding='utf-8') as f:
json.dump(save_data, f, indent=2, ensure_ascii=False)
temp_path.replace(self.file_path)
def add_manga(self, name: str, created_at: str = None) -> bool:
def add_manga(self, name: str, updated_at: str = None) -> bool:
"""添加新漫画"""
if not self.validate_name(name):
raise ValueError("无效的漫画名称")
@@ -750,13 +754,14 @@ class MangaUtils:
self.delete_manga(name)
str_strftime = '%Y%m%d'
time = created_at or datetime.now()
if isinstance(time , datetime):
time = time.strftime(str_strftime)
now_time = datetime.now()
if isinstance(now_time , datetime):
now_time = now_time.strftime(str_strftime)
new_manga = {
"name": name.strip(),
"created_at": time
"updated_at": updated_at,
"last_updated": now_time
}
self.data.append(new_manga)
@@ -804,7 +809,7 @@ class MangaUtils:
if sort_by == "name":
return sorted(self.data, key=lambda x: x['name'])
elif sort_by == "date":
return sorted(self.data, key=lambda x: x['created_at'])
return sorted(self.data, key=lambda x: x['updated_at'])
return self.data.copy()
def validate_name(self, name: str) -> bool:
@@ -817,7 +822,7 @@ class MangaUtils:
"""批量导入漫画"""
for manga in mangas:
if self.validate_name(manga["name"]):
self.add_manga(manga["name"], manga.get("created_at"))
self.add_manga(manga["name"], manga.get("updated_at"))
def find_duplicates(self) -> List[str]:
"""查找可能的重复条目(简单版本)"""
+10 -10
View File
@@ -151,21 +151,21 @@ class MangaManager:
raise MangaException(f"不支持的网站: {manga_url}")
async with list_site_handler() as site:
manga_list = await site.get_manga_list(manga_url)
for title,url,created_at in zip(manga_list.title, manga_list.url, manga_list.created_at):
for title,url,updated_at in zip(manga_list.title, manga_list.url, manga_list.updated_at):
title = FileNaming.chinese_file_name(title)
save_manga = MangaUtils().search_manga(title)
created = None
if save_manga != None: created = save_manga.get('created_at', None)
if created != None and created_at == created:
created = save_manga.get('created_at', None)
updated = None
if save_manga != None: updated = save_manga.get('updated_at', None)
if updated != None and updated_at == updated:
updated = save_manga.get('updated_at', None)
logger.info(f"{save_manga} 已存在")
else:
logger.info(f"开始下载 漫画: {title}")
logger.info(f"{url}")
await self.download_manga(str(url), title = title, created_at = created_at)
await self.download_manga(str(url), title = title, updated_at = updated_at )
@classmethod
async def download_manga(cls, url: str, title: str = None, created_at: str = None, save_dir: Path = BASE_IMAGES_DIR):
async def download_manga(cls, url: str, title: str = None, updated_at: str = None, save_dir: Path = BASE_IMAGES_DIR):
"""下载漫画"""
manager = MangaManager(save_dir)
@@ -204,9 +204,9 @@ class MangaManager:
logger.error(f"下载出错: {result['error']}")
# 全部下载完成
if int(total_chapters) == int(success_chapters) and title != None and created_at != None:
MangaUtils().add_manga(title, created_at=created_at)
logger.info(f"全部完成 {title}, {created_at}")
if int(total_chapters) == int(success_chapters) and title != None and updated_at != None:
MangaUtils().add_manga(title, updated_at=updated_at)
logger.info(f"全部完成 {title}, {updated_at}")
except MangaException as e:
logger.error(f"下载失败: {str(e)}")
except Exception as e: