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.
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.
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.valexiste 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.