crawlbaseDocs
Se connecter

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' -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)

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/erikschierboom

Structure 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
string
URL de la page de solution qui a été scrapée.
track
object
Piste à laquelle la solution appartient.
track.slug
string | null
Slug de la piste (par exemple ruby).
track.title
string | null
Titre affiché de la piste (par exemple Ruby).
track.iconUrl
string | null
URL de l'icône de la piste.
exercise
object
Exercice auquel la solution appartient.
exercise.slug
string | null
Slug de l'exercice (par exemple two-fer).
exercise.type
string | null
Type d'exercice (par exemple practice ou concept).
exercise.title
string | null
Titre affiché de l'exercice.
exercise.iconUrl
string | null
URL de l'icône de l'exercice.
exercise.difficulty
string | null
Libellé de difficulté (par exemple easy, medium, hard).
exercise.blurb
string | null
Courte description de l'exercice.
author
object
Auteur de la solution.
author.handle
string | null
Identifiant de l'auteur (nom d'utilisateur Exercism).
language
string | null
Langage de programmation de la solution.
indentSize
integer | null
Taille d'indentation de l'éditeur utilisée par l'auteur, ou null lorsque non renseignée.
numStars
integer | null
Nombre d'étoiles de la solution.
numIterations
integer
Nombre d'itérations dans le tableau iterations.
isOutOfDate
boolean
True lorsque la solution n'est plus à jour par rapport à l'exercice actuel.
publishedIterationIdx
integer | null
Index (idx) de l'itération publiée, ou null lorsqu'il n'y en a pas.
publishedAt
string | null
Date de publication de la solution (ISO 8601), ou null lorsqu'elle est absente.
iterations
array
Historique des itérations de la solution, de la plus ancienne à la plus récente.
iterations[].idx
integer | null
Index de l'itération (à partir de 1).
iterations[].status
string | null
Statut d'analyse de l'itération (par exemple no_automated_feedback).
iterations[].testsStatus
string | null
Statut d'exécution des tests de l'itération (par exemple passed).
iterations[].submissionMethod
string | null
Mode de soumission de l'itération (par exemple cli ou api).
iterations[].createdAt
string | null
Date de création de l'itération (ISO 8601), ou null lorsqu'elle est absente.
iterations[].isPublished
boolean
True lorsque cette itération est celle qui est publiée.
iterations[].isLatest
boolean
True lorsque cette itération est la plus récente.
code
string | null
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"
}