Tento repozitář obsahuje normalizovanou, pečlivě vybranou datovou sadu řetězců uživatelských agentů, uloženou jako JSON soubory a určenou k použití jako vyhledávací tabulka pro odvození jednoduchých údajů o uživatelském agentovi, například o klientovi uživatelského agenta a operačním systému.
Používá se jako součást PageviewsOnline, ale zde je zveřejněno pro obecné použití.
Datový soubor je doplněn jednoduchými pomocnými skripty pro validaci dat a export do dalších formátů nebo programovacích jazyků (např. Java).
Filozofie projektu
Cílem tohoto projektu není poskytovat bezchybně spolehlivý ani zcela přesný systém detekce uživatelského agenta, ale spíše praktické řešení s nejlepším možným úsilím, které se časem zlepšuje díky reálnému používání a příspěvkům komunity.
Detekce uživatelského agenta je v zásadě nedokonalá. Místo toho, abychom usilovali o dokonalou přesnost, se tento projekt soustředí na to být:
- Praktické
- Snadno udržovatelný
- Průhledný
- Dostačující pro analýzu a klasifikaci v reálném světě
Přesnost se zlepšuje časem díky pečlivě vybraným aktualizacím, používání v praxi a příspěvkům komunity.
Heuristické parsování a složité regulární výrazy často obětují předvídatelnost ve prospěch marginálního nárůstu přesnosti.
Tento projekt upřednostňuje:
- Průhlednost nad magií
- Kurátovaná data nad neprůhlednou logikou
- Vysvětlitelné výsledky nad spekulativní detekcí
Funkce
- Normalizovaná, ručně prověřená sada uživatelských agentů
- Jednoduché a předvídatelné chování při vyhledávání
- Formát založený na JSON, snadno čitelný a lze jej verzovat
- Lehké validační skripty
- Exportovat pomocné funkce pro jiné jazyky (např. Java)
- Aktivně používáno v produkčním prostředí SaaS
Normalizované Řetězce Uživatelského Agenta
Hlavním cílem tohoto projektu je rychle a předvídatelně extrahovat informace, které jsou na vysoké úrovni a stabilní, z řetězců uživatelského agenta.
Abychom toho dosáhli, je každý řetězec uživatelského agenta před zpracováním normalizován. Normalizace odstraňuje nestabilní variace (například čísla verzí a rozdíly ve velikosti písmen), přičemž zachovává strukturní a sémantický význam uživatelského agenta.
Řetězce uživatelského agenta jsou normalizovány pomocí následujících kroků:
- Nahraďte všechna číslice (0-9) zástupným znakem x. Tím se odstraňuje šum způsobený změnami verzí a zachovává se struktura a délka tokenů.
- Převést celý řetězec na malá písmena. Tokeny uživatelského agenta jsou podle konvence necitlivé na velikost písmen, a převod na malá písmena zajišťuje konzistentní a spolehlivé vyhledávání.
Například následující řetězec uživatelského agenta:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36
Je normalizováno na:
mozilla/x.x (windows nt xx.x; winxx; xxx) applewebkit/xxx.xx (khtml, like gecko) chrome/xxx.x.x.x safari/xxx.xx
Tento normalizační přístup usnadňuje seskupování, porovnávání a udržování uživatelských agentů v průběhu času, a zároveň zůstává dostatečně přesný pro klasifikaci na úrovni klienta a operačního systému.
Odstraněním variací souvisejících s verzemi a s velikostí písmen se vyhledávací proces stává předvídatelnějším a odolnějším vůči budoucím změnám uživatelského agenta.
Formát dat
Každá normalizovaná položka uživatelského agenta obsahuje:
- cs - Normalizovaný řetězec uživatelského agenta
- client_family - Vysoká úroveň klasifikace klientů (např. prohlížeč, bot, aplikace)
- os_family - Klasifikace operačních systémů na vysoké úrovni
Přesná pole se mohou v průběhu času měnit, jak roste datová sada.
Chování při vyhledávání
Porovnání uživatelského agenta se provádí proti normalizovaným řetězcům.
Přesné shody jsou upřednostňovány; částečné nebo heuristické shody jsou záměrně vynechány, aby bylo chování předvídatelné a debugovatelné.
Přispívání
Příspěvky jsou velmi vítány a pomáhají zlepšit celkovou kvalitu a přesnost tohoto projektu.
Nejpřínosnějším způsobem, jak přispět, je přidání nebo aktualizace normalizovaných záznamů uživatelských agentů v souboru user_agents.json, spolu s příslušnými klasifikačními daty.
Jakmile budou vaše změny hotové, prosím odešlete pull request obsahující potřebná data a/nebo aktualizace kódu.
I částečné nebo neúplné informace jsou užitečné a oceňované - každý příspěvek pomáhá zlepšit pokrytí a dlouhodobou spolehlivost.
Začínáme (Rychlý Průvodce)
Jádrem tohoto projektu je sada JSON datových souborů umístěných ve složce data/.
Abychom tato data udrželi a znovu je použili, repozitář obsahuje malou sadu jednoduchých Node.js skriptů, které provádějí základní validaci a exportní úkoly.
Běžné dostupné příkazy:
- npm run test - Ověřuje JSON data a vyhledává chyby ve struktuře nebo v konzistenci.
- Vytváří, třídí a exportuje normalizovaná data do formátů jiných programovacích jazyků (např. Java) pro snadnější integraci.
Tyto nástroje jsou záměrně minimalistické a zaměřují se na správnost dat a přenositelnost spíše než na složité zpracování.
Řetězce User-Agent nejsou spolehlivé
Získávání přesných informací z řetězců user-agent je samo o sobě nespolehlivé z několika důvodů:
- Neexistuje žádný formální standard ani specifikace, která by určovala strukturu nebo obsah řetězců uživatelského agenta
- Mnoho uživatelských agentů záměrně falšuje nebo napodobuje jiné uživatelské agenty kvůli kompatibilitě a zastaralým verzím
Z tohoto důvodu je extrémně obtížné určovat údaje o user-agentu plně přesně a konzistentně.
Tuto knihovnu tedy lze považovat za řešení s nejlepším úsilím, nikoli za zdroj zaručené či autoritativní pravdy.
Přesnost se časem může zlepšovat díky dalšímu používání a příspěvkům komunity.
Verzování & Stabilita
Datový soubor se může časem měnit, jak se vyvíjejí uživatelské agenty.
Klasifikace se nepovažují za zásadní změny, ani mezi menšími verzemi.
Spotřebitelé by měli výsledky brát jako náznaky s nejlepším úsilím, nikoli jako smluvní záruky.
Licence
Tento projekt a jeho data jsou zveřejněny pod licencí Apache 2.0 (Apache-2.0).
Komerční použití, úpravy a redistribuce jsou povoleny.
Příspěvky jsou vítány a oceňovány.
Ochranná známka
PageviewsOnline, Two-Dot-Oh a jakékoli související loga, názvy služeb nebo branding, jsou ochranné známky společnosti Two-Dot-Oh.
Tento projekt je open source; nicméně použití názvu PageviewsOnline nebo jakékoli související značky v souvislosti s produktem, službou nebo nabídkou není bez předchozího písemného souhlasu povoleno.
Forky a odvozená díla musí používat jiné jméno a vizuální identitu a nesmí naznačovat schválení ani spojení s PageviewsOnline ani Two-Dot-Oh.