GEngineAPI
Асинхронный модульный клиент для взаимодействия с API G-Engine.
Особенности
- Полностью асинхронный интерфейс на базе
aiohttpиasyncio - Модульная структура с разделением по доменам API
- Детальная обработка ошибок и исключений
- Автоматические повторные попытки для временных ошибок
- Поддержка JWT-аутентификации
- Поддержка прокси, включая SOCKS5
- Ферма клиентов с балансировкой нагрузки и стратегиями ротации
- Подробное логирование
- Строгая типизация с помощью аннотаций типов
- Класс-конфигурация для централизованной настройки и повторного использования
Установка
pip install gengineapi
Для поддержки SOCKS5 прокси убедитесь, что установлен пакет aiohttp-socks:
pip install aiohttp-socks
Использование
Быстрый старт
import os
import asyncio
import logging
from gengineapi import ClientFarm
from dotenv import load_dotenv
load_dotenv()
GTOKEN = os.getenv("GTOKEN")
# Настройка логирования
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger("gengine")
gfarm = ClientFarm(logger=logger)
gfarm.create_config(name="base",
base_url="https://b2b-api.ggsel.com/api/v2",
jwt_token=GTOKEN,
timeout=60,
max_retries=5,
proxy="socks5://username:password@host:port") # Прокси опциональные
async def main():
client = await gfarm.get_client("base")
async with client:
me = await client.users.get_me()
logger.info(me)
if __name__ == "__main__":
asyncio.run(main())
Инициализация с существующим токеном
import asyncio
from gengineapi import GEngineClient
async def main():
# Создаем клиент с существующим токеном
async with GEngineClient(
base_url="https://api.example.com/api/v2",
jwt_token="your-jwt-token",
timeout=30,
max_retries=3
) as client:
# Используем API
user_info = await client.users.get_me()
print(f"Текущий пользователь: {user_info['login']}")
asyncio.run(main())
Получение нового токена
import asyncio
from gengineapi import GEngineClient
async def main():
# Создаем клиент без токена
async with GEngineClient(
base_url="https://api.example.com/api/v2",
timeout=30,
max_retries=3
) as client:
# Аутентифицируемся и получаем токен
token_info = await client.auth.login(
login="user@example.com",
password="secure_password"
)
# Получаем токен
token = token_info["access_token"]
print(f"Получен токен: {token}")
# Обновляем токен в клиенте
client.update_token(token)
# Используем API
user_info = await client.users.get_me()
print(f"Текущий пользователь: {user_info['login']}")
asyncio.run(main())
Использование прокси
Клиент поддерживает работу через прокси, включая SOCKS5:
import asyncio
from gengineapi import GEngineClient
async def main():
# Создаем клиент с использованием SOCKS5 прокси
async with GEngineClient(
base_url="https://api.example.com/api/v2",
jwt_token="your-jwt-token",
timeout=60, # Увеличиваем таймаут для прокси
max_retries=5, # Увеличиваем количество повторных попыток
proxy="socks5://user:pass@host:port" # Адрес SOCKS5 прокси
) as client:
# Используем API через прокси
user_info = await client.users.get_me()
print(f"Текущий пользователь: {user_info['login']}")
# Можно изменить настройки прокси на лету
client.update_proxy("socks5://another-host:port")
# Или отключить прокси
client.update_proxy(None)
asyncio.run(main())
Использование класса-конфигурации
Класс-конфигурация позволяет настроить параметры клиента один раз и затем использовать их многократно:
import asyncio
from gengineapi import GEngineConfig
async def main():
# Настройка параметров клиента
GEngineConfig.setup(
base_url="https://api.example.com/api/v2",
jwt_token="your-jwt-token",
timeout=30,
max_retries=3,
proxy="socks5://127.0.0.1:9050" # Опционально - прокси
)
# Получение глобального экземпляра клиента
client = await GEngineConfig.get_client()
# Использование клиента
user_info = await client.users.get_me()
print(f"Текущий пользователь: {user_info['login']}")
# Не нужно закрывать клиент при каждом использовании,
# так как он хранится глобально
# В другой части приложения
# Получение того же экземпляра клиента
client = await GEngineConfig.get_client()
# Использование клиента
balance = await client.users.get_balance()
print(f"Баланс: {balance['balance']} {balance['currency']}")
# Обновление настройки прокси в конфигурации
await GEngineConfig.update_proxy(None) # Отключение прокси
# При завершении приложения
await GEngineConfig.reset() # Закрывает глобальный клиент
asyncio.run(main())
Использование фермы клиентов
Ферма клиентов позволяет управлять множеством клиентов с разными конфигурациями и стратегиями ротации:
import asyncio
from gengineapi import ClientFarm
async def main():
# Создаем ферму клиентов
farm = ClientFarm()
# Добавляем несколько конфигураций с разными прокси
farm.create_config(
name="client1",
base_url="https://api.example.com/api/v2",
jwt_token="token1",
proxy="socks5://user1:pass1@host1:port1",
tags=["group1", "production"]
)
farm.create_config(
name="client2",
base_url="https://api.example.com/api/v2",
jwt_token="token2",
proxy="socks5://user2:pass2@host2:port2",
tags=["group1", "backup"]
)
# Устанавливаем стратегию выбора клиента
farm.set_selection_strategy("round_robin") # или "random", "least_errors", "least_recently_used"
# Получаем клиент по имени
client1 = await farm.get_client("client1")
await client1.users.get_me()
# Получаем следующий клиент согласно стратегии
client = await farm.get_next_client()
await client.currencies.get_rate(source="cb_rf", pair="USD:RUB")
# Получаем клиент по тегу
client = await farm.get_next_client(tag="production")
await client.transactions.get_transactions(limit=5)
# При завершении работы закрываем все клиенты
await farm.close_all()
asyncio.run(main())
Работа с платежами
import asyncio
import uuid
from decimal import Decimal
from gengineapi import GEngineClient
async def main():
async with GEngineClient(
base_url="https://api.example.com/api/v2",
jwt_token="your-jwt-token"
) as client:
# Генерируем уникальный идентификатор транзакции
transaction_id = str(uuid.uuid4())
# Создаем и верифицируем платеж
payment = await client.payments.verify(
transaction_id=transaction_id,
service_id=1,
account="user123",
amount=Decimal("10.99"),
currency="USD"
)
print(f"Создан платеж: {payment['transaction_id']}")
# Выполняем платеж
result = await client.payments.execute(transaction_id=transaction_id)
print(f"Статус платежа: {result['status_code']}")
# Получаем статус платежа
status = await client.payments.get_status(transaction_id=transaction_id)
print(f"Текущий статус платежа: {status['status_code']}")
asyncio.run(main())
Доступные модули API
payments- создание и выполнение платежейfinances- работа с финансовыми даннымиauth- аутентификация и управление токенамиusers- работа с пользователями и их балансамиtransactions- работа с транзакциямиcurrencies- работа с курсами валют
Дополнительная документация
Ручки, которые дергаем - https://b2b-api.ggsel.com/api/v2/docs#
Зависимости
- Python 3.7+
- aiohttp >= 3.8.0
- typing-extensions >= 4.0.0
- aiohttp-socks >= 0.7.1 (опционально, для поддержки SOCKS5 прокси)
Лицензия
MIT
Metadata
Release files for gengineapi 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| gengineapi-0.2.2.tar.gz | 23.2 kB | Without provenance | Details for gengineapi-0.2.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| gengineapi-0.2.2-py3-none-any.whl | Python 3 | none | any | Details for gengineapi-0.2.2-py3-none-any.whl |
Total release size: 52.6 kB
Release files / gengineapi-0.2.2.tar.gz
| Download URL | gengineapi-0.2.2.tar.gz |
|---|---|
| Size | 23.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
852df7d08279e199998facd54e6192cc3463ec2598fa234c23b7915a4cdaff9c
|
|
BLAKE2b-256 checksum How to use checksums |
6daa87e8e7e8f6dc0ddc31bd75778c380e5f5b7aec9d6515e5c9fad4da21438b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.7.2
|
Release files / gengineapi-0.2.2-py3-none-any.whl
| Download URL | gengineapi-0.2.2-py3-none-any.whl |
|---|---|
| Size | 29.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a5d1f65539bb4175b2947fbe04950e286a1f04e06b4dabbc2bbb198ff28a6ba3
|
|
BLAKE2b-256 checksum How to use checksums |
d34d39383fc45ccc59da7abec2486e2a2f41309c58df443683a5c4d4839c1826
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.7.2
|
Security for gengineapi 0.2.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.