diff --git a/docs/architecture.md b/docs/architecture.md index 81e4b00..6ecb5e9 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -37,6 +37,8 @@ fromis_9/ │ │ │ └── index.js # 라우트 등록 │ │ ├── services/ # 비즈니스 로직 │ │ │ ├── youtube/ # YouTube 봇 +│ │ │ │ ├── api.js # YouTube Data API 호출 +│ │ │ │ └── index.js # 봇 로직 (동기화, 저장) │ │ │ ├── x/ # X(Twitter) 봇 │ │ │ ├── meilisearch/ # 검색 서비스 │ │ │ └── suggestions/ # 추천 검색어 @@ -317,7 +319,7 @@ fromis_9/ - `concert_setlist_members` - 셋리스트-멤버 연결 #### 봇 -- `bot_youtube` - YouTube 봇 설정 (채널 정보, 동기화 간격, 필터 등) +- `bot_youtube` - YouTube 봇 설정 (채널 정보, 동기화 간격, 필터 등, video_id UNIQUE) - `bot_x` - X 봇 설정 (username, 프로필, 동기화 간격, 텍스트 필터, 리트윗 포함, YouTube 추출) #### 이미지 diff --git a/docs/development.md b/docs/development.md index c3be8bd..f11b60e 100644 --- a/docs/development.md +++ b/docs/development.md @@ -258,6 +258,31 @@ queryClient.invalidateQueries(); --- +## YouTube 봇 동기화 + +### 동기화 흐름 (syncNewVideos) +1. `fetchRecentVideoIds()` — Activities API로 최근 영상 ID 목록만 조회 (1 unit) +2. DB에서 이미 존재하는 video_id 필터링 +3. 새 영상만 `fetchVideoInfo()` — Videos API로 상세 정보 조회 (새 영상당 1 unit) +4. `saveVideo()` — DB 저장 + Meilisearch 동기화 + +### API 할당량 +- 일일 할당량: 10,000 units +- 새 영상 없을 때: activities.list 1 unit만 소비 +- 새 영상 있을 때: 1 + 새 영상 수 units +- 1분 간격, 3채널 기준: ~4,320 units/일 (43%) + +### 주요 API 함수 (services/youtube/api.js) +| 함수 | YouTube API | 용도 | +|------|-----------|------| +| `fetchRecentVideoIds()` | activities.list (1 unit) | 최근 영상 ID 목록 조회 | +| `fetchVideoInfo()` | videos.list (1 unit) | 단일 영상 상세 정보 | +| `fetchAllVideos()` | playlistItems.list + videos.list | 전체 영상 초기 동기화 | +| `getChannelByHandle()` | channels.list (1 unit) | 핸들로 채널 조회 | +| `getChannelInfo()` | channels.list (1 unit) | 채널 정보 (배너 등) | + +--- + ## 유용한 명령어 ```bash