Europa Specials EPG Doctor — Build 1.9.60
← Retour à l'application

Comment fonctionne EPG Doctor

Un guide de référence sur ce que fait ce système, ce que montre chaque onglet, comment les mécanismes clés fonctionnent, et où trouver chaque endpoint.

Sommaire

  1. Vue d'ensemble
  2. Les six onglets
  3. Navigation et interface
  4. Comment un check fonctionne
  5. Comment l'ADN de la chaîne est calculé
  6. Mapping IAB : automatique, mots-clés, manuel
  7. Comment l'Ad Server consulte ces données
  8. Référence des endpoints
  9. Le système tourne-t-il ?

1. Vue d'ensemble

EPG Doctor lit un flux de programmation (EPG) — XML ou JSON, publié par un fournisseur de contenu — le normalise vers un format pivot commun, le diagnostique (titres manquants, horaires invalides, chevauchements...), puis conserve chaque relevé en base pour construire, dans le temps, une vraie vue analytique de la chaîne : tendances de programmation, taux de répétition, mix de catégories, charge publicitaire. Cette même donnée, une fois enrichie de tags IAB, est ensuite exposée à l'Ad Server via une API dédiée pour éclairer sa décision publicitaire.

Flux source (XML/JSON) Normalisation Diagnostic Doctor Persistance D1 ADN de la chaîne Tags IAB API Ad Server

Chaque étape est indépendante et consultable séparément — un check ponctuel n'exige pas d'avoir mémorisé la chaîne au préalable, et l'historique en base reste consultable même longtemps après le dernier check.

2. Les six onglets

Check

Analyse ponctuelle d'un flux — URL ou contenu collé directement. Normalise, diagnostique, affiche le rapport complet (validité, complétude des métadonnées, problèmes détectés, moteur de règles qualité). Le point d'entrée pour toute nouvelle chaîne.

Analyse

L'ADN de la chaîne — tendances sur plusieurs semaines, pas juste le dernier relevé : format & rythme, rotation, daypart, répartition thématique, franchises, programmes les plus rediffusés. Trois vues complémentaires : Frise (un jour, linéaire, détaillée), Semaine (grille calendrier 7 jours × heures avec les vrais titres) et Heatmap (7 jours, densité/fraîcheur/qualité agrégées). Mapping IAB automatique et récapitulatif persistant.

Programmes

Intelligence par titre — exposition (diffusions, temps d'antenne, part de la chaîne), rotation (intervalle de rediffusion), contexte de programmation (voisins habituels), environnement publicitaire, tags IAB par titre.

Ads

Profil de charge publicitaire — coupures détectées, taux de remplissage (heatmap dédiée), croisement EPG × Ad Server pour confronter ce qui est programmé à ce qui est réellement diffusé côté publicité, et des pistes publicitaires calculées automatiquement (observations à seuils, jamais un jugement).

Users

Gestion des comptes internes et de leur accès par chaîne — qui peut voir/analyser quoi. Présence en ligne visible pour les utilisateurs actifs.

API & MCP

Clés d'accès partenaire (REST + MCP, dissociées), documentation API interactive, collection Postman, et le journal d'audit unifié de tous les accès programmatiques.

Au-delà de 3 chaînes mémorisées, la grille horizontale de sélection laisse place à un bandeau latéral fixe (défilement sticky) — logo, nom, date de dernière analyse et date EPG maximale disponible pour chaque chaîne d'un coup d'œil. Une chaîne pas rafraîchie depuis plus de 24h est marquée d'une bordure orange à gauche ; la chaîne actuellement sélectionnée, d'une ligne or en bas. En dessous ou égal à 3 chaînes, la grille classique reste inchangée.

Le cartouche de chaîne (nom, fournisseur, lecteur vidéo) et la barre d'onglets restent visibles en sticky en haut de la page pendant le défilement d'un panneau long (Analyse notamment) — jamais besoin de remonter pour changer d'onglet ou vérifier quelle chaîne est affichée.

Sélecteur de langue (FR/EN) et bascule thème clair/sombre dans l'en-tête, appliqués immédiatement sans rechargement pour les parties déjà traduites de l'interface — ce chantier avance par tranches successives, certaines zones restent en français le temps d'être couvertes.

4. Comment un check fonctionne

Un check accepte trois familles de format, détectées automatiquement — pas besoin de préciser lequel :

Une fois normalisé vers un pivot commun, Doctor applique ses règles de qualité (titre manquant, horaire invalide, durée nulle, chevauchements) et calcule un rapport complet. Chaque programme de ce check est ensuite conservé en base — en ajout uniquement, jamais de mise à jour : un flux réanalysé plusieurs fois ne fusionne pas avec ses relevés précédents, ce qui rend possible de comparer deux relevés dans le temps pour détecter un vrai changement.

5. Comment l'ADN de la chaîne est calculé

Contrairement à un check ponctuel (une seule capture instantanée), l'ADN de la chaîne agrège l'historique conservé en base sur la fenêtre demandée. La bonne compréhension de ce mécanisme repose sur un point technique important : la base étant en ajout uniquement, un même programme réel peut avoir plusieurs lignes au fil des checks successifs — notamment quand son horaire est corrigé de quelques minutes entre deux relevés, ce qui arrive couramment sur un flux réel.

Pour ne jamais confondre une correction d'horaire avec un nouveau programme, chaque programme reçoit une identité persistante (un identifiant interne, tolérant à ce type de dérive) dès qu'il est vu pour la première fois. La lecture agrégée s'appuie sur cette identité en priorité — la version la plus récemment vérifiée de chaque programme, peu importe l'horaire exact où elle est tombée — avec un repli sur l'horaire exact pour les rares programmes dont l'identité n'a pas pu être résolue.

6. Mapping IAB : automatique, mots-clés, manuel

Chaque titre diffusé peut recevoir un ou plusieurs tags IAB (taxonomie IAB Content Taxonomy 3.1), utilisés par l'Ad Server pour contextualiser sa décision publicitaire. Trois mécanismes, dans l'ordre de priorité :

  1. Mapping automatique par catégorie — la catégorie éditoriale du programme (déjà présente dans le flux source) est traduite vers un ou plusieurs codes IAB via une table de correspondance.
  2. Règles mots-clés — utilisées uniquement quand un titre n'a aucune catégorie éditoriale exploitable : un mot-clé cherché dans le titre ou le sous-titre du programme (insensible à la casse) déclenche un mapping vers un code IAB donné. Gérables directement depuis l'onglet Analyse.
  3. Ajustement manuel — un tag posé à la main sur un titre précis n'est jamais écrasé par un nouveau passage du mapping automatique.

L'onglet Analyse affiche un récapitulatif persistant (titres tagués, sans tag, catégories non mappées avec leur nombre de titres concernés) et un panneau de complétion manuelle pour traiter les titres restants directement, sans devoir les chercher un par un dans l'onglet Programmes.

7. Comment l'Ad Server consulte ces données

L'endpoint GET /v1/api/channels/context est le point de rencontre entre EPG Doctor et l'Ad Server — un snapshot des programmes, coupures publicitaires et tags IAB sur une fenêtre demandée, préchargé à l'avance par l'Ad Server, jamais appelé pendant une requête publicitaire en direct.

ETag

La réponse porte un ETag réel (calculé sur le contenu effectif — jamais sur l'heure de génération). Un appel suivant avec le même If-None-Match reçoit un 304 Not Modified si rien n'a changé — ce comportement est normal et attendu, pas une anomalie ; le journal d'audit (onglet API & MCP) permet de comparer directement les deux valeurs si un doute existe sur la fraîcheur d'une réponse.

L'authentification se fait par clé API dédiée (scope channels:read), gérée depuis l'onglet API & MCP — distincte des comptes internes utilisés pour se connecter à l'application elle-même.

Le journal d'audit lui-même (rétention 48h) se filtre par canal (REST/MCP), par statut (succès/erreur) et par recherche libre sur l'endpoint, avec une pagination par curseur — chaque page suivante repart du dernier horodatage affiché, jamais un simple décalage numérique qui pourrait sauter ou répéter des lignes sur une table alimentée en continu.

8. Référence des endpoints

EndpointUsage
POST /checkLance une analyse ponctuelle sur un flux (URL ou contenu collé).
POST /channel-refreshRelance le check d'une chaîne déjà mémorisée, sans resaisir l'URL.
GET /channel-historyHistorique de programmes pour une chaîne mémorisée et une plage donnée — alimente la Frise et la vue Semaine.
GET /channel-dnaADN agrégé de la chaîne sur une période (semaine, 90 jours...).
GET /channel-heatmapHeatmap hebdomadaire densité/fraîcheur/qualité.
POST /channels-latest-epg-datesDate EPG maximale pour un lot de chaînes en une seule requête — alimente le bandeau latéral.
GET /channel-contentIntelligence par titre — exposition, rotation, contexte de programmation (onglet Programmes).
GET /channel-ad-loadProfil de charge publicitaire — coupures, taux de charge théorique (onglet Ads).
POST /channel-ad-load-importImport d'un rapport de coupures (CSV — agrégat quotidien, horaire, ou détaillé).
GET /channel-ad-fill-heatmapTaux de remplissage Ad Server, heatmap hebdomadaire.
GET /channel-ad-epg-crossrefCroisement EPG × charge publicitaire, jour par jour.
GET /admin/content-iab-tagsTags IAB par titre pour une chaîne, catégories non mappées.
GET /admin/usersComptes internes et leur accès par chaîne (onglet Users).
GET /v1/api/channels/contextSnapshot programmes + coupures + tags IAB pour l'Ad Server (clé API, scope channels:read).
GET /admin/api-keys/auditJournal unifié de tous les accès API/MCP — 48h de rétention, filtrable et paginé.
POST /mcpServeur MCP (JSON-RPC) — même système de clés que la REST API, mode d'accès vérifié séparément.
GET /admin/db-statsStatistiques de la base (volume, couverture d'identité des programmes).
GET /admin/cron-logHistorique des exécutions planifiées (rafraîchissement des chaînes, nettoyage de rétention).
Documentation interactive complète (schémas de requête/réponse, tous les endpoints partenaires) : GET /v1/api/docs — accessible sans clé API.

9. Le système tourne-t-il ?

GET /admin/cron-log (clé maître) montre l'historique des rafraîchissements planifiés et du nettoyage de rétention. GET /admin/db-stats donne une vue d'ensemble de la base — volume, canaux distincts, bornes temporelles, couverture d'identité des programmes.