Для работы нужно скачать (v1.20240413, 264 Мб) программу. Она служит коннектором между вашим скриптом и сервисом. В ней частично закэшированы многие ответы, поэтому распознавание будет работать быстро.
API документация
API построен на HTTP-запросах. После запуска программы создается веб-сервер http://127.0.0.1:3000
(порт можно указать в config.txt), на который нужно отсылать запросы для решения пазлов. Адреса:
http://127.0.0.1:3000/in.php
POST для отправки изображения и получения результата;http://127.0.0.1:3000/fail.php
POST для отправки неверного решения или если решение не было найдено;http://api.white-captcha.com/balance.php?key=abcdefg123
GET получение баланса в рублях.
Параметры файла config.txt (находится в архиве с программой):
API
ключ от аккаунта сервиса;PORT
порт для запуска веб-сервера (http://127.0.0.1:PORT
), служит для обмена данными между программой и white-captcha.com;DEBUG
вывод логов предсказаний в консоль. Ошибки выводятся всегда.
Алгоритм распознавания изображения с помощью сервиса:
- Получите ваш персональный ключ API в настройках вашего аккаунта. Для каждого пользователя генерируется уникальный аутентификационный токен. Это строка из 32 символов, которая может выглядеть так:
098f6bcd4621d373cade4e832627b4f6
. Полученный ключ используется для всех ваших запросов к серверу. - Скачайте и запустите программу, изменив API ключ на ваш в config.txt. Если ошибок при запуске нет, консоль выведет текущий баланс.
- Отправьте POST-запрос на URL:
http://127.0.0.1:3000/in.php
с параметрами, указанные ниже. Сервер сразу вернет результат или код ошибки, если сервер не смог обработать запрос.
1. Отправка запроса
Список параметров POST-запроса к http://127.0.0.1:3000/in.php
json
отправляться: 'Content-type': 'application/json'
Параметр | Тип | Обязателен | Описание |
---|---|---|---|
body |
Строка | Да | Изображение, закодированное в формат base64. Содержит скриншот картинки пазла (размер 295x177 px) после прохождения слайдера, находится в теге <canvas> . В ZennoPoster и BAS ф-ция создания скриншота есть. |
task_id |
Строка | Нет | Случайная строка любой длины. Нужно самому сгенерировать при 1-ой итерации решения пазла. Служит идентификатором и значение будет отправлено в /fail.php для подсчета статистики на дэшборде сервиса. Если пазл был решен неверно или не был найден ответ, нужно создать новое значение task_id |
soft_id |
Число | Нет | Уникальный идентификатор владельцев публичного софта. Для них создана отдельная страница статистики. |
При успешном отправке запроса или в случае ошибки сервер всегда вернет ответ с кодом состояния (status code) HTTP 200
.
Ответ всегда возвращается в формате json
. Помимо этого сервер вернет в переменную balance
информацию о денежном балансе аккаунта. Примеры ответов:
{"status": 1, "method_1": 0, "method_1_prob": 1.0, "method_2": 0, "method_2_prob": 1.0, "balance": 5000.0}
{"status": 1, "method_1": 0, "method_1_prob": 1.0, "method_2": 1, "method_2_prob": 0.98, "balance": 4999.985}
{"status": 0, "request": "ERROR_KEY_DOES_NOT_EXIST", "error_text": "Указанный ключ не существует"}
В случаи любой ошибки ответ вернет "status": 0
с кодом ошибки в request
. Если модель успешно распознала изображение, status
будет равен 1
и в method_1
и method_2
запишутся результаты распознавания 0
или 1
, а в method_1_prob
и method_2_prob
их вероятности соответственно (всегда от 0.5 до 1.0).
В программе заложено 2 различных метода распознавания. За 1 прогонку method_1
может равняться 1
только 1 раз, в то время как method_2
может равняться 1
несколько раз. Среднее время ответа сервера должно быть приблизительно 0.08 сек.
Алгоритм действий:
- Создается пустой массив решений метода 2 на каждой итерации. Допустим,
method_2_results = []
. - Делается 1-ая итерация отправки скриншота пазла, задаем переменную
iteration=1
. - Полученные результаты 2-го метода сохраняем в массив (на каждой итерации)
method_2_results.push({'step': iteration, 'method_2': method_2, 'method_2_prob': method_2_prob})
. - Если
method_1
иmethod_2
равен0
, а предыдущее значениеmethod_2
тоже равно0
, то прокручиваем пазл дальше. Предыдущее значение смотрим через массивmethod_2_results[]
. - Если
method_1
равен1
, то данное решение можно отправлять на проверку и выходим из цикла прокрутки пазлов.method_1_prob
служит вспомогательным ответом и всегда большо 0.9 (90%). - Если
method_2
равен1
, то прокручиваем пазл дальше. - Если
method_2
равен0
, а предыдущее значение равно1
, то значит дальше смысла нет идти. Теперь нужно вmethod_2_results[]
отобрать максимальное значение вероятности предсказанияmethod_2_prob
и отправить решение на проверку на шагеstep
. Если две вероятности имеют одинаковое значение, то выбираем любое.
2. Неверные решения
Сюда отправляются неверные решения (пазл не прошел проверку) или если решение не было найдено. Данное дейтвие не является обязательным, но служит в помощь для аналитических подсчетов в панели дэшборда сервиса. Визуально он похож на интерфейс графиков Яндекса.
Список параметров POST-запроса к http://127.0.0.1:3000/fail.php
Параметр | Тип | Обязателен | Описание |
---|---|---|---|
fail |
Число | Да | 1 — решение не было найдено.2 — решение не прошло проверку. |
task_id |
Строка | Нет | Переменная, созданная на этапе /in.php |
soft_id |
Число | Нет | Уникальный идентификатор владельцев публичного софта. |
3. Таблица ошибок
Код ошибки | Описание |
---|---|
ERROR_WRONG_USER_KEY |
Параметр key не указан |
ERROR_KEY_DOES_NOT_EXIST |
Указанный API ключ не существует |
ERROR_EMPTY_BODY |
Параметр body не задан |
ERROR_TOO_BIG_IMAGE_FILESIZE |
Размер body превышает 200 Кб |
ERROR_ZERO_IMAGE_FILESIZE |
Размер body менее 100 байт |
ERROR_UPLOAD |
Изображение не удалось декодировать из base64 |
ERROR_ZERO_BALANCE |
На счету недостаточно средств для работы |
ERROR_INTERNAL_SERVER |
Внутренняя ошибка сервера. Все такие ошибки логируются, поэтому вскоре будет устранено, иначе обратитесь в поддержку |
ERROR_BAD_REQUEST |
Один из входных параметров имеет недопустимое значение |
ERROR_APP_FREEZE |
Ошибка в одном из процессов при связи программы с сервером white-captcha.com в результате зацикливания. Для решения нужно детально смотреть, свяжитесь с технической поддержкой. |
ERROR_TOO_MANY_REQUESTS |
От вас приходит слишком много запросов в единицу времени. Для увеличения обратитесь в поддержку. |
4. Примеры кода
Пример кода на языке Python.
import requests
data = {
'body': body, # base64 скриншота пазла
}
response = requests.post('http://127.0.0.1:3000/in.php', json=data, headers={'Content-type': 'application/json'}).json()
print(response)
Пример кода в программе Browser Automation Studio. Скачать полный шаблон. Включает этап прохождения слайдера.
_switch_http_client_main()
http_client_post("http://127.0.0.1:3000/in.php",
[
"body", [[IMAGE_BASE64]],
],
{
"content-type":("json"), // важно отправить запрос в формате json
"encoding":("UTF-8"),
"method":("POST"),
headers:("")
}
)!
_switch_http_client_main()
[[RESPONSE_RESULTS]] = http_client_encoded_content("auto")
log([[RESPONSE_RESULTS]])
Пример шаблона на ZennoPoster еще не создан, но в данных темах есть информация как получить base64 из картинки и <canvas>
:
- https://zennolab.com/discussion/threads/kak-dostat-kartinku-iz-kehsh-v-base64.115029/post-763814
- https://zennolab.com/discussion/threads/get-traffic-c-kak-rabotaet.113008/
- https://zennolab.com/discussion/threads/poluchit-dannye-iz-gettraffic-v-peremennye.46607/
- https://zennolab.com/discussion/threads/kak-na-letu-kodit-kartinki-v-base64.38232/post-696751