To repozytorium zawiera znormalizowany, starannie wyselekcjonowany zestaw danych dotyczących łańcuchów User-Agent, przechowywany jako pliki JSON i zaprojektowany do wykorzystania jako tabela wyszukiwania w celu wyprowadzenia prostych danych o User-Agent, takich jak klient i system operacyjny.
Służy jako element PageviewsOnline, ale tutaj jest publikowany do ogólnego użytku.
Zestaw danych został uzupełniony prostymi skryptami pomocniczymi do walidacji danych i eksportowania ich do innych formatów lub języków programowania (np. Java).
Filozofia Projektu
Celem tego projektu nie jest stworzenie systemu wykrywania agenta użytkownika, który byłby niezawodny lub całkowicie precyzyjny, lecz praktyczne, najlepiej dopracowane rozwiązanie, które z czasem udoskonala się dzięki rzeczywistemu użytkowaniu i wkładowi społeczności.
Detekcja User-Agent jest z natury rzeczy niedoskonała. Zamiast dążyć do pełnej precyzji, ten projekt koncentruje się na tym, by być:
- Praktyczny
- Łatwe w utrzymaniu
- Przezroczysty
- Wystarczająco dobre do analiz i klasyfikacji w realnym świecie
Dokładność rośnie z biegiem czasu dzięki starannie dobranym aktualizacjom, zastosowaniom w realnym świecie i wkładowi społeczności.
Parsowanie heurystyczne i złożone wyrażenia regularne często poświęcają przewidywalność na rzecz marginalnych przyrostów precyzji.
Ten projekt faworyzuje:
- Przejrzystość nad magią
- Wyselekcjonowane dane ponad nieprzejrzystą logiką
- Wyjaśnialne wyniki zamiast spekulacyjnego wykrywania
Funkcje
- Znormalizowany, ręcznie zweryfikowany zestaw danych agentów użytkownika
- Prosta i przewidywalna obsługa wyszukiwania
- Format oparty na JSON, łatwy do przeglądania i kontroli wersji
- Lekkie skrypty walidacyjne
- Eksportuj pomocniki dla innych języków (np. Java)
- Aktywnie używane w środowisku produkcyjnym SaaS
Znormalizowane Ciągi Identyfikatorów Użytkownika
Głównym celem tego projektu jest wyodrębnienie wysokopoziomowych, stabilnych informacji z ciągów User-Agent w szybki i przewidywalny sposób.
Aby to umożliwić, każdy ciąg User-Agent jest normalizowany przed przetwarzaniem. Normalizacja usuwa niestabilne warianty (takie jak numery wersji i różnice w wielkości liter), przy jednoczesnym zachowaniu strukturalnego i semantycznego znaczenia User-Agent.
Ciągi User-Agent są normalizowane za pomocą następujących kroków:
- Zastąp wszystkie cyfry (0-9) znakiem zastępczym x. To usuwa szumy spowodowane zmianami wersji, przy zachowaniu struktury i długości tokenów.
- Przekształć cały ciąg znaków na małe litery. Tokeny agenta użytkownika są domyślnie nieczułe na wielkość liter, a zamiana na małe litery zapewnia spójne i niezawodne wyszukiwanie.
Na przykład, następujący ciąg User-Agent:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36
Znormalizowano do:
mozilla/x.x (windows nt xx.x; winxx; xxx) applewebkit/xxx.xx (khtml, like gecko) chrome/xxx.x.x.x safari/xxx.xx
Ta metoda normalizacji ułatwia grupowanie, porównywanie i utrzymanie agentów użytkownika w czasie, przy jednoczesnym zachowaniu wystarczającej dokładności dla wysokopoziomowej klasyfikacji klienta i systemu operacyjnego.
Eliminując zmienność związaną z wersją i z wielkością liter, proces wyszukiwania staje się bardziej przewidywalny i odporny na przyszłe zmiany agenta użytkownika.
Format Danych
Każdy znormalizowany wpis agenta użytkownika zawiera:
- id - Znormalizowany ciąg User-Agent
- client_family - Klasyfikacja klienta na wysokim poziomie (np. przeglądarka, bot, aplikacja)
- os_family - Wysokopoziomowa klasyfikacja systemów operacyjnych
Dokładne pola mogą się zmieniać w miarę rozrostu zestawu danych.
Zachowanie Wyszukiwania
Dopasowywanie user agentów odbywa się na podstawie znormalizowanych ciągów znaków.
Dokładne dopasowania są preferowane; dopasowania częściowe lub heurystyczne są celowo unikane, aby zachować przewidywalność zachowania i ułatwić debugowanie.
Wkład
Wkłady są bardzo mile widziane i pomagają poprawić ogólną jakość i precyzję tego projektu.
Najważniejszy wkład przynosi dodanie lub zaktualizowanie znormalizowanych wpisów User-Agent w pliku user_agents.json, wraz z odpowiednimi danymi klasyfikacyjnymi.
Gdy twoje zmiany będą gotowe, proszę o wysłanie pull requesta zawierającego niezbędne dane i/lub aktualizacje kodu.
Nawet częściowe lub niepełne informacje są przydatne i doceniane — każdy wkład pomaga zwiększyć pokrycie i długoterminową niezawodność.
Jak Zacząć (Szybki Przewodnik)
Rdzeń tego projektu stanowi zestaw plików danych JSON, znajdujących się w katalogu data/.
Aby pomóc w utrzymaniu i ponownym wykorzystaniu tych danych, repozytorium zawiera niewielki zestaw prostych skryptów Node.js, które wykonują podstawową walidację i zadania eksportu danych.
Najczęściej dostępne polecenia:
- npm run test - Weryfikuje dane JSON i sprawdza błędy strukturalne lub błędy spójności danych.
- Buduje, porządkuje i eksportuje znormalizowane dane do innych formatów języków programowania (takich jak Java) dla łatwiejszej integracji.
Te narzędzia są celowo minimalistyczne i skupiają się na poprawności danych oraz przenośności, a nie na skomplikowanym przetwarzaniu.
Ciągi User-Agent Nie Są Wiarygodne
Z natury rzeczy uzyskiwanie dokładnych informacji z ciągów user-agent jest niepewne z kilku powodów:
- Nie istnieje formalny standard ani specyfikacja regulująca strukturę lub zawartość ciągów User-Agent
- Wiele user-agentów celowo podszywa się pod inne user-agenty ze względów kompatybilności i z powodu przestarzałych rozwiązań
Z tego powodu niezwykle trudno jest określić dane user-agent w sposób całkowicie dokładny i spójny.
Ta biblioteka powinna być traktowana jako rozwiązanie z najlepszymi możliwymi staraniami, a nie jako źródło gwarantowanej ani autorytatywnej prawdy.
Dzięki dalszemu użyciu i wkładom społeczności, dokładność może z czasem się poprawić.
Wersjonowanie i Stabilność
Zestaw danych może zmieniać się z czasem, w miarę ewolucji agentów użytkowników.
Klasyfikacje nie są uznawane za zmiany powodujące niekompatybilność, nawet między wersjami minor.
Konsumenci powinni traktować wyniki jako wskazówki wyłącznie orientacyjne, a nie jako gwarancje umowne.
Licencja
Ten projekt i jego dane są udostępniane na licencji Apache License 2.0 (Apache-2.0).
Wykorzystanie komercyjne, modyfikacja i ponowna dystrybucja są dozwolone.
Wkłady są mile widziane i doceniane.
Znak towarowy
PageviewsOnline, Two-Dot-Oh, oraz jakiekolwiek powiązane logotypy, nazwy usług lub branding, są znakami towarowymi Two-Dot-Oh.
Ten projekt jest open source; jednak używanie nazwy PageviewsOnline ani żadnych powiązanych znaków towarowych w związku z produktem, usługą lub ofertą nie jest dozwolone bez uprzedniej pisemnej zgody.
Forki i dzieła pochodne muszą używać innej nazwy i identyfikacji wizualnej i nie mogą sugerować poparcia ani powiązań z PageviewsOnline ani Two-Dot-Oh.