Files
news-summary-bot/README.md
sm4640 dc4656e452
All checks were successful
news-summary-bot-cicd / build_push_deploy (push) Successful in 11m43s
Feat: [main] news-summary-bot 완성
2026-03-24 12:19:54 +09:00

2.1 KiB

News Summary Bot

YouTube 뉴스/경제 채널의 새 영상을 감지하면 자막을 추출하고, Claude API로 요약한 뒤 Discord로 전송하는 봇입니다.

아키텍처

n8n (RSS 감지) → POST /api/news/summarize → 자막 추출 → Claude 요약 → Discord 웹훅
모듈 역할
app/main.py FastAPI 엔드포인트
app/transcript.py YouTube 자막 추출 (yt-dlp)
app/summarizer.py Claude Sonnet 4.6으로 요약 생성
app/discord.py Discord 웹훅 전송
app/config.py 환경변수 설정 (pydantic-settings)

빠른 시작

환경변수 설정

cp .env.example .env
# .env 파일에서 아래 값을 수정
변수 필수 설명
ANTHROPIC_API_KEY O Claude API 키
DISCORD_WEBHOOK_URL O Discord 웹훅 URL
API_SECRET X n8n → FastAPI 인증용 시크릿

로컬 개발

pip install -r requirements.txt
uvicorn app.main:app --reload

Docker

docker build -t nkey/news-summary-bot .
docker compose up

API

POST /api/news/summarize

영상 URL을 받아 자막 추출 → 요약 → Discord 전송을 수행합니다.

Request:

{
  "video_url": "https://youtu.be/xxx",
  "title": "영상 제목"
}

API_SECRET 설정 시 헤더에 X-Api-Secret 포함 필요.

Response:

{
  "status": "ok",
  "title": "영상 제목",
  "summary_length": 1234
}

GET /api/news/health

헬스 체크 엔드포인트.

n8n 워크플로우

RSS Feed Trigger (채널A) ──┐
                           ├→ Merge → HTTP Request (POST /api/news/summarize)
RSS Feed Trigger (채널B) ──┘

n8n에서 RSS Feed Trigger로 채널별 새 영상을 감지하고, 각 영상마다 이 봇의 API를 호출합니다. 자세한 설정은 docs/n8n-setup.md를 참고하세요.

배포

Docker Hub에 이미지를 푸시하고 서버에서 docker compose pull && docker compose up -d로 배포합니다. 자세한 내용은 docs/operations.md를 참고하세요.