Solution Exercism
Analysez une page de solution Exercism publiée unique en JSON structuré avec sa piste, son exercice, son auteur, son langage, l'historique des itérations et le code source complet.
Utilisation de l'API
Ajoutez &scraper=exercism-solution à une requête Crawling API. Encodez en URL l'URL cible dans le paramètre 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' -Gfrom 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)Exemple d'URL en entrée
N'importe quelle page de solution Exercism publiée unique fonctionne dans le paramètre url - la page située à /tracks/<track>/exercises/<slug>/solutions/<handle>. Par exemple :
https://exercism.org/tracks/ruby/exercises/two-fer/solutions/neilnorthrop
https://exercism.org/tracks/go/exercises/hello-world/solutions/erikschierboomStructure de la réponse
Corps de la réponse JSON. Les types de champs peuvent être null lorsque la page source omet la valeur.
URL de la page de solution qui a été scrapée.
Piste à laquelle la solution appartient.
Slug de la piste (par exemple
ruby).Titre affiché de la piste (par exemple
Ruby).URL de l'icône de la piste.
Exercice auquel la solution appartient.
Slug de l'exercice (par exemple
two-fer).Type d'exercice (par exemple
practice ou concept).Titre affiché de l'exercice.
URL de l'icône de l'exercice.
Libellé de difficulté (par exemple
easy, medium, hard).Courte description de l'exercice.
Auteur de la solution.
Identifiant de l'auteur (nom d'utilisateur Exercism).
Langage de programmation de la solution.
Taille d'indentation de l'éditeur utilisée par l'auteur, ou null lorsque non renseignée.
Nombre d'étoiles de la solution.
Nombre d'itérations dans le tableau
iterations.True lorsque la solution n'est plus à jour par rapport à l'exercice actuel.
Index (
idx) de l'itération publiée, ou null lorsqu'il n'y en a pas.Date de publication de la solution (ISO 8601), ou null lorsqu'elle est absente.
Historique des itérations de la solution, de la plus ancienne à la plus récente.
Index de l'itération (à partir de 1).
Statut d'analyse de l'itération (par exemple
no_automated_feedback).Statut d'exécution des tests de l'itération (par exemple
passed).Mode de soumission de l'itération (par exemple
cli ou api).Date de création de l'itération (ISO 8601), ou null lorsqu'elle est absente.
True lorsque cette itération est celle qui est publiée.
True lorsque cette itération est la plus récente.
Code source complet de la solution publiée, ou null lorsqu'il est absent.
Exemple de réponse
{
"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"
}