Glidercap — API документация

Glidercap — сервис распознавания изображений. Два запроса: создать задачу и получить координаты. Скорость распознавания ~0.2 секунды. URL: https://api.captchacom.ru.

Что решаем

main
main #1 — фото-фон с контурными символами
main #2
ещё один пример — другая сцена, другие символы

Эти две картинки доступны как живые эталоны по URL — в примерах кода ниже их можно скачать одной строкой и пощупать API без правок.

POSTСоздание задачи

URLhttps://api.captchacom.ru/create
ЗаголовокX-API-Key: tc_live_XXXX
Тело (JSON)
{
  "type":  "SmartCaptcha",
  "click": "<base64 PNG click.png>",
  "task":  "<base64 PNG task.png>",
}

Ответ:

{"status": 1, "response": "9001c2d7-7298-49f1-9f24-eaed5aa66c13"}

Сохраните response (это task_id) — он понадобится во втором запросе.

POSTПолучение результата

URLhttps://api.captchacom.ru/result
ЗаголовокX-API-Key: tc_live_XXXX
Тело (JSON)
{"id": "9001c2d7-7298-49f1-9f24-eaed5aa66c13"}

Готово:

{"status": 1, "response": "coordinates:x=44,y=120;x=204,y=85;x=196,y=27;x=154,y=142;x=273,y=145;x=195,y=27"}

В response — шесть координат точек, на которые нужно «кликнуть» в исходной капче.

Ещё не готово:

{"status": 0, "response": "CAPCHA_NOT_READY"}

Примеры использования

Каждый пример end-to-end: скачивает наши эталонные click.png + task.png, создаёт задачу, опрашивает результат, печатает координаты. Подставьте свой tc_live_… ключ.

Python
Node.js
PHP
curl
import base64, requests, time

API_KEY = "tc_live_XXXX"   # <-- ваш ключ
URL     = "https://api.captchacom.ru"

EX    = "https://captchacom.ru/lk/examples"

# 1. Скачиваем эталонные картинки
click = base64.b64encode(requests.get(f"{EX}/click.png").content).decode()
task  = base64.b64encode(requests.get(f"{EX}/task.png").content).decode()

# 2. Создаём задачу
r = requests.post(URL + "/create",
    headers={"X-API-Key": API_KEY},
    json={"type":"SmartCaptcha", "click":click, "task":task}).json()
assert r["status"] == 1, r
task_id = r["response"]
print("task_id:", task_id)

# 3. Опрашиваем результат каждые 2с
for _ in range(15):
    time.sleep(2)
    r = requests.post(URL + "/result",
        headers={"X-API-Key": API_KEY},
        json={"id": task_id}).json()
    if r["status"] == 1:
        print("OK:", r["response"])
        break
    if r["response"] != "CAPCHA_NOT_READY":
        print("ERROR:", r["response"]); break
const fetch = require('node-fetch');     // npm i node-fetch@2

const API_KEY = 'tc_live_XXXX';          // <-- ваш ключ
const URL     = 'https://api.captchacom.ru';
const EX      = 'https://captchacom.ru/lk/examples';

(async () => {
  // 1. Скачиваем эталонные картинки
  const click = (await (await fetch(EX + '/click.png')).buffer()).toString('base64');
  const task  = (await (await fetch(EX + '/task.png')).buffer()).toString('base64');

  // 2. Создаём задачу
  let r = await fetch(URL + '/create', {
    method:'POST',
    headers:{'X-API-Key':API_KEY,'Content-Type':'application/json'},
    body: JSON.stringify({type:'SmartCaptcha', click, task, app_id:0})
  }).then(r => r.json());
  if (r.status !== 1) return console.error(r);
  const id = r.response;
  console.log('task_id:', id);

  // 3. Опрашиваем результат каждые 2с
  for (let i = 0; i < 15; i++) {
    await new Promise(r => setTimeout(r, 2000));
    r = await fetch(URL + '/result', {
      method:'POST',
      headers:{'X-API-Key':API_KEY,'Content-Type':'application/json'},
      body: JSON.stringify({id})
    }).then(r => r.json());
    if (r.status === 1) { console.log('OK:', r.response); break; }
    if (r.response !== 'CAPCHA_NOT_READY') { console.error(r.response); break; }
  }
})();
<?php
$API_KEY = 'tc_live_XXXX';                // <-- ваш ключ
$URL     = 'https://api.captchacom.ru';
$EX      = 'https://captchacom.ru/lk/examples';

function api($url, $body, $key) {
  $ch = curl_init($url);
  curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => ["X-API-Key: $key", "Content-Type: application/json"],
    CURLOPT_POSTFIELDS => json_encode($body),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 10
  ]);
  return json_decode(curl_exec($ch), true);
}

// 1. Скачиваем эталонные картинки
$click = base64_encode(file_get_contents("$EX/click.png"));
$task  = base64_encode(file_get_contents("$EX/task.png"));

// 2. Создаём задачу
$r = api("$URL/create", ['type'=>'SmartCaptcha','click'=>$click,'task'=>$task], $API_KEY);
if ($r['status'] != 1) { print_r($r); exit; }
$id = $r['response'];
echo "task_id: $id\n";

// 3. Опрашиваем результат каждые 2с
for ($i = 0; $i < 15; $i++) {
  sleep(2);
  $r = api("$URL/result", ['id' => $id], $API_KEY);
  if ($r['status'] == 1) { echo "OK: {$r['response']}\n"; break; }
  if ($r['response'] !== 'CAPCHA_NOT_READY') { echo "ERROR: {$r['response']}\n"; break; }
}
API_KEY=tc_live_XXXX       # <-- ваш ключ
EX=https://captchacom.ru/lk/examples

CLICK=$(curl -s $EX/click.png | base64 -w0)
TASK=$( curl -s $EX/task.png  | base64 -w0)

# 1. Создаём задачу
TASK_ID=$(curl -s https://api.captchacom.ru/create \
  -H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
  -d "{\"type\":\"SmartCaptcha\",\"click\":\"$CLICK\",\"task\":\"$TASK\"}" \
  | python3 -c 'import sys,json; print(json.load(sys.stdin)["response"])')
echo "task_id: $TASK_ID"

# 2. Опрашиваем результат
sleep 2
curl -s https://api.captchacom.ru/result \
  -H "X-API-Key: $API_KEY" -H "Content-Type: application/json" \
  -d "{\"id\":\"$TASK_ID\"}"