| | 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)}) |