from fastapi import FastAPI, Header, HTTPException from pydantic import BaseModel from app.config import settings from app.summarizer import summarize from app.transcript import SkipVideo, extract_video_id, fetch_transcript app = FastAPI(title="News Summary Bot") class SummarizeRequest(BaseModel): video_url: str title: str = "" @app.post("/summarize") async def summarize_video( req: SummarizeRequest, x_api_secret: str = Header(default=""), ): if settings.api_secret and x_api_secret != settings.api_secret: raise HTTPException(status_code=401, detail="Unauthorized") title = req.title or "제목 없음" try: video_id = extract_video_id(req.video_url) transcript = fetch_transcript(video_id) summary = summarize(transcript, title) except SkipVideo as e: return {"status": "skipped", "title": title, "reason": str(e)} except Exception as e: return { "status": "error", "title": title, "error_type": type(e).__name__, "error_message": str(e), } return {"status": "ok", "title": title, "summary": summary} @app.get("/health") async def health(): return {"status": "ok"}