TLS/SSL · Port 6697 matrix-irc.discut.biz
Webmasters · API Gratuite · MagIRC

Affichez les stats IRC de Discut.Biz sur votre site

API REST publique, gratuite et sans inscription, propulsée par MagIRC. Nombre d'utilisateurs connectés, topic d'un salon, statut du réseau ! Intégrez des widgets en direct en quelques lignes de code sur votre site internet.

Voir le code Explorer les stats réseau
Développeur codant un widget de statistiques IRC en temps réel pour son site
Simple !
aucune clé d'API, aucune inscription, aucune limite officielle — juste une requête HTTP et un peu de mise en cache de votre côté.
Toutes les réponses sont au format JSON. Si votre navigateur bloque les requêtes cross-domain (CORS), utilisez le proxy PHP fourni plus bas.
Démarrage rapide

L'exemple le plus simple : récupérer les infos d'un salon en une requête.

https://network.discut.biz/rest/service.php/channels/%23accueil
Réponse JSON
{
  "channel": "#Accueil",
  "users": "43",
  "topic": "Bienvenue dans le salon d'accueil de Discut.Biz",
  "topic_author": "Cris",
  "modes": "nPrt"
}
Widget — Compteur d'utilisateurs live
#Accueil utilisateur(s) connecté(s)
<span id="accueilCount">…</span>

<script>
fetch('https://network.discut.biz/rest/service.php/channels/%23accueil')
  .then(r => r.json())
  .then(d => { document.getElementById('accueilCount').textContent = d.users || '0'; })
  .catch(() => { document.getElementById('accueilCount').textContent = 'N/A'; });
</script>
Widget — Topic du salon en direct
Chargement…
<div id="accueilTopic">Chargement…</div>

<script>
fetch('https://network.discut.biz/rest/service.php/channels/%23accueil')
  .then(r => r.json())
  .then(d => { document.getElementById('accueilTopic').textContent = d.topic || 'Pas de topic défini'; })
  .catch(() => { document.getElementById('accueilTopic').textContent = 'Indisponible'; });
</script>
Widget — Statut global du réseau
Chargement…
<div id="networkStatus">Chargement…</div>

<script>
fetch('https://network.discut.biz/rest/service.php/network/status')
  .then(r => r.json())
  .then(d => {
    document.getElementById('networkStatus').textContent =
      d.users + ' utilisateurs · ' + d.channels + ' salons · ' + d.servers + ' serveurs';
  })
  .catch(() => { document.getElementById('networkStatus').textContent = 'Indisponible'; });
</script>
Widget — Classement des salons les plus actifs

Utile pour une page "salons populaires" mise à jour automatiquement.

<ul id="topChans">Chargement…</ul>

<script>
fetch('https://network.discut.biz/rest/service.php/channels/biggest/10')
  .then(r => r.json())
  .then(d => {
    var list = document.getElementById('topChans');
    list.innerHTML = '';
    (d.channels || []).forEach(function(c){
      var li = document.createElement('li');
      li.textContent = c.name + ' — ' + c.users + ' utilisateurs';
      list.appendChild(li);
    });
  });
</script>
Proxy PHP — anti-CORS + cache 60s

Créez un fichier proxy-irc.php à la racine de votre site. Ce proxy whiteliste les endpoints, ajoute un cache simple et renvoie du JSON proprement — recommandé en production plutôt que d'appeler l'API directement depuis le navigateur.

<?php
header('Content-Type: application/json; charset=utf-8');

$base    = 'https://network.discut.biz/rest/service.php/';
$allowed = ['channels/%23accueil', 'channels/%23accueil/users', 'network/status', 'channels/biggest/10'];

$endpoint = trim($_GET['endpoint'] ?? '');
if (!in_array($endpoint, $allowed, true)) {
    http_response_code(400);
    echo json_encode(['error' => 'Endpoint non autorisé']);
    exit;
}

$cacheFile = sys_get_temp_dir() . '/' . md5($endpoint) . '.json';
if (file_exists($cacheFile) && (time() - filemtime($cacheFile) < 60)) {
    readfile($cacheFile); exit;
}

$ch = curl_init($base . $endpoint);
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10]);
$res  = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($code !== 200 || !$res) { http_response_code(502); echo json_encode(['error' => 'Source indisponible']); exit; }
file_put_contents($cacheFile, $res);
echo $res;
Utilisation du proxy
fetch('/proxy-irc.php?endpoint=channels/%23accueil')
  .then(r => r.json())
  .then(d => {
    console.log('Topic:', d.topic);
    console.log('Utilisateurs:', d.users);
  });
Référence complète des endpoints
/network/statusStatut global du réseau (users, chans, servers)
/network/maxRecords historiques du réseau
/channels/biggest/10Top 10 des salons les plus peuplés
/channels/%23salonInfos d'un salon spécifique (topic, users, modes)
/channels/%23salon/usersListe des utilisateurs d'un salon
/operatorsListe des opérateurs IRC en ligne
Bonnes pratiques
  • Mettez en cache les réponses côté serveur (60 secondes suffisent pour un affichage quasi temps réel)
  • Utilisez le proxy PHP en production plutôt que d'appeler l'API directement depuis le navigateur des visiteurs
  • Prévoyez toujours un état de repli ("N/A", "—") en cas d'indisponibilité temporaire du service
  • Encodez le nom du salon avec %23 à la place de # dans les URLs
Questions fréquentes
Faut-il une clé d'API ou un compte pour utiliser ce service ?

Non, aucune inscription, aucune clé. L'API est publique et accessible directement en GET, sans authentification.

Cette API est-elle vraiment gratuite ?

Oui, entièrement gratuite, sans limite d'utilisation officielle. On demande juste un usage raisonnable : mettez en cache les réponses côté serveur (60 secondes suffisent) plutôt que d'interroger l'API à chaque affichage de page.

Pourquoi mes requêtes JavaScript échouent-elles avec une erreur CORS ?

Certains navigateurs bloquent les requêtes cross-domain directes selon la configuration de votre site. Utilisez le proxy PHP fourni plus haut sur cette page : il contourne le souci et ajoute un cache pour de meilleures performances.

Sur quelle technologie repose cette API ?

Sur MagIRC, la plateforme de statistiques IRC de Discut.Biz, accessible aussi directement via network.discut.biz pour une exploration visuelle des données.

Puis-je afficher les stats de plusieurs salons en même temps ?

Oui, chaque salon a son propre endpoint (/channels/%23nomdusalon). Vous pouvez faire plusieurs appels en parallèle pour afficher plusieurs compteurs sur la même page.

Les données sont-elles vraiment en temps réel ?

Oui, chaque requête interroge directement l'état actuel du réseau IRC. Avec mise en cache recommandée à 60 secondes, l'affichage reste très proche du temps réel sans surcharger le service.