# 🖥️ 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 ```bash 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://:8710` — recherche, guets, file et bibliothèque. Le jeton se saisit une fois dans l'en-tête de la page. ## En service ```bash 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=` | **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`](../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 ```