Files
Noxely/server/README.md
T
tuxgyverandClaude Sonnet 5 7810bef8a3 Le serveur garde la trace de ce qu'il entend, et repère la rotation (2.4.0)
Le balayage ne servait qu'à trouver un morceau guetté, puis oubliait tout. Il
note désormais chaque titre annoncé par les stations, même sans guet en cours :
un onglet Écoutes montre l'historique, et la rotation — passages et stations
distinctes, par titre et par artiste — sur les 100 dernières remontées.

Pour que l'historique soit fiable, un tour va maintenant jusqu'au bout après une
trouvaille (l'enregistrement part aussitôt, le début du morceau n'est pas
perdu), et la liste des stations est mise en cache une demi-heure au lieu
d'interroger l'annuaire à chaque tour.

Essayé sur de vraies radios : une station alternait le vrai titre et un titre de
repli, ce qui doublait les passages. Un titre déjà relevé sur la même station
dans les dix minutes est donc ignoré.

Première moitié de la reconnaissance des morceaux ; l'écoute continue et
l'empreinte sonore suivront.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 17:59:32 +02:00

2.4 KiB

🖥️ Noxely — serveur

Le serveur porte tout ce qui coûtait de la batterie au téléphone : la recherche dans les catalogues, le guet des radios, l'enregistrement et le téléchargement. Le mobile ne fait plus que récupérer des fichiers prêts.

Installation

make server-venv                 # crée le venv et installe les dépendances
cp server/.env.example server/.env   # puis renseigner NOXELY_TOKEN
make server-run                  # lancement au premier plan, pour essayer

L'interface de pilotage est à http://<hôte>:8710 — recherche, guets, file et bibliothèque. Le jeton se saisit une fois dans l'en-tête de la page.

En service

make server-install              # unité systemd (sudo demandé)
make server-status               # état
make server-logs                 # journal suivi

API

Route Qui l'utilise
GET /api/health tout le monde, sans jeton
GET /api/library?since=<curseur> le mobile — uniquement ce qui a changé
GET /api/media/{id}/file le mobile — le fichier
GET /api/search, /api/tracks, POST /api/queue l'interface web
GET/POST/DELETE /api/watches, POST /api/watches/sweep l'interface web
GET /api/heard?limit=&q= l'interface web — l'historique de ce qui a été entendu
GET /api/rotation?last=100&top=20 l'interface web — ce qui tourne sur les n dernières remontées

Toutes les routes sauf /api/health exigent l'en-tête X-Noxely-Token.

Historique et rotation

Le serveur note chaque titre annoncé par les stations qu'il balaie (ICY), même quand aucun morceau n'est guetté. Une station qui n'a pas changé de morceau depuis le dernier tour n'ajoute rien, et celles qui n'annoncent qu'elles-mêmes sont écartées.

La rotation compte, sur les n dernières remontées (100 par défaut), les passages de chaque titre et de chaque artiste, avec le nombre de stations distinctes qui les diffusent.

Sans guet en cours, un tour a lieu toutes les NOXELY_LISTEN_INTERVAL secondes (60 par défaut) — quelques dizaines de kilo-octets par station. NOXELY_HISTORY=0 coupe l'historique ; les lignes plus vieilles que NOXELY_HISTORY_DAYS (90) sont purgées.

Licence

GPL v3, comme le reste du projet — voir ../LICENSE.

Données

$NOXELY_DATA/
├── noxely.sqlite3   index des médias, des guets et de l'historique des écoutes
└── media/           les fichiers eux-mêmes