Асинхронная Python библиотека для работы с tsf.sh API
Project description
tsf-sh
Асинхронная Python библиотека для работы с tsf.sh API - сервисом для сокращения ссылок.
Установка
pip install tsf-sh
Требования
- Python 3.8+
- httpx 0.24.0+
Быстрый старт
import asyncio
from tsf_sh import Client
async def main():
# Инициализация клиента
client = Client(api_key="your-api-key")
# Создание короткой ссылки
link = await client.create_link(
url="https://example.com",
ttl_hours=24
)
print(f"Создана ссылка: {link.short_url}")
# Получение информации о ссылке
link_info = await client.get_link(link.code)
print(f"Переходов: {link_info.clicks}")
# Закрытие клиента
await client.close()
asyncio.run(main())
Использование с контекстным менеджером
import asyncio
from tsf_sh import Client
async def main():
async with Client(api_key="your-api-key") as client:
# Создание ссылки
link = await client.create_link("https://example.com")
print(f"Ссылка: {link.short_url}")
# Получение списка всех ссылок
links = await client.get_links()
print(f"Всего ссылок: {len(links)}")
# Получение статистики
stats = await client.get_stats()
print(f"Всего переходов: {stats.total_clicks}")
asyncio.run(main())
API методы
Создание ссылки
link = await client.create_link(
url="https://example.com",
ttl_hours=24, # Время жизни в часах (1-24)
password="optional_password" # Опциональный пароль
)
Получение списка ссылок
links = await client.get_links()
# Список отсортирован по дате создания (новые первые)
Получение информации о ссылке
link = await client.get_link("abc123")
print(f"URL: {link.original_url}")
print(f"Переходов: {link.clicks}")
print(f"Истекает: {link.expires_datetime}")
Удаление ссылки
await client.delete_link("abc123")
Продление времени жизни ссылки
link = await client.extend_link("abc123", ttl_hours=24)
# TTL устанавливается от текущего момента
Установка пароля
await client.set_password("abc123", "my_password")
Удаление пароля
await client.remove_password("abc123")
Перегенерация кода ссылки
new_code = await client.reroll_code("abc123")
print(f"Новый код: {new_code}")
Получение статистики
stats = await client.get_stats()
print(f"Активных ссылок: {stats.links_count}")
print(f"Всего переходов: {stats.total_clicks}")
Проверка здоровья API
health = await client.health_check()
print(f"Статус: {health.status}")
print(f"Redis: {health.services['redis']}")
Модели данных
Link
link.code # Код ссылки
link.short_url # Короткая ссылка
link.original_url # Оригинальный URL
link.clicks # Количество переходов
link.ttl_seconds # Время жизни в секундах
link.created_at # Unix timestamp создания
link.expires_at # Unix timestamp истечения
link.has_password # Наличие пароля
link.created_datetime # datetime объект для created_at
link.expires_datetime # datetime объект для expires_at
link.is_expired # Проверка истечения
link.remaining_seconds # Оставшееся время жизни
LinkStats
stats.links_count # Количество активных ссылок
stats.total_clicks # Всего переходов
HealthStatus
health.status # "healthy" или "degraded"
health.services # Словарь со статусами сервисов
health.is_healthy # True если API здоров
Обработка ошибок
Библиотека выбрасывает специфичные исключения для разных типов ошибок:
from tsf_sh import (
ValidationError, # 400 - Ошибка валидации
UnauthorizedError, # 401 - Неверный API ключ
ForbiddenError, # 403 - Требуется премиум
NotFoundError, # 404 - Ресурс не найден
ConflictError, # 409 - Конфликт (ссылка уже существует)
RateLimitError, # 429 - Превышен лимит запросов
InternalServerError # 500 - Внутренняя ошибка сервера
)
try:
link = await client.create_link("invalid-url")
except ValidationError as e:
print(f"Ошибка валидации: {e.message}")
except ConflictError as e:
print(f"Ссылка уже существует: {e.existing_code}")
except RateLimitError as e:
print(f"Лимит превышен. Попробуйте через {e.reset_time} секунд")
Получение API ключа
API ключ можно получить в Telegram боте @tsf_sh_bot в разделе профиля, но только после покупки премиума. Премиум покупается навсегда.
Лицензия
MIT
Ссылки
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tsf_sh-1.0.1.tar.gz.
File metadata
- Download URL: tsf_sh-1.0.1.tar.gz
- Upload date:
- Size: 11.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
117b4501d8f728de1299b185a8f89e799e029c599441d62f79c651619fd480da
|
|
| MD5 |
6ed53403749ec75452c4e3b9a294a7a3
|
|
| BLAKE2b-256 |
fd269db8034059f82dd1ef4bc1936e075582467c2c9efe13c866bf466145584a
|
File details
Details for the file tsf_sh-1.0.1-py3-none-any.whl.
File metadata
- Download URL: tsf_sh-1.0.1-py3-none-any.whl
- Upload date:
- Size: 12.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
323dfdbfa1fd5acdd1eba771123c5d98a3a4d5412b7c4b032d3324892562b93f
|
|
| MD5 |
0477ab0241caa37d4cc6dff74837d411
|
|
| BLAKE2b-256 |
cf17380fa0024503f30f09b6d440a037f732b605031dc7fae537747d2a167fed
|