Blog›Guides

Guide du développeur pour le point de terminaison /dataset de Wikipédia

Une procédure pas à pas précise, de type référence, des endpoints /dataset manifest et /dataset/prompts : formes de réponse, chaque champ, pagination par jeu de clés, mise en cache et gestion des erreurs.

Guide du développeur pour le point de terminaison /dataset de Wikipédia

Guide du développeur sur l'endpoint /dataset de Wikiprompt

Wikiprompt est un catalogue public et organisé de prompts IA, couvrant ChatGPT, Claude, Gemini, GPT Image, Midjourney, Seedance, Veo, Kling, Nano Banana, Grok et plus encore. Au lieu de scraper le site en direct pour extraire ce catalogue par programmation, il existe désormais un export en masse dédié : /dataset. Ce post le documente comme vous voudriez qu'une API tierce soit documentée : formes de réponse, sémantique des champs, mécanique de pagination, mise en cache et gestion des erreurs, avec des exemples exécutables.

Deux endpoints, un seul travail

Il y a exactement deux URL dont vous avez besoin :

  • https://www.wikiprompt.org/dataset (manifeste)
  • https://www.wikiprompt.org/dataset/prompts (données)
  • Le manifeste est une métadonnée sur l'export. L'endpoint de données est l'export lui-même, paginé. Les deux renvoient du JSON simple, sans clé API, sans en-tête d'authentification, rien à enregistrer.

    La réponse du manifeste

    Un GET sur le dataset renvoie quelque chose comme ceci :

    {

    "total_prompts": 55000,

    "record_fields": [

    "slug", "url", "title", "description", "content",

    "category", "tags", "media", "model", "metadata",

    "author", "original_source", "created_at", "updated_at"

    ],

    "pagination": {

    "endpoint": "https://www.wikiprompt.org/dataset/prompts",

    "cursor_param": "after",

    "limit_param": "limit",

    "default_limit": 200,

    "max_limit": 500

    }

    }

    Traitez total_prompts comme un compte approximatif et en direct, pas comme une constante fixe. Le catalogue grandit quotidiennement, donc ancrez votre intégration sur record_fields et le bloc pagination plutôt que de coder en dur le compte n'importe où dans votre code.

    La réponse des données

    Un GET sur /dataset/prompts renvoie une page d'enregistrements plus un curseur pour la page suivante :

    {

    "count": 500,

    "records": [

    {

    "slug": "one-brick-monumental-shadow-architectural-photo",

    "url": "https://www.wikiprompt.org/one-brick-monumental-shadow-architectural-photo",

    "title": "One Brick: Monumental Shadow Architectural Photo",

    "description": "A single brick photographed to cast a monumental architectural shadow.",

    "content": "the actual prompt text goes here, verbatim",

    "category": "creative",

    "tags": ["photography", "architecture", "shadow-play"],

    "media": ["https://www.wikiprompt.org/media/tw/..."],

    "model": "Midjourney",

    "metadata": {

    "media_type": "image",

    "aspect_ratio": "16:9",

    "style": ["minimalist", "high-contrast"],

    "assessment": { "creativity": 4, "usefulness": 3 }

    },

    "author": "some_handle",

    "original_source": "https://twitter.com/some_handle/status/...",

    "created_at": "2026-03-11T00:00:00Z",

    "updated_at": "2026-03-11T00:00:00Z"

    }

    ],

    "next": "https://www.wikiprompt.org/dataset/prompts?after=<cursor>&limit=500"

    }

    Référence des champs

    Chaque enregistrement porte les mêmes quatorze champs. Ceux qui méritent d'être signalés :

  • `slug` / `url` : slug est l'identifiant stable ; url est la page canonique, utile si vous voulez créer un lien retour ou recrawler un seul enregistrement plus tard.
  • `content` : le texte réel du prompt. C'est le champ qui intéresse la plupart des intégrations ; tout le reste est une métadonnée autour de lui.
  • `category` : une de creative, marketing, personal, productivity, coding, education, business, research, other.
  • `media` : un tableau d'URL d'images/vidéos lorsque le prompt a produit une sortie visuelle. Vide pour les prompts texte uniquement.
  • `model` : le modèle IA ciblé par le prompt ou avec lequel il a été généré, comme une chaîne de texte libre ("Midjourney", "GPT-4o", "Veo", etc).
  • `metadata` : un objet structuré avec media_type, aspect_ratio, style, et un bloc assessment notant les dimensions de qualité comme la créativité et l'utilité. C'est null pour les prompts texte simples qui n'ont jamais porté d'évaluation image/vidéo.
  • `original_source` : le lien vers le post original d'où vient le prompt. Voir la note d'attribution ci-dessous, ce champ compte si vous réutilisez les données en aval.
  • `created_at` / `updated_at` : horodatages ISO 8601. updated_at bouge si un enregistrement est modifié ou ré-enrichi après coup.
  • Mécanique de pagination

    L'endpoint utilise la pagination par clé, pas des numéros de page. Deux paramètres la contrôlent :

  • limit : combien d'enregistrements par page, défaut 200, max 500.
  • after : un curseur opaque, renvoyé dans l'URL next de chaque réponse.
  • Le contrat est simple : appelez l'endpoint, lisez next, appelez next tel quel, répétez jusqu'à ce que next soit null. Ne construisez pas la valeur after vous-même ; traitez-la comme un jeton opaque.

    curl "https://www.wikiprompt.org/dataset/prompts?limit=500"

    Un crawl complet en Python ressemble à ceci :

    import requests

    url = "https://www.wikiprompt.org/dataset/prompts?limit=500"

    records = []

    while url:

    resp = requests.get(url, timeout=30)

    resp.raise_for_status()

    payload = resp.json()

    records.extend(payload["records"])

    url = payload["next"]

    print(f"pulled {len(records)} prompts")

    À 500 par page et plus de 55 000 enregistrements, cela fait environ 110 requêtes pour une synchronisation complète, ou beaucoup moins pour une synchronisation incrémentale si vous filtrez en plus côté client sur updated_at.

    Mise en cache et CORS

    Les deux endpoints sont mis en cache en périphérie, donc les requêtes répétées pour la même page (même valeur after) sont peu coûteuses et rapides de notre côté, et rapides pour vous. Access-Control-Allow-Origin: * est défini sur chaque réponse, donc vous pouvez appeler cela directement depuis du JavaScript navigateur avec fetch(), sans proxy nécessaire. Il n'y a pas de limite de débit liée à une clé API car il n'y a pas de clé API ; soyez un citoyen raisonnable et mettez le manifeste en cache localement au lieu de le sonder à chaque requête.

    Gestion des erreurs

    Sous charge, l'endpoint peut renvoyer 503 avec un en-tête Retry-After (secondes à attendre avant de réessayer). Respectez-le :

    import time, requests

    def get_with_retry(url):

    while True:

    resp = requests.get(url, timeout=30)

    if resp.status_code == 503:

    wait = int(resp.headers.get("Retry-After", "5"))

    time.sleep(wait)

    continue

    resp.raise_for_status()

    return resp.json()

    Tout autre code non-200 mérite d'être journalisé et d'arrêter plutôt que de réessayer aveuglément ; un curseur after malformé ne devrait pas arriver si vous ne suivez que next, mais un code défensif ne devrait pas supposer cela pour toujours.

    Attribution

    Les prompts de ce dataset sont agrégés à partir de posts publics de leurs auteurs originaux. Wikiprompt est l'agrégateur, pas le détenteur des droits. Si vous construisez quelque chose avec ces données, citez wikiprompt.org et, par enregistrement, le champ original_source pointant vers le post original. Il n'y a pas de licence formelle au-delà de cela : attribuez le site et attribuez l'auteur.

    À essayer

    Trois enregistrements pour vérifier votre parseur une fois que vous avez tiré une page : un prompt d'image de physicalisation de données, une photo architecturale d'ombre monumentale, et un design de personnage voyageur nomade. Les trois passent proprement à travers content, media, et metadata.

    Si un export en masse est plus que ce dont vous avez besoin, pour l'instant, deux options plus légères existent : l'API de recherche pour des requêtes uniques, et le serveur MCP si vous branchez cela dans un agent plutôt qu'un script. Les deux reposent sur le même catalogue sous-jacent que /dataset, donc rien ici n'est une impasse si vous commencez plus petit et grandissez vers l'export en masse plus tard.

    Tags
    dataset·api·developer-guide·pagination·open-data·reference