From 9ec2963a610a06a7a27f6b780866293c894d4822 Mon Sep 17 00:00:00 2001 From: caiwx86 Date: Wed, 21 Dec 2022 00:39:10 +0800 Subject: [PATCH] fix --- utils/CBZUtils.py | 5 +++- utils/HtmlUtils.py | 12 ++++++++-- utils/comic/ComicInfo.py | 52 ++++++++++++++++++++++++++++++++++++++-- utils/comic/PathStr.py | 6 +++-- utils/entity/RouMan.py | 18 +++++++++----- 5 files changed, 80 insertions(+), 13 deletions(-) diff --git a/utils/CBZUtils.py b/utils/CBZUtils.py index 54ec735..20bb946 100644 --- a/utils/CBZUtils.py +++ b/utils/CBZUtils.py @@ -56,7 +56,10 @@ class CBZUtils: except: print(f"删除 {file} 发生错误,已跳过") try: - cls.zip_compression(chapter_path,packCBZ_path+".CBZ") + size_zip = cls.zip_compression(chapter_path,packCBZ_path+".CBZ") + size_imgs = len(comicInfo.getChapterImgs()) + if size_zip -1 == size_zip: + ntfy.sendMsg(f"打包校验成功: {packCBZ_path}") except: ntfy.sendMsg("CBZ打包失败") comicInfo.nextCBZToDoneChapter() diff --git a/utils/HtmlUtils.py b/utils/HtmlUtils.py index 536f2f4..85c8181 100644 --- a/utils/HtmlUtils.py +++ b/utils/HtmlUtils.py @@ -17,7 +17,7 @@ class htmlUtils: def getPathSaveHtml(cls,url,type=None): rstr = r"[\/\\\:\*\?\"\<\>\|\.]" #  '/ \ : * ? " < > |' file_url = re.sub(rstr, "", url) - file_path = os.path.join(pathStr.base_html_data(),file_url) + file_path = os.path.join(pathStr.base_html_cache,file_url) if type == "new": return file_path if os.path.exists(file_path): @@ -85,12 +85,20 @@ class htmlUtils: return cls.getHTML(url,type="json") @classmethod - def xpathData(cls,c_xpath,url=None,num=None,not_eq=None): + def xpathData(cls,c_xpath,url=None,num=None,not_eq=None,update=False): if url == None: url = cls.temp_url else: cls.temp_url = url result = [] + if update: + html_cache_path = cls.getPathSaveHtml(url,"new") + if os.path.exists(html_cache_path): + try: + os.remove(html_cache_path) + ntfy.sendMsg(f"html_cache更新成功 {html_cache_path}") + except: + ntfy.sendMsg(f"html_cache更新失败 {html_cache_path}") #获取html实体数据 et = cls.getHTML(url) #比对数据 diff --git a/utils/comic/ComicInfo.py b/utils/comic/ComicInfo.py index f89ce3c..d30f949 100644 --- a/utils/comic/ComicInfo.py +++ b/utils/comic/ComicInfo.py @@ -25,7 +25,8 @@ class comicInfo(): str_homePage = None str_listChapter = None str_chapter_imgs = None - + str_updateAt = None + chapter_node = None comicName_node = None dep_node = None @@ -116,6 +117,14 @@ class comicInfo(): def getHomePage(cls): return cls.str_homePage + @classmethod + def setUpdateAt(cls, value): + cls.str_updateAt = value + + @classmethod + def getUpdateAt(cls): + return cls.str_updateAt + ''' 获取网站主页 ''' @@ -310,4 +319,43 @@ class comicInfo(): cls.setComicName(comicName) dirConfComic = cls.getDirConfComic() save_path = os.path.join(dirConfComic,fileName) - return save_path \ No newline at end of file + return save_path + + @classmethod + def updateComicDate(cls): + data = {} + update_at = cls.str_updateAt + comic_name = cls.str_comicName + update_path = pathStr.base_comic_update + update_dir = os.path.dirname(update_path) + if not os.path.exists(update_dir): + os.makedirs(update_dir) + if os.path.exists(update_path): + with open(update_path,"r") as fs: + data = json.loads(fs.read()) + fs.close() + data[comic_name] = update_at + with open(update_path,"w") as fs: + fs.write(json.dumps(data)) + fs.close() + + @classmethod + def isUpdateComic(cls): + is_update = True + data = {} + c_update_at = cls.str_updateAt + comic_name = cls.str_comicName + update_path = pathStr.base_comic_update + update_dir = os.path.dirname(update_path) + if not os.path.exists(update_dir): + os.makedirs(update_dir) + try: + with open(update_path,"r") as fs: + data = json.loads(fs.read()) + fs.close() + except: + data = {} + comic_update = data.get(comic_name) + if comic_name != None and comic_update == c_update_at: + is_update = False + return is_update \ No newline at end of file diff --git a/utils/comic/PathStr.py b/utils/comic/PathStr.py index 5567547..d5fc4fd 100644 --- a/utils/comic/PathStr.py +++ b/utils/comic/PathStr.py @@ -6,10 +6,12 @@ class pathStr: base_CBZ = os.path.join(base_comic_out,"CBZ") base_comic_img = os.path.join(base_comic_out,"outputComic") base_conf_path = os.path.join(base_comic_out,".conf") - #base_html_data = os.path.join(base_comic_out,"html_"+str(date)) + base_html_cache = os.path.join(base_comic_out,"html_cache") + base_html_chapter = os.path.join(base_comic_out,"html_updated") + base_comic_update = os.path.join(base_conf_path,"comic_update") @classmethod - def base_html_data(cls): + def base_html_week(cls): date_path = cls.getDatePath() return os.path.join(cls.base_comic_out,"html_"+str(date_path)) diff --git a/utils/entity/RouMan.py b/utils/entity/RouMan.py index cf2673f..482f600 100644 --- a/utils/entity/RouMan.py +++ b/utils/entity/RouMan.py @@ -13,8 +13,8 @@ class comicEntity: @classmethod - def baseComicData(cls,url): - data = htmlUtils.xpathData('//script[@id="__NEXT_DATA__"]/text()',url=url) + def baseComicData(cls,url,update=False): + data = htmlUtils.xpathData('//script[@id="__NEXT_DATA__"]/text()',url=url,update=update) data = json.loads(data[0]) data = data.get("props") x = data.get("pageProps") @@ -23,7 +23,7 @@ class comicEntity: @classmethod def downladsComcis(cls,url): #漫画名 - x = cls.baseComicData(url) + x = cls.baseComicData(url,update=True) books = x.get("books") len_books = len(books) base_url = comicInfo.getBaseUrl(url) @@ -32,6 +32,8 @@ class comicEntity: book_id = book.get("id") book_name = book.get("name") updated = book.get("updatedAt") + comicInfo.setComicName(book_name) + comicInfo.setUpdateAt(updated) comic_href = base_url+"/books/"+book_id random_int = random.randint(5,20) comicInfo.setComicName(book_name) @@ -41,8 +43,12 @@ class comicEntity: time.sleep(random_int) else: ntfy.sendMsg(f"已存在 漫画:{book_name}") - cls.oneComic(comic_href, random.uniform(0,3)) - + if comicInfo.isUpdateComic(): + cls.oneComic(comic_href, random.uniform(0,3)) + comicInfo.updateComicDate() + else: + ntfy.sendMsg(f"{book_name} 已是最新") + print(books) #for comicHref in comicsHref: # cls.oneComic(comicHref,random.uniform(10,20)) @@ -50,7 +56,7 @@ class comicEntity: @classmethod def oneComic(cls,c_url,sleep=None): #漫画名 - title = htmlUtils.xpathData('//div[@class="col"]/h5/text()',url=c_url,num=0) + title = htmlUtils.xpathData('//div[@class="col"]/h5/text()',url=c_url,num=0,update=True) #别名 alias = htmlUtils.xpathData('//span[contains(@class,"bookid_alias")]/text()',num=1) icon = htmlUtils.xpathData('//img[@class="img-thumbnail"]/@src',num=0)