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

Использование API

Добавьте &scraper=exercism-solution к запросу Crawling API. URL-кодируйте целевой URL в параметре url.

curl 'https://api.crawlbase.com/?token=YOUR_TOKEN' \
  --data-urlencode 'url=https://exercism.org/tracks/ruby/exercises/two-fer/solutions/neilnorthrop' \
  --data-urlencode 'scraper=exercism-solution' -G
from crawlbase import CrawlingAPI

api = CrawlingAPI({'token': 'YOUR_TOKEN'})
res = api.get(
    'https://exercism.org/tracks/ruby/exercises/two-fer/solutions/neilnorthrop',
    {'scraper': 'exercism-solution'}
)

import json
data = json.loads(res['body'])
const { CrawlingAPI } = require('crawlbase');
const api = new CrawlingAPI({ token: 'YOUR_TOKEN' });

const res = await api.get(
  'https://exercism.org/tracks/ruby/exercises/two-fer/solutions/neilnorthrop',
  { scraper: 'exercism-solution' }
);
const data = JSON.parse(res.body);
require 'crawlbase'
api = Crawlbase::API.new(token: 'YOUR_TOKEN')

res = api.get('https://exercism.org/tracks/ruby/exercises/two-fer/solutions/neilnorthrop', scraper: 'exercism-solution')
data = JSON.parse(res.body)

Пример входного URL

В параметре url работает любая страница одного опубликованного решения Exercism - страница по адресу /tracks/<track>/exercises/<slug>/solutions/<handle>. Например:

https://exercism.org/tracks/ruby/exercises/two-fer/solutions/neilnorthrop
https://exercism.org/tracks/go/exercises/hello-world/solutions/erikschierboom

Структура ответа

Тело ответа в формате JSON. Типы полей могут быть null, если исходная страница не содержит значения.

url
string
URL страницы решения, которая была обработана.
track
object
Трек, к которому относится решение.
track.slug
string | null
Слаг трека (например, ruby).
track.title
string | null
Отображаемый заголовок трека (например, Ruby).
track.iconUrl
string | null
URL иконки трека.
exercise
object
Упражнение, к которому относится решение.
exercise.slug
string | null
Слаг упражнения (например, two-fer).
exercise.type
string | null
Тип упражнения (например, practice или concept).
exercise.title
string | null
Отображаемый заголовок упражнения.
exercise.iconUrl
string | null
URL иконки упражнения.
exercise.difficulty
string | null
Метка сложности (например, easy, medium, hard).
exercise.blurb
string | null
Краткое описание упражнения.
author
object
Автор решения.
author.handle
string | null
Хэндл автора (имя пользователя Exercism).
language
string | null
Язык программирования решения.
indentSize
integer | null
Размер отступа в редакторе, который использовал автор, или null, если не указано.
numStars
integer | null
Количество звёзд у решения.
numIterations
integer
Количество итераций в массиве iterations.
isOutOfDate
boolean
True, если решение устарело относительно текущего упражнения.
publishedIterationIdx
integer | null
Индекс (idx) опубликованной итерации, или null, если отсутствует.
publishedAt
string | null
Время публикации решения (ISO 8601), или null, если отсутствует.
iterations
array
История итераций решения, сначала самые старые.
iterations[].idx
integer | null
Индекс итерации (начиная с 1).
iterations[].status
string | null
Статус анализа итерации (например, no_automated_feedback).
iterations[].testsStatus
string | null
Статус прогона тестов итерации (например, passed).
iterations[].submissionMethod
string | null
Способ отправки итерации (например, cli или api).
iterations[].createdAt
string | null
Время создания итерации (ISO 8601), или null, если отсутствует.
iterations[].isPublished
boolean
True, если эта итерация является опубликованной.
iterations[].isLatest
boolean
True, если эта итерация самая последняя.
code
string | null
Полный исходный код опубликованного решения, или null, если отсутствует.

Пример ответа

{
  "url": "https://exercism.org/tracks/ruby/exercises/two-fer/solutions/neilnorthrop",
  "track": {
    "slug": "ruby",
    "title": "Ruby",
    "iconUrl": "https://assets.exercism.org/tracks/ruby.svg"
  },
  "exercise": {
    "slug": "two-fer",
    "type": "practice",
    "title": "Two Fer",
    "iconUrl": "https://assets.exercism.org/exercises/two-fer.svg",
    "difficulty": "easy",
    "blurb": "Create a sentence of the form \"One for X, one for me.\""
  },
  "author": {
    "handle": "neilnorthrop"
  },
  "language": "ruby",
  "indentSize": 2,
  "numStars": 42,
  "numIterations": 2,
  "isOutOfDate": false,
  "publishedIterationIdx": 2,
  "publishedAt": "2026-05-18T14:03:27Z",
  "iterations": [
    {
      "idx": 1,
      "status": "no_automated_feedback",
      "testsStatus": "passed",
      "submissionMethod": "cli",
      "createdAt": "2026-05-17T22:41:03Z",
      "isPublished": false,
      "isLatest": false
    },
    {
      "idx": 2,
      "status": "no_automated_feedback",
      "testsStatus": "passed",
      "submissionMethod": "cli",
      "createdAt": "2026-05-18T14:03:27Z",
      "isPublished": true,
      "isLatest": true
    }
  ],
  "code": "def two_fer(name = \"you\")\n  \"One for #{name}, one for me.\"\nend"
}