PyTTSave


NamePyTTSave JSON
Version 1.1.0 PyPI version JSON
download
home_pagehttps://github.com/FlacSy/PyTTSave
SummaryWrapper for TTSave API
upload_time2025-02-03 22:35:53
maintainerNone
docs_urlNone
authorFlacSy
requires_python>=3.10.0
licenseNone
keywords
VCS
bugtrack_url
requirements requests
Travis-CI No Travis.
coveralls test coverage No coveralls.
            Документация PyTTSave
=========================

Эта документация описывает библиотеку PyTTSave, которая предоставляет интерфейс для загрузки контента из TikTok с использованием API.

---

## Установка

Установить PyTTSave можно с помощью pip:

```bash
pip3 install PyTTSave==1.0.0
```

---

## Быстрый старт

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

```python
from ttsave_api import TTSave, ContentType

# Инициализация клиента TTSave
client = TTSave()

# Проверка доступности сервера
if client.ping():
    print("Сервер доступен.")

# Загрузка контента
try:
    files = client.download("https://www.tiktok.com/@example/video/123456789", ContentType.Original)
    print("Загрузка успешно завершена. Сохраненные файлы:", files)
except Exception as e:
    print(f"Ошибка при загрузке: {e}")
```

---

## Классы

### ContentType

Перечисление типов контента, доступных для загрузки:

- `Original`: Оригинальный контент (фото-коллажи загружаются в виде отдельных изображений и аудиофайла).
- `VideoOnly`: Фото преобразуются в видеоколлаж.

Пример объявления:

```python
class ContentType(Enum):
    Original = "ORIGINAL"
    VideoOnly = "VIDEO_ONLY"
```

### TTSave

Основной класс для взаимодействия с API TTSave.

#### Конструктор

```python
TTSave(api_url: str = "http://45.13.225.104:4347/api/v3/")
```

**Параметры:**
- `api_url` *(str)* — URL API сервера (по умолчанию задано стандартное значение).

---

## Методы

### `ping()`

```python
ping() -> bool
```

**Описание:** Проверяет доступность сервера API.

**Возвращает:**
- `True`, если сервер доступен.
- `False`, если сервер недоступен.

**Исключения:**
- `requests.exceptions.RequestException` — Ошибка запроса.

---

### `download()`

```python
download(url: str, content_type: ContentType, downloads_dir: str = './') -> List[str] | None
```

**Описание:** Загружает контент с TikTok, используя API TTSave.

**Параметры:**
- `url` *(str)* — Ссылка на видео в TikTok.
- `content_type` *(ContentType)* — Тип загружаемого контента.
- `downloads_dir` *(str, optional)* — Папка для сохранения загруженных файлов (по умолчанию текущая директория).

**Возвращает:**
- `List[str]` — Список сохранённых файлов.
- `None`, если загрузка не удалась.

**Исключения:**
- `ServerError` — Ошибка при загрузке контента или недоступность сервера.
- `ParserError` — Ошибка при обработке ответа сервера.

---

### `_send_request()`

```python
_send_request(data: Dict[str, Any], endpoint: str) -> requests.Response | None
```

**Описание:** Вспомогательный метод для отправки POST-запросов к API.

**Параметры:**
- `data` *(Dict[str, Any])* — Данные запроса.
- `endpoint` *(str)* — Путь API (например, `download`).

**Возвращает:**
- `requests.Response`, если запрос успешен.
- `None`, если произошла ошибка.

**Исключения:**
- `requests.exceptions.RequestException` — Ошибка при отправке запроса.

---

### `_parse_multipart_stream()`

```python
_parse_multipart_stream(response, boundary: str, downloads_dir: str) -> List[str]
```

**Описание:** Обрабатывает multipart-ответ от сервера и сохраняет файлы.

**Параметры:**
- `response` — Ответ сервера с multipart-данными.
- `boundary` *(str)* — Разделитель multipart-данных.
- `downloads_dir` *(str)* — Директория для сохранения файлов.

**Возвращает:**
- `List[str]` — Список имен сохраненных файлов.

**Исключения:**
- `ParserError` — Ошибка при разборе заголовков или содержимого.

---

## Ошибки и Исключения

Библиотека использует два пользовательских исключения:

- `ServerError` — Вызывается при ошибках загрузки или недоступности сервера.
- `ParserError` — Вызывается при проблемах обработки ответа API.

Пример обработки исключений:

```python
try:
    files = client.download("https://www.tiktok.com/@example/video/123456789", ContentType.Original)
    print("Файлы загружены:", files)
except ServerError:
    print("Ошибка сервера!")
except ParserError:
    print("Ошибка обработки данных!")
except Exception as e:
    print(f"Неизвестная ошибка: {e}")
```

---

## Заключение

PyTTSave предоставляет удобный интерфейс для скачивания контента из TikTok. Он автоматически обрабатывает запросы и сохраняет файлы, упрощая интеграцию с различными проектами.

Если у вас возникли вопросы или предложения по улучшению библиотеки, пожалуйста, создавайте issues или pull requests в репозитории проекта.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/FlacSy/PyTTSave",
    "name": "PyTTSave",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10.0",
    "maintainer_email": null,
    "keywords": null,
    "author": "FlacSy",
    "author_email": "flacsy.x@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/30/87/d4865de5d2a376fd57614108ca79f2043994ddc1bb13e0ac6c6373d55f1e/pyttsave-1.1.0.tar.gz",
    "platform": null,
    "description": "\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f PyTTSave\n=========================\n\n\u042d\u0442\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 PyTTSave, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0438\u0437 TikTok \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c API.\n\n---\n\n## \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\n\n\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c PyTTSave \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e pip:\n\n```bash\npip3 install PyTTSave==1.0.0\n```\n\n---\n\n## \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\n\n\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438:\n\n```python\nfrom ttsave_api import TTSave, ContentType\n\n# \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 TTSave\nclient = TTSave()\n\n# \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\nif client.ping():\n    print(\"\u0421\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d.\")\n\n# \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430\ntry:\n    files = client.download(\"https://www.tiktok.com/@example/video/123456789\", ContentType.Original)\n    print(\"\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430. \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b:\", files)\nexcept Exception as e:\n    print(f\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435: {e}\")\n```\n\n---\n\n## \u041a\u043b\u0430\u0441\u0441\u044b\n\n### ContentType\n\n\u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438:\n\n- `Original`: \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 (\u0444\u043e\u0442\u043e-\u043a\u043e\u043b\u043b\u0430\u0436\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0438 \u0430\u0443\u0434\u0438\u043e\u0444\u0430\u0439\u043b\u0430).\n- `VideoOnly`: \u0424\u043e\u0442\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435\u043e\u043a\u043e\u043b\u043b\u0430\u0436.\n\n\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f:\n\n```python\nclass ContentType(Enum):\n    Original = \"ORIGINAL\"\n    VideoOnly = \"VIDEO_ONLY\"\n```\n\n### TTSave\n\n\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 API TTSave.\n\n#### \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\n\n```python\nTTSave(api_url: str = \"http://45.13.225.104:4347/api/v3/\")\n```\n\n**\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:**\n- `api_url` *(str)* \u2014 URL API \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0437\u0430\u0434\u0430\u043d\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435).\n\n---\n\n## \u041c\u0435\u0442\u043e\u0434\u044b\n\n### `ping()`\n\n```python\nping() -> bool\n```\n\n**\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435:** \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u0430 API.\n\n**\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442:**\n- `True`, \u0435\u0441\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d.\n- `False`, \u0435\u0441\u043b\u0438 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d.\n\n**\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f:**\n- `requests.exceptions.RequestException` \u2014 \u041e\u0448\u0438\u0431\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.\n\n---\n\n### `download()`\n\n```python\ndownload(url: str, content_type: ContentType, downloads_dir: str = './') -> List[str] | None\n```\n\n**\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435:** \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0441 TikTok, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f API TTSave.\n\n**\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:**\n- `url` *(str)* \u2014 \u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0432\u0438\u0434\u0435\u043e \u0432 TikTok.\n- `content_type` *(ContentType)* \u2014 \u0422\u0438\u043f \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430.\n- `downloads_dir` *(str, optional)* \u2014 \u041f\u0430\u043f\u043a\u0430 \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f).\n\n**\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442:**\n- `List[str]` \u2014 \u0421\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.\n- `None`, \u0435\u0441\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0435 \u0443\u0434\u0430\u043b\u0430\u0441\u044c.\n\n**\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f:**\n- `ServerError` \u2014 \u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0438\u043b\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0435\u0440\u0430.\n- `ParserError` \u2014 \u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043e\u0442\u0432\u0435\u0442\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.\n\n---\n\n### `_send_request()`\n\n```python\n_send_request(data: Dict[str, Any], endpoint: str) -> requests.Response | None\n```\n\n**\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435:** \u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 POST-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a API.\n\n**\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:**\n- `data` *(Dict[str, Any])* \u2014 \u0414\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.\n- `endpoint` *(str)* \u2014 \u041f\u0443\u0442\u044c API (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, `download`).\n\n**\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442:**\n- `requests.Response`, \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0440\u043e\u0441 \u0443\u0441\u043f\u0435\u0448\u0435\u043d.\n- `None`, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430.\n\n**\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f:**\n- `requests.exceptions.RequestException` \u2014 \u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430.\n\n---\n\n### `_parse_multipart_stream()`\n\n```python\n_parse_multipart_stream(response, boundary: str, downloads_dir: str) -> List[str]\n```\n\n**\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435:** \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 multipart-\u043e\u0442\u0432\u0435\u0442 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0444\u0430\u0439\u043b\u044b.\n\n**\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:**\n- `response` \u2014 \u041e\u0442\u0432\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0441 multipart-\u0434\u0430\u043d\u043d\u044b\u043c\u0438.\n- `boundary` *(str)* \u2014 \u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c multipart-\u0434\u0430\u043d\u043d\u044b\u0445.\n- `downloads_dir` *(str)* \u2014 \u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432.\n\n**\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442:**\n- `List[str]` \u2014 \u0421\u043f\u0438\u0441\u043e\u043a \u0438\u043c\u0435\u043d \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.\n\n**\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f:**\n- `ParserError` \u2014 \u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0440\u0430\u0437\u0431\u043e\u0440\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u0432 \u0438\u043b\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e.\n\n---\n\n## \u041e\u0448\u0438\u0431\u043a\u0438 \u0438 \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\n\n\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u0432\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f:\n\n- `ServerError` \u2014 \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u0445 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u043b\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.\n- `ParserError` \u2014 \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0442\u0432\u0435\u0442\u0430 API.\n\n\u041f\u0440\u0438\u043c\u0435\u0440 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439:\n\n```python\ntry:\n    files = client.download(\"https://www.tiktok.com/@example/video/123456789\", ContentType.Original)\n    print(\"\u0424\u0430\u0439\u043b\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b:\", files)\nexcept ServerError:\n    print(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430!\")\nexcept ParserError:\n    print(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445!\")\nexcept Exception as e:\n    print(f\"\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430: {e}\")\n```\n\n---\n\n## \u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\n\nPyTTSave \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0438\u0437 TikTok. \u041e\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0444\u0430\u0439\u043b\u044b, \u0443\u043f\u0440\u043e\u0449\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438.\n\n\u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0438\u043b\u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439\u0442\u0435 issues \u0438\u043b\u0438 pull requests \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Wrapper for TTSave API",
    "version": "1.1.0",
    "project_urls": {
        "Homepage": "https://github.com/FlacSy/PyTTSave"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8e2d8a71702a9cc1cc7a7d465abac723bc29ec0fd30fad95a0a09aa2e73d503d",
                "md5": "10de47a1e6d1afddf344e6b5279699af",
                "sha256": "68569416c832220b8dde3a4a4cc525a1354fb13a388c27d7ec269c05a3686dab"
            },
            "downloads": -1,
            "filename": "PyTTSave-1.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "10de47a1e6d1afddf344e6b5279699af",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10.0",
            "size": 10304,
            "upload_time": "2025-02-03T22:35:51",
            "upload_time_iso_8601": "2025-02-03T22:35:51.203029Z",
            "url": "https://files.pythonhosted.org/packages/8e/2d/8a71702a9cc1cc7a7d465abac723bc29ec0fd30fad95a0a09aa2e73d503d/PyTTSave-1.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3087d4865de5d2a376fd57614108ca79f2043994ddc1bb13e0ac6c6373d55f1e",
                "md5": "920480b32a9de4b3d8d396c5e4f407b4",
                "sha256": "1bd116e3ce5bd2ad54eb9be731d44be0716be6d3f6dfe6617024107c7555b13c"
            },
            "downloads": -1,
            "filename": "pyttsave-1.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "920480b32a9de4b3d8d396c5e4f407b4",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10.0",
            "size": 9209,
            "upload_time": "2025-02-03T22:35:53",
            "upload_time_iso_8601": "2025-02-03T22:35:53.257925Z",
            "url": "https://files.pythonhosted.org/packages/30/87/d4865de5d2a376fd57614108ca79f2043994ddc1bb13e0ac6c6373d55f1e/pyttsave-1.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-02-03 22:35:53",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "FlacSy",
    "github_project": "PyTTSave",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "requests",
            "specs": []
        }
    ],
    "lcname": "pyttsave"
}
        
Elapsed time: 0.41411s