수정사항
This commit is contained in:
124
outline.md
Normal file
124
outline.md
Normal file
@@ -0,0 +1,124 @@
|
||||
# anime_downloader 플러그인 구조 분석
|
||||
|
||||
## 📌 개요
|
||||
|
||||
FlaskFarm용 **애니메이션 다운로드 플러그인**으로, 여러 애니메이션 스트리밍 사이트에서 콘텐츠를 검색하고 다운로드할 수 있는 기능을 제공합니다.
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ 전체 구조
|
||||
|
||||
```
|
||||
anime_downloader/
|
||||
├── __init__.py # 플러그인 초기화 (현재 비활성화됨)
|
||||
├── setup.py # 플러그인 설정 및 메뉴 구조, 모듈 로드
|
||||
├── info.yaml # 플러그인 메타데이터 (이름, 버전, 개발자)
|
||||
├── mod_ohli24.py # 애니24 사이트 모듈 (1,542줄)
|
||||
├── mod_anilife.py # 애니라이프 사이트 모듈 (1,322줄)
|
||||
├── mod_linkkf.py # 링크애니 사이트 모듈 (1,449줄)
|
||||
├── lib/ # 공용 라이브러리
|
||||
│ ├── crawler.py # 웹 크롤링 엔진 (Playwright, Selenium, Cloudscraper)
|
||||
│ ├── ffmpeg_queue_v1.py# FFmpeg 다운로드 큐 관리
|
||||
│ ├── util.py # 유틸리티 함수 (파일명 정리, 타이밍 등)
|
||||
│ └── misc.py # 비동기 실행 헬퍼 함수
|
||||
├── templates/ # HTML 템플릿 (18개 파일)
|
||||
├── static/ # CSS, JS, 이미지 리소스
|
||||
├── bin/ # 플랫폼별 바이너리 (Darwin, Linux)
|
||||
├── nest_api/ # 애니 API 관련 (서브디렉토리)
|
||||
└── yommi_api/ # 커스텀 API 관련
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 핵심 컴포넌트
|
||||
|
||||
### 1. setup.py - 플러그인 엔트리포인트
|
||||
|
||||
| 항목 | 설명 |
|
||||
|------|------|
|
||||
| `__menu` | 3개 사이트별 서브메뉴 (설정, 요청, 큐, 검색, 목록) |
|
||||
| `setting` | DB 사용, 기본 설정, 홈 모듈(`ohli24`) 지정 |
|
||||
| `P` | FlaskFarm 플러그인 인스턴스 생성 |
|
||||
| 모듈 로드 | `LogicOhli24`, `LogicAniLife`, `LogicLinkkf` |
|
||||
|
||||
### 2. 사이트 모듈 (mod_*.py)
|
||||
|
||||
각 모듈은 동일한 구조를 따릅니다:
|
||||
|
||||
| 클래스 | 역할 |
|
||||
|--------|------|
|
||||
| `LogicXxx` | 사이트별 비즈니스 로직 (검색, 시리즈 정보, 다운로드 추가) |
|
||||
| `XxxQueueEntity` | 다운로드 큐 항목 (에피소드 정보, 상태 관리) |
|
||||
| `ModelXxxItem` | SQLAlchemy DB 모델 (다운로드 기록 저장) |
|
||||
|
||||
**LogicXxx 주요 메서드:**
|
||||
|
||||
- `process_menu()` / `process_ajax()` - 웹 요청 처리
|
||||
- `get_series_info()` - 시리즈/에피소드 정보 파싱
|
||||
- `get_anime_info()` / `get_search_result()` - 목록/검색
|
||||
- `add()` - 다운로드 큐에 추가
|
||||
- `scheduler_function()` - 자동 다운로드 스케줄러
|
||||
- `plugin_load()` / `plugin_unload()` - 생명주기 관리
|
||||
|
||||
### 3. lib/crawler.py - 웹 크롤링 엔진
|
||||
|
||||
| 메서드 | 기술 |
|
||||
|--------|------|
|
||||
| `get_html_requests()` | 기본 requests 요청 |
|
||||
| `get_html_playwright()` | Playwright 비동기 (헤드리스 브라우저) |
|
||||
| `get_html_playwright_sync()` | Playwright 동기 |
|
||||
| `get_html_selenium()` | Selenium WebDriver |
|
||||
| `get_html_cloudflare()` | Cloudscraper (CF 우회) |
|
||||
|
||||
### 4. lib/ffmpeg_queue_v1.py - 다운로드 큐
|
||||
|
||||
| 클래스 | 역할 |
|
||||
|--------|------|
|
||||
| `FfmpegQueueEntity` | 개별 다운로드 항목 (URL, 파일경로, 상태) |
|
||||
| `FfmpegQueue` | 큐 관리자 (스레드 기반 다운로드, 동시 다운로드 수 제어) |
|
||||
|
||||
---
|
||||
|
||||
## 🖥️ 지원 사이트 (3개)
|
||||
|
||||
| 모듈 | 사이트 | URI |
|
||||
|------|--------|-----|
|
||||
| `mod_ohli24.py` | 애니24 (ohli24) | `/ohli24` |
|
||||
| `mod_anilife.py` | 애니라이프 | `/anilife` |
|
||||
| `mod_linkkf.py` | 링크애니 | `/linkkf` |
|
||||
|
||||
---
|
||||
|
||||
## 📄 템플릿 구조
|
||||
|
||||
각 사이트별로 6개 템플릿 제공:
|
||||
|
||||
- `*_setting.html` - 사이트 설정
|
||||
- `*_request.html` - 다운로드 요청 페이지
|
||||
- `*_queue.html` - 다운로드 큐 현황
|
||||
- `*_search.html` - 검색 인터페이스
|
||||
- `*_list.html` - 다운로드 목록
|
||||
- `*_category.html` - 카테고리 탐색
|
||||
|
||||
---
|
||||
|
||||
## 🔄 동작 흐름
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
A[사용자] --> B[검색/탐색]
|
||||
B --> C[시리즈 선택]
|
||||
C --> D[에피소드 선택]
|
||||
D --> E[다운로드 큐 추가]
|
||||
E --> F[FfmpegQueue]
|
||||
F --> G[FFmpeg 다운로드]
|
||||
G --> H[DB 기록 저장]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 주의사항
|
||||
|
||||
1. **개발 모드**: `setup.py`에서 `DEFINE_DEV = True`로 설정되어 직접 모듈 import
|
||||
2. **`__init__.py` 비활성화**: 현재 주석 처리되어 `setup.py`가 실제 엔트리포인트 역할
|
||||
3. **크롤링 기술 혼용**: Cloudflare 우회를 위해 Playwright, Selenium, cloudscraper 등 다양한 기술 사용
|
||||
Reference in New Issue
Block a user