Документация 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"
}