web-dev-qa-db-fra.com

Filtrage des utilisateurs de bureau par chaîne d'agent d'utilisateur

Afin de déterminer par défaut si la version complète ou mobile de mon site doit être utilisée, j'utilise un service qui examine les demandes afin de déterminer le type d'appareil à partir duquel elles sont générées. Toutefois, les appels à ce service coûtent un peu cher, aussi j'aimerais filtrer un certain nombre de clients de bureau avant de devoir appeler mon service.

Mes statistiques de trafic actuelles affichent la ventilation suivante pour mon site:

  • 35% - Chrome
  • 25% - IE
  • 20% - Firefox
  • 16% - Safari

Je ne sais pas quel est le pourcentage de navigateurs de bureau par rapport aux navigateurs mobiles. Cependant, le mois dernier (avant la version mobile de mon site), les utilisateurs mobiles représentaient environ 10% de mon trafic.

Voici ma question: Existe-t-il des expressions régulières que je peux appliquer à l'agent d'utilisateur pour identifier une grande partie de mon trafic non mobile afin d'éviter des appels de service inutiles? Il n'est pas essentiel que j'attrape tous les navigateurs de bureau à ce stade. Même en identifier 50% serait une aide précieuse. Il est == cependant important de ne pas identifier de manière incorrecte un navigateur mobile comme un navigateur de bureau. Ainsi, le conservatisme serait un avantage ici.

Clarification

Je souhaite identifier sans ambiguïté certains des navigateurs de bureau courants comme étant des ordinateurs de bureau, mais les informations que j'ai pu trouver jusqu'à présent sont obsolètes (le fléau de la détection du navigateur) ou peu utiles.

Voici un exemple: Chrome est disponible à la fois sur le bureau et sur les téléphones cellulaires. Puis-je écrire une expression régulière pour examiner une chaîne d'agent utilisateur Chrome et dire définitivement qu'il ne s'agit pas d'un téléphone portable? Si cela simplifie les choses, je traite actuellement les tablettes comme des navigateurs de bureau, mais si c'est trop compliqué, je n'ai pas besoin de les manipuler ici.

4
Scott Severance

Le site http://detectmobilebrowsers.com/ suggère d'utiliser deux expressions régulières et quelques sous-chaînes. Ils rendent le code disponible dans environ 16 langages de programmation. Voici ce qu'ils recommandent en JavaScript.

(function(a,b){if(/(Android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|Kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|Palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4)))window.location=b})(navigator.userAgent||navigator.vendor||window.opera,'http://detectmobilebrowser.com/mobile');
1
Stephen Ostermiller

Je ne comprends pas exactement ce dont vous avez besoin, mais si vous voulez juste les chiffres, vous pouvez les obtenir à Google Analytics -

Google Analytics Browser+ OS

Dans le menu de gauche, dans Audience -> Technologie -> Navigateur & OS . Sélectionnez ensuite OS en tant que dimension secondaire.

Toutefois, si vous souhaitez obtenir des données en temps réel ou si vous souhaitez envoyer des données au service onéreux, une expression régulière sur la chaîne agent-utilisateur est un bon moyen de s'y attaquer. Modifiez-la simplement pour rechercher des modèles d'agent utilisateur/agent de bureau. Vous pouvez trouver une liste des agents utilisateurs communs et de leurs combinaisons OS-Navigateur ici .

En outre, vous pouvez exporter vos données GA au format CSV ou à un autre format, puis les transmettre à un autre service, si cela est possible.

Il existe de nombreux analyseurs de chaînes user-agent disponibles à télécharger sur user-agent-string.info, et il possède également un api . Plus un très complet liste de chaînes de UA.

Je dois aimer Google :)

1
elssar

La détection basée sur l'agent utilisateur est, et sera toujours, une science inexacte. Je pense qu’une bien meilleure option serait de détecter la largeur de leur appareil, puis de décider à qui l’envoyer. Quelque chose comme

 <script>
 if ($(window).width < 600) {
     window.location.href="yoursite.com/mobile-version.html";
 }
 <script>

Pourriez faire ce dont vous avez besoin.

1
dave