Production-ready Python SDK for the ITD platform API
Project description
ITDpy
Python SDK для интеграции с платформой ИТД.com — без магии, без обхода правил, просто удобный клиент поверх API.
SDK предназначен для клиентских приложений, интеграций и сервисов. Проект ориентирован на безопасное, прозрачное и корректное взаимодействие с платформой.
Принципы безопасности
ITDpy разработан с акцентом на доверие и соблюдение правил платформы:
прозрачная идентификация клиента через User-Agent отсутствие маскировки под браузер отсутствие обхода ограничений платформы соблюдение rate limits и правил API
SDK не поддерживает:
- спам
- массовую автоматизацию
- накрутку
- любые формы злоупотребления API
User-Agent
ITDpy использует фиксированный и прозрачный формат User-Agent:
itdpy/{version} (platform=python; type=sdk; service={service})
- User-Agent не может быть изменён пользователем
- SDK не имитирует браузеры или мобильные клиенты
- это позволяет платформе корректно идентифицировать источник трафика
📦 Установка
pip install itdpy
🚀 Быстрый старт
Самый простой способ начать работу — авторизоваться по email и паролю. SDK сам откроет браузер, пройдёт капчу Cloudflare Turnstile и получит токен доступа — вам не нужно лезть в DevTools и вручную вытаскивать куки (подробнее в разделе Turnstile Interceptor ниже):
from itdpy import ITDClient
client = ITDClient(email="user@example.com", password="my-password")
me = client.users.me()
print(me.id)
print(me.username)
SDK не сохраняет email/password/refresh_token на диск — вход выполняется
заново через браузер при каждой инициализации клиента и при истечении сессии.
Если вам нужно переиспользовать refresh_token между запусками, сохраняйте
его самостоятельно (например, через on_refresh_token_update) в защищённом
хранилище на ваше усмотрение:
client = ITDClient(
email="user@example.com",
password="my-password",
on_refresh_token_update=lambda token: print("Новый refresh_token:", token),
)
🔁 Альтернатива: вход по сохранённому refresh_token
Если у вас уже есть сохранённый refresh_token (например, вы сохранили его
на предыдущем шаге или используете SDK в CI, где браузер поднимать неудобно),
можно передать его напрямую вместо email/password — тогда браузер вообще не
запускается:
from itdpy import ITDClient
client = ITDClient(refresh_token="YOUR_REFRESH_TOKEN")
me = client.users.me()
print(me.username)
🔁 Автообновление сессии (без повторных логинов)
Держите ITDClient как один долгоживущий объект (не создавайте новый на
каждый запрос) — тогда браузер и логин по email/password запускаются один
раз. По умолчанию клиент сам раз в 4.5 минуты (auto_refresh_interval=270
сек) обновляет access_token по имеющемуся refresh_token в фоновом потоке
— без повторного открытия браузера и без повторного входа в аккаунт:
client = ITDClient(email="user@example.com", password="my-password")
# клиент можно использовать сколько угодно — сессия обновляется сама
Изменить интервал или отключить автообновление:
client = ITDClient(
email="user@example.com",
password="my-password",
auto_refresh_interval=200, # секунд
)
# либо полностью выключить и обновлять вручную
client = ITDClient(
email="user@example.com",
password="my-password",
auto_refresh_interval=None,
)
Фоновый поток останавливается автоматически при client.close().
⚙️ Конфигурация
from itdpy import Client, Config
config = Config(
service="my_application"
)
client = Client(config=config, refresh_token="TOKEN")
Доступные параметры:
service— имя вашего сервиса (используется в User-Agent)timeout— таймаут запросовmax_retries— количество повторов
🛡 Turnstile Interceptor
Самая интересная часть SDK: как именно происходит вход по email/паролю без ручного копирования токенов из DevTools. Этот скрипт предназначен для перехвата токена авторизации Cloudflare Turnstile и отправки самостоятельного запроса к API. Скрипт является кроссплатформенным: На Windows и macOS он работает в обычном оконном режиме (откроется браузер). На Linux-серверах (без монитора) скрипт автоматически создает виртуальный экран с помощью Xvfb, чтобы обойти блокировки Cloudflare, которые жестко пресекают классический headless режим.
🌐 Можно ли использовать обычный установленный Chrome?
Да. DrissionPage не скачивает и не устанавливает свой браузер — он подключается к уже установленному в системе Google Chrome (или Microsoft Edge/Chromium) через протокол CDP и управляет им напрямую. Отдельно устанавливать Chromium не нужно, если Chrome уже стоит на компьютере.
- Обычно путь к браузеру находится автоматически (Windows/macOS/Linux) — ничего указывать не требуется.
- Если автоопределение не сработало (нестандартная папка установки, portable-версия, несколько браузеров в системе), укажите путь к
chrome.exeявно:
from itdpy import ITDClient
client = ITDClient(
email="user@example.com",
password="my-password",
browser_path=r"C:\Program Files\Google\Chrome\Application\chrome.exe",
)
или напрямую при использовании низкоуровневой функции:
from itdpy.auth import login_with_password
refresh_token = login_with_password(
"user@example.com",
"my-password",
browser_path="/usr/bin/google-chrome",
)
📥 Установка Chromium/Chrome, если браузера в системе нет
Windows / macOS — просто установите обычный Google Chrome с официального сайта: https://www.google.com/chrome/. Никаких дополнительных шагов не требуется — DrissionPage найдёт его сам. Linux (сервер без GUI) — установите Chromium или Google Chrome из репозитория:
# Вариант 1: Chromium из репозитория (проще всего)
sudo apt-get update
sudo apt-get install chromium-browser
# Вариант 2: официальный Google Chrome
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt-get install ./google-chrome-stable_current_amd64.deb
После установки браузер будет найден автоматически. Если он лежит в нестандартном месте, узнайте путь командой which chromium-browser (или which google-chrome) и передайте его через browser_path, как показано выше.
Xvfb (виртуальный дисплей, см. ниже) — это отдельная от самого браузера зависимость, нужна на Linux в любом случае, т.к. Cloudflare блокирует классический --headless режим.
💻 Установка на локальный ПК (Windows / macOS)
Все необходимые библиотеки (requests, DrissionPage и т.д.) уже входят в
зависимости itdpy по умолчанию — достаточно pip install itdpy, отдельно
ничего доустанавливать не нужно. Нужен только установленный Google Chrome
(см. раздел выше).
🐧 Установка на сервер (Ubuntu / Debian / Linux)
Так как на сервере нет графической оболочки (GUI), мы должны эмулировать монитор. Без этого Chromium откажется запускаться без флага headless, а с флагом headless Cloudflare заблокирует скрипт.
Шаг 1. Установка системных зависимостей
Установите виртуальный фреймбуфер Xvfb:
sudo apt-get update
sudo apt-get install xvfb
(Опционально) Если на чистом сервере не установлены нужные библиотеки для работы самого браузера Chromium (шрифты, графические пакеты), вы можете установить их с помощью Playwright:
pip install playwright
playwright install-deps chromium
Шаг 2. Установка Python-библиотек
pip install itdpy
DrissionPage и pyvirtualdisplay (обёртка для виртуального дисплея на
Linux) уже входят в зависимости itdpy по умолчанию — устанавливать их
отдельно не нужно.
Скрипт автоматически распознает Linux, поднимет невидимый дисплей, запустит браузер "с головой" внутри этого дисплея, пройдет все проверки, заберет токен и завершит работу.
💡 Как это работает?
Скрипт внедряет JavaScript на страницу вашего сайта. Подменяет глобальную функцию fetch. Когда React собирается отправить запрос sign-in, наш шпион читает turnstileToken из тела запроса. Шпион блокирует оригинальный запрос браузера (замораживает его). Скрипт закрывает браузер и отправляет чистый запрос к API через библиотеку requests, подставляя нужные куки и токен.
📚 Документация
https://gam5510.github.io/ITDpy/
⚠️ Ограничения
SDK не предназначена для:
- массовых автоматизированных действий
- обхода ограничений платформы
- использования в целях, нарушающих правила
🤝 Сотрудничество
Проект открыт к взаимодействию с платформой ИТД.com и ориентирован на официальную интеграцию. Если вы представляете платформу или хотите обсудить сотрудничество, то свяжитесь через GitHub или Telegram.
Обратная связь
Telegram: @gam5510 GitHub Issues: https://github.com/Gam5510/ITDpy
Поддежка проекта
Вы можете поддержать проект с помощью перевода по TON кошельку в сети TON UQBVKStaBRLERdjJ_dnzRfREzqmyzkQn14uDE-DleRXJBqqH
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 itdpy-1.3.1.tar.gz.
File metadata
- Download URL: itdpy-1.3.1.tar.gz
- Upload date:
- Size: 115.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f5b8c155f9be6d7b1111d07f37d7c03f53585765856774625a865e5fb78c685
|
|
| MD5 |
454cfdac7994d556266c616adc71485e
|
|
| BLAKE2b-256 |
9cd9c3b48d93e8104e8435eb8adadc0e17788a61f4423f0f562de2bfaab5f246
|
File details
Details for the file itdpy-1.3.1-py3-none-any.whl.
File metadata
- Download URL: itdpy-1.3.1-py3-none-any.whl
- Upload date:
- Size: 50.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
75b39d7c9d760e0cdd22d6feedd190f4a553de0af2ca49b7644b468f8dfba84c
|
|
| MD5 |
0a3d104f710353e3b916a3548f114992
|
|
| BLAKE2b-256 |
66cf2cd9465d3bea403eb7a321666d1bd822fbc5e2cfae2769d93b17edba9db7
|