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.
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
{
"channel": "#Accueil",
"users": "43",
"topic": "Bienvenue dans le salon d'accueil de Discut.Biz",
"topic_author": "Cris",
"modes": "nPrt"
}
<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>
<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>
<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>
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>
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;
fetch('/proxy-irc.php?endpoint=channels/%23accueil')
.then(r => r.json())
.then(d => {
console.log('Topic:', d.topic);
console.log('Utilisateurs:', d.users);
});
/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- 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
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.