uap-go

command module
v0.18.0 Latest Latest
Warning

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

Go to latest
Published: Aug 15, 2024 License: Apache-2.0 Imports: 7 Imported by: 0

README

Golang User Agent parser

This is the Go implementation of the ua-parser

Usage

Install

$ go get github.com/sardine-ai/uap-go/uaparser

Updating

uap-core definitions are, by default, compiled and included in the Go portion of this package. To regenerate these definitions you can run the build.sh script.

Testing

$ cd uaparser
$ go test -v -cover

When adding new feature you can check for data race with go test -race, although this command will take more than 2 minutes to execute since the -race flag adds some instrumentation on all regex matches

So a quicker way to test data race on the main *parser.Parse method can be:

$ go test -race -run=Concurrency  # filter to execute `TestGenericParseMethodConcurrency` only

Benching

If needed, you can run benchmark on your latest feature to be compared (using benchcmp) against the current performance

$ cd uaparser
$ git checkout master
$ go test -bench=.  -run=none > ~/old.benchmark
$ git checkout my_latest_feature
$ go test -bench=.  -run=none > ~/new.benchmark
$ benchcmp ~/old.benchmark ~/new.benchmark

Example

package main

import (
  "fmt"
  "log"

  "github.com/sardine-ai/uap-go/uaparser"
)

func main() {
  uagent := "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; en-us; Silk/1.1.0-80) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16 Silk-Accelerated=true"

  parser, err := uaparser.New("./regexes.yaml")
  if err != nil {
    log.Fatal(err)
  }

  client := parser.Parse(uagent)

  fmt.Println(client.UserAgent.Family)  // "Amazon Silk"
  fmt.Println(client.UserAgent.Major)   // "1"
  fmt.Println(client.UserAgent.Minor)   // "1"
  fmt.Println(client.UserAgent.Patch)   // "0-80"
  fmt.Println(client.Os.Family)         // "Android"
  fmt.Println(client.Os.Major)          // ""
  fmt.Println(client.Os.Minor)          // ""
  fmt.Println(client.Os.Patch)          // ""
  fmt.Println(client.Os.PatchMinor)     // ""
  fmt.Println(client.Device.Family)     // "Kindle Fire"
}

Authors

  • Yihuan Zhou

(Based on the Java implementation by Steve Jiang and using agent data from BrowserScope)

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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