# Task: ThreadAuto 콘텐츠 자동생성 — Phase 1: 소재 시스템

## Task ID: task-274.1
## 프로젝트 경로: /home/jay/projects/ThreadAuto/

## 목표
하루 10개 카드뉴스 자동 발행을 위한 **소재 수집 시스템** 구축.
3가지 소재 소스를 통합한 파이프라인을 만든다.

## 소재 소스 3가지

### 1. 에버그린 주제풀 (200개 초기 적재)
- 파일: `content/evergreen_topics.json`
- 5가지 카테고리별 주제 목록:
  - **고민공감형** (40개): 설계사 이직 고민, 현실 공감, 불안 해소
    - 예: "수수료율이 정말 높아질까?", "내 고객을 데려갈 수 있을까?", "이직 후 정착 불안"
  - **정보제공형** (60개): 수수료 구조, GA/전속 차이, 체크리스트, 팁
    - 예: "GA 이직 전 확인사항 5가지", "수수료 비교하는 법", "정착지원금 활용법"
    - 반드시 `content/fact_db.md`의 팩트만 사용 (수치 임의생성 금지)
  - **사회적증거형** (40개): 성공사례, 이직 후기 (fact_db.md의 9번 참조)
    - 예: "5년차 전속 → GA 이직 후기", "DB영업으로 매출 3배"
  - **CTA형** (30개): 문의 유도, 상담 안내
    - 예: "이직 상담 무료", "궁금한 점 DM 주세요", "30초 자가진단"
  - **업계동향형** (30개): 보험업계 트렌드 주제 (뉴스가 없을 때 fallback용)
    - 예: "GA 시장 성장 추이", "설계사 수 변화", "디지털 전환"
- 각 주제에 포함할 필드:
  ```json
  {
    "id": "eg-001",
    "category": "고민공감",
    "title": "수수료율이 정말 높아질까?",
    "description": "이직 고민 중 가장 큰 비중을 차지하는 수수료 비교",
    "card_type": "E",
    "keywords": ["수수료", "이직", "비교"],
    "used_count": 0,
    "last_used": null
  }
  ```
- used_count/last_used로 중복 방지 (최소 사용 주제 우선 선택)

### 2. RSS 크롤러
- 파일: `crawler/rss_crawler.py`
- RSS 피드 목록 (7개):
  - 다자비 보험AI뉴스: `https://dazabi.com/insurance_magazine/rss.php`
  - 뉴스와이어 보험: `https://api.newswire.co.kr/rss/industry/204`
  - 이투데이 금융: `https://rss.etoday.co.kr/eto/finance_news.xml`
  - 이데일리 금융: `https://rss.edaily.co.kr/finance_news.xml`
  - 한국경제 경제: `https://rss.hankyung.com/economy.xml`
  - 매일경제 경제: `https://news.mk.co.kr/rss/economy_all.xml`
  - 파이낸셜뉴스 금융: `https://www.fnnews.com/rss/fn_realnews_finance.xml`
- 키워드 필터 (3단계):
  - 1차: 정착지원금, 스카우트, 영입, GA이직, 전속→GA, 사업단모집, 리크루팅
  - 2차: 1200%룰, 수수료상한제, GA성장, 제판분리, 보험사구조조정
  - 3차: 수당체계, 성과급, 보험설계사연봉, DB제공, 설계사수감소
- feedparser 라이브러리 사용
- 수집 결과 저장: `content/news_cache.json` (최근 7일분 보관, 중복 URL 제거)
- 각 뉴스: `{url, title, summary, published, source, matched_keywords, relevance_score}`

### 3. 보험저널 유튜브 연동
- 파일: `crawler/youtube_crawler.py`
- 채널: https://www.youtube.com/@insjournal/videos
- 기존 InsuWiki 파이프라인 참고:
  - `/home/jay/workspace/scripts/youtube-check-new-transcripts.py`
  - `/home/jay/projects/insuwiki/scripts/youtube-get-pending.ts`
- 구현 방식:
  - yt-dlp로 최신 영상 목록 조회 (pip install yt-dlp)
  - yt-dlp로 자막(subtitle) 추출 시도
  - 자막 없으면: 오디오 다운로드 → Whisper API STT (비용: 분당 $0.006)
  - 또는: youtube_transcript_api 패키지로 자동생성 자막 추출 시도
  - 수집 결과 저장: `content/youtube_cache.json`
  - 각 영상: `{video_id, title, published, transcript_text, summary}`
- **참고**: STT 비용이 부담되면, youtube_transcript_api로 자동생성 자막만 시도하고, 실패하면 제목+설명만 활용

### 4. 소재 선택 엔진
- 파일: `content/topic_selector.py`
- 하루 10개 소재 선택 로직:
  - 고민공감형 3개: 에버그린 풀에서 (최소 사용 우선, 랜덤 변형)
  - 정보제공형 3개: 에버그린 풀에서
  - 사회적증거형 2개: 에버그린 풀에서
  - 업계동향형 1개: RSS 뉴스 or 유튜브 → 없으면 에버그린 fallback
  - CTA형 1개: 에버그린 풀에서
- 선택 후 used_count 증가, last_used 갱신
- 최근 7일 내 사용된 주제 재선택 방지

## 기술 참고
- Python 3.12
- feedparser: `pip install feedparser` (RSS 파싱)
- yt-dlp: `pip install yt-dlp` (유튜브 자막/목록)
- youtube_transcript_api: `pip install youtube-transcript-api` (자동생성 자막)
- 기존 프로젝트: FastAPI 기반, Pillow 이미지, httpx HTTP 클라이언트
- 팩트 DB: `/home/jay/projects/ThreadAuto/content/fact_db.md`

## 테스트
- `tests/test_evergreen_topics.py` — 주제풀 구조 검증, 선택 로직 테스트
- `tests/test_rss_crawler.py` — RSS 파싱 + 키워드 필터 테스트 (mock)
- `tests/test_youtube_crawler.py` — 유튜브 자막 추출 테스트 (mock)
- `tests/test_topic_selector.py` — 소재 선택 + 중복 방지 테스트
- 기존 테스트 깨지면 안 됨

## 산출물
- `content/evergreen_topics.json` — 200개 주제풀
- `content/topic_selector.py` — 소재 선택 엔진
- `crawler/rss_crawler.py` — RSS 크롤러
- `crawler/youtube_crawler.py` — 유튜브 자막 크롤러
- `crawler/__init__.py`
- 테스트 파일들
- 완료 시 `memory/events/task-274.1.done` 생성
- 보고서 `memory/reports/task-274.1.md` 작성

## 의존성 설치
```bash
pip3 install --break-system-packages feedparser yt-dlp youtube-transcript-api
```
