JMComic 접속을 위한 Python API(웹 및 모바일 지원), GitHub Actions 다운로더 통합 제공 🚀
이 프로젝트는 JM을 크롤링하기 위한 Python API를 캡슐화한 것입니다.
몇 줄의 간단한 Python 코드만으로 JM의 앨범을 로컬로 원활하게 다운로드할 수 있으며, 이미지 또한 모두 처리된 상태입니다.
🧭 빠른 가이드
- 튜토리얼: GitHub Actions를 사용하여 다운로드하기
- 튜토리얼: 즐겨찾기 데이터를 내보내고 다운로드하기
- 타워 브로드캐스트: 기장 여러분의 소스 코드 기여와 동참을 환영합니다
안내: JM 서버의 부하를 줄이기 위해 한 번에 너무 많은 앨범을 다운로드하지 말아주세요 🙏🙏🙏
본 프로젝트의 핵심 기능은 앨범 다운로드입니다.
이를 기반으로 사용하기 쉽고 확장성이 뛰어나며 일부 특수한 다운로드 요구를 충족할 수 있는 프레임워크가 설계되었습니다.
현재 핵심 기능은 꽤 안정적으로 동작하며, 프로젝트는 유지보수 단계에 있습니다.
다운로드 기능 외에도, 필요한 경우에 한해 추가적인 JM 인터페이스가 구현되어 있습니다. 기존 기능들은 아래와 같습니다:
- 로그인
- 앨범 검색 (모든 검색 매개변수 지원)
- 이미지 다운로드 및 복호화
- 카테고리 / 랭킹
- 앨범 / 챕터(에피소드) 세부 정보
- 개인 즐겨찾기
- 인터페이스 암호화 및 복호화 (APP API)
⚠ Python이 시스템에 설치되어 있지 않다면, 다음 단계를 진행하기 전에 먼저 Python 공식 사이트 에서 다운로드하여 설치해주시기 바랍니다. Python 3.12 이상 버전을 권장합니다
-
공식 pip 저장소를 통한 설치 (추천. 업데이트 명령어도 동일합니다)
pip install jmcomic -U
-
소스코드를 이용한 설치
pip install git+https://github.com/hect0x7/JMComic-Crawler-Python
아래의 간단한 코드를 사용하면 JM123 앨범의 모든 챕터 이미지를 다운로드할 수 있습니다:
import jmcomic # 이 모듈을 임포트합니다. 사전 설치 필요.
jmcomic.download_album('123') # 다운로드하려는 앨범의 ID를 함수에 넘겨 로컬에 저장합니다.위에 보이는 download_album 메서드는 구성 항목을 제어하는 부가적인 option 매개변수를 지원합니다. (예: JM 도메인, 네트워크 프록시, 이미지 포맷 변환, 플러그인 등)
사용자 환경에 맞게 이러한 구성 옵션이 필요할 수도 있습니다. 구성 파일로 옵션을 만들고 이를 사용하여 다운로드하는 것을 권장합니다. 아래의 챕터를 참고하세요:
-
먼저 구성 파일을 하나 만듭니다. 이름은 자율이며, 예시로
option.yml을 만들어보겠습니다.파일에는 특정한 구문 형식이 존재합니다. 문서를 참조해주세요 → 환경 설정 파일 안내
한 가지 데모를 보여드리자면, 다운로드한 이미지를 png 포맷으로 변환하고 싶으시다면
option.yml안에 아래와 비슷한 내용을 기입하면 됩니다:
download:
image:
suffix: .png # 이 구성은 다운로드된 이미지를 png 로 변환하는데 쓰입니다.- 두 번째로, 아래의 Python 코드를 실행합니다.
import jmcomic
# 환경 설정 객체를 생성합니다
option = jmcomic.create_option_by_file('내 설정 파일 경로, 예: D:/option.yml')
# 생성된 option 객체를 통해 앨범을 다운로드합니다
jmcomic.download_album(123, option)
# 동등한 사용법: option.download_album(123)앨범만을 다운로드 하려면 위에서 말한 방법보다 이렇게 사용하는 것이 훨씬 편하고 직관적입니다.
예를 들어 윈도우에서는 단순하게
Win+r단축키를 이용해jmcomic xxx를 타이핑하고 앨범을 즉시 내려받을 수 있습니다.
예시:
123번 앨범을 다운로드 하는 명령어
jmcomic 123123번 앨범의 456번 챕터 이미지를 다운로드 하는 명령어
jmcomic 123 p456커맨드라인 모드에서는 임의의 Option을 통한 커스텀 설정을 지원합니다. 환경변수나 명령어 인자를 설정할 수 있습니다:
a. 명령줄 매개변수 --option을 사용해 파일 경로를 지정
jmcomic 123 --option="D:/a.yml"b. 환경 변수 JM_OPTION_PATH 를 옵션 파일명으로 설정 (권장)
환경 변수는 구글링을 통하거나 powershell 터미널에서 다음을 쳐서 만들 수 있습니다:
setx JM_OPTION_PATH "D:/a.yml"설정 후에는 다시 작동해야 적용이 됩니다.
jmcomic 123자세한 활용 문서를 원하시면 문서 사이트로 접속하세요 → jmcomic.readthedocs.io
(힌트: jmcomic은 다양한 다운로드 설정 항목을 제공합니다. 대부분의 다운로드 요구 사항과 관련된 구성 항목 및 플러그인을 쉽게 찾을 수 있을 것입니다.)
-
Cloudflare 크롤러 방지 수칙 우회
-
금만(1.6.3) APP 인터페이스 최근의 암호화/복호화 알고리즘 완벽 지원
-
다양한 사용 방법:
- GitHub Actions: 웹페이지 내 바로 앨범 ID를 통하여 받을 수 있습니다. (튜토리얼:GitHub Actions를 이용해 다운로드)
- 커맨드라인: 파이썬 코드를 짤 필요 없이 단순합니다. (튜토리얼:명령줄을 이용해 다운로드)
- Python 코드 구현: 가장 직관적이고 강력하며 최소한의 파이썬 기반 지식이 필요합니다.
-
웹 인터페이스 및 모바일 인터페이스 지원. 간단한 구성을 통한 전환 지원. (모바일 구동환경에서의 IP제한을 돌파하고 뛰어난 호환이 됩니다, 웹은 특정 지역에서 제약받지만 성능은 최고입니다.)
-
자동 재접속(Retry) 및 도메인 전환 구조 기본지원
-
멀티스레드 다운로드 (1이미지 당 1스레드를 통한 극단적인 빠른 스피드)
-
강력한 구성 옵션
- 환경 구성 없이도 매우 편하게 즐길 수 있습니다.
- 각종 파일 포맷 종류 지원
- 구성 가능 요소:
요청된 도메인 네임클라이언트 구현체디스크 캐시 사용 여부동시에 다운로드 할 파일의 개수포맷 바꾸기규칙적으로 이미지 저장하기요청용 메타데이터정보들(headers, cookies, proxies)중국어 간체/번체 변환등등
-
자율성 확보 (Extensible)
- 챕터/이미지의 다운로드 전, 다운로드 후의 콜백 기능 및 커스텀 함수 동작.
- 여러 사용자 정의 클래스를 구성하도록 개방:
Downloader (스케줄 관리)Option (구성 관리)Client (요청 관리)Entity 생성및 등등. - 사용자 맞춤형 로거, 에러 감지기 시스템
- 강력한 'Plugin 시스템', 타인의 플러그인 이용가능, 현재 기본적으로 딸려 나오는 지원 플러그인:
로그인 플러그인하드웨어 리소스 추적 플러그인새로 올라온 챕터만을 받는 플러그인압축(Archive) 지원 플러그인클라이언트 프록시 플러그인특정한 이미지 확장자를 지정하여 받는 플러그인QQ메일 알리미 플러그인로그 주제 필터 플러그인웹 브라우저의 쿠키(Cookies)를 능동적으로 받는 플러그인북마크 목록을 CSV 표로 추출하는 플러그인모든 이미지를 읽기용 PDF 파일 한 개로 결합하는 플러그인모든 이미지를 좁고 긴 하나의 원본 PNG 사진으로 결합하는 플러그인로컬 디스크에 받은 만화를 열람할 웹서버 호스팅 플러그인앨범 업데이트 구독 플러그인이미지 수가 적은 챕터 건너뛰기 플러그인중복 이미지를 탐지하고 제거하는 플러그인경로 문자열 바꾸기 플러그인고급 재접속(Retry) 플러그인표지 다운로드 플러그인
-
Python 3.12 이상을 권장하며, 현재 최소 호환 버전은 3.9입니다.
참고: Python 3.9 및 이전 버전은 모두 2025년에 공식 지원 종료(EOL)되었으므로 3.9 이하 버전을 사용할 경우 언제든 서드파티 라이브러리 호환성 문제에 부딪힐 수 있습니다.
-
여유 시간에 만들어 지는 프로젝트이기에 정보나 활용 코드의 늦은 갱신이 다분합니다. 이슈(Issue)페이지로 연락주시기 바랍니다!
.github: GitHub Actions 구성 파일assets: 코드가 아닌 관련 리소스docs: 상세 가이드 및 관련 프로젝트 설명 문서option: 설정 샘플 예제
src: 실용 소스코드 폴더jmcomic:jmcomic핵심 모듈
tests: 유닛 테스트 패키지 구조, 자동화 테스트usage: 실사용 시 참조하면 좋은 활용 구조
