crawlbaseDocs
Anmelden

API-Nutzung

Fügen Sie &scraper=exercism-solutions zu einem Crawling API-Request hinzu. URL-kodieren Sie die Ziel-URL im url-Parameter. Die Liste ist paginiert (24 pro Seite); übergeben Sie eine ?page=N-Query an der Ziel-URL für weitere Seiten.

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

Beispiel-Eingabe-URL

Im url-Parameter funktioniert jede Exercism-Übungs-Community-Lösungsseite - die Seite unter /tracks/<track>/exercises/<slug>/solutions, optional mit einer ?page=N-Query. Zum Beispiel:

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

Response-Struktur

JSON-Response-Body. Feldtypen können null sein, wenn die Quellseite den Wert nicht enthält.

url
string
URL der gescrapten Lösungslistenseite.
track
object
Track-Kontext, übernommen aus der ersten Lösungszeile.
track.title
string | null
Anzeigetitel des Tracks (zum Beispiel Ruby).
track.iconUrl
string | null
URL des Track-Symbols.
exercise
object
Übungskontext, übernommen aus der ersten Lösungszeile.
exercise.title
string | null
Anzeigetitel der Übung.
exercise.iconUrl
string | null
URL des Übungssymbols.
page
integer | null
Seitennummer der aktuell zurückgegebenen Liste (1-basiert).
totalPages
integer | null
Gesamtzahl der Lösungsseiten für die Übung.
totalCount
integer | null
Gesamtzahl der veröffentlichten Lösungen für die Übung.
solutionCount
integer
Anzahl der auf dieser Seite in solutions zurückgegebenen Lösungen.
solutions
array
Veröffentlichte Lösungen auf dieser Seite, in Listenreihenfolge.
solutions[].uuid
string
Exercism-Lösungs-UUID.
solutions[].author
object
Autor der Lösung.
solutions[].author.handle
string
Autoren-Handle (Exercism-Benutzername).
solutions[].author.avatarUrl
string | null
URL des Autoren-Avatars.
solutions[].author.flair
string | null
Flair-Abzeichen des Autors (zum Beispiel insider), oder null, wenn keines vorhanden ist.
solutions[].language
string
Programmiersprache der Lösung.
solutions[].numStars
integer
Anzahl der Sterne der Lösung.
solutions[].numComments
integer
Anzahl der Kommentare zur Lösung.
solutions[].numViews
integer
Anzahl der Aufrufe der Lösung.
solutions[].numIterations
integer
Anzahl der vom Autor eingereichten Iterationen.
solutions[].numLoc
integer | null
Codezeilen in der Lösung, oder null, wenn nicht angegeben.
solutions[].isOutOfDate
boolean
True, wenn die Lösung gegenüber der aktuellen Übung veraltet ist.
solutions[].publishedAt
string | null
Veröffentlichungszeit der Lösung (ISO 8601), oder null, wenn nicht vorhanden.
solutions[].snippet
string | null
Kurze Code-Snippet-Vorschau der Lösung, oder null, wenn nicht vorhanden.
solutions[].url
string | null
Öffentliche URL der Einzellösungsseite, oder null, wenn nicht vorhanden.

Beispiel-Response

{
  "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"
    }
  ]
}