Il n'y a pas de règles pour les chaînes User-Agent, il n'y a donc aucun moyen de créer un analyseur complètement correct et à l'épreuve du temps. Il existe cependant une tendance générale :
User-Agent: <engine-string> <engine-string> ...
Où engine-string
a la forme :
<agent-name> (<comment>; <comment>; ...)
Chaque chaîne de moteur (je viens de l'appeler ainsi d'après ce que j'ai compris, ce n'est peut-être pas correct) peut avoir ou non des commentaires.
Par exemple :
Mozilla/5.0 (iPhone; CPU iPhone OS 6_0 like Mac OS X) ↲
AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e ↲
Safari/8536.25 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
(Il s'agit d'une seule chaîne, je l'ai juste divisée en lignes.) Il semble que chaque fois que quelqu'un fait un fork d'un moteur de navigateur, il ajoute simplement son truc à la fin. Nous avons donc un navigateur abstrait "Mozilla" (un héritage de la "First Browser War") qui pense que c'est sur iPhone. Ensuite, nous voyons qu'il existe un WebKit (qui se souvient qu'il est né sous le nom de KHTML il y a longtemps). Ensuite, il y a une modification de la version/6.0, qui a ensuite été modifiée en Mobile/10A5376e, qui est devenu Safari/8536.25, qui révèle enfin le secret qu'il s'agit en fait d'un bot Google mobile.
Autre exemple :
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.4; ↲
InfoPath.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; .NET CLR 3.0.4506.2152; ↲
.NET CLR 3.5.30729; .NET CLR 1.1.4322)
Il s'agit d'un moteur unique, mais il a beaucoup à dire entre parenthèses.
Donc l'observation générale est :
- les dernières chaînes de moteur sont les plus importantes,
- les derniers commentaires entre parenthèses sont moins importants.
Ayant cela à l'esprit, mon idée serait d'analyser la chaîne dans ces jetons de moteur et de commentaire, puis à partir de chaque section de moteur, jetez les commentaires à partir, disons, du cinquième. Ensuite, si cela ne suffit toujours pas, jetez les sections du moteur à partir de la seconde (la première est souvent un "Mozilla" abstrait, mais contient souvent des commentaires utiles ; il s'agit aussi parfois de quelque chose de concret, en particulier pour les robots d'indexation).
Lors de l'analyse, nous devons tenir compte du fait qu'il peut parfois y avoir des chaînes qui ne suivent pas ce format. Ils peuvent être enregistrés dans un fichier journal pour une inspection ultérieure, puis simplement coupés à la longueur nécessaire pour s'adapter à la base de données.