Clone
2
FastAPI Integration
CREATIVE_tg1 edited this page 2026-05-27 14:58:02 +00:00

Интеграция с FastAPI

Когда использовать

Эта библиотека удобна для API-сервисов, потому что функция download возвращает MP4-байты в памяти, а не только путь к файлу.

Базовый пример

from fastapi import FastAPI, HTTPException
from fastapi.responses import Response

from yt_shorts_downloader import download
from yt_shorts_downloader.exceptions import YtShortsDownloaderError

app = FastAPI()


@app.get('/download')
def download_short(url: str) -> Response:
    try:
        video = download(url, 'cookies.txt')
    except YtShortsDownloaderError as exc:
        raise HTTPException(status_code=400, detail=str(exc)) from exc

    return Response(
        content=video.content,
        media_type=video.media_type,
        headers={
            'Content-Disposition': f'attachment; filename="{video.filename}"',
        },
    )

Что важно учитывать

  • download создаёт временную директорию и сам читает итоговый MP4 в память
  • для больших видео нужно учитывать объём RAM на воркере
  • ошибки библиотеки лучше конвертировать в понятные HTTP-ответы
  • cookie-файл должен быть недоступен извне и не должен попадать в репозиторий

Рекомендации для production

  • валидируйте входной URL на уровне API-контракта
  • добавьте rate limiting на endpoint скачивания
  • логируйте str(exc) для диагностики ошибок авторизации и yt-dlp
  • храните cookie-файл вне публичных директорий и вне истории docker image layers, если это возможно