Files
yt-shorts-downloader/README.md
T
ВяткинАртём 59aaa9c4d7
CI / Quality Checks (push) Failing after 9s
CI / Test Suite (push) Successful in 10s
Refactor code structure for improved readability and maintainability
2026-05-27 17:06:39 +03:00

3.1 KiB
Raw Blame History

yt-shorts-downloader

Библиотека и CLI для скачивания YouTube Shorts через Netscape cookie session.

Целевой контракт публичного API:

  • вход: ссылка YouTube и путь к session file
  • выход: бинарный MP4 в памяти для интеграции в API

Установка

Для использования библиотеки:

uv pip install .

Для разработки:

uv sync --group dev

Использование библиотеки

from yt_shorts_downloader import download

video = download(
		"https://www.youtube.com/shorts/VIDEO_ID",
		"cookies.txt",
)

assert video.media_type == "video/mp4"
binary_mp4 = video.content
filename = video.filename

Если нужен файл на диске, используйте вспомогательную функцию:

from yt_shorts_downloader import download_to_path

file_path = download_to_path(
		"https://www.youtube.com/shorts/VIDEO_ID",
		"cookies.txt",
		output_dir="downloads",
)

CLI

uv run yt-shorts-downloader \
	"https://www.youtube.com/shorts/VIDEO_ID" \
	cookies.txt \
	--output-dir downloads

Архитектура

  • src/yt_shorts_downloader/api.py: публичный API библиотеки
  • src/yt_shorts_downloader/models: доменные модели
  • src/yt_shorts_downloader/services: валидация и разбор session file
  • src/yt_shorts_downloader/core: интеграция с yt-dlp и инфраструктурные функции
  • stubs: локальные mypy stubs для внешних зависимостей без полной типизации

Качество

  • mypy работает в strict-режиме
  • runtime-зависимости лежат в секции project.dependencies
  • инструменты разработки лежат в секции dependency-groups.dev

Основные команды:

make format
make ci-check
make test
make build

CI/CD

В репозитории добавлены Gitea Actions workflow:

  • .gitea/workflows/ci.yml: lint, mypy, deptry, pytest
  • .gitea/workflows/release.yml: повторный прогон quality/tests на теге и публикация в Gitea Packages только после их успеха

Публикация настроена в Gitea PyPI registry по документации Gitea Packages.

Нужные secrets для release workflow:

  • GITEA_PYPI_REPOSITORY_URL: полный endpoint вида https://gitea.example.com/api/packages//pypi
  • GITEA_PACKAGE_USERNAME: пользователь Gitea
  • GITEA_PACKAGE_TOKEN: personal access token с правом package write

Публикация идёт только на push тега вида v* и только после успешных lint/typecheck/test jobs.

Локально тот же сценарий можно выполнить так:

export GITEA_PYPI_REPOSITORY_URL="https://gitea.example.com/api/packages/<owner>/pypi"
export GITEA_PACKAGE_USERNAME="<username>"
export GITEA_PACKAGE_TOKEN="<token>"
make publish-gitea