Dieses Repository enthält einen normalisierten, kuratierten Datensatz von User-Agent-Strings, der in JSON-Dateien gespeichert ist und dazu dient, als Nachschlagetabelle verwendet zu werden, um einfache User-Agent-Daten abzuleiten, wie den User-Agent-Client und das Betriebssystem.
Es dient als Bestandteil von PageviewsOnline und wird hier jedoch für allgemeine Zwecke veröffentlicht.
Der Datensatz wird durch einfache Hilfs-Skripte ergänzt, die die Daten validieren und in andere Formate oder Programmiersprachen exportieren (z. B. Java).
Projektphilosophie
Ziel dieses Projekts ist nicht, ein narrensicheres oder absolut genaues User-Agent-Erkennungssystem bereitzustellen, sondern eine pragmatische, bestmögliche Lösung, die sich im Laufe der Zeit durch reale Nutzung und Beiträge der Community verbessert.
Die Erkennung des User-Agents ist von Natur aus unvollkommen. Anstatt nach vollständiger Genauigkeit zu streben, konzentriert sich dieses Projekt darauf, Folgendes zu sein:
- Praktisch
- Wartungsfreundlich
- Transparent
- Gut genug für Analytik und Klassifikation in der Praxis
Die Genauigkeit verbessert sich im Laufe der Zeit durch kuratierte Updates, praktische Nutzung und Beiträge aus der Community.
Heuristisches Parsing und komplexe reguläre Ausdrücke gehen oft auf Kosten der Vorhersehbarkeit zugunsten geringfügiger Genauigkeitsgewinne.
Dieses Projekt bevorzugt:
- Transparenz statt Magie
- Kuratierte Daten statt undurchsichtiger Logik
- Erklärbare Ergebnisse statt spekulativer Erkennung
Funktionen
- Normalisierter, von Menschen geprüfter User-Agent-Datensatz
- Einfaches und vorhersehbares Nachschlageverhalten
- JSON-basiertes Format, leicht zu inspizieren und Versionskontrolle
- Leichte Validierungsskripte
- Hilfsfunktionen für andere Sprachen exportieren (z. B. Java)
- In einer Produktions-SaaS-Umgebung aktiv eingesetzt.
Normalisierte User-Agent-Strings
Das primäre Ziel dieses Projekts ist es, aus User-Agent-Strings hochwertige, stabile Informationen auf eine schnelle und vorhersehbare Weise zu extrahieren.
Zur Unterstützung wird jeder User-Agent-String vor der Verarbeitung normalisiert. Die Normalisierung entfernt instabile Variationen (wie Versionsnummern und Groß-/Kleinschreibung), während die strukturelle und semantische Bedeutung des User-Agents erhalten bleibt.
User-Agent-Zeichenketten werden mit den folgenden Schritten normalisiert:
- Ersetze alle Ziffern (0-9) durch das Platzhalterzeichen x. Dies entfernt Rauschen, das durch Versionsänderungen verursacht wird, während Tokenstruktur und Länge beibehalten werden.
- Wandle die gesamte Zeichenkette in Kleinbuchstaben um. User agent tokens sind konventionsgemäß nicht zwischen Groß- und Kleinschreibung unterscheidbar, und Kleinschreibung sorgt für konsistente und zuverlässige Abfragen.
Beispielsweise lautet der folgende 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
Wird normalisiert zu:
mozilla/x.x (windows nt xx.x; winxx; xxx) applewebkit/xxx.xx (khtml, like gecko) chrome/xxx.x.x.x safari/xxx.xx
Dieser Normalisierungsansatz erleichtert das Gruppieren, Vergleichen und Verwalten von User-Agents über die Zeit hinweg, bleibt dabei aber gleichzeitig ausreichend genau für die grobe Einordnung von Clients und Betriebssystemen.
Indem versionsspezifische und fallbezogene Variabilität eliminiert wird, wird der Lookup-Prozess vorhersehbarer und widerstandsfähiger gegenüber zukünftigen Änderungen des User-Agents.
Datenformat
Jeder normalisierte User-Agent-Eintrag enthält:
- id - Der normalisierte User-Agent-String
- client_family - Client-Klassifizierung auf hoher Ebene (z. B. Browser, Bot, App)
- os_family - Klassifikation des Betriebssystems auf hoher Ebene
Genaue Felder können sich im Laufe der Zeit ändern, während der Datensatz wächst.
Suchverhalten
Der User-Agent-Abgleich wird gegen normalisierte Zeichenfolgen durchgeführt.
Exakte Übereinstimmungen werden bevorzugt; teilweise oder heuristische Übereinstimmungen werden absichtlich vermieden, um das Verhalten vorhersehbar und debuggbar zu halten.
Mitwirken
Beiträge sind herzlich willkommen und tragen dazu bei, die Gesamtqualität und Genauigkeit dieses Projekts zu verbessern.
Der wirkungsvollste Beitrag besteht darin, normalisierte User-Agent-Einträge in der Datei user_agents.json hinzuzufügen oder zu aktualisieren, zusammen mit allen relevanten Klassifikationsdaten.
Sobald Ihre Änderungen abgeschlossen sind, reichen Sie bitte einen Pull Request ein, der die notwendigen Daten- und/oder Code-Updates enthält.
Sogar teilweise oder unvollständige Informationen sind nützlich und geschätzt – jeder Beitrag hilft, die Abdeckung und die langfristige Zuverlässigkeit zu verbessern.
Erste Schritte (Schnelleinführung)
Der Kern dieses Projekts ist die Sammlung von JSON-Datendateien, die sich im data/Verzeichnis befinden.
Um diese Daten zu pflegen und wiederzuverwenden, enthält das Repository eine kleine Reihe von einfachen Node.js-Skripten, die grundlegende Validierungen durchführen und Exportaufgaben übernehmen.
Gängige Befehle:
- npm run test - Validiert die JSON-Daten und prüft auf strukturelle oder Konsistenzfehler.
- npm run build - Baut, sortiert und exportiert die normalisierten Daten in andere Formate für Programmiersprachen (z. B. Java) für eine einfachere Integration.
Diese Tools sind absichtlich minimal und konzentrieren sich auf Datenrichtigkeit und Portabilität, statt auf eine komplexe Verarbeitung.
User-Agent-Strings Sind Nicht Zuverlässig
Die Ableitung präziser Informationen aus User-Agent-Strings ist aus mehreren Gründen inhärent unzuverlässig:
- Es gibt weder einen formellen Standard noch eine Spezifikation, die die Struktur oder Inhalte von User-Agent-Strings regelt.
- Viele Benutzeragenten täuschen absichtlich andere Benutzeragenten vor oder imitieren sie – aus Kompatibilitäts- und Legacy-Gründen.
Aus diesem Grund ist es äußerst schwierig, die User-Agent-Daten vollständig genau und konsistent zu bestimmen.
Diese Bibliothek sollte daher als Best-Effort-Lösung betrachtet werden und keine Quelle garantierter oder maßgeblicher Wahrheit darstellen.
Durch kontinuierliche Nutzung und Beiträge aus der Community kann sich die Genauigkeit im Laufe der Zeit verbessern.
Versionierung & Stabilität
Der Datensatz kann sich im Laufe der Zeit ändern, da sich User-Agenten weiterentwickeln.
Klassifikationen gelten nicht als Breaking Changes, auch zwischen Minor-Versionen.
Verbraucher sollten Ergebnisse als Hinweise auf Best-Effort ansehen, nicht als vertragliche Garantien.
Lizenz
Dieses Projekt und seine Daten stehen unter der Apache-Lizenz 2.0 (Apache-2.0).
Kommerzielle Nutzung, Bearbeitung und Weiterverbreitung sind gestattet.
Beiträge sind willkommen und werden geschätzt.
Marke
PageviewsOnline, Two-Dot-Oh sowie alle zugehörigen Logos, Service-Namen oder Branding-Elemente sind Marken von Two-Dot-Oh.
Dieses Projekt ist Open-Source; jedoch ist die Verwendung des Namens PageviewsOnline oder jeglicher damit verbundener Markenkennzeichnung in Verbindung mit einem Produkt, einer Dienstleistung oder einem Angebot ohne vorherige schriftliche Zustimmung nicht gestattet.
Forks und abgeleitete Werke müssen einen anderen Namen und ein anderes Branding verwenden und dürfen nicht den Eindruck erwecken, PageviewsOnline oder Two-Dot-Oh zu unterstützen oder mit ihnen verbunden zu sein.