Skip to main content

PlayerokAPI

Лёгкая асинхронная библиотека для работы с API маркетплейса Playerok.

CI Docs PyPI Python License: MIT

Неофициальная библиотека. Проект не связан с Playerok и не поддерживается площадкой.

Что это

Клиент к Playerok по образцу FunPayAPI: пакет-папка, который можно поставить из PyPI или положить рядом с ботом. Внутри — асинхронный клиент, типизированные модели и слушатель событий. Из зависимостей только httpx и websockets.

Площадка живёт на трёх транспортах, и библиотека использует все:

Транспорт Что закрывает
REST playerok.com/rest-api/public, bff.playerok.com, sapi.playerok.com авторизация, профиль, файлы, PL-токены, Fragment, Steam, лотереи, создание сделки
REST api.playerok.com/v1/catalog публичный каталог: популярное и официальный магазин
GraphQL playerok.com/graphql товары, чаты, сообщения, сделки, отзывы, транзакции
WebSocket wss://ws.playerok.com/graphql события в реальном времени

Где у площадки есть REST — библиотека идёт в REST. Админские и внутренние ручки сознательно не реализованы: только то, чем пользуется обычный клиент.

Установка

pip install PlayerokAPI

Быстрый старт

import asyncio
from PlayerokAPI import Account


async def main() -> None:
    async with Account(token="ваш_token_из_cookie") as acc:
        me = await acc.get_me()
        print(me.username, me.balance.available)

        chats = await acc.chats.search(filter={"unread": True}, first=10)
        for chat in chats:
            print(chat.id, chat.last_message.text if chat.last_message else "")


asyncio.run(main())

Часть API публичная и работает без токена:

async with Account() as acc:
    for item in await acc.items.top(page_size=5):
        print(item.price, item.name)

События

import asyncio
from PlayerokAPI import Account, EventType, MessageEvent


async def main() -> None:
    async with Account(token="...") as acc:
        me = await acc.get_me()
        listener = acc.listener(events=[EventType.NEW_MESSAGE])

        @listener.on(EventType.NEW_MESSAGE)
        async def on_message(event: MessageEvent) -> None:
            message = event.message
            if message.is_system or message.author_id == me.id:
                return
            await acc.send_message(message.chat_id, "Привет!")

        await listener.run()


asyncio.run(main())

Типы событий: NEW_MESSAGE, MESSAGE_EDITED, MESSAGE_DELETED, NEW_CHAT, CHAT_UPDATED, CHAT_READ, NEW_DEAL, DEAL_UPDATED, ITEM_CREATED, ITEM_UPDATED, ITEM_REMOVED, NEW_TRANSACTION, BALANCE_UPDATED.

Падение обработчика логируется и не роняет ни цикл, ни соседние обработчики. Если WebSocket в вашем окружении недоступен, есть поллинг с тем же интерфейсом:

async for event in acc.polling(interval=5.0).events():
    print(event.type)

Разделы API

Неймспейс Что внутри
acc.auth вход по коду на почту, второй фактор, выход
acc.viewer профиль, баланс, аватар, настройки, двухфакторная аутентификация
acc.games игры, категории
acc.items поиск, топ, официальный магазин, создание, публикация, продвижение
acc.chats чаты, сообщения, картинки, отметка о прочтении
acc.deals сделки, покупка, смена статуса, жалоба на проблему
acc.testimonials отзывы
acc.transactions история транзакций, вывод средств
acc.payments пополнение баланса, провайдеры, способы оплаты, карты
acc.notifications каналы уведомлений, привязка Telegram-бота
acc.files загрузка файлов в хранилище
acc.pl_tokens баланс, история, кэшбэк, промокоды
acc.fragment покупка Telegram Stars
acc.steam пополнение кошелька Steam
acc.lottery розыгрыши и билеты
acc.misc гео, баннеры, feature-флаги, код защиты средств

Пополнение баланса

providers = await acc.payments.providers()
for provider in providers:
    print(provider.id, provider.name, provider.fee, provider.incoming)

url = await acc.payments.create_payment_url(
    1000,
    "SBP",
    payment_method="RUB",
    email="mail@example.com",
)
print(url)  # платёжная страница провайдера

Результат придёт событием NEW_TRANSACTION.

Где взять токен

DevTools → Application → Cookies → https://playerok.com → значение cookie token.

Либо через код на почту:

async with Account() as acc:
    await acc.auth.send_otp("mail@example.com")
    result = await acc.auth.confirm_otp("mail@example.com", "123456")
    print(acc.token)  # при включённой 2FA сначала acc.auth.confirm_second_factor(...)

Обработка ошибок

Всё наследуется от PlayerokError:

from PlayerokAPI import HTTPError, PlayerokError, RateLimitError, UnauthorizedError

try:
    await acc.items.get(slug="nope")
except UnauthorizedError:
    ...  # токен протух
except RateLimitError as exc:
    ...  # exc.retry_after
except HTTPError as exc:
    print(exc.status_code, exc.message)
except PlayerokError:
    ...

Сетевые сбои, 429 и 5xx на идемпотентных методах повторяются автоматически. POST после 5xx не повторяется — чтобы не создать вторую покупку.

Документация

Полное руководство и справочник API — playerokapi.readthedocs.io.

Собрать локально:

pip install -e ".[docs]"
sphinx-build -b html docs docs/_build/html

Примеры

Структура пакета

PlayerokAPI/
├── account.py        фасад Account — точка входа
├── types.py          модели данных
├── enums.py          перечисления из схемы
├── exceptions.py     иерархия ошибок
├── common/           конфигурация, эндпоинты, утилиты
├── transport/        HTTP, REST, GraphQL, WebSocket
├── methods/          модули API: auth, viewer, items, chats, deals, …
└── updater/          события, слушатель, поллинг

Разработка

git clone https://github.com/th1ks/PlayerokAPI
cd PlayerokAPI
pip install -e ".[dev]"
ruff check . && mypy PlayerokAPI && pytest

Тесты сетевые запросы не делают — всё на respx.

Ветки: main — релизы, develop — интеграционная, фичи — feat/*, правки — fix/*. Пулл-реквесты идут в develop.

Лицензия

MIT

Metadata

Release files for PlayerokAPI 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for PlayerokAPI 0.1.0
File Size Uploaded
playerokapi-0.1.0.tar.gz 50.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for PlayerokAPI 0.1.0
File Interpreter ABI Platform
playerokapi-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 125.1 kB

Release files / playerokapi-0.1.0.tar.gz

Download URL playerokapi-0.1.0.tar.gz
Size 50.6 kB
Tags Source
SHA-256 checksum
How to use checksums
531cce3f1581147b9097c534c72d91b32417e76e336ab8b89dbdd2176f841870
BLAKE2b-256 checksum
How to use checksums
1b19e5abf4720a350a81507e7da4ac55b8eb59d3301c2d05d9f26c47252085cd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 3, 2026.

Transparency log

Release files / playerokapi-0.1.0-py3-none-any.whl

Download URL playerokapi-0.1.0-py3-none-any.whl
Size 74.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cbbd329ee18d59f9683a3aa868d248982d0e2535d1cc9442baedfb748874f526
BLAKE2b-256 checksum
How to use checksums
2805efdb591822def70ec5754b2cce0ff969a5951d3299f502c99a3b353bcdac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 3, 2026.

Transparency log

Release history Release notifications | RSS feed

0.2.0

2 release files

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page