Skip to main content

Асинхронная 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tsf_sh-1.0.1.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tsf_sh-1.0.1-py3-none-any.whl (12.4 kB view details)

Uploaded Python 3

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

Hashes for tsf_sh-1.0.1.tar.gz
Algorithm Hash digest
SHA256 117b4501d8f728de1299b185a8f89e799e029c599441d62f79c651619fd480da
MD5 6ed53403749ec75452c4e3b9a294a7a3
BLAKE2b-256 fd269db8034059f82dd1ef4bc1936e075582467c2c9efe13c866bf466145584a

See more details on using hashes here.

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

Hashes for tsf_sh-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 323dfdbfa1fd5acdd1eba771123c5d98a3a4d5412b7c4b032d3324892562b93f
MD5 0477ab0241caa37d4cc6dff74837d411
BLAKE2b-256 cf17380fa0024503f30f09b6d440a037f732b605031dc7fae537747d2a167fed

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page