ВяткинАртём 7cc5b1ad06
CI / Quality Checks (push) Successful in 12s
CI / Test Suite (push) Successful in 10s
CI / Publish to Gitea Packages (push) Failing after 9s
Добавить автоматическую публикацию в Gitea Packages после успешного CI и обновить документацию о версиях пакетов
2026-05-27 17:41:59 +03:00
2026-05-27 13:28:29 +00:00

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 Packages после успешного CI на push в main

Публикация настроена в Gitea PyPI registry по документации Gitea Packages. Версия пакета берётся из секции [project] -> version в pyproject.toml.

Нужные secrets для CI 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 в main после успешных lint/typecheck/test jobs. Если версия пакета уже существует в registry, upload будет пропущен через --skip-existing. Если версия в pyproject.toml увеличена, в Gitea Packages появится новая версия пакета, а старые версии останутся доступными.

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

export GITEA_PYPI_REPOSITORY_URL="https://gitea.example.com/api/packages/<owner>/pypi"
export GITEA_PACKAGE_USERNAME="<username>"
export GITEA_PACKAGE_TOKEN="<token>"
make package-version
make publish-gitea
S
Description
No description provided
Readme GPL-3.0 133 KiB
Languages
Python 94.5%
Makefile 5.5%