TLS/SSL · Port 6697 matrix-irc.discut.biz
Accueil Guides IRC Utiliser l'API REST Discut.Biz pour afficher les s…
Divers

Utiliser l'API REST Discut.Biz pour afficher les statistiques IRC

Introduction

Discut.Biz expose une API REST publique qui permet d'afficher en temps réel les statistiques du réseau IRC sur n'importe quel site web. Nombre d'utilisateurs connectés, salons actifs, détail par salon — toutes ces données sont accessibles gratuitement, sans clé API ni inscription.

URL de base de l'API :
https://network.discut.biz/rest/service.php

1. Statistiques globales du réseau

Pour récupérer le nombre total d'utilisateurs connectés, de salons actifs et de serveurs en ligne :

GET https://network.discut.biz/rest/service.php/network/status

Exemple de réponse

{
  "users":    { "val": 47 },
  "chans":    { "val": 16 },
  "servers":  { "val": 3 }
}

Exemple JavaScript

fetch('https://network.discut.biz/rest/service.php/network/status')
  .then(function(r) { return r.json(); })
  .then(function(data) {
    document.getElementById('users').textContent    = data.users.val;
    document.getElementById('channels').textContent = data.chans.val;
    document.getElementById('servers').textContent  = data.servers.val;
  })
  .catch(function() {
    document.getElementById('users').textContent = '—';
  });

HTML correspondant

<p>
  <strong id="users">…</strong> utilisateurs connectés ·
  <strong id="channels">…</strong> salons actifs
</p>

2. Liste des salons les plus actifs

Pour récupérer les salons avec le plus d'utilisateurs :

GET https://network.discut.biz/rest/service.php/channels/biggest/10

Le chiffre 10 correspond au nombre maximum de salons retournés. Vous pouvez le remplacer par 5, 20, etc.

Exemple de réponse

[
  { "channel": "#Accueil",  "users": { "val": 18 } },
  { "channel": "#Ados",     "users": { "val": 12 } },
  { "channel": "#18-25ans", "users": { "val": 7  } },
  { "channel": "#Quizz",    "users": { "val": 5  } }
]

Exemple JavaScript — afficher la liste

fetch('https://network.discut.biz/rest/service.php/channels/biggest/10')
  .then(function(r) { return r.json(); })
  .then(function(data) {
    var list = Array.isArray(data) ? data : (data.channels || []);
    var html = '';
    list.forEach(function(salon) {
      var nom   = salon.channel || salon.name || '?';
      var users = salon.users && salon.users.val ? salon.users.val : (salon.users || 0);
      html += '<li>' + nom + ' — ' + users + ' connectés</li>';
    });
    document.getElementById('salon-list').innerHTML = html;
  });

HTML correspondant

<ul id="salon-list"></ul>

3. Informations sur un salon spécifique

Pour récupérer les détails d'un salon en particulier :

GET https://network.discut.biz/rest/service.php/channel/%23Accueil

Le # doit être encodé en %23 dans l'URL.

Exemple JavaScript

var salon = '#Accueil';
var url   = 'https://network.discut.biz/rest/service.php/channel/' + encodeURIComponent(salon);

fetch(url)
  .then(function(r) { return r.json(); })
  .then(function(data) {
    var users = data.users && data.users.val ? data.users.val : (data.users || 0);
    document.getElementById('accueil-count').textContent = users + ' connectés';
  });

4. Utiliser le proxy PHP de Discut.Biz (recommandé)

Si vous intégrez les stats sur votre site, il est préférable de passer par le proxy PHP de Discut.Biz plutôt qu'en appelant l'API directement depuis le navigateur. Cela évite les problèmes de CORS et permet de mettre en cache les résultats.

Pourquoi un proxy ?
L'API MagIRC peut bloquer les requêtes cross-origin (CORS) depuis certains navigateurs. Le proxy PHP appelle l'API côté serveur et retourne le résultat proprement.

Créer votre propre proxy PHP

<?php
// irc-stats.php — Proxy avec cache 60 secondes
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');

$cache_file = sys_get_temp_dir() . '/irc_stats.json';
$cache_ttl  = 60; // secondes

// Servir depuis le cache si disponible
if (file_exists($cache_file) && (time() - filemtime($cache_file)) < $cache_ttl) {
    echo file_get_contents($cache_file);
    exit;
}

// Appeler l'API
$ctx = stream_context_create(['http' => [
    'timeout'       => 3,
    'ignore_errors' => true,
]]);

$response = @file_get_contents(
    'https://network.discut.biz/rest/service.php/network/status',
    false, $ctx
);

if ($response) {
    file_put_contents($cache_file, $response);
    echo $response;
} else {
    // Retourner le cache expiré plutôt que rien
    echo file_exists($cache_file) ? file_get_contents($cache_file) : '{}';
}
?>

Appeler votre proxy depuis JavaScript

fetch('/irc-stats.php')
  .then(function(r) { return r.json(); })
  .then(function(data) {
    document.getElementById('users').textContent = data.users.val || '—';
  });

5. Widget complet — stats en temps réel

Voici un exemple de widget HTML/CSS/JS prêt à l'emploi à intégrer sur n'importe quelle page :

<!-- Widget stats IRC Discut.Biz -->
<div id="irc-widget" style="
  background:#0f172a;
  border-radius:12px;
  padding:20px 24px;
  color:#fff;
  font-family:-apple-system,sans-serif;
  max-width:360px;
">
  <div style="display:flex;align-items:center;gap:8px;margin-bottom:16px">
    <span style="width:8px;height:8px;border-radius:50%;background:#22c55e;display:inline-block"></span>
    <strong>Réseau Discut.Biz — En ligne</strong>
  </div>
  <div style="display:flex;gap:24px;margin-bottom:16px">
    <div>
      <div style="font-size:28px;font-weight:800" id="w-users">…</div>
      <div style="font-size:12px;color:rgba(255,255,255,.6)">connectés</div>
    </div>
    <div>
      <div style="font-size:28px;font-weight:800" id="w-chans">…</div>
      <div style="font-size:12px;color:rgba(255,255,255,.6)">salons actifs</div>
    </div>
  </div>
  <ul id="w-list" style="list-style:none;padding:0;margin:0 0 16px;font-size:13px;color:rgba(255,255,255,.75)"></ul>
  <a href="https://webchat.discut.biz"
     style="display:block;text-align:center;background:#2563eb;color:#fff;
            padding:10px;border-radius:8px;text-decoration:none;font-weight:700;font-size:14px">
    Rejoindre le tchat →
  </a>
</div>

<script>
function loadIrcStats() {
  // Statuts globaux
  fetch('https://network.discut.biz/rest/service.php/network/status')
    .then(function(r) { return r.json(); })
    .then(function(d) {
      document.getElementById('w-users').textContent = d.users && d.users.val ? d.users.val : '—';
      document.getElementById('w-chans').textContent = d.chans  && d.chans.val  ? d.chans.val  : '—';
    });

  // Top salons
  fetch('https://network.discut.biz/rest/service.php/channels/biggest/5')
    .then(function(r) { return r.json(); })
    .then(function(data) {
      var list = Array.isArray(data) ? data : (data.channels || []);
      var html = '';
      list.slice(0, 5).forEach(function(s) {
        var nom   = s.channel || s.name || '?';
        var users = s.users && s.users.val ? s.users.val : (s.users || 0);
        html += '<li style="display:flex;justify-content:space-between;padding:4px 0;border-bottom:1px solid rgba(255,255,255,.08)">'
              + '<span>' + nom + '</span>'
              + '<span style="color:#60a5fa;font-weight:600">' + users + '</span>'
              + '</li>';
      });
      document.getElementById('w-list').innerHTML = html;
    });
}

loadIrcStats();
setInterval(loadIrcStats, 60000); // Rafraîchir toutes les 60 secondes
</script>

6. Afficher le statut d'un salon sur votre forum ou blog

Vous gérez un forum ou un blog et voulez afficher combien de personnes sont connectées sur un salon précis ? Voici un snippet minimaliste :

<span id="salon-status">Chargement…</span>

<script>
fetch('https://network.discut.biz/rest/service.php/channel/' + encodeURIComponent('#Accueil'))
  .then(function(r) { return r.json(); })
  .then(function(d) {
    var users = d.users && d.users.val ? d.users.val : 0;
    document.getElementById('salon-status').textContent =
      users + ' personne' + (users > 1 ? 's' : '') + ' connectée' + (users > 1 ? 's' : '') + ' sur #Accueil';
  })
  .catch(function() {
    document.getElementById('salon-status').textContent = 'IRC en ligne';
  });
</script>

7. Bonnes pratiques

  • Mettez en cache les résultats — ne faites pas plus d'une requête par minute par visiteur, utilisez le proxy PHP avec cache
  • Gérez les erreurs — l'API peut être temporairement indisponible, toujours avoir un fallback
  • N'affichez pas les données brutes — vérifiez toujours que data.users.val existe avant de l'afficher
  • Rafraîchissement — 60 secondes est une bonne fréquence, en dessous vous risquez d'être throttlé
  • HTTPS uniquement — toujours appeler l'API en HTTPS pour éviter les erreurs de contenu mixte

Besoin d'aide ?

Si vous avez des questions sur l'intégration des stats IRC sur votre site, rejoignez #Aide sur le tchat ou consultez notre générateur de formulaire IRC pour ajouter un bouton de connexion directe.