FR 3128802 A1 20230505 FR 2111635 A 20211102 Système de suivi de navigation Internet Un système de suivi de navigation Internet comprend un serveur web (4) agencé pour fournir au moins une page web dans laquelle certains au moins des éléments associés au suivi de navigation sont codés dans la page web par un code CSS, la page web comprenant un mécanisme de détection d’interaction à journaliser, lequel mécanisme est agencé, lorsqu’un type d’interaction à journaliser est détecté, pour envoyer le code CSS associé à l’élément concerné avec au moins un indicateur de l’interaction détectée à un serveur de journalisation d’interactions (6). Le serveur de journalisation d’interactions (6) comprend une mémoire (10) d’entrée agencée pour recevoir les codes CSS associés à un élément concerné et l’au moins un indicateur de l’interaction détectée et un extracteur (12) agencé pour analyser chaque code CSS associé à un élément concerné et l’au moins un indicateur de l’interaction détectée, les découper en morceaux, encoder certains au moins des morceaux sous la forme d’un nombre, et stocker la suite résultante de nombres encodant les morceaux dans une base de données. Fig.1 Système de suivi de navigation Internet L’invention concerne le suivi de navigation Internet, et en particulier le suivi de navigation ou activité au sein d’un site et au sein des pages d’un site. Les concepteurs de sites web ont accès à une quantité limitée de données leur permettant de quantifier la qualité des sites qu’ils conçoivent. Historiquement, leur principale source d’information était la mesure d’audience, via le comptage de pages. Pour enrichir ces données, certaines solutions ont été développées afin d’essayer de systématiser la récupération de la plupart des opérations d’un utilisateur au sein d’un site, y compris au sein d’une page. Cependant, ces solutions posent plusieurs problèmes. Tout d’abord, la solution ne doit pas générer de surcharge côté serveur. En effet, suivre toutes les interactions d’un utilisateur avec une page est une tâche génératrice d’une quantité importante de données qui peut poser des problèmes conséquents en termes de charge réseau et serveur. Pour contourner ce problème, il est connu de référencer les objets d’une page web par son ordre d’apparition dans le code. Les données de suivi de navigation sont ensuite remontées sur la base de cet ordre. Le problème de ces solutions est qu’en l’absence d’un taggage spécifique, dès que la structure de la page est perdue, ce sont toutes les données du passé qui perdent leur pertinence. Le coût est donc déporté sur l’entretien des pages web et leur conception. L’invention vient améliorer la situation. À cet effet, elle propose un système de suivi de navigation Internet comprenant un serveur web agencé pour fournir au moins une page web dans laquelle certains au moins des éléments associés au suivi de navigation sont codés dans la page web par un code CSS, la page web comprenant un mécanisme de détection d’interaction à journaliser, lequel mécanisme est agencé, lorsqu’un type d’interaction à journaliser est détecté, pour envoyer le code CSS associé à l’élément concerné avec un indicateur de l’interaction détectée à un serveur de journalisation d’interactions. Le serveur de journalisation d’interactions comprend une mémoire d’entrée agencée pour recevoir les codes CSS associés à un élément concerné et au moins un indicateur de l’interaction détectée, et un extracteur agencé pour analyser chaque code CSS associé à un élément concerné et l’au moins un indicateur de l’interaction détectée, les découper en morceaux, encoder certains au moins des morceaux sous la forme d’un nombre, et stocker la suite résultante de nombres encodant les morceaux dans une base de données. Ce dispositif est particulièrement avantageux car il permet, d’offrir un système qui ne nécessite pas de modification du code de la page web, qui systématise le suivi de navigation sur tous les éléments, et qui permet une analyse en temps réel des données sans surcoût car la base de données est structurée avec les données du code de la page web, qui sont donc maîtrisées avec la conception de celle-ci. Selon divers modes de réalisation, l’invention peut présenter une ou plusieurs des caractéristiques suivantes : - le serveur de journalisation comprend un serveur de réseau de diffusion de contenu, et dans lequel la mémoire d’entrée est une mémoire de journalisation du serveur de réseau de diffusion de contenu, - l’extracteur est un extracto-chargeur, - l’extracteur est en outre agencé pour stocker la suite de nombres encodant les morceaux composant le code CSS associé à l’élément concerné avec un indicateur de l’interaction détectée dans une ligne d’une table de la base de données, chaque nombre étant stocké dans une colonne distincte, - l’extracteur est en outre agencé pour stocker les couples associant un morceau à un nombre dans une table de la base de données à deux colonnes, - l’extracteur est agencé pour chercher un morceau dans table de la base de données à deux colonnes pour récupérer le nombre correspondant, et, lorsque le morceau est absent, pour générer un nombre et créer une nouvelle ligne avec le morceau et le nombre généré, - le mécanisme de détection est mis en œuvre par du code JavaScript inclus dans la page web, - le mécanisme de détection émet une requête de contenu vers le serveur de de réseau de diffusion de contenu, lequel contenu présente un poids inférieur à 1ko, et dans lequel ladite requête contient comme paramètres au moins l’URL de la page web sur laquelle l’interaction a été détectée, le code CSS de l’élément concerné et un indicateur de l’interaction détectée, - le mécanisme de détection est agencé pour détecter une interaction dans le groupe comprenant l’affichage d’une page, le clic simple, le double clic, la pression longue, le toucher rapide et le toucher long, et - le mécanisme de détection comprend une fonction d’enrichissement agencée pour détecter que le type d’interaction d’une interaction détectée est tel que deux interactions présentant chacune un type d’interaction choisi ont été détectées sur la même page web sans changement de la page, pour calculer une durée à partir de marqueurs de temps associés à ces deux interactions, et pour retourner cette durée avec le code CSS associé à l’élément concerné avec un indicateur de la deuxième interaction détectée. D’autres caractéristiques et avantages de l’invention apparaîtront mieux à la lecture de la description qui suit, tirée d’exemples donnés à titre illustratif et non limitatif, tirés des dessins sur lesquels : - la représente un schéma générique d’un système de suivi de navigation Internet selon l’invention, - la représente un exemple d’une fonction mise en œuvre par l’extracteur de la . Les dessins et la description ci-après contiennent, pour l'essentiel, des éléments de caractère certain. Ils pourront donc non seulement servir à mieux faire comprendre la présente invention, mais aussi contribuer à sa définition, le cas échéant. La représente un diagramme générique d’un système de suivi de navigation Internet 2 selon l’invention. Le système de suivi de navigation Internet personnalisé 2 comprend dans l’exemple décrit ici un serveur web 4 et un serveur de journalisation 6. Le serveur web 4 est agencé pour fournir des contenus web, en particulier des pages web à un ou plusieurs dispositifs 8 qui sont connectés à Internet. Le serveur de journalisation 6 comprend une mémoire 10 et un extracteur 12. Dans l’exemple décrit ici, la mémoire 10 comprend une mémoire d’entrée et une base de données de journalisation qui sera décrite plus bas. Toujours dans l’exemple décrit ici, le serveur de journalisation 6 est un serveur de réseau de diffusion de contenu (ou serveur CDN pour « Content distribution network server » en anglais), et l’extracteur 12 est un extracto-chargeur (« Extract-transform-load » ou « ETL » en anglais). Comme on le verra plus bas, le rôle de l’ETL est de transformer les données de suivi de navigation reçues par le serveur CDN pour les enregistrer dans la base de données de journalisation qui est une base de données relationnelle. Dans l’exemple décrit ici, cette base de données est stockée dans le même espace que la mémoire d’entrée. En variante, les données de navigation pourraient être stockées dans des espaces distincts. Dans l’exemple décrit ici, l’ETL fait partie du serveur CDN. En variante, l’ETL pourrait être mis en œuvre dans un autre serveur ou ressource de calcul. La mémoire 10 peut être tout type de stockage de données propre à recevoir des données numériques : disque dur, disque dur à mémoire flash, mémoire flash sous toute forme, mémoire vive, disque magnétique, stockage distribué localement ou dans le cloud, etc. Les données calculées par le dispositif peuvent être stockées sur tout type de mémoire similaire à la mémoire 4, ou sur celle-ci. Ces données peuvent être effacées après que le dispositif a effectué ses tâches ou conservées. L’extracteur 12 accède directement ou indirectement à la mémoire d’entrée. Il peut être réalisé sous la forme d’un code informatique approprié exécuté sur un ou plusieurs processeurs. Par processeur, il doit être compris tout processeur adapté aux calculs décrits plus bas. Un tel processeur peut être réalisé de toute manière connue, sous la forme d’un microprocesseur pour ordinateur personnel, d’une puce dédiée de type FPGA ou SoC, d’une ressource de calcul sur une grille ou dans le cloud, d’une grappe de processeurs graphiques (GPUs), d’un microcontrôleur, ou de toute autre forme propre à fournir la puissance de calcul nécessaire à la réalisation décrite plus bas. Un ou plusieurs de ces éléments peuvent également être réalisés sous la forme de circuits électroniques spécialisés tel un ASIC. Une combinaison de processeur et de circuits électroniques peut également être envisagée. Le fonctionnement du suivi de navigation est le suivant. Un dispositif 8 envoie une requête au serveur web 4 pour consulter une page web Page.html. Dans cette page web, les éléments à afficher sont encodés avec du code CSS pour la mettre en forme. En plus des codes CSS, la page web Page.html contient un code Javascript qui met en œuvre un mécanisme de détection d’interaction à journaliser. Ce mécanisme est agencé pour détecter qu’un utilisateur interagit avec un élément de la page web et que cette interaction doit être journalisée. Par exemple, cette interaction peut être l’affichage de la page (évènement « Pageview »), un clic sur un élément (clic simple, long, double, pression longue, toucher rapide, toucher long, etc…), un survol d’un évènement (évènement « Mouseover »), etc. Le mécanisme peut être agencé pour détecter toutes les interactions possibles sur la page web ou seulement un sous-ensemble de celles-ci, selon le degré de journalisation souhaité. Lorsqu’une de ces interactions est détectée, le code JavaScript déclenche une requête silencieuse Int_Dat vers le serveur CDN. Le terme de requête silencieuse est utilisé car cette requête vise un contenu qui n’a pas d’intérêt pour le dispositif 8, et dont le résultat doit rester transparent pour ce dernier. Ainsi, dans l’exemple décrit ici, cette requête vise une image qui contient un unique pixel (c’est-à-dire une image de dimension 1 pixel* 1 pixel) et dont l’affichage ne pourra pas se voir. La requête Int_Dat contient donc l’adresse sur le serveur CDN de cette ressource, mais également toutes les données d’intérêt pour la journalisation. Pour cela, ces données sont passées en tant que paramètres de la requête. Avantageusement, la ressource côté serveur de journalisation pèsera moins de 1ko, ce qui permet de préserver la bande passante, et d’offrir une ressource qui, même si elle est affichée, ne sera pas perçue par l’utilisateur. Ci-dessous, un exemple de l’adresse visée par la requête sur le serveur CDN. https://8vhgfgcwsnjp.air360tracker.net/i?a=8vhgfgcwsnjp&d=dc4912ea8f9b966fa386081cbfe8e46e&s=648d8686-fa31-4d55-bd04-075294e3155c-1632908375& p=web&t=1632909753.266&et=pv&el=Pageview&wu=https%3A%2F%2Fbilletterie.fr%2F&wt=Billetterie&wr=https%3A%2F%2Fbilletterie.fr%2Fcontent%2F168-billetterie-europa-league-21-22&web_i=1 Dans cette requête, on voit : - l’adresse de la ressource sur le serveur CDN : 8vhgfgcwsnjp.air360tracker.net/i?a=8vhgfgcwsnjp, - l’identifiant d’utilisateur : dc4912ea8f9b966fa386081cbfe8e46e, - le code CSS de l’élément concerné : p=web - l’identifiant de session : 648d8686-fa31-4d55-bd04-075294e3155c-1632908375, - le type d’interaction et son marqueur de temps : Pageview ; 1632909753.266, - l’URL de la page web d’origine : https%3A%2F%2Fbilletterie.fr%2F&wt=Billetterie - l’URL de la page web de destination du lien qui été cliqué : https%3A%2F%2Fbilletterie.fr%2Fcontent%2F168-billetterie-europa-league-21-22. Cette requête, lorsqu’elle est reçue par le serveur CDN, est stockée dans un journal qui constitue la mémoire d’entrée. Il apparaît ici que l’utilisation d’un serveur CDN est particulièrement intéressante. En effet, elle permet d’utiliser la fonction de journalisation des requêtes dont sont munis tous les serveurs CDN. De plus, ceux-ci sont naturellement faits pour gérer des charges d’accès très importantes, ce qui signifie que le système 2 peut servir plusieurs centaines de milliers d’utilisateurs simultanément. En outre, l’utilisation d’une requête transparente fait que d’une part, l’utilisateur n’est pas impacté par la journalisation de ses interactions, et que, d’autre part, l’URL d’appel est un vecteur idéal pour transporter les données à journaliser. Enfin, l’utilisation du code CSS associé à l’élément journalisé est très avantageuse car elle permet une identification aisée des éléments par leurs propriétés CSS, sans nécessiter de traitement particulier côté utilisateur consultant la page web, ou à la conception de la page. Une fois cette requête reçue dans la mémoire d’entrée 10, l’extracteur 12 vient la traiter pour stocker les données dans la base de données de journalisation. Dans l’exemple décrit ici, cela est réalisé de manière périodique, par exemple l’extracteur 12 accède à la mémoire d’entrée toutes les minutes. Cette désynchronisation est intéressante car elle permet au système 2 de supporter des pics de connexion importants sans avoir à réaliser une mise à l’échelle ou risquer une perte de service, tout en restant temps réel dans la plupart des situations. Ainsi, les expérimentations de la Demanderesse ont montré qu’avec un serveur CDN classique, même en cas de pics à plusieurs centaines de milliers de connexions par minute pendant une dizaine de minutes, l’extracteur 12 arrive à dépiler la mémoire d’entrée en 30 minutes. La représente un exemple de fonctionnement de l’extracteur 12 pour traiter les données dans la mémoire d’entrée 10. Dans une opération 200, l’extracteur 12 récupère une entrée de la mémoire d’entrée 10 par l’exécution d’une fonction Pop() qui dépile cette dernière et stocke le résultat dans une variable locale Dat. Si l’on reprend l’exemple mentionné plus haut, la variable locale Dat contient donc l’URL entière https://8vhgfgcwsnjp.air360tracker.net/i?a=8vhgfgcwsnjp&d=dc4912ea8f9b966fa386081cbfe8e46e&s=648d8686-fa31-4d55-bd04-075294e3155c-1632908375& p=web&t=1632909753.266&et=pv&el=Pageview&wu=https%3A%2F%2Fbilletterie.fr%2F&wt=Billetterie&wr=https%3A%2F%2Fbilletterie.fr%2Fcontent%2F168-billetterie-europa-league-21-22&web_i=1 Ensuite, dans une opération 210, l’extracteur 12 nettoie la variable Dat au moyen d’une fonction Clean(), notamment pour enlever l’URL de la ressource sur le serveur CDN et les séparateurs de données dans l’URL, et découpe le résultat en morceaux dans un tableau Dat2Conv[]. A partir de l’URL ci-dessus, le tableau Dat2Conv[] obtenu est comme suit : a 8vhgfgcwsnjp d dc4912ea8f9b966fa386081cbfe8e46e s 648d8686-fa31-4d55-bd04-075294e3155c-1632908375 p web t 1632909753.266 et pv el Pageview wu https%3A%2F%2Fbilletterie.fr%2F wt Billetterie wr https%3A%2F%2Fbilletterie.fr%2Fcontent%2F168-billetterie-europa-league-21-22 web_i 1 Le tableau Dat2Conv[] est ensuite parcouru au moyen d’une fonction Conv() pour convertir une entrée donnée en un nombre unique. Cette conversion est réalisée en accédant à une table de conversion comprenant deux colonnes. L’une des colonnes contient des chaînes de texte, et l’autre un nombre. La fonction Conv() recherche le texte en entrée du tableau Dat2Conv[] et retourne le nombre correspondant si ce texte est présent. Si le texte n’est pas présent, alors un générateur pseudo-aléatoire est utilisé pour déterminer un nombre pour ce texte, et cette double entrée est ajoutée à la table à deux colonnes. Enfin, les nombres correspondant aux entrées du tableau Dat2Conv[] sont retournés dans une variable ConvDat dans laquelle les nombres sont séparés par un séparateur, par exemple « ; » ou « # ». Selon une première variante, toutes les entrées du tableau Dat2Conv[] sont transformées par la fonction Conv(). Selon une seconde variante, certains éléments de nature unique comme l’identifiant utilisateur ne sont pas convertis et seront stockés à l’identique dans la base de données relationnelle. Enfin, dans une opération 230, une fonction Wrt() écrit la variable ConvDat dans une ligne d’une table de la base de données relationnelle. Ce fonctionnement de l’extracteur 12 est particulièrement intéressant car il est aisé à mettre en œuvre par un ETL, et produit une forme d’encodage de chaque requête transparente en une suite de nombres. Or ce type de données est particulièrement aisé à manipuler en extraction, et les recherches sont peu coûteuses en termes de calcul. Ainsi, il devient possible de manière industrialisable de journaliser la totalité des évènements de navigation d’une quantité illimitée de dispositifs, avec une disponibilité temps réel, et d’une manière qui rend l’extraction des données d’autant plus aisée que le découpage en morceaux (« chunks » en anglais) de l’opération 210 rend celle-ci particulièrement agile. En effet, en concevant de manière réfléchie les entrées CSS des pages web, il devient possible de faire non seulement de l’analyse sur une page web, mais également sur tout un site. Il suffit pour cela de nommer des éléments que l’on souhaite analyser simultanément de la même manière : la partie de ces éléments qui correspond au nom dans le code CSS sera encodée avec le même nombre, et il suffira de chercher ce nombre pour récupérer tous les évènements associés à ceux-ci. Dans le même esprit, la combinaison de plusieurs nombres entre eux reviendra à une requête sur un sous-ensemble d’éléments, etc. Il apparaît donc que, prises seules, chacune des caractéristiques décrite ci-dessus apporte un avantage conséquent par rapport à l’art antérieur. Ainsi, il serait possible d’utiliser un autre type de serveur qu’un serveur CDN, ou un autre outil qu’un ETL, ou encore utiliser un autre véhicule qu’une requête transparente pour transmettre les données à encoder. Les éléments les plus cruciaux sont l’utilisation des données de code CSS, découpées en morceaux et encodées en série de nombres qui permet d’obtenir l’effet technique principal. Les spécificités visées plus haut permettent d’améliorer encore le résultat obtenu. Il est en outre possible d’enrichir encore le fonctionnement du système 2 en combinant certains évènements côté dispositif. En effet, lorsque deux évènements se suivent sans changement de page (par exemple, chargement de la page, puis clic sur un élément particulier, qui peut provoquer un changement de page ou marquer un intérêt particulier pour un élément chez l’utilisateur), le mécanisme peut calculer directement le temps qui s’est écoulé entre la première interaction et la deuxième, et transmettre cette information dans la requête transparente. Cela permet de créer des indicateurs composites sans alourdir la charge serveur, avec un coût imperceptible côté client. En outre, le serveur de journalisation peut comprendre des routines qui calculent de manière automatique certains indicateurs composites dans la base de données, comme le temps moyen pour les indices qu’on vient de décrire, le nombre moyen de clics par heure / jour / autre unité de temps sur chaque élément ou sur un sous-ensemble de ceux-ci, etc. Grâce à tout ce qui précède, le système de suivi de navigation Internet 2 permet d’offrir une interface enrichie aux concepteurs, qui peuvent accéder à une version enrichie des pages web qui permet d’afficher pour chaque élément toutes les informations pertinentes dans la base de données relationnelles, de manière instantanée. Système de suivi de navigation Internet comprenant un serveur web (4) agencé pour fournir au moins une page web dans laquelle certains au moins des éléments associés au suivi de navigation sont codés dans la page web par un code CSS, la page web comprenant un mécanisme de détection d’interaction à journaliser, lequel mécanisme est agencé, lorsqu’un type d’interaction à journaliser est détecté, pour envoyer le code CSS associé à l’élément concerné avec au moins un indicateur de l’interaction détectée à un serveur de journalisation d’interactions (6), le serveur de journalisation d’interactions (6) comprenant une mémoire (10) d’entrée agencée pour recevoir les codes CSS associés à un élément concerné et l’au moins un indicateur de l’interaction détectée et un extracteur (12) agencé pour analyser chaque code CSS associé à un élément concerné et l’au moins un indicateur de l’interaction détectée, les découper en morceaux, encoder certains au moins des morceaux sous la forme d’un nombre, et stocker la suite résultante de nombres encodant les morceaux dans une base de données. Système de suivi de navigation Internet selon la revendication 1, dans lequel le serveur de journalisation (6) comprend un serveur de réseau de diffusion de contenu, et dans lequel la mémoire (10) d’entrée est une mémoire de journalisation du serveur de réseau de diffusion de contenu. Système de suivi de navigation Internet selon la revendication 1 ou 2, dans lequel l’extracteur (12) est un extracto-chargeur. Système de suivi de navigation Internet selon l’une des revendications précédentes, dans lequel l’extracteur (12) est en outre agencé pour stocker la suite de nombres encodant les morceaux composant le code CSS associé à l’élément concerné avec un indicateur de l’interaction détectée dans une ligne d’une table de la base de données, chaque nombre étant stocké dans une colonne distincte. Système de suivi de navigation Internet selon l’une des revendications précédentes, dans lequel l’extracteur (12) est en outre agencé pour stocker les couples associant un morceau à un nombre dans une table de la base de données à deux colonnes. Système de suivi de navigation Internet selon la revendication 5, dans lequel l’extracteur (12) est agencé pour chercher un morceau dans table de la base de données à deux colonnes pour récupérer le nombre correspondant, et, lorsque le morceau est absent, pour générer un nombre et créer une nouvelle ligne avec le morceau et le nombre généré. Système de suivi de navigation Internet selon l’une des revendications précédentes, dans lequel le mécanisme de détection est mis en œuvre par du code JavaScript inclus dans la page web. Système de suivi de navigation Internet selon la revendication 2 ensemble avec la revendication 7, dans lequel le mécanisme de détection émet une requête de contenu vers le serveur de de réseau de diffusion de contenu, lequel contenu présente un poids inférieur à 1ko, et dans lequel ladite requête contient comme paramètres au moins l’URL de la page web sur laquelle l’interaction a été détectée, le code CSS de l’élément concerné et un indicateur de l’interaction détectée. Système de suivi de navigation Internet selon l’une des revendications précédentes, dans lequel le mécanisme de détection est agencé pour détecter une interaction dans le groupe comprenant l’affichage d’une page, le clic simple, le double clic, la pression longue, le toucher rapide et le toucher long. Système de suivi de navigation Internet selon l’une des revendications précédentes, dans lequel le mécanisme comprend une fonction d’enrichissement agencée pour détecter que le type d’interaction d’une interaction détectée est tel que deux interactions présentant chacune un type d’interaction choisi ont été détectées sur la même page web sans changement de la page, pour calculer une durée à partir de marqueurs de temps associés à ces deux interactions, et pour retourner cette durée avec le code CSS associé à l’élément concerné avec un indicateur de la deuxième interaction détectée.