Решения Exercism
Разбирайте страницу сообществ решений упражнения Exercism в структурированный JSON с автором, языком, количеством звёзд, числом итераций каждого опубликованного решения и пагинацией.
Использование API
Добавьте &scraper=exercism-solutions к запросу Crawling API. URL-кодируйте целевой URL в параметре url. Список постраничный (24 на страницу); передайте запрос ?page=N в целевом URL для последующих страниц.
curl 'https://api.crawlbase.com/?token=YOUR_TOKEN' \
--data-urlencode 'url=https://exercism.org/tracks/ruby/exercises/two-fer/solutions' \
--data-urlencode 'scraper=exercism-solutions' -Gfrom crawlbase import CrawlingAPI
api = CrawlingAPI({'token': 'YOUR_TOKEN'})
res = api.get(
'https://exercism.org/tracks/ruby/exercises/two-fer/solutions',
{'scraper': 'exercism-solutions'}
)
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',
{ scraper: 'exercism-solutions' }
);
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', scraper: 'exercism-solutions')
data = JSON.parse(res.body)Пример входного URL
В параметре url работает любая страница сообществ решений упражнения Exercism - страница по адресу /tracks/<track>/exercises/<slug>/solutions, при необходимости с запросом ?page=N. Например:
https://exercism.org/tracks/ruby/exercises/two-fer/solutions
https://exercism.org/tracks/go/exercises/hello-world/solutions
https://exercism.org/tracks/python/exercises/leap/solutions?page=2Структура ответа
Тело ответа в формате JSON. Типы полей могут быть null, если исходная страница не содержит значения.
URL страницы списка решений, которая была обработана.
Контекст трека, взятый из первой строки решения.
Отображаемый заголовок трека (например,
Ruby).URL иконки трека.
Контекст упражнения, взятый из первой строки решения.
Отображаемый заголовок упражнения.
URL иконки упражнения.
Номер текущей возвращённой страницы списка (начиная с 1).
Общее количество страниц решений для упражнения.
Общее количество опубликованных решений для упражнения.
Количество решений, возвращённых в
solutions на этой странице.Опубликованные решения на этой странице, в порядке списка.
UUID решения Exercism.
Автор решения.
Хэндл автора (имя пользователя Exercism).
URL аватара автора.
Значок flair автора (например,
insider), или null, если отсутствует.Язык программирования решения.
Количество звёзд у решения.
Количество комментариев к решению.
Количество просмотров решения.
Количество итераций, отправленных автором.
Количество строк кода в решении, или null, если не указано.
True, если решение устарело относительно текущего упражнения.
Время публикации решения (ISO 8601), или null, если отсутствует.
Короткий фрагмент кода решения для предпросмотра, или null, если отсутствует.
Публичный URL страницы отдельного решения, или null, если отсутствует.
Пример ответа
{
"url": "https://exercism.org/tracks/ruby/exercises/two-fer/solutions",
"track": {
"title": "Ruby",
"iconUrl": "https://assets.exercism.org/tracks/ruby.svg"
},
"exercise": {
"title": "Two Fer",
"iconUrl": "https://assets.exercism.org/exercises/two-fer.svg"
},
"page": 1,
"totalPages": 412,
"totalCount": 9876,
"solutionCount": 2,
"solutions": [
{
"uuid": "b3f2c1a0-9d8e-4f7a-8c6b-1a2b3c4d5e6f",
"author": {
"handle": "neilnorthrop",
"avatarUrl": "https://avatars.exercism.org/u/12345",
"flair": "insider"
},
"language": "ruby",
"numStars": 42,
"numComments": 3,
"numViews": 1280,
"numIterations": 2,
"numLoc": 3,
"isOutOfDate": false,
"publishedAt": "2026-05-18T14:03:27Z",
"snippet": "def two_fer(name = \"you\")\n \"One for #{name}, one for me.\"\nend",
"url": "https://exercism.org/tracks/ruby/exercises/two-fer/solutions/neilnorthrop"
},
{
"uuid": "c4e3d2b1-0a9f-4e8b-9d7c-2b3c4d5e6f70",
"author": {
"handle": "erikschierboom",
"avatarUrl": "https://avatars.exercism.org/u/67890",
"flair": null
},
"language": "ruby",
"numStars": 17,
"numComments": 0,
"numViews": 640,
"numIterations": 1,
"numLoc": 4,
"isOutOfDate": false,
"publishedAt": "2026-04-02T09:11:50Z",
"snippet": "def two_fer(name = \"you\")\n format(\"One for %s, one for me.\", name)\nend",
"url": "https://exercism.org/tracks/ruby/exercises/two-fer/solutions/erikschierboom"
}
]
}