from fastapi import FastAPI, Query from fastapi.responses import JSONResponse import subprocess import json app = FastAPI() @app.get("/") def root(): return {"message": "Welcome to yt-dlp API (FastAPI)"} @app.get("/download") def download_info(url: str = Query(..., description="Video URL")): try: result = subprocess.run( ["yt-dlp", "-J", url], capture_output=True, text=True, timeout=20 ) if result.returncode != 0: return JSONResponse(status_code=500, content={"error": result.stderr}) data = json.loads(result.stdout) return { "title": data.get("title"), "uploader": data.get("uploader"), "duration": data.get("duration"), "formats": [ { "format_id": f["format_id"], "ext": f["ext"], "resolution": f.get("resolution") or f"{f.get('height')}p", "url": f["url"] } for f in data.get("formats", []) ] } except Exception as e: return JSONResponse(status_code=500, content={"error": str(e)})