From d298f3e7d9b6dbe39650df5b657dfd377c19c4ce Mon Sep 17 00:00:00 2001 From: CREATIVE_tg1 <1+creative_tg1@noreply.localhost> Date: Wed, 27 May 2026 14:57:23 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D1=83=20Fas?= =?UTF-8?q?tAPI=20Integration=20=D0=B2=20wiki?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FastAPI-Integration.md | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 FastAPI-Integration.md diff --git a/FastAPI-Integration.md b/FastAPI-Integration.md new file mode 100644 index 0000000..5b8d187 --- /dev/null +++ b/FastAPI-Integration.md @@ -0,0 +1,47 @@ +# Интеграция с FastAPI + +## Когда использовать + +Эта библиотека удобна для API-сервисов, потому что функция `download` возвращает MP4-байты в памяти, а не только путь к файлу. + +## Базовый пример + +```python +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 layer history, если это возможно