CREATIVE_tg1
  • Joined on 2025-09-01

yt-shorts-downloader (0.1.0)

Published 2026-05-27 14:48:19 +00:00 by CREATIVE_tg1 in CREATIVE_tg1/yt-shorts-downloader

Installation

pip install --index-url https://gitea.creative-tg1.ru/api/packages/CREATIVE_tg1/pypi/simple/ --extra-index-url https://pypi.org/simple yt-shorts-downloader

About this package

Typed library and CLI for downloading YouTube Shorts as MP4 via Netscape cookie sessions

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. Gitea не поддерживает повторную публикацию той же версии, поэтому CI сначала проверяет registry и пропускает upload, если эта версия уже существует.

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

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

Публикация идёт автоматически на push в main после успешных lint/typecheck/test jobs. Если версия пакета уже существует в registry, upload будет пропущен до вызова twine upload. Если версия в pyproject.toml увеличена, в Gitea Packages появится новая версия пакета, а старые версии останутся доступными.

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

export PYPI_REPOSITORY_URL="https://gitea.example.com/api/packages/<owner>/pypi"
export PACKAGE_USERNAME="<username>"
export PACKAGE_TOKEN="<token>"
make package-version
make publish-gitea

Для обратной совместимости локальная команда publish-gitea также принимает переменные GITEA_PYPI_REPOSITORY_URL, GITEA_PACKAGE_USERNAME и GITEA_PACKAGE_TOKEN.

Requirements

Requires Python: >=3.12
Details
PyPI
2026-05-27 14:48:19 +00:00
0
50 KiB
Assets (2)
Versions (1) View all
0.1.0 2026-05-27