# Statistiques

> Nombre de fiches par version et par ressource, et date des données.

Documentation de l’API de WoWDB des Défias : https://docs.wowdb.assemblee-defias.fr/stats

## Statistiques

Les effectifs de la base, pour afficher « 94 000 objets » ou vérifier la date des données avant de rafraîchir votre cache.

**Routes**

- `GET /v1/stats` : Obtenir les statistiques

## Obtenir les statistiques

`GET /v1/stats`

Nombre de fiches par version et par ressource, fiches utiles au voleur, date des données.

**Paramètres**

Aucun paramètre.

**Renvoie** : L’objet `stats`.

**Requête (GET /v1/stats)**

#### cURL

```bash
curl https://api.wowdb.assemblee-defias.fr/v1/stats
```

#### JavaScript

```js
const res = await fetch("https://api.wowdb.assemblee-defias.fr/v1/stats");
if (!res.ok) throw new Error((await res.json()).error.message);
const stats = await res.json();
console.log(stats.records);
```

#### Python

```python
import json
import urllib.request

req = urllib.request.Request(
    "https://api.wowdb.assemblee-defias.fr/v1/stats",
    headers={"User-Agent": "mon-application/1.0 (contact@example.com)"},
)
with urllib.request.urlopen(req) as res:
    stats = json.load(res)
print(stats["records"])
```

#### PHP

```php
<?php
$context = stream_context_create([
    'http' => ['header' => "User-Agent: mon-application/1.0 (contact@example.com)\r\n"],
]);
$json = file_get_contents('https://api.wowdb.assemblee-defias.fr/v1/stats', false, $context);
$stats = json_decode($json, true);
echo $stats['records'], PHP_EOL;
```

#### Ruby

```ruby
require "json"
require "net/http"

uri = URI("https://api.wowdb.assemblee-defias.fr/v1/stats")
res = Net::HTTP.get_response(uri, { "User-Agent" => "mon-application/1.0 (contact@example.com)" })
stats = JSON.parse(res.body)
puts stats["records"]
```

#### Go

```go
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
)

func main() {
	req, err := http.NewRequest("GET", "https://api.wowdb.assemblee-defias.fr/v1/stats", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("User-Agent", "mon-application/1.0 (contact@example.com)")
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	var stats map[string]any
	if err := json.NewDecoder(res.Body).Decode(&stats); err != nil {
		panic(err)
	}
	fmt.Println(stats["records"])
}
```

#### Java

```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Exemple {
    public static void main(String[] args) throws Exception {
        HttpRequest request = HttpRequest.newBuilder(URI.create(
                "https://api.wowdb.assemblee-defias.fr/v1/stats"))
            .header("User-Agent", "mon-application/1.0 (contact@example.com)")
            .build();
        HttpResponse<String> response = HttpClient.newHttpClient()
            .send(request, HttpResponse.BodyHandlers.ofString());
        // JSON à lire avec Jackson, Gson ou le client WowDb.java (sans dépendance)
        System.out.println(response.body());
    }
}
```

#### .NET

```csharp
using System.Net.Http;
using System.Text.Json;

using var http = new HttpClient();
http.DefaultRequestHeaders.UserAgent.ParseAdd("mon-application/1.0 (contact@example.com)");
var json = await http.GetStringAsync(
    "https://api.wowdb.assemblee-defias.fr/v1/stats");
using var doc = JsonDocument.Parse(json);
Console.WriteLine(doc.RootElement.GetProperty("records").GetInt32());
```

#### Rust

```rust
// Cargo.toml : ureq = { version = "2", features = ["json"] } et serde_json = "1"
fn main() -> Result<(), Box<dyn std::error::Error>> {
    let stats: serde_json::Value = ureq::get("https://api.wowdb.assemblee-defias.fr/v1/stats")
        .set("User-Agent", "mon-application/1.0 (contact@example.com)")
        .call()?
        .into_json()?;
    println!("{}", stats["records"]);
    Ok(())
}
```

**Réponse** (statut 200)

```json
{
  "object": "stats",
  "records": 155848,
  "by_version": {
    "classic": {
      "items": 15850,
      "spells": 265,
      "quests": 4243,
      "npcs": 9848,
      "game_objects": 591,
      "item_sets": 0,
      "factions": 37,
      "instances": 26
    },
    "tbc": {
      "items": 25762,
      "spells": 272,
      "quests": 6374,
      "npcs": 16796,
      "game_objects": 818,
      "item_sets": 18,
      "factions": 58,
      "instances": 51
    },
    "wotlk": {
      "items": 39133,
      "spells": 336,
      "quests": 9096,
      "npcs": 25147,
      "game_objects": 1127,
      "item_sets": 0,
      "factions": 77,
      "instances": 73
    }
  },
  "rogue": {
    "classic": {
      "items": 3619,
      "quests": 614,
      "game_objects": 32
    },
    "tbc": {
      "items": 6254,
      "quests": 1110,
      "game_objects": 44
    },
    "wotlk": {
      "items": 9513,
      "quests": 1593,
      "game_objects": 38
    }
  },
  "updated_at": "2026-10-01"
}
```

## Racine de l’API

`GET /v1`

Point d’entrée : version de l’API, liens vers la documentation, la spécification OpenAPI et chaque ressource.

- `object` (chaîne) : Toujours « api ». Valeurs : `api`.
- `name` (chaîne) : Nom.
- `version` (chaîne) : Version de l’API (v1).
- `released` (chaîne) : Date de publication de la v1.
- `data_updated` (chaîne) : Date des données.
- `description` (chaîne) : Présentation.
- `documentation` (chaîne) : Documentation.
- `openapi` (chaîne) : Spécification OpenAPI.
- `llms` (chaîne) : Index pour les assistants IA.
- `website` (chaîne) : WoWDB.
- `versions` (tableau d’objets) : Versions du jeu (id, api_url).
- `endpoints` (objet) : Adresses des ressources.

**Requête (GET /v1)**

#### cURL

```bash
curl https://api.wowdb.assemblee-defias.fr/v1
```

#### JavaScript

```js
const res = await fetch("https://api.wowdb.assemblee-defias.fr/v1");
if (!res.ok) throw new Error((await res.json()).error.message);
const api = await res.json();
console.log(api.name);
```

#### Python

```python
import json
import urllib.request

req = urllib.request.Request(
    "https://api.wowdb.assemblee-defias.fr/v1",
    headers={"User-Agent": "mon-application/1.0 (contact@example.com)"},
)
with urllib.request.urlopen(req) as res:
    api = json.load(res)
print(api["name"])
```

#### PHP

```php
<?php
$context = stream_context_create([
    'http' => ['header' => "User-Agent: mon-application/1.0 (contact@example.com)\r\n"],
]);
$json = file_get_contents('https://api.wowdb.assemblee-defias.fr/v1', false, $context);
$api = json_decode($json, true);
echo $api['name'], PHP_EOL;
```

#### Ruby

```ruby
require "json"
require "net/http"

uri = URI("https://api.wowdb.assemblee-defias.fr/v1")
res = Net::HTTP.get_response(uri, { "User-Agent" => "mon-application/1.0 (contact@example.com)" })
api = JSON.parse(res.body)
puts api["name"]
```

#### Go

```go
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
)

func main() {
	req, err := http.NewRequest("GET", "https://api.wowdb.assemblee-defias.fr/v1", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("User-Agent", "mon-application/1.0 (contact@example.com)")
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	var api map[string]any
	if err := json.NewDecoder(res.Body).Decode(&api); err != nil {
		panic(err)
	}
	fmt.Println(api["name"])
}
```

#### Java

```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Exemple {
    public static void main(String[] args) throws Exception {
        HttpRequest request = HttpRequest.newBuilder(URI.create(
                "https://api.wowdb.assemblee-defias.fr/v1"))
            .header("User-Agent", "mon-application/1.0 (contact@example.com)")
            .build();
        HttpResponse<String> response = HttpClient.newHttpClient()
            .send(request, HttpResponse.BodyHandlers.ofString());
        // JSON à lire avec Jackson, Gson ou le client WowDb.java (sans dépendance)
        System.out.println(response.body());
    }
}
```

#### .NET

```csharp
using System.Net.Http;
using System.Text.Json;

using var http = new HttpClient();
http.DefaultRequestHeaders.UserAgent.ParseAdd("mon-application/1.0 (contact@example.com)");
var json = await http.GetStringAsync(
    "https://api.wowdb.assemblee-defias.fr/v1");
using var doc = JsonDocument.Parse(json);
Console.WriteLine(doc.RootElement.GetProperty("name").GetString());
```

#### Rust

```rust
// Cargo.toml : ureq = { version = "2", features = ["json"] } et serde_json = "1"
fn main() -> Result<(), Box<dyn std::error::Error>> {
    let api: serde_json::Value = ureq::get("https://api.wowdb.assemblee-defias.fr/v1")
        .set("User-Agent", "mon-application/1.0 (contact@example.com)")
        .call()?
        .into_json()?;
    println!("{}", api["name"].as_str().unwrap_or_default());
    Ok(())
}
```

**Réponse** (statut 200)

```json
{
  "object": "api",
  "name": "API de WoWDB des Défias",
  "version": "v1",
  "released": "2026-10-01",
  "data_updated": "2026-10-01",
  "description": "API publique en lecture seule de WoWDB des Défias : objets, sorts, quêtes, PNJ, objets du monde, ensembles, réputations, donjons et raids de World of Warcraft (Vanilla, TBC, WotLK), en français.",
  "documentation": "https://docs.wowdb.assemblee-defias.fr/",
  "openapi": "https://api.wowdb.assemblee-defias.fr/v1/openapi.json",
  "llms": "https://docs.wowdb.assemblee-defias.fr/llms.txt",
  "website": "https://wowdb.assemblee-defias.fr/",
  "versions": [
    {
      "id": "classic",
      "api_url": "https://api.wowdb.assemblee-defias.fr/v1/versions/classic"
    },
    {
      "id": "tbc",
      "api_url": "https://api.wowdb.assemblee-defias.fr/v1/versions/tbc"
    },
    {
      "id": "wotlk",
      "api_url": "https://api.wowdb.assemblee-defias.fr/v1/versions/wotlk"
    }
  ],
  "endpoints": {
    "search": "https://api.wowdb.assemblee-defias.fr/v1/search?q={texte}",
    "stats": "https://api.wowdb.assemblee-defias.fr/v1/stats",
    "versions": "https://api.wowdb.assemblee-defias.fr/v1/versions",
    "items": "https://api.wowdb.assemblee-defias.fr/v1/{version}/items",
    "spells": "https://api.wowdb.assemblee-defias.fr/v1/{version}/spells",
    "quests": "https://api.wowdb.assemblee-defias.fr/v1/{version}/quests",
    "npcs": "https://api.wowdb.assemblee-defias.fr/v1/{version}/npcs",
    "game_objects": "https://api.wowdb.assemblee-defias.fr/v1/{version}/game-objects",
    "item_sets": "https://api.wowdb.assemblee-defias.fr/v1/{version}/item-sets",
    "factions": "https://api.wowdb.assemblee-defias.fr/v1/{version}/factions",
    "instances": "https://api.wowdb.assemblee-defias.fr/v1/{version}/instances"
  }
}
```

---

API de WoWDB des Défias, v1 (2026-10-01). Adresse de base : https://api.wowdb.assemblee-defias.fr/v1. Index : https://docs.wowdb.assemblee-defias.fr/llms.txt.
