Deze repository bevat een genormaliseerde, zorgvuldig samengestelde dataset van user-agent-strings, opgeslagen als JSON-bestanden en bedoeld om te dienen als een opzoektabel om eenvoudige gegevens over user agents af te leiden, zoals de user-agent-client en het besturingssysteem.
Het wordt gebruikt als onderdeel van PageviewsOnline, maar hier gepubliceerd voor algemeen gebruik.
De dataset wordt aangevuld met eenvoudige hulpscripts om de gegevens te valideren en ze te exporteren naar andere formaten of programmeertalen (zoals Java).
Project Filosofie
Het doel van dit project is niet om een waterdicht of feilloos nauwkeurig detectiesysteem voor user-agents te leveren, maar eerder om een praktische, zo goed mogelijke oplossing te bieden die in de loop der tijd verbetert door gebruik in de praktijk en bijdragen uit de gemeenschap.
User agent-detectie is van nature onvolmaakt. In plaats van te streven naar volledige nauwkeurigheid richt dit project zich op wat het wel kan:
- Praktisch
- Onderhoudbaar
- Transparant
- Goed genoeg voor praktijkgerichte analyses en classificatie
Nauwkeurigheid verbetert na verloop van tijd door zorgvuldig geselecteerde updates, praktijkgebruik en bijdragen van de gemeenschap.
Heuristische parsing en complexe reguliere expressies leveren vaak voorspelbaarheid in ruil voor marginale nauwkeurigheidswinsten.
Dit project geeft de voorkeur aan:
- Transparantie boven magie
- Gecurateerde data boven ondoorzichtige logica
- Verklaarbare resultaten boven speculatieve detectie
Functies
- Genormaliseerde, door mensen beoordeelde dataset met gebruikersagent-strings
- Eenvoudig en voorspelbaar zoekgedrag
- JSON-gebaseerd formaat, gemakkelijk te inspecteren en te beheren met versiebeheer
- Lichtgewicht validatiescripts
- Exporteer hulpfuncties voor andere talen (bijv. Java)
- Actief in gebruik in een productie-SaaS-omgeving
Genormaliseerde User-Agent-Strings
Het primaire doel van dit project is om op een snelle en voorspelbare manier hoog-niveau-informatie uit User-Agent-strings te halen.
Om dit te ondersteunen, wordt elke user-agent-string vóór verwerking genormaliseerd. Normalisatie verwijdert onstabiele variatie (zoals versienummers en hoofdlettergebruik) terwijl de structurele en semantische betekenis van de user-agent behouden blijft.
Gebruikersagent-strings worden genormaliseerd met de volgende stappen:
- Vervang alle numerieke cijfers (0-9) door het placeholder-teken x. Dit vermindert ruis die veroorzaakt wordt door versie-updates, terwijl de tokenstructuur en lengte behouden blijven.
- Zet de hele string om naar kleine letters. User-agent-tokens zijn volgens de conventie hoofdletterongevoelig, en door ze om te zetten naar kleine letters worden consistente en betrouwbare lookups gegarandeerd.
Bijvoorbeeld: de volgende user agent string:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36
Is genormaliseerd naar:
mozilla/x.x (windows nt xx.x; winxx; xxx) applewebkit/xxx.xx (khtml, like gecko) chrome/xxx.x.x.x safari/xxx.xx
Deze normalisatiebenadering maakt gebruikersagenten gemakkelijker te groeperen, te vergelijken en te onderhouden in de loop der tijd, terwijl deze nog steeds nauwkeurig genoeg blijft voor classificatie op hoofdlijnen van clients en besturingssystemen.
Door variatie die versiegebonden en hoofdlettergevoeligheid betreft uit te sluiten, wordt het opzoekingsproces voorspelbaarder en veerkrachtiger tegen toekomstige wijzigingen in de user-agent.
Gegevensformaat
Elke genormaliseerde user-agent-invoer bevat:
- id - De genormaliseerde user agent string
- client_family - Hoog-niveau clientclassificatie (bijv. browser, bot, app)
- os_family - Hoog-niveau classificatie van besturingssystemen
De exacte velden kunnen in de loop van de tijd veranderen naarmate de dataset groeit.
Zoekgedrag
User agent matching wordt uitgevoerd tegen genormaliseerde strings.
Exacte overeenkomsten hebben de voorkeur; gedeeltelijke of heuristische overeenkomsten worden bewust vermeden om het gedrag voorspelbaar en debugbaar te houden.
Bijdragen
Bijdragen zijn van harte welkom en helpen de algehele kwaliteit en nauwkeurigheid van dit project te verbeteren.
De meest impactvolle manier om bij te dragen is door genormaliseerde gebruikersagentvermeldingen toe te voegen of bij te werken in het bestand user_agents.json, samen met eventuele relevante classificatiegegevens.
Zodra uw wijzigingen gereed zijn, dient u een pull request in met de benodigde gegevens en/of code-updates.
Zelfs gedeeltelijke of onvolledige informatie is nuttig en gewaardeerd - elke bijdrage helpt bij het verbeteren van de dekking en de langetermijnbetrouwbaarheid.
Aan de slag (Snelle handleiding)
De kern van dit project is de verzameling JSON-gegevensbestanden, te vinden in de data/ directory.
Om deze gegevens te onderhouden en te hergebruiken, bevat de repository een kleine set eenvoudige Node.js-scripts die basale validatie en exporttaken uitvoeren.
Veelvoorkomende commando's:
- npm run test - Valideert de JSON-gegevens en controleert op structurele fouten of inconsistentie.
- npm run build - Bouwt, sorteert en exporteert de genormaliseerde gegevens naar andere programmeertaalformaten (zoals Java) voor een eenvoudigere integratie.
Deze tools zijn bewust minimaal en richten zich op de juistheid van data en draagbaarheid, in plaats van op complexe verwerking.
User-Agent Strings Zijn Niet Betrouwbaar
Het afleiden van nauwkeurige informatie uit user-agent-strings is om meerdere redenen inherent onbetrouwbaar:
- Er is geen formele standaard of specificatie die de structuur of inhoud van de User-Agent-strings regelt.
- Veel user-agents spoofen of imiteren bewust andere user-agents vanwege compatibiliteits- en legacy-redenen
Daardoor is het extreem moeilijk om de User-Agent-gegevens op een volledig nauwkeurige en consistente manier te bepalen.
Deze bibliotheek moet daarom worden gezien als een best-effort-oplossing, geen bron van gegarandeerde of gezaghebbende waarheid.
Met voortdurend gebruik en bijdragen van de gemeenschap kan de nauwkeurigheid in de loop der tijd verbeteren.
Versiebeheer & Stabiliteit
De dataset kan in de loop der tijd veranderen naarmate gebruikersagenten evolueren.
Classificaties worden niet beschouwd als brekende wijzigingen, zelfs tussen kleine versies.
Consumenten moeten resultaten beschouwen als best-effort-aanwijzingen, niet als contractuele garanties.
Licentie
Dit project en de bijbehorende gegevens worden vrijgegeven onder de Apache License 2.0 (Apache-2.0).
Commercieel gebruik, wijziging en herverdeling zijn toegestaan.
Bijdragen zijn welkom en worden gewaardeerd.
Handelsmerk
PageviewsOnline, Two-Dot-Oh, en alle bijbehorende logo’s, servicenamen of branding zijn handelsmerken van Two-Dot-Oh.
Dit project is open source; het gebruik van de naam PageviewsOnline of enige bijbehorende branding in verband met een product, dienst of aanbod is echter niet toegestaan zonder voorafgaande schriftelijke toestemming.
Forks en afgeleide werken moeten een andere naam en huisstijl gebruiken en mogen niet de indruk wekken van goedkeuring door of affiliatie met PageviewsOnline of Two-Dot-Oh.