uaparser

package module
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 26, 2025 License: MIT Imports: 8 Imported by: 0

README

由Golang实现的基于正则表达式匹配的User-Agent解析工具。

根据开源项目faisalman/ua-parser-js进行go语言改写。

使用正则表达式依次匹配的效率可能会比较低,最坏的情况下需要匹配完所有表达式,产生过长的耗时。但这种方式相较于直接对各种情况进行字符串形式的枚举,实现起来更方便,也更容易进行扩展,为了尽可能准确地去识别ua,这种方式是一个不错地选择。经过测试,识别一个较为常见的ua耗时大约为1ms。

Documentation

Index

Constants

View Source
const (
	UserAgent           = "user-agent"
	Model               = "model"
	Mobile              = "mobile"
	Platform            = "platform"
	Bitness             = "bitness"
	CHHeader            = "sec-ch-ua"
	CHHeaderFullVerList = CHHeader + "-full-version-list"
	CHHeaderArch        = CHHeader + "-arch"
	CHHeaderBitness     = CHHeader + "-" + Bitness
	CHHeaderFormFactors = CHHeader + "-form-factors"
	CHHeaderMobile      = CHHeader + "-" + Mobile
	CHHeaderModel       = CHHeader + "-" + Model
	CHHeaderPlatform    = CHHeader + "-" + Platform
	CHHeaderPlatformVer = CHHeaderPlatform + "-version"
)
View Source
const (
	Name         = "name"
	Version      = "version"
	Type         = "type"
	Architecture = "architecture"
	Vendor       = "vendor"
	Console      = "console"
	Major        = "major"
	SmartTV      = "smarttv"
	Wearable     = "wearable"
	XR           = "xr"
	Embedded     = "embedded"
	UABrowser    = "browser"
	UACpu        = "cpu"
	UADevice     = "device"
	UAEngine     = "engine"
	UAOS         = "os"
	UAResult     = "result"
	Tablet       = "tablet"
	Crawler      = "crawler"
	CLI          = "cli"
	Email        = "email"
	Fetcher      = "fetcher"
	InApp        = "inapp"
	MediaPlayer  = "mediaplayer"
	Library      = "library"

	Windows    = "Windows"
	Opera      = "Opera"
	Edge       = "Edge"
	Baidu      = "Baidu"
	Chromium   = "Chromium"
	Amazon     = "Amazon"
	Apple      = "Apple"
	ASUS       = "ASUS"
	Blackberry = "BlackBerry"
	Google     = "Google"
	Huawei     = "Huawei"
	Lenovo     = "Lenovo"
	Honor      = "Honor"
	LG         = "LG"
	Microsoft  = "Microsoft"
	Motorola   = "Motorola"
	OPPO       = "OPPO"
	Samsung    = "Samsung"
	Sharp      = "Sharp"
	Sony       = "Sony"
	Xiaomi     = "Xiaomi"
	Zebra      = "Zebra"
	Chromecast = "Chromecast"
	Xbox       = "Xbox"
	Facebook   = "Facebook"
)

for regex-base impl

View Source
const (
	UAMinLength = 5
	UAMaxLength = 500
)

Variables

View Source
var (
	CLIs = map[string][]regexItem{
		"browser": {
			{
				// contains filtered or unexported fields
			},
		},
	}

	Crawlers = map[string][]regexItem{
		"browser": {
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
		},
	}

	ExtraDevices = map[string][]regexItem{
		"device": {
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
		},
	}

	Emails = map[string][]regexItem{
		"browser": {
			{
				// contains filtered or unexported fields
			},
		},
	}

	Fetchers = map[string][]regexItem{
		"browser": {
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
		},
	}

	InApps = map[string][]regexItem{
		"browser": {
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
		},
	}

	MediaPlayers = map[string][]regexItem{
		"browser": {
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
		},
	}

	Libraries = map[string][]regexItem{
		"browser": {
			{
				// contains filtered or unexported fields
			},
		},
	}

	Vehicles = map[string][]regexItem{
		"device": {
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
			{
				// contains filtered or unexported fields
			},
		},
	}

	Bots = map[string][]regexItem{
		"browser": slices.Concat(
			CLIs["browser"],
			Crawlers["browser"],
			Fetchers["browser"],
			Libraries["browser"],
		),
	}
)
View Source
var (
	NonNumericOrDotReg    = regexp.MustCompile(`[^\d.]`)
	NonNumericSequenceReg = regexp.MustCompile(`[^\d.]+.`)
)

Functions

This section is empty.

Types

type ClientHints

type ClientHints struct {
	// contains filtered or unexported fields
}

ClientHints User Agent Client Hints data

func NewClientHints

func NewClientHints(headers map[string]string) ClientHints

type IBrand

type IBrand struct {
	Name    string `json:"name,omitempty"`
	Version string `json:"version,omitempty"`
}

type IBrowser

type IBrowser struct {
	Name    string `json:"name,omitempty"`
	Version string `json:"version,omitempty"`
	Major   string `json:"major,omitempty"`
	Type    string `json:"type,omitempty"`
}

type ICpu

type ICpu struct {
	Architecture string `json:"architecture,omitempty"`
}

type IDevice

type IDevice struct {
	Type   string `json:"type,omitempty"` // Mobile, Desktop, Bot, Console
	Model  string `json:"model,omitempty"`
	Vendor string `json:"vendor,omitempty"`
}

type IEngine

type IEngine struct {
	Name    string `json:"name,omitempty"`
	Version string `json:"version,omitempty"`
}

type IOs

type IOs struct {
	Platform string `json:"platform,omitempty"`
	Name     string `json:"name,omitempty"`
	Version  string `json:"version,omitempty"`
}

type IResult

type IResult struct {
	UA      string   `json:"ua"`
	Browser IBrowser `json:"browser"`
	Cpu     ICpu     `json:"cpu"`
	Device  IDevice  `json:"device"`
	Engine  IEngine  `json:"engine"`
	Os      IOs      `json:"os"`
}

type UAItem

type UAItem struct {
	// contains filtered or unexported fields
}

func NewUAItem

func NewUAItem(itemType string, ua string, rgxMap map[string][]regexItem, uaCH ClientHints) *UAItem

type UAParser

type UAParser struct {
	// contains filtered or unexported fields
}

func NewUAParser

func NewUAParser(ua string) *UAParser

func (*UAParser) Browser

func (p *UAParser) Browser() IBrowser

func (*UAParser) CPU

func (p *UAParser) CPU() ICpu

func (*UAParser) Device

func (p *UAParser) Device() IDevice

func (*UAParser) Engine

func (p *UAParser) Engine() IEngine

func (*UAParser) Os

func (p *UAParser) Os() IOs

func (*UAParser) Result

func (p *UAParser) Result() IResult

func (*UAParser) WithExtensions

func (p *UAParser) WithExtensions(extensions map[string][]regexItem) *UAParser

func (*UAParser) WithHeaders

func (p *UAParser) WithHeaders(headers map[string]string) *UAParser

func (*UAParser) WithUA

func (p *UAParser) WithUA(ua string) *UAParser

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL