Неофициальная асинхронная Python-библиотека для CloudTips (получение донатов, поллинг, обновление токенов)
Project description
CloudtipsAPI
Неофициальная асинхронная Python-библиотека для CloudTips — получение донатов, поллинг новых поступлений и автоматическое обновление токенов.
Установка
pip install cloudtips
Быстрый старт
import asyncio
import json
from cloudtips import CloudTipsAuth, CloudTipsClient, TokenData
with open("donate.json") as f:
config = json.load(f)
# Колбэк вызывается каждый раз при обновлении токенов.
# Поддерживаются как async, так и обычные функции.
# Refresh-токен одноразовый — обязательно сохраняйте новые!
async def on_token_refresh(token_data: TokenData):
config["cloudtips_token"] = token_data.access_token
config["cloudtips_refresh_token"] = token_data.refresh_token
config["cloudtips_expires_at"] = token_data.expires_at
with open("donate.json", "w") as f:
json.dump(config, f, ensure_ascii=False, indent=2)
auth = CloudTipsAuth(
token=config["cloudtips_token"],
refresh_token=config["cloudtips_refresh_token"],
expires_at=config["cloudtips_expires_at"],
on_token_refresh=on_token_refresh,
)
async def main():
async with CloudTipsClient(auth) as client:
donations = await client.get_all_donations()
for d in donations:
print(d)
# [2024-01-15 14:30] Антон → 100₽ — "спасибо за контент"
asyncio.run(main())
Получение донатов
async with CloudTipsClient(auth) as client:
# Все донаты за последние 24 часа
donations = await client.get_all_donations()
for d in donations:
print(d.name) # Антон
print(d.amount) # 50.0
print(d.comment) # спасибо за сервис
print(d.date) # 2026-04-10 20:44:00+03:00
# За конкретный период
from datetime import datetime, timedelta, timezone
week_ago = datetime.now(tz=timezone.utc) - timedelta(days=7)
weekly = await client.get_all_donations(since=week_ago)
print(f"Всего за неделю: {len(weekly)} донатов")
print(f"Сумма: {sum(d.amount for d in weekly)}₽")
Поллинг новых донатов
Вариант 1 — async-генератор
async with CloudTipsClient(auth) as client:
async for donation in client.poll(interval=30):
print(f"💰 {donation.name} задонатил {donation.amount}₽")
if donation.comment:
print(f" Комментарий: {donation.comment}")
Вариант 2 — async-колбэк
async def handle_donation(donation):
print(f"Новый донат от {donation.name}: {donation.amount}₽")
# await bot.send_message(...)
async with CloudTipsClient(auth) as client:
async for _ in client.poll(interval=15, callback=handle_donation):
pass
Вариант 3 — фоновая задача asyncio
async def poll_task(client):
async for donation in client.poll(interval=30):
print(f"Новый донат: {donation}")
async def main():
async with CloudTipsClient(auth) as client:
task = asyncio.create_task(poll_task(client))
await asyncio.sleep(3600) # работаем час
task.cancel()
asyncio.run(main())
Профиль, карты и баланс
async with CloudTipsClient(auth) as client:
# Профиль пользователя
me = await client.get_me()
print(me.full_name) # Иван Иванов
print(me.payout_method) # Accumulation
# Привязанные карты
for card in await client.get_cards():
print(card) # MIR *0000 (T-BANK, до 00/00) [по умолчанию]
# Баланс к выводу
s = await client.get_accumulation_summary()
print(f"Накоплено: {s.accumulated_amount}₽")
print(f"Комиссия: {s.commission_percent}%")
print(f"Следующая выплата: {s.next_payout_date or 'не запланирована'}")
# Информация о комиссиях
fee = await client.get_payout_fee_info()
print(fee.text)
# Смена метода выплат
await client.set_payout_method("Instant") # мгновенно
await client.set_payout_method("Accumulation") # накопительно
# Удаление карты
for card in await client.get_cards():
if not card.is_default:
await client.delete_card(card.token)
Обработка ошибок
from cloudtips import CloudTipsAuthError, CloudTipsAPIError
try:
async with CloudTipsClient(auth) as client:
donations = await client.get_all_donations()
except CloudTipsAuthError as e:
print(f"Проблема с аутентификацией: {e}")
except CloudTipsAPIError as e:
print(f"Ошибка API (HTTP {e.status_code}): {e.detail}")
Примечания
- Refresh-токен одноразовый. После каждого обновления старый токен становится недействительным. Всегда передавайте
on_token_refreshи сохраняйте новые токены. on_token_refreshподдерживает как обычные (def), так и async-функции (async def).- Библиотека автоматически обновляет токен за 2 минуты до истечения.
- Поллинг отслеживает уже виденные
transaction_id, поэтому дублей не будет. - Клиент — контекстный менеджер (
async with), это рекомендуемый способ использования. - Для логирования внутренних процессов и ошибок сети библиотека использует стандартный модуль
logging. Настройте ваш логгер для отображения сообщений:logging.basicConfig(level=logging.INFO).
Лицензия
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
cloudtips-0.4.1.tar.gz
(19.6 kB
view details)
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
cloudtips-0.4.1-py3-none-any.whl
(13.1 kB
view details)
File details
Details for the file cloudtips-0.4.1.tar.gz.
File metadata
- Download URL: cloudtips-0.4.1.tar.gz
- Upload date:
- Size: 19.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3e4bcc79928c5b28c42c44d6539d3260a78ceae5d202e056a77313a38230eaa3
|
|
| MD5 |
59976985565422560412601ba1c9cd8a
|
|
| BLAKE2b-256 |
4d132e0bfcc286b57887a0aacb83360a6c7ef39cac5cbbb135a20e120df08efb
|
File details
Details for the file cloudtips-0.4.1-py3-none-any.whl.
File metadata
- Download URL: cloudtips-0.4.1-py3-none-any.whl
- Upload date:
- Size: 13.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1609cce3cb553fb111d3840e48d194d27c2c8344552e84aaa60d7adfaeee7f5c
|
|
| MD5 |
70096f74959a49443f1dd944f7da6e08
|
|
| BLAKE2b-256 |
328ed902cc5af8d7df5e4065a2219c4c302d86b14ab20fe47adc30e81f6fc4d8
|