import json import os import UtilPack as util import DataClass as info GALBLOCK = "galleryBlock" GALURL = "galleryUrl" GALINFO = "galleryInfo" GALTAGS = "relatedTags" JTITLE = "japanese_title" # Example #with open('test.db', 'r') as file: # data = json.load(file) #print_json_tree(data) #print(data['galleryInfo']['tags']) # pupil : Json # Caribre : text # Me : CSV class PupilData: m_data = None def __init__(self, argv): self.argv = argv self.PupilJSONOpen(argv) def __enter__(self): pass def __exit__(self, ex_type, ex_value, traceback): pass def PupilJSONOpen(self, path:str) -> None: self.m_data = None if True == util.IsEmptyStr(path): util.DbgOut("PupilData: input Null", True) return if False == os.path.exists(path): return try: with open(path, "r", encoding="utf-8") as file: self.m_data = json.load(file) except FileNotFoundError: util.DbgOut(f"파일이 존재하지 않음: {path}", True) except json.JSONDecodeError: util.DbgOut(f"JSON 형식이 잘못됨: {path}", True) except Exception as e: util.DbgOut(f"기타 오류 발생: {e}", True) # pupil 의 JSON 을 파싱해서 DataClass 에 데이터를 넣어 반환한다. """ def GetGalleryBlock(self): ['galleryBlock'] ['id'] ["galleryUrl"] ["thumbnails"] ["title"] ["artists"] ["series"] ["type"] ["language"] ["relatedTags"] ["tag"] ["url"] ["female"] ["male"] ["groups"] def GetGalleryInfo(self): ["galleryInfo"] ["id"] ["title"] ["language"] ["type"] ["date"] ["artists"] ["artist"] ["url"] ["groups"] ["group"] ["url"] ["parodys"] ["parody"] ["url"] ["tags"] ["tag"] ["url"] ["female"] ["male"] ["related"] ["languages"] ["galleryid"] ["url"] ["language_localname"] ["name"] ["characters"] ["character"] ["url"] ["files"] ["width"] ["hash"] ["name"] ["height"] ["hasavif"] def GetInfo(self): if None == self.m_data: return title = self.m_data[GALINFO]["title"] url = self.m_data[GALBLOCK]["galleryUrl"] retInfo = info(title, url) retInfo.type = self.m_data[GALINFO]["type"] retInfo.language = self.m_data[GALINFO]["language"] retInfo.gallery_id = self.m_data[GALINFO]["id"] listArtists = self.m_data[GALINFO]["artists"] for item in listArtists: strArtist = item["artist"] strUrl = item["url"] strTag = f"artist:{strArtist}" tempInfo = util.TagInfo(strTag, strUrl) retInfo.AddArtist(tempInfo) listTags = self.m_data[GALINFO]["tags"] for item in listTags: strGend = "" if 1 == item["female"]: strGend = "female:" elif 1 == item["male"]: strGend = "male:" strTag = item["tag"] strRelatedTag = f"{strGend}:{strTag}" tagUrl = item[url] tempInfo = util.TagInfo(strRelatedTag, tagUrl) retInfo.AddTag(tempInfo) return retInfo """ # def GetTitle(self) -> str: retStr : str = "" if None != self.m_data: retStr = self.m_data[GALINFO]["title"] return retStr # def GetHitomiID(self) -> str: retStr : str = "" if None != self.m_data: retStr = self.m_data[GALINFO]["id"] return retStr # def GetImgFileCount(self) -> int: if None == self.m_data: return 0 return len(self.m_data[GALINFO]["files"]) # pupil 의 JSON 을 파싱해서 ImageFileList 를 반환한다. def GetImgFileList(self): if None == self.m_data: return None listRet = set() listFiles = self.m_data[GALINFO]["files"] for item in listFiles: tempInfo = info.ImageFileInfo(item["name"], item["height"], item["width"], item["hash"], item["haswebp"]) listRet.append(tempInfo) return listRet