• 돌아가기
  • 아래로
  • 위로
  • 목록
  • 댓글
바람개비 프로필 보기 [레벨:27]바람개비

hitomi 파일 목록 관리법 (윈도우+mihon)

기타 조회 수 1,417 댓글 3 0 복사 복사

 

 

이 코드로 저장된 이름을 기준으로 설명해보겠습니다

 

image.png

 

작품 파일이 저장된 폴더에서 데이터 가져옵니다

 

image.png

로드 선택

 

image.png

A열에 이름이 쫙 뜹니다

 

image.png

A열 전체 선택, 복사 후 다른 엑셀 파일 A열에 이런식으로 붙여넣기해주면 됩니다

 

B2셀에 들어가야 하는 수식은

=MID(A2, SEARCH("p", A2) + 1, 4)

 

C2셀에 들어가야 하는 수식은

=MID(A2, FIND("{", A2) + 1, FIND("}", A2) - FIND("{", A2) - 1)

 

그리고 B2, C2셀 클릭 한뒤 + 클릭하면 알아서 쭉 채워집니다

 

이런식으로 엑셀로 다운받은 작품 목록 관리하고 있습니다

 

 

 

 

그리고 mihon 앱 서재에 저장한 것만 따로 관리하고도 있는데(북마크한 작품 느낌?)

image.png

이런 백업 파일을 json 파일로 변환해 줘야 합니다

 

변환은

 

https://backup.mihon.tools/

이 사이트에서 변환해주면 됩니다

 

image.png

 

Download Backup에서 JSON 클릭하면 다운받아집니다.

 

이제 json 파일을 분석해서 서재에 저장된 lrr 항목만 추출해야 합니다

아래 코드를 활용하면 됩니다

import json
import re
import os

def extract_hitomi_numbers_from_categories(json_file_path):
    """
    JSON 데이터에서 `categories`가 포함된 항목의 Hitomi.la URL에서 숫자를 추출.

    :param json_file_path: JSON 파일 경로
    :return: 중복 제거된 숫자 리스트
    """
    try:
        with open(json_file_path, 'r', encoding='utf-8') as file:
            data = json.load(file)

        extracted_numbers = set()  # 중복 제거를 위한 set

        for manga in data.get("backupManga", []):
            # `categories`가 있는 항목만 처리
            if "categories" in manga:
                for genre_item in manga.get("genre", []):
                    # `source:`로 시작하는 Hitomi.la URL 찾기
                    if isinstance(genre_item, str) and genre_item.startswith("source:"):
                        match = re.search(r"https://hitomi\.la/galleries/(\d+)\.html", genre_item)
                        if match:
                            extracted_numbers.add(match.group(1))  # 숫자만 추출하여 추가

        return list(extracted_numbers)  # 중복 제거된 숫자 리스트 반환

    except (FileNotFoundError, json.JSONDecodeError) as e:
        print(f"오류 발생: {e}")
        return []

def find_matching_filenames(numbers, folder_path):
    """폴더 내 파일명에서 숫자와 비교해 일치하는 파일명을 추출하며 중복 제거 및 정확한 {숫자} 매칭."""
    try:
        matching_filenames = set()  # 중복 제거를 위해 set 사용
        for filename in os.listdir(folder_path):
            # 파일명에서 {숫자} 패턴 추출
            match = re.search(r'\{(\d+)\}', filename)
            if match:
                file_number = match.group(1)
                # 정확히 {숫자} 매칭 확인
                if f"{{{file_number}}}" in [f"{{{n}}}" for n in numbers]:
                    matching_filenames.add(filename)
        return list(matching_filenames)  # 최종적으로 리스트로 반환
    except FileNotFoundError:
        print("폴더를 찾을 수 없습니다.")
        return []

def save_to_file(data, output_file_path):
    """결과를 파일로 저장합니다."""
    try:
        with open(output_file_path, 'w', encoding='utf-8') as output_file:
            for line in data:
                output_file.write(line + '\n')
        print(f"결과가 {output_file_path}에 저장되었습니다.")
    except Exception as e:
        print(f"파일 저장 오류: {e}")

# 메인 실행 로직
def main():
    json_file_path = r'D:\mihon\EditedBackup.json'
    folder_path = r'D:\hitomi_download\zip'
    filenames_output_path = r'D:\mihon\matching_filenames.txt'

    # 1. JSON에서 숫자 추출
    numbers = extract_hitomi_numbers_from_categories(json_file_path)
    print("추출된 숫자:", numbers)  # 디버깅 출력

    # 2. 폴더에서 일치하는 파일명 찾기
    matching_filenames = find_matching_filenames(numbers, folder_path)
    print("일치하는 파일명:", matching_filenames)  # 디버깅 출력

    # 3. 결과 저장
    save_to_file(matching_filenames, filenames_output_path)
    print(f"저장된 파일명 개수: {len(matching_filenames)}")

if __name__ == '__main__':
    main()

 

이제 코드실행하면 서재에 저장된 작품만 정확하게 matching_filenames.txt으로 파일명이 저장되었을 겁니다(읽은 기록(history)에 있는 작품은 제외)

그 파일명을 활용해서 다시 엑셀 파일로 저장, 관리하면 됩니다.

 

저는 이런식으로 관리하고 있습니다.

 

끝!

3
신고 공유 스크랩
facebooktwitterpinterestbandkakao story

댓글

댓글 쓰기
프로필 보기
1등 [레벨:10]서브어린이 25.01.21. 12:43댓글 주소 복사
제가 아는 그 히토미 맞나요?
댓글
profile image 프로필 보기
[레벨:27]바람개비 25.01.21. 14:18댓글 주소 복사
@ 서브어린이
네!
댓글
프로필 보기
[레벨:10]서브어린이 25.01.21. 15:04댓글 주소 복사
@ 바람개비
진정한 정보글이네요 감사합니다
댓글

댓글 쓰기 권한이 없습니다.

취소 댓글 등록
목록
번호분류 제목 글쓴이날짜조회추천
공지 [안내] 개인 개발 및 AI(바이브코딩) 기반 앱 공개/사용 시 유의사항 1 달소 [레벨:121]diamond달소 26.03.28.23:38 1,643 27
공지 본 게시판은 자유게시판 입니다! 달소 [레벨:121]diamond달소 23.02.24.23:49 31,813 5
7935 일상
normal
[레벨:1]서버당 17:0117:01 132 -
7934 일상
image
[레벨:3]째원 14:1114:11 116 -
7933 기타
image
달소 [레벨:121]diamond달소 00:5600:56 86 1
7932 일상
image
EasyDev [레벨:6]EasyDev 26.06.13.22:18 184 3
7931 일상
image
[레벨:1]jh 26.06.13.19:29 433 5
7930 일상
normal
[레벨:4]Madpig 26.06.13.17:00 183 1
7929 질문
normal
서버중수 [레벨:4]gold서버중수 26.06.12.19:37 212 1
7928 일상
image
TryK [레벨:17]TryK 26.06.12.10:36 337 2
7927 이상
normal
kmw_ [레벨:45]platinumkmw_ 26.06.12.10:27 157 1
7926 자랑
image
카츠라기이즈미 [레벨:8]카츠라기이즈미 26.06.11.22:19 216 2
7925 일상
image
[레벨:18]gold한꼬푸 26.06.11.18:10 262 5
7924 일상
image
jerry80 [레벨:45]jerry80 26.06.10.15:08 497 3
7923 일상
normal
[레벨:43]Hinori 26.06.10.11:10 450 18
7922 일상
image
[레벨:1]RuBisCO 26.06.10.10:54 402 2
7921 일상
image
[레벨:5]momn 26.06.10.10:15 174 -
7920 기타
normal
[레벨:10]종다리 26.06.10.09:18 388 2
7919 일상
normal
[레벨:16]자우루스 26.06.10.07:54 146 3
7918 일상
image
화정큐삼 [레벨:40]diamond화정큐삼 26.06.08.16:24 358 3
7917 일상
image
[레벨:21]짝퉁교보 26.06.08.15:19 357 -
7916 일상
normal
[레벨:3]opec 26.06.06.16:30 666 2