Utiliser l'API REST Discut.Biz pour afficher les statistiques IRC
API REST & Statistiques IRC Discut.Biz
Discut.Biz met gratuitement à disposition une API REST publique permettant 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, informations sur un salon ou création de widgets : tout est accessible sans clé API.
Ressources
Sommaire
- Statistiques globales
- Salons les plus actifs
- Informations sur un salon
- Proxy PHP recommandé
- Widget complet
- Statut d'un salon
- Bonnes pratiques
- Liens utiles
URL de base de l'API
https://network.discut.biz/rest/service.php
Toutes les requêtes utilisent cette URL comme point d'entrée.
1. Statistiques globales du réseau
Pour récupérer le nombre total d'utilisateurs connectés, de salons actifs et de serveurs :
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 ayant le plus d'utilisateurs connectés :
GET https://network.discut.biz/rest/service.php/channels/biggest/10
Le nombre 10 peut être remplacé 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
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 obtenir les informations d'un salon :
GET https://network.discut.biz/rest/service.php/channel/%23Accueil
Le caractère # doit être encodé sous la forme %23.
Exemple JavaScript
var salon = '#Accueil';
fetch(
'https://network.discut.biz/rest/service.php/channel/' +
encodeURIComponent(salon)
)
.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 un proxy PHP (recommandé)
Pour intégrer les statistiques sur ton site, il est conseillé de passer par un proxy PHP. Cela permet d'éviter les problèmes de CORS et d'ajouter un cache afin de limiter le nombre de requêtes.
Le proxy appelle l'API côté serveur puis renvoie simplement le résultat au navigateur.
Créer un proxy PHP
<?php
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;
if(file_exists($cache_file)
&& (time()-filemtime($cache_file))<$cache_ttl){
echo file_get_contents($cache_file);
exit;
}
$response=@file_get_contents(
'https://network.discut.biz/rest/service.php/network/status'
);
if($response){
file_put_contents($cache_file,$response);
echo $response;
}else{
echo file_exists($cache_file)
? file_get_contents($cache_file)
: '{}';
}
?>
Appeler le proxy
fetch('/irc-stats.php')
.then(r=>r.json())
.then(data=>{
document.getElementById('users').textContent=data.users.val;
});
5. Widget complet — Statistiques en temps réel
Le widget suivant est prêt à être intégré sur n'importe quel site Web :
<!-- 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(){
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 : '—';
});
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);
</script>
6. Afficher le statut d'un salon
Tu souhaites afficher directement le nombre de personnes connectées sur un salon précis ? Voici un exemple 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
- Mets les résultats en cache afin d'éviter d'effectuer une requête à chaque affichage de page.
- Utilise le proxy PHP pour éviter les problèmes de CORS et réduire le nombre d'appels vers l'API.
- Prévois toujours un fallback au cas où l'API serait momentanément indisponible.
- Vérifie toujours les données avant de les afficher (par exemple
data.users.val). - Rafraîchis les statistiques toutes les 60 secondes, inutile de faire davantage de requêtes.
- Utilise exclusivement HTTPS pour éviter les erreurs de contenu mixte.