from fastapi import FastAPI, Header, HTTPException from pydantic import BaseModel from app.config import settings from app.discord import send_error_to_discord, send_to_discord 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 = "" channel_name: 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 "제목 없음" channel_name = req.channel_name or "" try: video_id = extract_video_id(req.video_url) transcript = fetch_transcript(video_id) summary = summarize(transcript, title) await send_to_discord(title, req.video_url, summary, channel_name) except SkipVideo as e: return {"status": "skipped", "title": title, "reason": str(e)} except Exception as e: await send_error_to_discord(title, req.video_url, e, channel_name) raise HTTPException(status_code=500, detail=str(e)) return {"status": "ok", "title": title, "summary_length": len(summary)} @app.get("/health") async def health(): return {"status": "ok"}