test dowloand

This commit is contained in:
2026-02-18 14:07:21 +05:00
parent 11780384e0
commit 74b32e869f
8 changed files with 202 additions and 11 deletions

View File

@@ -1,11 +1,11 @@
import asyncio
from fastapi import FastAPI
from api.route import default, subscription
from api.route import users
from api.route import users, installing
from api.db.subscription import init_db
from api.db.connection import wait_for_db
app = FastAPI(title="VPN Bot API")
app = FastAPI(title="LLM-infa API")
@app.on_event("startup")
async def on_startup():
@@ -13,5 +13,6 @@ async def on_startup():
await init_db()
app.include_router(default.router)
app.include_router(subscription.router)
app.include_router(users.router)
#app.include_router(subscription.router)
#app.include_router(users.router)
app.include_router(installing.router)

View File

@@ -14,4 +14,4 @@ async def root():
version = data.get("project", {}).get("version", "dev")
except Exception:
pass
return {"status": "ok", "msg": "VPN Bot API", "version": version}
return {"status": "ok", "msg": "LLM-infa API", "version": version}

34
api/route/installing.py Normal file
View File

@@ -0,0 +1,34 @@
# Импортируем необходимые модули
from fastapi import APIRouter, HTTPException, Query
from pydantic import BaseModel
import yt_dlp
import tempfile
from fastapi.responses import FileResponse
import os
router = APIRouter(prefix="/yt-dlp", tags=["yt-dlp"])
class DownloadRequest(BaseModel):
url: str
format: str = "best"
@router.post("/download")
async def download_video(data: DownloadRequest):
"""
Скачать видео по ссылке через yt-dlp и вернуть файл пользователю.
"""
save_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), '../../data'))
os.makedirs(save_dir, exist_ok=True)
ydl_opts = {
'outtmpl': os.path.join(save_dir, '%(title)s.%(ext)s'),
'format': data.format,
}
try:
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info(data.url, download=True)
filename = ydl.prepare_filename(info)
except Exception as e:
raise HTTPException(status_code=400, detail=f"Ошибка загрузки: {e}")
if not os.path.exists(filename):
raise HTTPException(status_code=404, detail="Файл не найден после загрузки")
return FileResponse(filename, filename=os.path.basename(filename), media_type='application/octet-stream')