Skip to content
This repository was archived by the owner on Jan 23, 2021. It is now read-only.

Repository files navigation

ua-parser Build Status

ua-parser is a multi-language port of BrowserScope's user agent string parser.

The crux of the original parser--the data collected by Steve Souders over the years--has been extracted into a separate YAML file so as to be reusable as is by implementations in other programming languages.

ua-parser is just a small wrapper around this data.

Maintainers

irc channel

#ua-parser on freenode.

Contributing Changes to regexes.yaml

Please read the contributors' guide

Other ua-parser Libraries

There are a few other libraries which make use of ua-parser's patterns. These include:

Usage :: node.js

varr=require('ua-parser').parse(navigator.userAgent);console.log(r.ua.toString());// -> "Safari 5.0.1"console.log(r.ua.toVersionString());// -> "5.0.1"console.log(r.ua.family)// -> "Safari"console.log(r.ua.major);// -> "5"console.log(r.ua.minor);// -> "0"console.log(r.ua.patch);// -> "1"console.log(r.os.toString());// -> "iOS 5.1"console.log(r.os.toVersionString());// -> "5.1"console.log(r.os.family)// -> "iOS"console.log(r.os.major);// -> "5"console.log(r.os.minor);// -> "1"console.log(r.os.patch);// -> nullconsole.log(r.device.family);// -> "iPhone"

Note if you're only interested in one of the ua, device or os objects, you will getter better performance by using the more specific methods (uaParser.parseUA, uaParser.parseOS and uaParser.parseDevice respectively), e.g.:

varp=require('ua-parser');console.log(p.parseUA(navigator.userAgent).toString());// -> "Safari 5.0.1"console.log(p.parseOS(navigator.userAgent).toString());// -> "iOS 5.1"console.log(p.parseDevice(navigator.userAgent).toString());// -> "iPhone"

Usage :: python

You can install ua-parser by running:

pipinstallpyyamlua-parser

And here's how to use it:

fromua_parserimportuser_agent_parser# On the server, you could use a WebOB request object.user_agent_string=request.META.get('HTTP_USER_AGENT')
# For demonstration purposes, though an iPhone ...user_agent_string='Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3'# Get back a big dictionary of all the goodies.result_dict=user_agent_parser.Parse(user_agent_string)
printresult_dict['user_agent']
# {'major': '5', 'minor': '1', 'family': 'Mobile Safari', 'patch': None}printresult_dict['os']
# {'major': '5', 'patch_minor': None, 'minor': '1', 'family': 'iOS', 'patch': None}printresult_dict['device']
# {'family': 'iPhone'}

Usage :: java

importua_parser.Parser;
importua_parser.Client;
...
StringuaString = "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3";
ParseruaParser = newParser();
Clientc = uaParser.parse(uaString);
System.out.println(c.userAgent.family); // => "Mobile Safari"System.out.println(c.userAgent.major); // => "5"System.out.println(c.userAgent.minor); // => "1"System.out.println(c.os.family); // => "iOS"System.out.println(c.os.major); // => "5"System.out.println(c.os.minor); // => "1"System.out.println(c.device.family); // => "iPhone"

Usage :: Pig

For Pig there are UDFs for getting a single value and UDFs for getting a tuple with all values for either Device, Os of UserAgent. For most usecases the tuple UDFs will be the most useful.

REGISTERua-parser-pig-0.1-SNAPSHOT-job.jarDEFINEDeviceua_parser.pig.Device;
DEFINEOsua_parser.pig.Os;
DEFINEUserAgentua_parser.pig.UserAgent;
UserAgents =
Load'useragents.txt'AS (useragent:chararray);
AgentSpecs =
FOREACHUserAgentsGENERATEDevice(useragent) ASDevice,
Os(useragent) ASOs,
UserAgent(useragent) ASUserAgent,
useragentASUseragent;
DESCRIBEAgentSpecs;
DUMPAgentSpecs;

The versions that return only a single value:

REGISTERua-parser-pig-0.1-SNAPSHOT-job.jarDEFINEDeviceFamilyua_parser.pig.device.Family;
DEFINEOsFamilyua_parser.pig.os.Family;
DEFINEOsMajorua_parser.pig.os.Major;
DEFINEOsMinorua_parser.pig.os.Minor;
DEFINEOsPatchua_parser.pig.os.Patch;
DEFINEOsPatchMinorua_parser.pig.os.PatchMinor;
DEFINEUseragentFamilyua_parser.pig.useragent.Family;
DEFINEUseragentMajorua_parser.pig.useragent.Major;
DEFINEUseragentMinorua_parser.pig.useragent.Minor;
DEFINEUseragentPatchua_parser.pig.useragent.Patch;
UserAgents =
Load'useragents.txt'AS (useragent:chararray);
AgentSpecs =
FOREACHUserAgentsGENERATEDeviceFamily(useragent) ASDeviceFamily:chararray,
OsFamily(useragent) ASOsFamily:chararray,
OsMajor(useragent) ASOsMajor:chararray,
OsMinor(useragent) ASOsMinor:chararray,
OsPatch(useragent) ASOsPatch:chararray,
OsPatchMinor(useragent) ASOsPatchMinor:chararray,
UseragentFamily(useragent) ASUseragentFamily:chararray,
UseragentMajor(useragent) ASUseragentMajor:chararray,
UseragentMinor(useragent) ASUseragentMinor:chararray,
UseragentPatch(useragent) ASUseragentPatch:chararray,
useragentASUseragent;
DUMPAgentSpecs;

Usage :: php

require_once'vendor/autoload.php';
useUAParser\Parser;
$ua = "Mozilla/5.0 (Macintosh; Intel Ma...";
$parser = Parser::create();
$result = $parser->parse($ua);
print$result->ua->family; // Safariprint$result->ua->major; // 6print$result->ua->minor; // 0print$result->ua->patch; // 2print$result->ua->toString(); // Safari 6.0.2print$result->ua->toVersion(); // 6.0.2print$result->os->family; // Mac OS Xprint$result->os->major; // 10print$result->os->minor; // 7print$result->os->patch; // 5print$result->os->patchMinor; // [null]print$result->os->toString(); // Mac OS X 10.7.5print$result->os->toVersion(); // 10.7.5print$result->device->family; // Otherprint$result->toString(); // Safari 6.0.2/Mac OS X 10.7.5print$result->uaOriginal; // Mozilla/5.0 (Macintosh; Intel Ma...

More information is available in the README in the PHP directory

Usage :: D

import UaParser;
importstd.stdio;
voidmain() {
auto agent = UaParser.parse("Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3");
std.stdio.writeln(agent.browser.family); // Mobile Safaristd.stdio.writeln(agent.browser.major); // 5std.stdio.writeln(agent.browser.minor); // 1std.stdio.writeln(agent.browser.patch); // 0std.stdio.writeln(agent.browser.toString); // Mobile Safari 5.1.0std.stdio.writeln(agent.browser.toVersionString); // 5.1.0std.stdio.writeln(agent.os.family); // iOSstd.stdio.writeln(agent.os.major); // 5std.stdio.writeln(agent.os.minor); // 1std.stdio.writeln(agent.os.patch); // 1std.stdio.writeln(agent.os.toString); // iOS 5.1.1std.stdio.writeln(agent.os.toVersionString); // 5.1.1std.stdio.writeln(agent.toFullString); // Mobile Safari 5.1.0/iOS 5.1.1std.stdio.writeln(agent.device.family); // iPhonestd.stdio.writeln(agent.isMobile); // truestd.stdio.writeln(agent.isSpider); // false
}

Usage :: C#

Install the NuGet package

Install-Package UAParser

Sample Usage:

usingSystem;namespaceUAParser.ConsoleApp{classProgram{staticvoidMain(string[]args){StringuaString="Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-us) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5";ParseruaParser=Parser.GetDefault();ClientInfoc=uaParser.Parse(uaString);Console.WriteLine(c.UserAgent);//Safari 5.0.2Console.WriteLine(c.OS);// Mac OS X 10.6.5Console.WriteLine(c.Device);//Console.ReadLine();}}}

Usage :: Perl

use HTTP::UA::Parser;
my$r = HTTP::UA::Parser->new();
print$r->ua->toString(); # -> "Safari 5.0.1"print$r->ua->toVersionString(); # -> "5.0.1"print$r->ua->family; # -> "Safari"print$r->ua->major; # -> "5"print$r->ua->minor; # -> "0"print$r->ua->patch; # -> "1"print$r->os->toString(); # -> "iOS 5.1"print$r->os->toVersionString(); # -> "5.1"print$r->os->family # -> "iOS"print$r->os->major; # -> "5"print$r->os->minor; # -> "1"print$r->os->patch; # -> undefprint$r->device->family; # -> "iPhone"
More information is available in the README in the perl directory

Usage :: Haskell

{-Install via Hackage and cabal like so:cabal updatecabal install ua-parserNow you're good to go.-}
{-# LANGUAGE OverloadedStrings #-}
moduleMainwhereimportWeb.UAParser-- A test string
test_string ="Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3"-- Main entry point for Haskell
main =do
ua <- loadUAParser
let uaResult = parseUA ua test_string
print uaResult
let osResult = parseOS ua test_string
print osResult
-- Result from user agent parseJust (UAResult {uarFamily ="Mobile Safari", uarV1 =Just"5", uarV2 =Just"1", uarV3 =Nothing})
-- Result from operating system parseJust (OSResult {osrFamily ="iOS", osrV1 =Just"5", osrV2 =Just"1", osrV3 =Nothing, osrV4 =Nothing})

Please refer to Haddocks for more info; the API is pretty straightforward.

Usage :: Go

Install the package:

go get "github.com/tobie/ua-parser/go/uaparser"

Sample Usage

package main
import (
"github.com/tobie/ua-parser/go/uaparser"
"fmt"
)
func main() {
testStr := "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"
regexFile := "../../regexes.yaml"
parser := uaparser.New(regexFile)
client := parser.Parse(testStr)
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"
}

More information is available in the README in the Go directory

License

The data contained in regexes.yaml is Copyright 2009 Google Inc. and available under the Apache License, Version 2.0.

The original python code is Copyright 2008 Google Inc. and is available under the Apache License, Version 2.0.

The JS port is Copyright 2010 Tobie Langel and is available under your choice of MIT or Apache Version 2.0 license.

The PHP port is Copyright (c) 2011-2012 Dave Olsen and is available under the MIT license.

The Java port is Copyright (c) 2012 Twitter, Inc and is available under the Apache License, Version 2.0.

The D port is Copyright (c) 2012 Shripad K and is available under the MIT license.

The C# port is Copyright (c) 2012 Søren Enemærke and is available under the Apache License, Version 2.0.

The Perl port is Copyright (c) 2012 Mamod Mehyar and is available under the Perl License, Version 5.10.1.

The Pig port is Copyright (c) 2013 Niels Basjes and is available under the Apache License, Version 2.0.

The Go port is Copyright (c) 2013 Yihuan Zhou and is available under the MIT License.

About

A multi-language port of Browserscope's user agent parser.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - cloudvox/ua-parser: A multi-language port of Browserscope's user agent parser. · GitHub
Skip to content
This repository was archived by the owner on Jan 23, 2021. It is now read-only.

Repository files navigation

ua-parser Build Status

ua-parser is a multi-language port of BrowserScope's user agent string parser.

The crux of the original parser--the data collected by Steve Souders over the years--has been extracted into a separate YAML file so as to be reusable as is by implementations in other programming languages.

ua-parser is just a small wrapper around this data.

Maintainers

irc channel

#ua-parser on freenode.

Contributing Changes to regexes.yaml

Please read the contributors' guide

Other ua-parser Libraries

There are a few other libraries which make use of ua-parser's patterns. These include:

Usage :: node.js

varr=require('ua-parser').parse(navigator.userAgent);console.log(r.ua.toString());// -> "Safari 5.0.1"console.log(r.ua.toVersionString());// -> "5.0.1"console.log(r.ua.family)// -> "Safari"console.log(r.ua.major);// -> "5"console.log(r.ua.minor);// -> "0"console.log(r.ua.patch);// -> "1"console.log(r.os.toString());// -> "iOS 5.1"console.log(r.os.toVersionString());// -> "5.1"console.log(r.os.family)// -> "iOS"console.log(r.os.major);// -> "5"console.log(r.os.minor);// -> "1"console.log(r.os.patch);// -> nullconsole.log(r.device.family);// -> "iPhone"

Note if you're only interested in one of the ua, device or os objects, you will getter better performance by using the more specific methods (uaParser.parseUA, uaParser.parseOS and uaParser.parseDevice respectively), e.g.:

varp=require('ua-parser');console.log(p.parseUA(navigator.userAgent).toString());// -> "Safari 5.0.1"console.log(p.parseOS(navigator.userAgent).toString());// -> "iOS 5.1"console.log(p.parseDevice(navigator.userAgent).toString());// -> "iPhone"

Usage :: python

You can install ua-parser by running:

pipinstallpyyamlua-parser

And here's how to use it:

fromua_parserimportuser_agent_parser# On the server, you could use a WebOB request object.user_agent_string=request.META.get('HTTP_USER_AGENT')
# For demonstration purposes, though an iPhone ...user_agent_string='Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3'# Get back a big dictionary of all the goodies.result_dict=user_agent_parser.Parse(user_agent_string)
printresult_dict['user_agent']
# {'major': '5', 'minor': '1', 'family': 'Mobile Safari', 'patch': None}printresult_dict['os']
# {'major': '5', 'patch_minor': None, 'minor': '1', 'family': 'iOS', 'patch': None}printresult_dict['device']
# {'family': 'iPhone'}

Usage :: java

importua_parser.Parser;
importua_parser.Client;
...
StringuaString = "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3";
ParseruaParser = newParser();
Clientc = uaParser.parse(uaString);
System.out.println(c.userAgent.family); // => "Mobile Safari"System.out.println(c.userAgent.major); // => "5"System.out.println(c.userAgent.minor); // => "1"System.out.println(c.os.family); // => "iOS"System.out.println(c.os.major); // => "5"System.out.println(c.os.minor); // => "1"System.out.println(c.device.family); // => "iPhone"

Usage :: Pig

For Pig there are UDFs for getting a single value and UDFs for getting a tuple with all values for either Device, Os of UserAgent. For most usecases the tuple UDFs will be the most useful.

REGISTERua-parser-pig-0.1-SNAPSHOT-job.jarDEFINEDeviceua_parser.pig.Device;
DEFINEOsua_parser.pig.Os;
DEFINEUserAgentua_parser.pig.UserAgent;
UserAgents =
Load'useragents.txt'AS (useragent:chararray);
AgentSpecs =
FOREACHUserAgentsGENERATEDevice(useragent) ASDevice,
Os(useragent) ASOs,
UserAgent(useragent) ASUserAgent,
useragentASUseragent;
DESCRIBEAgentSpecs;
DUMPAgentSpecs;

The versions that return only a single value:

REGISTERua-parser-pig-0.1-SNAPSHOT-job.jarDEFINEDeviceFamilyua_parser.pig.device.Family;
DEFINEOsFamilyua_parser.pig.os.Family;
DEFINEOsMajorua_parser.pig.os.Major;
DEFINEOsMinorua_parser.pig.os.Minor;
DEFINEOsPatchua_parser.pig.os.Patch;
DEFINEOsPatchMinorua_parser.pig.os.PatchMinor;
DEFINEUseragentFamilyua_parser.pig.useragent.Family;
DEFINEUseragentMajorua_parser.pig.useragent.Major;
DEFINEUseragentMinorua_parser.pig.useragent.Minor;
DEFINEUseragentPatchua_parser.pig.useragent.Patch;
UserAgents =
Load'useragents.txt'AS (useragent:chararray);
AgentSpecs =
FOREACHUserAgentsGENERATEDeviceFamily(useragent) ASDeviceFamily:chararray,
OsFamily(useragent) ASOsFamily:chararray,
OsMajor(useragent) ASOsMajor:chararray,
OsMinor(useragent) ASOsMinor:chararray,
OsPatch(useragent) ASOsPatch:chararray,
OsPatchMinor(useragent) ASOsPatchMinor:chararray,
UseragentFamily(useragent) ASUseragentFamily:chararray,
UseragentMajor(useragent) ASUseragentMajor:chararray,
UseragentMinor(useragent) ASUseragentMinor:chararray,
UseragentPatch(useragent) ASUseragentPatch:chararray,
useragentASUseragent;
DUMPAgentSpecs;

Usage :: php

require_once'vendor/autoload.php';
useUAParser\Parser;
$ua = "Mozilla/5.0 (Macintosh; Intel Ma...";
$parser = Parser::create();
$result = $parser->parse($ua);
print$result->ua->family; // Safariprint$result->ua->major; // 6print$result->ua->minor; // 0print$result->ua->patch; // 2print$result->ua->toString(); // Safari 6.0.2print$result->ua->toVersion(); // 6.0.2print$result->os->family; // Mac OS Xprint$result->os->major; // 10print$result->os->minor; // 7print$result->os->patch; // 5print$result->os->patchMinor; // [null]print$result->os->toString(); // Mac OS X 10.7.5print$result->os->toVersion(); // 10.7.5print$result->device->family; // Otherprint$result->toString(); // Safari 6.0.2/Mac OS X 10.7.5print$result->uaOriginal; // Mozilla/5.0 (Macintosh; Intel Ma...

More information is available in the README in the PHP directory

Usage :: D

import UaParser;
importstd.stdio;
voidmain() {
auto agent = UaParser.parse("Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3");
std.stdio.writeln(agent.browser.family); // Mobile Safaristd.stdio.writeln(agent.browser.major); // 5std.stdio.writeln(agent.browser.minor); // 1std.stdio.writeln(agent.browser.patch); // 0std.stdio.writeln(agent.browser.toString); // Mobile Safari 5.1.0std.stdio.writeln(agent.browser.toVersionString); // 5.1.0std.stdio.writeln(agent.os.family); // iOSstd.stdio.writeln(agent.os.major); // 5std.stdio.writeln(agent.os.minor); // 1std.stdio.writeln(agent.os.patch); // 1std.stdio.writeln(agent.os.toString); // iOS 5.1.1std.stdio.writeln(agent.os.toVersionString); // 5.1.1std.stdio.writeln(agent.toFullString); // Mobile Safari 5.1.0/iOS 5.1.1std.stdio.writeln(agent.device.family); // iPhonestd.stdio.writeln(agent.isMobile); // truestd.stdio.writeln(agent.isSpider); // false
}

Usage :: C#

Install the NuGet package

Install-Package UAParser

Sample Usage:

usingSystem;namespaceUAParser.ConsoleApp{classProgram{staticvoidMain(string[]args){StringuaString="Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-us) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5";ParseruaParser=Parser.GetDefault();ClientInfoc=uaParser.Parse(uaString);Console.WriteLine(c.UserAgent);//Safari 5.0.2Console.WriteLine(c.OS);// Mac OS X 10.6.5Console.WriteLine(c.Device);//Console.ReadLine();}}}

Usage :: Perl

use HTTP::UA::Parser;
my$r = HTTP::UA::Parser->new();
print$r->ua->toString(); # -> "Safari 5.0.1"print$r->ua->toVersionString(); # -> "5.0.1"print$r->ua->family; # -> "Safari"print$r->ua->major; # -> "5"print$r->ua->minor; # -> "0"print$r->ua->patch; # -> "1"print$r->os->toString(); # -> "iOS 5.1"print$r->os->toVersionString(); # -> "5.1"print$r->os->family # -> "iOS"print$r->os->major; # -> "5"print$r->os->minor; # -> "1"print$r->os->patch; # -> undefprint$r->device->family; # -> "iPhone"
More information is available in the README in the perl directory

Usage :: Haskell

{-Install via Hackage and cabal like so:cabal updatecabal install ua-parserNow you're good to go.-}
{-# LANGUAGE OverloadedStrings #-}
moduleMainwhereimportWeb.UAParser-- A test string
test_string ="Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3"-- Main entry point for Haskell
main =do
ua <- loadUAParser
let uaResult = parseUA ua test_string
print uaResult
let osResult = parseOS ua test_string
print osResult
-- Result from user agent parseJust (UAResult {uarFamily ="Mobile Safari", uarV1 =Just"5", uarV2 =Just"1", uarV3 =Nothing})
-- Result from operating system parseJust (OSResult {osrFamily ="iOS", osrV1 =Just"5", osrV2 =Just"1", osrV3 =Nothing, osrV4 =Nothing})

Please refer to Haddocks for more info; the API is pretty straightforward.

Usage :: Go

Install the package:

go get "github.com/tobie/ua-parser/go/uaparser"

Sample Usage

package main
import (
"github.com/tobie/ua-parser/go/uaparser"
"fmt"
)
func main() {
testStr := "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"
regexFile := "../../regexes.yaml"
parser := uaparser.New(regexFile)
client := parser.Parse(testStr)
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"
}

More information is available in the README in the Go directory

License

The data contained in regexes.yaml is Copyright 2009 Google Inc. and available under the Apache License, Version 2.0.

The original python code is Copyright 2008 Google Inc. and is available under the Apache License, Version 2.0.

The JS port is Copyright 2010 Tobie Langel and is available under your choice of MIT or Apache Version 2.0 license.

The PHP port is Copyright (c) 2011-2012 Dave Olsen and is available under the MIT license.

The Java port is Copyright (c) 2012 Twitter, Inc and is available under the Apache License, Version 2.0.

The D port is Copyright (c) 2012 Shripad K and is available under the MIT license.

The C# port is Copyright (c) 2012 Søren Enemærke and is available under the Apache License, Version 2.0.

The Perl port is Copyright (c) 2012 Mamod Mehyar and is available under the Perl License, Version 5.10.1.

The Pig port is Copyright (c) 2013 Niels Basjes and is available under the Apache License, Version 2.0.

The Go port is Copyright (c) 2013 Yihuan Zhou and is available under the MIT License.

About

A multi-language port of Browserscope's user agent parser.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - cloudvox/ua-parser: A multi-language port of Browserscope's user agent parser. · GitHub
Skip to content
This repository was archived by the owner on Jan 23, 2021. It is now read-only.

Repository files navigation

ua-parser Build Status

ua-parser is a multi-language port of BrowserScope's user agent string parser.

The crux of the original parser--the data collected by Steve Souders over the years--has been extracted into a separate YAML file so as to be reusable as is by implementations in other programming languages.

ua-parser is just a small wrapper around this data.

Maintainers

irc channel

#ua-parser on freenode.

Contributing Changes to regexes.yaml

Please read the contributors' guide

Other ua-parser Libraries

There are a few other libraries which make use of ua-parser's patterns. These include:

Usage :: node.js

varr=require('ua-parser').parse(navigator.userAgent);console.log(r.ua.toString());// -> "Safari 5.0.1"console.log(r.ua.toVersionString());// -> "5.0.1"console.log(r.ua.family)// -> "Safari"console.log(r.ua.major);// -> "5"console.log(r.ua.minor);// -> "0"console.log(r.ua.patch);// -> "1"console.log(r.os.toString());// -> "iOS 5.1"console.log(r.os.toVersionString());// -> "5.1"console.log(r.os.family)// -> "iOS"console.log(r.os.major);// -> "5"console.log(r.os.minor);// -> "1"console.log(r.os.patch);// -> nullconsole.log(r.device.family);// -> "iPhone"

Note if you're only interested in one of the ua, device or os objects, you will getter better performance by using the more specific methods (uaParser.parseUA, uaParser.parseOS and uaParser.parseDevice respectively), e.g.:

varp=require('ua-parser');console.log(p.parseUA(navigator.userAgent).toString());// -> "Safari 5.0.1"console.log(p.parseOS(navigator.userAgent).toString());// -> "iOS 5.1"console.log(p.parseDevice(navigator.userAgent).toString());// -> "iPhone"

Usage :: python

You can install ua-parser by running:

pipinstallpyyamlua-parser

And here's how to use it:

fromua_parserimportuser_agent_parser# On the server, you could use a WebOB request object.user_agent_string=request.META.get('HTTP_USER_AGENT')
# For demonstration purposes, though an iPhone ...user_agent_string='Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3'# Get back a big dictionary of all the goodies.result_dict=user_agent_parser.Parse(user_agent_string)
printresult_dict['user_agent']
# {'major': '5', 'minor': '1', 'family': 'Mobile Safari', 'patch': None}printresult_dict['os']
# {'major': '5', 'patch_minor': None, 'minor': '1', 'family': 'iOS', 'patch': None}printresult_dict['device']
# {'family': 'iPhone'}

Usage :: java

importua_parser.Parser;
importua_parser.Client;
...
StringuaString = "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3";
ParseruaParser = newParser();
Clientc = uaParser.parse(uaString);
System.out.println(c.userAgent.family); // => "Mobile Safari"System.out.println(c.userAgent.major); // => "5"System.out.println(c.userAgent.minor); // => "1"System.out.println(c.os.family); // => "iOS"System.out.println(c.os.major); // => "5"System.out.println(c.os.minor); // => "1"System.out.println(c.device.family); // => "iPhone"

Usage :: Pig

For Pig there are UDFs for getting a single value and UDFs for getting a tuple with all values for either Device, Os of UserAgent. For most usecases the tuple UDFs will be the most useful.

REGISTERua-parser-pig-0.1-SNAPSHOT-job.jarDEFINEDeviceua_parser.pig.Device;
DEFINEOsua_parser.pig.Os;
DEFINEUserAgentua_parser.pig.UserAgent;
UserAgents =
Load'useragents.txt'AS (useragent:chararray);
AgentSpecs =
FOREACHUserAgentsGENERATEDevice(useragent) ASDevice,
Os(useragent) ASOs,
UserAgent(useragent) ASUserAgent,
useragentASUseragent;
DESCRIBEAgentSpecs;
DUMPAgentSpecs;

The versions that return only a single value:

REGISTERua-parser-pig-0.1-SNAPSHOT-job.jarDEFINEDeviceFamilyua_parser.pig.device.Family;
DEFINEOsFamilyua_parser.pig.os.Family;
DEFINEOsMajorua_parser.pig.os.Major;
DEFINEOsMinorua_parser.pig.os.Minor;
DEFINEOsPatchua_parser.pig.os.Patch;
DEFINEOsPatchMinorua_parser.pig.os.PatchMinor;
DEFINEUseragentFamilyua_parser.pig.useragent.Family;
DEFINEUseragentMajorua_parser.pig.useragent.Major;
DEFINEUseragentMinorua_parser.pig.useragent.Minor;
DEFINEUseragentPatchua_parser.pig.useragent.Patch;
UserAgents =
Load'useragents.txt'AS (useragent:chararray);
AgentSpecs =
FOREACHUserAgentsGENERATEDeviceFamily(useragent) ASDeviceFamily:chararray,
OsFamily(useragent) ASOsFamily:chararray,
OsMajor(useragent) ASOsMajor:chararray,
OsMinor(useragent) ASOsMinor:chararray,
OsPatch(useragent) ASOsPatch:chararray,
OsPatchMinor(useragent) ASOsPatchMinor:chararray,
UseragentFamily(useragent) ASUseragentFamily:chararray,
UseragentMajor(useragent) ASUseragentMajor:chararray,
UseragentMinor(useragent) ASUseragentMinor:chararray,
UseragentPatch(useragent) ASUseragentPatch:chararray,
useragentASUseragent;
DUMPAgentSpecs;

Usage :: php

require_once'vendor/autoload.php';
useUAParser\Parser;
$ua = "Mozilla/5.0 (Macintosh; Intel Ma...";
$parser = Parser::create();
$result = $parser->parse($ua);
print$result->ua->family; // Safariprint$result->ua->major; // 6print$result->ua->minor; // 0print$result->ua->patch; // 2print$result->ua->toString(); // Safari 6.0.2print$result->ua->toVersion(); // 6.0.2print$result->os->family; // Mac OS Xprint$result->os->major; // 10print$result->os->minor; // 7print$result->os->patch; // 5print$result->os->patchMinor; // [null]print$result->os->toString(); // Mac OS X 10.7.5print$result->os->toVersion(); // 10.7.5print$result->device->family; // Otherprint$result->toString(); // Safari 6.0.2/Mac OS X 10.7.5print$result->uaOriginal; // Mozilla/5.0 (Macintosh; Intel Ma...

More information is available in the README in the PHP directory

Usage :: D

import UaParser;
importstd.stdio;
voidmain() {
auto agent = UaParser.parse("Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3");
std.stdio.writeln(agent.browser.family); // Mobile Safaristd.stdio.writeln(agent.browser.major); // 5std.stdio.writeln(agent.browser.minor); // 1std.stdio.writeln(agent.browser.patch); // 0std.stdio.writeln(agent.browser.toString); // Mobile Safari 5.1.0std.stdio.writeln(agent.browser.toVersionString); // 5.1.0std.stdio.writeln(agent.os.family); // iOSstd.stdio.writeln(agent.os.major); // 5std.stdio.writeln(agent.os.minor); // 1std.stdio.writeln(agent.os.patch); // 1std.stdio.writeln(agent.os.toString); // iOS 5.1.1std.stdio.writeln(agent.os.toVersionString); // 5.1.1std.stdio.writeln(agent.toFullString); // Mobile Safari 5.1.0/iOS 5.1.1std.stdio.writeln(agent.device.family); // iPhonestd.stdio.writeln(agent.isMobile); // truestd.stdio.writeln(agent.isSpider); // false
}

Usage :: C#

Install the NuGet package

Install-Package UAParser

Sample Usage:

usingSystem;namespaceUAParser.ConsoleApp{classProgram{staticvoidMain(string[]args){StringuaString="Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-us) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5";ParseruaParser=Parser.GetDefault();ClientInfoc=uaParser.Parse(uaString);Console.WriteLine(c.UserAgent);//Safari 5.0.2Console.WriteLine(c.OS);// Mac OS X 10.6.5Console.WriteLine(c.Device);//Console.ReadLine();}}}

Usage :: Perl

use HTTP::UA::Parser;
my$r = HTTP::UA::Parser->new();
print$r->ua->toString(); # -> "Safari 5.0.1"print$r->ua->toVersionString(); # -> "5.0.1"print$r->ua->family; # -> "Safari"print$r->ua->major; # -> "5"print$r->ua->minor; # -> "0"print$r->ua->patch; # -> "1"print$r->os->toString(); # -> "iOS 5.1"print$r->os->toVersionString(); # -> "5.1"print$r->os->family # -> "iOS"print$r->os->major; # -> "5"print$r->os->minor; # -> "1"print$r->os->patch; # -> undefprint$r->device->family; # -> "iPhone"
More information is available in the README in the perl directory

Usage :: Haskell

{-Install via Hackage and cabal like so:cabal updatecabal install ua-parserNow you're good to go.-}
{-# LANGUAGE OverloadedStrings #-}
moduleMainwhereimportWeb.UAParser-- A test string
test_string ="Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3"-- Main entry point for Haskell
main =do
ua <- loadUAParser
let uaResult = parseUA ua test_string
print uaResult
let osResult = parseOS ua test_string
print osResult
-- Result from user agent parseJust (UAResult {uarFamily ="Mobile Safari", uarV1 =Just"5", uarV2 =Just"1", uarV3 =Nothing})
-- Result from operating system parseJust (OSResult {osrFamily ="iOS", osrV1 =Just"5", osrV2 =Just"1", osrV3 =Nothing, osrV4 =Nothing})

Please refer to Haddocks for more info; the API is pretty straightforward.

Usage :: Go

Install the package:

go get "github.com/tobie/ua-parser/go/uaparser"

Sample Usage

package main
import (
"github.com/tobie/ua-parser/go/uaparser"
"fmt"
)
func main() {
testStr := "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"
regexFile := "../../regexes.yaml"
parser := uaparser.New(regexFile)
client := parser.Parse(testStr)
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"
}

More information is available in the README in the Go directory

License

The data contained in regexes.yaml is Copyright 2009 Google Inc. and available under the Apache License, Version 2.0.

The original python code is Copyright 2008 Google Inc. and is available under the Apache License, Version 2.0.

The JS port is Copyright 2010 Tobie Langel and is available under your choice of MIT or Apache Version 2.0 license.

The PHP port is Copyright (c) 2011-2012 Dave Olsen and is available under the MIT license.

The Java port is Copyright (c) 2012 Twitter, Inc and is available under the Apache License, Version 2.0.

The D port is Copyright (c) 2012 Shripad K and is available under the MIT license.

The C# port is Copyright (c) 2012 Søren Enemærke and is available under the Apache License, Version 2.0.

The Perl port is Copyright (c) 2012 Mamod Mehyar and is available under the Perl License, Version 5.10.1.

The Pig port is Copyright (c) 2013 Niels Basjes and is available under the Apache License, Version 2.0.

The Go port is Copyright (c) 2013 Yihuan Zhou and is available under the MIT License.

About

A multi-language port of Browserscope's user agent parser.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - cloudvox/ua-parser: A multi-language port of Browserscope's user agent parser. · GitHub
Skip to content
This repository was archived by the owner on Jan 23, 2021. It is now read-only.

Repository files navigation

ua-parser Build Status

ua-parser is a multi-language port of BrowserScope's user agent string parser.

The crux of the original parser--the data collected by Steve Souders over the years--has been extracted into a separate YAML file so as to be reusable as is by implementations in other programming languages.

ua-parser is just a small wrapper around this data.

Maintainers

irc channel

#ua-parser on freenode.

Contributing Changes to regexes.yaml

Please read the contributors' guide

Other ua-parser Libraries

There are a few other libraries which make use of ua-parser's patterns. These include:

Usage :: node.js

varr=require('ua-parser').parse(navigator.userAgent);console.log(r.ua.toString());// -> "Safari 5.0.1"console.log(r.ua.toVersionString());// -> "5.0.1"console.log(r.ua.family)// -> "Safari"console.log(r.ua.major);// -> "5"console.log(r.ua.minor);// -> "0"console.log(r.ua.patch);// -> "1"console.log(r.os.toString());// -> "iOS 5.1"console.log(r.os.toVersionString());// -> "5.1"console.log(r.os.family)// -> "iOS"console.log(r.os.major);// -> "5"console.log(r.os.minor);// -> "1"console.log(r.os.patch);// -> nullconsole.log(r.device.family);// -> "iPhone"

Note if you're only interested in one of the ua, device or os objects, you will getter better performance by using the more specific methods (uaParser.parseUA, uaParser.parseOS and uaParser.parseDevice respectively), e.g.:

varp=require('ua-parser');console.log(p.parseUA(navigator.userAgent).toString());// -> "Safari 5.0.1"console.log(p.parseOS(navigator.userAgent).toString());// -> "iOS 5.1"console.log(p.parseDevice(navigator.userAgent).toString());// -> "iPhone"

Usage :: python

You can install ua-parser by running:

pipinstallpyyamlua-parser

And here's how to use it:

fromua_parserimportuser_agent_parser# On the server, you could use a WebOB request object.user_agent_string=request.META.get('HTTP_USER_AGENT')
# For demonstration purposes, though an iPhone ...user_agent_string='Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3'# Get back a big dictionary of all the goodies.result_dict=user_agent_parser.Parse(user_agent_string)
printresult_dict['user_agent']
# {'major': '5', 'minor': '1', 'family': 'Mobile Safari', 'patch': None}printresult_dict['os']
# {'major': '5', 'patch_minor': None, 'minor': '1', 'family': 'iOS', 'patch': None}printresult_dict['device']
# {'family': 'iPhone'}

Usage :: java

importua_parser.Parser;
importua_parser.Client;
...
StringuaString = "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3";
ParseruaParser = newParser();
Clientc = uaParser.parse(uaString);
System.out.println(c.userAgent.family); // => "Mobile Safari"System.out.println(c.userAgent.major); // => "5"System.out.println(c.userAgent.minor); // => "1"System.out.println(c.os.family); // => "iOS"System.out.println(c.os.major); // => "5"System.out.println(c.os.minor); // => "1"System.out.println(c.device.family); // => "iPhone"

Usage :: Pig

For Pig there are UDFs for getting a single value and UDFs for getting a tuple with all values for either Device, Os of UserAgent. For most usecases the tuple UDFs will be the most useful.

REGISTERua-parser-pig-0.1-SNAPSHOT-job.jarDEFINEDeviceua_parser.pig.Device;
DEFINEOsua_parser.pig.Os;
DEFINEUserAgentua_parser.pig.UserAgent;
UserAgents =
Load'useragents.txt'AS (useragent:chararray);
AgentSpecs =
FOREACHUserAgentsGENERATEDevice(useragent) ASDevice,
Os(useragent) ASOs,
UserAgent(useragent) ASUserAgent,
useragentASUseragent;
DESCRIBEAgentSpecs;
DUMPAgentSpecs;

The versions that return only a single value:

REGISTERua-parser-pig-0.1-SNAPSHOT-job.jarDEFINEDeviceFamilyua_parser.pig.device.Family;
DEFINEOsFamilyua_parser.pig.os.Family;
DEFINEOsMajorua_parser.pig.os.Major;
DEFINEOsMinorua_parser.pig.os.Minor;
DEFINEOsPatchua_parser.pig.os.Patch;
DEFINEOsPatchMinorua_parser.pig.os.PatchMinor;
DEFINEUseragentFamilyua_parser.pig.useragent.Family;
DEFINEUseragentMajorua_parser.pig.useragent.Major;
DEFINEUseragentMinorua_parser.pig.useragent.Minor;
DEFINEUseragentPatchua_parser.pig.useragent.Patch;
UserAgents =
Load'useragents.txt'AS (useragent:chararray);
AgentSpecs =
FOREACHUserAgentsGENERATEDeviceFamily(useragent) ASDeviceFamily:chararray,
OsFamily(useragent) ASOsFamily:chararray,
OsMajor(useragent) ASOsMajor:chararray,
OsMinor(useragent) ASOsMinor:chararray,
OsPatch(useragent) ASOsPatch:chararray,
OsPatchMinor(useragent) ASOsPatchMinor:chararray,
UseragentFamily(useragent) ASUseragentFamily:chararray,
UseragentMajor(useragent) ASUseragentMajor:chararray,
UseragentMinor(useragent) ASUseragentMinor:chararray,
UseragentPatch(useragent) ASUseragentPatch:chararray,
useragentASUseragent;
DUMPAgentSpecs;

Usage :: php

require_once'vendor/autoload.php';
useUAParser\Parser;
$ua = "Mozilla/5.0 (Macintosh; Intel Ma...";
$parser = Parser::create();
$result = $parser->parse($ua);
print$result->ua->family; // Safariprint$result->ua->major; // 6print$result->ua->minor; // 0print$result->ua->patch; // 2print$result->ua->toString(); // Safari 6.0.2print$result->ua->toVersion(); // 6.0.2print$result->os->family; // Mac OS Xprint$result->os->major; // 10print$result->os->minor; // 7print$result->os->patch; // 5print$result->os->patchMinor; // [null]print$result->os->toString(); // Mac OS X 10.7.5print$result->os->toVersion(); // 10.7.5print$result->device->family; // Otherprint$result->toString(); // Safari 6.0.2/Mac OS X 10.7.5print$result->uaOriginal; // Mozilla/5.0 (Macintosh; Intel Ma...

More information is available in the README in the PHP directory

Usage :: D

import UaParser;
importstd.stdio;
voidmain() {
auto agent = UaParser.parse("Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3");
std.stdio.writeln(agent.browser.family); // Mobile Safaristd.stdio.writeln(agent.browser.major); // 5std.stdio.writeln(agent.browser.minor); // 1std.stdio.writeln(agent.browser.patch); // 0std.stdio.writeln(agent.browser.toString); // Mobile Safari 5.1.0std.stdio.writeln(agent.browser.toVersionString); // 5.1.0std.stdio.writeln(agent.os.family); // iOSstd.stdio.writeln(agent.os.major); // 5std.stdio.writeln(agent.os.minor); // 1std.stdio.writeln(agent.os.patch); // 1std.stdio.writeln(agent.os.toString); // iOS 5.1.1std.stdio.writeln(agent.os.toVersionString); // 5.1.1std.stdio.writeln(agent.toFullString); // Mobile Safari 5.1.0/iOS 5.1.1std.stdio.writeln(agent.device.family); // iPhonestd.stdio.writeln(agent.isMobile); // truestd.stdio.writeln(agent.isSpider); // false
}

Usage :: C#

Install the NuGet package

Install-Package UAParser

Sample Usage:

usingSystem;namespaceUAParser.ConsoleApp{classProgram{staticvoidMain(string[]args){StringuaString="Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-us) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5";ParseruaParser=Parser.GetDefault();ClientInfoc=uaParser.Parse(uaString);Console.WriteLine(c.UserAgent);//Safari 5.0.2Console.WriteLine(c.OS);// Mac OS X 10.6.5Console.WriteLine(c.Device);//Console.ReadLine();}}}

Usage :: Perl

use HTTP::UA::Parser;
my$r = HTTP::UA::Parser->new();
print$r->ua->toString(); # -> "Safari 5.0.1"print$r->ua->toVersionString(); # -> "5.0.1"print$r->ua->family; # -> "Safari"print$r->ua->major; # -> "5"print$r->ua->minor; # -> "0"print$r->ua->patch; # -> "1"print$r->os->toString(); # -> "iOS 5.1"print$r->os->toVersionString(); # -> "5.1"print$r->os->family # -> "iOS"print$r->os->major; # -> "5"print$r->os->minor; # -> "1"print$r->os->patch; # -> undefprint$r->device->family; # -> "iPhone"
More information is available in the README in the perl directory

Usage :: Haskell

{-Install via Hackage and cabal like so:cabal updatecabal install ua-parserNow you're good to go.-}
{-# LANGUAGE OverloadedStrings #-}
moduleMainwhereimportWeb.UAParser-- A test string
test_string ="Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3"-- Main entry point for Haskell
main =do
ua <- loadUAParser
let uaResult = parseUA ua test_string
print uaResult
let osResult = parseOS ua test_string
print osResult
-- Result from user agent parseJust (UAResult {uarFamily ="Mobile Safari", uarV1 =Just"5", uarV2 =Just"1", uarV3 =Nothing})
-- Result from operating system parseJust (OSResult {osrFamily ="iOS", osrV1 =Just"5", osrV2 =Just"1", osrV3 =Nothing, osrV4 =Nothing})

Please refer to Haddocks for more info; the API is pretty straightforward.

Usage :: Go

Install the package:

go get "github.com/tobie/ua-parser/go/uaparser"

Sample Usage

package main
import (
"github.com/tobie/ua-parser/go/uaparser"
"fmt"
)
func main() {
testStr := "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"
regexFile := "../../regexes.yaml"
parser := uaparser.New(regexFile)
client := parser.Parse(testStr)
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"
}

More information is available in the README in the Go directory

License

The data contained in regexes.yaml is Copyright 2009 Google Inc. and available under the Apache License, Version 2.0.

The original python code is Copyright 2008 Google Inc. and is available under the Apache License, Version 2.0.

The JS port is Copyright 2010 Tobie Langel and is available under your choice of MIT or Apache Version 2.0 license.

The PHP port is Copyright (c) 2011-2012 Dave Olsen and is available under the MIT license.

The Java port is Copyright (c) 2012 Twitter, Inc and is available under the Apache License, Version 2.0.

The D port is Copyright (c) 2012 Shripad K and is available under the MIT license.

The C# port is Copyright (c) 2012 Søren Enemærke and is available under the Apache License, Version 2.0.

The Perl port is Copyright (c) 2012 Mamod Mehyar and is available under the Perl License, Version 5.10.1.

The Pig port is Copyright (c) 2013 Niels Basjes and is available under the Apache License, Version 2.0.

The Go port is Copyright (c) 2013 Yihuan Zhou and is available under the MIT License.

About

A multi-language port of Browserscope's user agent parser.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - cloudvox/ua-parser: A multi-language port of Browserscope's user agent parser. · GitHub
Skip to content
This repository was archived by the owner on Jan 23, 2021. It is now read-only.

Repository files navigation

ua-parser Build Status

ua-parser is a multi-language port of BrowserScope's user agent string parser.

The crux of the original parser--the data collected by Steve Souders over the years--has been extracted into a separate YAML file so as to be reusable as is by implementations in other programming languages.

ua-parser is just a small wrapper around this data.

Maintainers

irc channel

#ua-parser on freenode.

Contributing Changes to regexes.yaml

Please read the contributors' guide

Other ua-parser Libraries

There are a few other libraries which make use of ua-parser's patterns. These include:

Usage :: node.js

varr=require('ua-parser').parse(navigator.userAgent);console.log(r.ua.toString());// -> "Safari 5.0.1"console.log(r.ua.toVersionString());// -> "5.0.1"console.log(r.ua.family)// -> "Safari"console.log(r.ua.major);// -> "5"console.log(r.ua.minor);// -> "0"console.log(r.ua.patch);// -> "1"console.log(r.os.toString());// -> "iOS 5.1"console.log(r.os.toVersionString());// -> "5.1"console.log(r.os.family)// -> "iOS"console.log(r.os.major);// -> "5"console.log(r.os.minor);// -> "1"console.log(r.os.patch);// -> nullconsole.log(r.device.family);// -> "iPhone"

Note if you're only interested in one of the ua, device or os objects, you will getter better performance by using the more specific methods (uaParser.parseUA, uaParser.parseOS and uaParser.parseDevice respectively), e.g.:

varp=require('ua-parser');console.log(p.parseUA(navigator.userAgent).toString());// -> "Safari 5.0.1"console.log(p.parseOS(navigator.userAgent).toString());// -> "iOS 5.1"console.log(p.parseDevice(navigator.userAgent).toString());// -> "iPhone"

Usage :: python

You can install ua-parser by running:

pipinstallpyyamlua-parser

And here's how to use it:

fromua_parserimportuser_agent_parser# On the server, you could use a WebOB request object.user_agent_string=request.META.get('HTTP_USER_AGENT')
# For demonstration purposes, though an iPhone ...user_agent_string='Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3'# Get back a big dictionary of all the goodies.result_dict=user_agent_parser.Parse(user_agent_string)
printresult_dict['user_agent']
# {'major': '5', 'minor': '1', 'family': 'Mobile Safari', 'patch': None}printresult_dict['os']
# {'major': '5', 'patch_minor': None, 'minor': '1', 'family': 'iOS', 'patch': None}printresult_dict['device']
# {'family': 'iPhone'}

Usage :: java

importua_parser.Parser;
importua_parser.Client;
...
StringuaString = "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3";
ParseruaParser = newParser();
Clientc = uaParser.parse(uaString);
System.out.println(c.userAgent.family); // => "Mobile Safari"System.out.println(c.userAgent.major); // => "5"System.out.println(c.userAgent.minor); // => "1"System.out.println(c.os.family); // => "iOS"System.out.println(c.os.major); // => "5"System.out.println(c.os.minor); // => "1"System.out.println(c.device.family); // => "iPhone"

Usage :: Pig

For Pig there are UDFs for getting a single value and UDFs for getting a tuple with all values for either Device, Os of UserAgent. For most usecases the tuple UDFs will be the most useful.

REGISTERua-parser-pig-0.1-SNAPSHOT-job.jarDEFINEDeviceua_parser.pig.Device;
DEFINEOsua_parser.pig.Os;
DEFINEUserAgentua_parser.pig.UserAgent;
UserAgents =
Load'useragents.txt'AS (useragent:chararray);
AgentSpecs =
FOREACHUserAgentsGENERATEDevice(useragent) ASDevice,
Os(useragent) ASOs,
UserAgent(useragent) ASUserAgent,
useragentASUseragent;
DESCRIBEAgentSpecs;
DUMPAgentSpecs;

The versions that return only a single value:

REGISTERua-parser-pig-0.1-SNAPSHOT-job.jarDEFINEDeviceFamilyua_parser.pig.device.Family;
DEFINEOsFamilyua_parser.pig.os.Family;
DEFINEOsMajorua_parser.pig.os.Major;
DEFINEOsMinorua_parser.pig.os.Minor;
DEFINEOsPatchua_parser.pig.os.Patch;
DEFINEOsPatchMinorua_parser.pig.os.PatchMinor;
DEFINEUseragentFamilyua_parser.pig.useragent.Family;
DEFINEUseragentMajorua_parser.pig.useragent.Major;
DEFINEUseragentMinorua_parser.pig.useragent.Minor;
DEFINEUseragentPatchua_parser.pig.useragent.Patch;
UserAgents =
Load'useragents.txt'AS (useragent:chararray);
AgentSpecs =
FOREACHUserAgentsGENERATEDeviceFamily(useragent) ASDeviceFamily:chararray,
OsFamily(useragent) ASOsFamily:chararray,
OsMajor(useragent) ASOsMajor:chararray,
OsMinor(useragent) ASOsMinor:chararray,
OsPatch(useragent) ASOsPatch:chararray,
OsPatchMinor(useragent) ASOsPatchMinor:chararray,
UseragentFamily(useragent) ASUseragentFamily:chararray,
UseragentMajor(useragent) ASUseragentMajor:chararray,
UseragentMinor(useragent) ASUseragentMinor:chararray,
UseragentPatch(useragent) ASUseragentPatch:chararray,
useragentASUseragent;
DUMPAgentSpecs;

Usage :: php

require_once'vendor/autoload.php';
useUAParser\Parser;
$ua = "Mozilla/5.0 (Macintosh; Intel Ma...";
$parser = Parser::create();
$result = $parser->parse($ua);
print$result->ua->family; // Safariprint$result->ua->major; // 6print$result->ua->minor; // 0print$result->ua->patch; // 2print$result->ua->toString(); // Safari 6.0.2print$result->ua->toVersion(); // 6.0.2print$result->os->family; // Mac OS Xprint$result->os->major; // 10print$result->os->minor; // 7print$result->os->patch; // 5print$result->os->patchMinor; // [null]print$result->os->toString(); // Mac OS X 10.7.5print$result->os->toVersion(); // 10.7.5print$result->device->family; // Otherprint$result->toString(); // Safari 6.0.2/Mac OS X 10.7.5print$result->uaOriginal; // Mozilla/5.0 (Macintosh; Intel Ma...

More information is available in the README in the PHP directory

Usage :: D

import UaParser;
importstd.stdio;
voidmain() {
auto agent = UaParser.parse("Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3");
std.stdio.writeln(agent.browser.family); // Mobile Safaristd.stdio.writeln(agent.browser.major); // 5std.stdio.writeln(agent.browser.minor); // 1std.stdio.writeln(agent.browser.patch); // 0std.stdio.writeln(agent.browser.toString); // Mobile Safari 5.1.0std.stdio.writeln(agent.browser.toVersionString); // 5.1.0std.stdio.writeln(agent.os.family); // iOSstd.stdio.writeln(agent.os.major); // 5std.stdio.writeln(agent.os.minor); // 1std.stdio.writeln(agent.os.patch); // 1std.stdio.writeln(agent.os.toString); // iOS 5.1.1std.stdio.writeln(agent.os.toVersionString); // 5.1.1std.stdio.writeln(agent.toFullString); // Mobile Safari 5.1.0/iOS 5.1.1std.stdio.writeln(agent.device.family); // iPhonestd.stdio.writeln(agent.isMobile); // truestd.stdio.writeln(agent.isSpider); // false
}

Usage :: C#

Install the NuGet package

Install-Package UAParser

Sample Usage:

usingSystem;namespaceUAParser.ConsoleApp{classProgram{staticvoidMain(string[]args){StringuaString="Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-us) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5";ParseruaParser=Parser.GetDefault();ClientInfoc=uaParser.Parse(uaString);Console.WriteLine(c.UserAgent);//Safari 5.0.2Console.WriteLine(c.OS);// Mac OS X 10.6.5Console.WriteLine(c.Device);//Console.ReadLine();}}}

Usage :: Perl

use HTTP::UA::Parser;
my$r = HTTP::UA::Parser->new();
print$r->ua->toString(); # -> "Safari 5.0.1"print$r->ua->toVersionString(); # -> "5.0.1"print$r->ua->family; # -> "Safari"print$r->ua->major; # -> "5"print$r->ua->minor; # -> "0"print$r->ua->patch; # -> "1"print$r->os->toString(); # -> "iOS 5.1"print$r->os->toVersionString(); # -> "5.1"print$r->os->family # -> "iOS"print$r->os->major; # -> "5"print$r->os->minor; # -> "1"print$r->os->patch; # -> undefprint$r->device->family; # -> "iPhone"
More information is available in the README in the perl directory

Usage :: Haskell

{-Install via Hackage and cabal like so:cabal updatecabal install ua-parserNow you're good to go.-}
{-# LANGUAGE OverloadedStrings #-}
moduleMainwhereimportWeb.UAParser-- A test string
test_string ="Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3"-- Main entry point for Haskell
main =do
ua <- loadUAParser
let uaResult = parseUA ua test_string
print uaResult
let osResult = parseOS ua test_string
print osResult
-- Result from user agent parseJust (UAResult {uarFamily ="Mobile Safari", uarV1 =Just"5", uarV2 =Just"1", uarV3 =Nothing})
-- Result from operating system parseJust (OSResult {osrFamily ="iOS", osrV1 =Just"5", osrV2 =Just"1", osrV3 =Nothing, osrV4 =Nothing})

Please refer to Haddocks for more info; the API is pretty straightforward.

Usage :: Go

Install the package:

go get "github.com/tobie/ua-parser/go/uaparser"

Sample Usage

package main
import (
"github.com/tobie/ua-parser/go/uaparser"
"fmt"
)
func main() {
testStr := "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"
regexFile := "../../regexes.yaml"
parser := uaparser.New(regexFile)
client := parser.Parse(testStr)
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"
}

More information is available in the README in the Go directory

License

The data contained in regexes.yaml is Copyright 2009 Google Inc. and available under the Apache License, Version 2.0.

The original python code is Copyright 2008 Google Inc. and is available under the Apache License, Version 2.0.

The JS port is Copyright 2010 Tobie Langel and is available under your choice of MIT or Apache Version 2.0 license.

The PHP port is Copyright (c) 2011-2012 Dave Olsen and is available under the MIT license.

The Java port is Copyright (c) 2012 Twitter, Inc and is available under the Apache License, Version 2.0.

The D port is Copyright (c) 2012 Shripad K and is available under the MIT license.

The C# port is Copyright (c) 2012 Søren Enemærke and is available under the Apache License, Version 2.0.

The Perl port is Copyright (c) 2012 Mamod Mehyar and is available under the Perl License, Version 5.10.1.

The Pig port is Copyright (c) 2013 Niels Basjes and is available under the Apache License, Version 2.0.

The Go port is Copyright (c) 2013 Yihuan Zhou and is available under the MIT License.

About

A multi-language port of Browserscope's user agent parser.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - cloudvox/ua-parser: A multi-language port of Browserscope's user agent parser. · GitHub
Skip to content
This repository was archived by the owner on Jan 23, 2021. It is now read-only.

Repository files navigation

ua-parser Build Status

ua-parser is a multi-language port of BrowserScope's user agent string parser.

The crux of the original parser--the data collected by Steve Souders over the years--has been extracted into a separate YAML file so as to be reusable as is by implementations in other programming languages.

ua-parser is just a small wrapper around this data.

Maintainers

irc channel

#ua-parser on freenode.

Contributing Changes to regexes.yaml

Please read the contributors' guide

Other ua-parser Libraries

There are a few other libraries which make use of ua-parser's patterns. These include:

Usage :: node.js

varr=require('ua-parser').parse(navigator.userAgent);console.log(r.ua.toString());// -> "Safari 5.0.1"console.log(r.ua.toVersionString());// -> "5.0.1"console.log(r.ua.family)// -> "Safari"console.log(r.ua.major);// -> "5"console.log(r.ua.minor);// -> "0"console.log(r.ua.patch);// -> "1"console.log(r.os.toString());// -> "iOS 5.1"console.log(r.os.toVersionString());// -> "5.1"console.log(r.os.family)// -> "iOS"console.log(r.os.major);// -> "5"console.log(r.os.minor);// -> "1"console.log(r.os.patch);// -> nullconsole.log(r.device.family);// -> "iPhone"

Note if you're only interested in one of the ua, device or os objects, you will getter better performance by using the more specific methods (uaParser.parseUA, uaParser.parseOS and uaParser.parseDevice respectively), e.g.:

varp=require('ua-parser');console.log(p.parseUA(navigator.userAgent).toString());// -> "Safari 5.0.1"console.log(p.parseOS(navigator.userAgent).toString());// -> "iOS 5.1"console.log(p.parseDevice(navigator.userAgent).toString());// -> "iPhone"

Usage :: python

You can install ua-parser by running:

pipinstallpyyamlua-parser

And here's how to use it:

fromua_parserimportuser_agent_parser# On the server, you could use a WebOB request object.user_agent_string=request.META.get('HTTP_USER_AGENT')
# For demonstration purposes, though an iPhone ...user_agent_string='Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3'# Get back a big dictionary of all the goodies.result_dict=user_agent_parser.Parse(user_agent_string)
printresult_dict['user_agent']
# {'major': '5', 'minor': '1', 'family': 'Mobile Safari', 'patch': None}printresult_dict['os']
# {'major': '5', 'patch_minor': None, 'minor': '1', 'family': 'iOS', 'patch': None}printresult_dict['device']
# {'family': 'iPhone'}

Usage :: java

importua_parser.Parser;
importua_parser.Client;
...
StringuaString = "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3";
ParseruaParser = newParser();
Clientc = uaParser.parse(uaString);
System.out.println(c.userAgent.family); // => "Mobile Safari"System.out.println(c.userAgent.major); // => "5"System.out.println(c.userAgent.minor); // => "1"System.out.println(c.os.family); // => "iOS"System.out.println(c.os.major); // => "5"System.out.println(c.os.minor); // => "1"System.out.println(c.device.family); // => "iPhone"

Usage :: Pig

For Pig there are UDFs for getting a single value and UDFs for getting a tuple with all values for either Device, Os of UserAgent. For most usecases the tuple UDFs will be the most useful.

REGISTERua-parser-pig-0.1-SNAPSHOT-job.jarDEFINEDeviceua_parser.pig.Device;
DEFINEOsua_parser.pig.Os;
DEFINEUserAgentua_parser.pig.UserAgent;
UserAgents =
Load'useragents.txt'AS (useragent:chararray);
AgentSpecs =
FOREACHUserAgentsGENERATEDevice(useragent) ASDevice,
Os(useragent) ASOs,
UserAgent(useragent) ASUserAgent,
useragentASUseragent;
DESCRIBEAgentSpecs;
DUMPAgentSpecs;

The versions that return only a single value:

REGISTERua-parser-pig-0.1-SNAPSHOT-job.jarDEFINEDeviceFamilyua_parser.pig.device.Family;
DEFINEOsFamilyua_parser.pig.os.Family;
DEFINEOsMajorua_parser.pig.os.Major;
DEFINEOsMinorua_parser.pig.os.Minor;
DEFINEOsPatchua_parser.pig.os.Patch;
DEFINEOsPatchMinorua_parser.pig.os.PatchMinor;
DEFINEUseragentFamilyua_parser.pig.useragent.Family;
DEFINEUseragentMajorua_parser.pig.useragent.Major;
DEFINEUseragentMinorua_parser.pig.useragent.Minor;
DEFINEUseragentPatchua_parser.pig.useragent.Patch;
UserAgents =
Load'useragents.txt'AS (useragent:chararray);
AgentSpecs =
FOREACHUserAgentsGENERATEDeviceFamily(useragent) ASDeviceFamily:chararray,
OsFamily(useragent) ASOsFamily:chararray,
OsMajor(useragent) ASOsMajor:chararray,
OsMinor(useragent) ASOsMinor:chararray,
OsPatch(useragent) ASOsPatch:chararray,
OsPatchMinor(useragent) ASOsPatchMinor:chararray,
UseragentFamily(useragent) ASUseragentFamily:chararray,
UseragentMajor(useragent) ASUseragentMajor:chararray,
UseragentMinor(useragent) ASUseragentMinor:chararray,
UseragentPatch(useragent) ASUseragentPatch:chararray,
useragentASUseragent;
DUMPAgentSpecs;

Usage :: php

require_once'vendor/autoload.php';
useUAParser\Parser;
$ua = "Mozilla/5.0 (Macintosh; Intel Ma...";
$parser = Parser::create();
$result = $parser->parse($ua);
print$result->ua->family; // Safariprint$result->ua->major; // 6print$result->ua->minor; // 0print$result->ua->patch; // 2print$result->ua->toString(); // Safari 6.0.2print$result->ua->toVersion(); // 6.0.2print$result->os->family; // Mac OS Xprint$result->os->major; // 10print$result->os->minor; // 7print$result->os->patch; // 5print$result->os->patchMinor; // [null]print$result->os->toString(); // Mac OS X 10.7.5print$result->os->toVersion(); // 10.7.5print$result->device->family; // Otherprint$result->toString(); // Safari 6.0.2/Mac OS X 10.7.5print$result->uaOriginal; // Mozilla/5.0 (Macintosh; Intel Ma...

More information is available in the README in the PHP directory

Usage :: D

import UaParser;
importstd.stdio;
voidmain() {
auto agent = UaParser.parse("Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3");
std.stdio.writeln(agent.browser.family); // Mobile Safaristd.stdio.writeln(agent.browser.major); // 5std.stdio.writeln(agent.browser.minor); // 1std.stdio.writeln(agent.browser.patch); // 0std.stdio.writeln(agent.browser.toString); // Mobile Safari 5.1.0std.stdio.writeln(agent.browser.toVersionString); // 5.1.0std.stdio.writeln(agent.os.family); // iOSstd.stdio.writeln(agent.os.major); // 5std.stdio.writeln(agent.os.minor); // 1std.stdio.writeln(agent.os.patch); // 1std.stdio.writeln(agent.os.toString); // iOS 5.1.1std.stdio.writeln(agent.os.toVersionString); // 5.1.1std.stdio.writeln(agent.toFullString); // Mobile Safari 5.1.0/iOS 5.1.1std.stdio.writeln(agent.device.family); // iPhonestd.stdio.writeln(agent.isMobile); // truestd.stdio.writeln(agent.isSpider); // false
}

Usage :: C#

Install the NuGet package

Install-Package UAParser

Sample Usage:

usingSystem;namespaceUAParser.ConsoleApp{classProgram{staticvoidMain(string[]args){StringuaString="Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-us) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5";ParseruaParser=Parser.GetDefault();ClientInfoc=uaParser.Parse(uaString);Console.WriteLine(c.UserAgent);//Safari 5.0.2Console.WriteLine(c.OS);// Mac OS X 10.6.5Console.WriteLine(c.Device);//Console.ReadLine();}}}

Usage :: Perl

use HTTP::UA::Parser;
my$r = HTTP::UA::Parser->new();
print$r->ua->toString(); # -> "Safari 5.0.1"print$r->ua->toVersionString(); # -> "5.0.1"print$r->ua->family; # -> "Safari"print$r->ua->major; # -> "5"print$r->ua->minor; # -> "0"print$r->ua->patch; # -> "1"print$r->os->toString(); # -> "iOS 5.1"print$r->os->toVersionString(); # -> "5.1"print$r->os->family # -> "iOS"print$r->os->major; # -> "5"print$r->os->minor; # -> "1"print$r->os->patch; # -> undefprint$r->device->family; # -> "iPhone"
More information is available in the README in the perl directory

Usage :: Haskell

{-Install via Hackage and cabal like so:cabal updatecabal install ua-parserNow you're good to go.-}
{-# LANGUAGE OverloadedStrings #-}
moduleMainwhereimportWeb.UAParser-- A test string
test_string ="Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3"-- Main entry point for Haskell
main =do
ua <- loadUAParser
let uaResult = parseUA ua test_string
print uaResult
let osResult = parseOS ua test_string
print osResult
-- Result from user agent parseJust (UAResult {uarFamily ="Mobile Safari", uarV1 =Just"5", uarV2 =Just"1", uarV3 =Nothing})
-- Result from operating system parseJust (OSResult {osrFamily ="iOS", osrV1 =Just"5", osrV2 =Just"1", osrV3 =Nothing, osrV4 =Nothing})

Please refer to Haddocks for more info; the API is pretty straightforward.

Usage :: Go

Install the package:

go get "github.com/tobie/ua-parser/go/uaparser"

Sample Usage

package main
import (
"github.com/tobie/ua-parser/go/uaparser"
"fmt"
)
func main() {
testStr := "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"
regexFile := "../../regexes.yaml"
parser := uaparser.New(regexFile)
client := parser.Parse(testStr)
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"
}

More information is available in the README in the Go directory

License

The data contained in regexes.yaml is Copyright 2009 Google Inc. and available under the Apache License, Version 2.0.

The original python code is Copyright 2008 Google Inc. and is available under the Apache License, Version 2.0.

The JS port is Copyright 2010 Tobie Langel and is available under your choice of MIT or Apache Version 2.0 license.

The PHP port is Copyright (c) 2011-2012 Dave Olsen and is available under the MIT license.

The Java port is Copyright (c) 2012 Twitter, Inc and is available under the Apache License, Version 2.0.

The D port is Copyright (c) 2012 Shripad K and is available under the MIT license.

The C# port is Copyright (c) 2012 Søren Enemærke and is available under the Apache License, Version 2.0.

The Perl port is Copyright (c) 2012 Mamod Mehyar and is available under the Perl License, Version 5.10.1.

The Pig port is Copyright (c) 2013 Niels Basjes and is available under the Apache License, Version 2.0.

The Go port is Copyright (c) 2013 Yihuan Zhou and is available under the MIT License.

About

A multi-language port of Browserscope's user agent parser.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - cloudvox/ua-parser: A multi-language port of Browserscope's user agent parser. · GitHub
Skip to content
This repository was archived by the owner on Jan 23, 2021. It is now read-only.

Repository files navigation

ua-parser Build Status

ua-parser is a multi-language port of BrowserScope's user agent string parser.

The crux of the original parser--the data collected by Steve Souders over the years--has been extracted into a separate YAML file so as to be reusable as is by implementations in other programming languages.

ua-parser is just a small wrapper around this data.

Maintainers

irc channel

#ua-parser on freenode.

Contributing Changes to regexes.yaml

Please read the contributors' guide

Other ua-parser Libraries

There are a few other libraries which make use of ua-parser's patterns. These include:

Usage :: node.js

varr=require('ua-parser').parse(navigator.userAgent);console.log(r.ua.toString());// -> "Safari 5.0.1"console.log(r.ua.toVersionString());// -> "5.0.1"console.log(r.ua.family)// -> "Safari"console.log(r.ua.major);// -> "5"console.log(r.ua.minor);// -> "0"console.log(r.ua.patch);// -> "1"console.log(r.os.toString());// -> "iOS 5.1"console.log(r.os.toVersionString());// -> "5.1"console.log(r.os.family)// -> "iOS"console.log(r.os.major);// -> "5"console.log(r.os.minor);// -> "1"console.log(r.os.patch);// -> nullconsole.log(r.device.family);// -> "iPhone"

Note if you're only interested in one of the ua, device or os objects, you will getter better performance by using the more specific methods (uaParser.parseUA, uaParser.parseOS and uaParser.parseDevice respectively), e.g.:

varp=require('ua-parser');console.log(p.parseUA(navigator.userAgent).toString());// -> "Safari 5.0.1"console.log(p.parseOS(navigator.userAgent).toString());// -> "iOS 5.1"console.log(p.parseDevice(navigator.userAgent).toString());// -> "iPhone"

Usage :: python

You can install ua-parser by running:

pipinstallpyyamlua-parser

And here's how to use it:

fromua_parserimportuser_agent_parser# On the server, you could use a WebOB request object.user_agent_string=request.META.get('HTTP_USER_AGENT')
# For demonstration purposes, though an iPhone ...user_agent_string='Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3'# Get back a big dictionary of all the goodies.result_dict=user_agent_parser.Parse(user_agent_string)
printresult_dict['user_agent']
# {'major': '5', 'minor': '1', 'family': 'Mobile Safari', 'patch': None}printresult_dict['os']
# {'major': '5', 'patch_minor': None, 'minor': '1', 'family': 'iOS', 'patch': None}printresult_dict['device']
# {'family': 'iPhone'}

Usage :: java

importua_parser.Parser;
importua_parser.Client;
...
StringuaString = "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3";
ParseruaParser = newParser();
Clientc = uaParser.parse(uaString);
System.out.println(c.userAgent.family); // => "Mobile Safari"System.out.println(c.userAgent.major); // => "5"System.out.println(c.userAgent.minor); // => "1"System.out.println(c.os.family); // => "iOS"System.out.println(c.os.major); // => "5"System.out.println(c.os.minor); // => "1"System.out.println(c.device.family); // => "iPhone"

Usage :: Pig

For Pig there are UDFs for getting a single value and UDFs for getting a tuple with all values for either Device, Os of UserAgent. For most usecases the tuple UDFs will be the most useful.

REGISTERua-parser-pig-0.1-SNAPSHOT-job.jarDEFINEDeviceua_parser.pig.Device;
DEFINEOsua_parser.pig.Os;
DEFINEUserAgentua_parser.pig.UserAgent;
UserAgents =
Load'useragents.txt'AS (useragent:chararray);
AgentSpecs =
FOREACHUserAgentsGENERATEDevice(useragent) ASDevice,
Os(useragent) ASOs,
UserAgent(useragent) ASUserAgent,
useragentASUseragent;
DESCRIBEAgentSpecs;
DUMPAgentSpecs;

The versions that return only a single value:

REGISTERua-parser-pig-0.1-SNAPSHOT-job.jarDEFINEDeviceFamilyua_parser.pig.device.Family;
DEFINEOsFamilyua_parser.pig.os.Family;
DEFINEOsMajorua_parser.pig.os.Major;
DEFINEOsMinorua_parser.pig.os.Minor;
DEFINEOsPatchua_parser.pig.os.Patch;
DEFINEOsPatchMinorua_parser.pig.os.PatchMinor;
DEFINEUseragentFamilyua_parser.pig.useragent.Family;
DEFINEUseragentMajorua_parser.pig.useragent.Major;
DEFINEUseragentMinorua_parser.pig.useragent.Minor;
DEFINEUseragentPatchua_parser.pig.useragent.Patch;
UserAgents =
Load'useragents.txt'AS (useragent:chararray);
AgentSpecs =
FOREACHUserAgentsGENERATEDeviceFamily(useragent) ASDeviceFamily:chararray,
OsFamily(useragent) ASOsFamily:chararray,
OsMajor(useragent) ASOsMajor:chararray,
OsMinor(useragent) ASOsMinor:chararray,
OsPatch(useragent) ASOsPatch:chararray,
OsPatchMinor(useragent) ASOsPatchMinor:chararray,
UseragentFamily(useragent) ASUseragentFamily:chararray,
UseragentMajor(useragent) ASUseragentMajor:chararray,
UseragentMinor(useragent) ASUseragentMinor:chararray,
UseragentPatch(useragent) ASUseragentPatch:chararray,
useragentASUseragent;
DUMPAgentSpecs;

Usage :: php

require_once'vendor/autoload.php';
useUAParser\Parser;
$ua = "Mozilla/5.0 (Macintosh; Intel Ma...";
$parser = Parser::create();
$result = $parser->parse($ua);
print$result->ua->family; // Safariprint$result->ua->major; // 6print$result->ua->minor; // 0print$result->ua->patch; // 2print$result->ua->toString(); // Safari 6.0.2print$result->ua->toVersion(); // 6.0.2print$result->os->family; // Mac OS Xprint$result->os->major; // 10print$result->os->minor; // 7print$result->os->patch; // 5print$result->os->patchMinor; // [null]print$result->os->toString(); // Mac OS X 10.7.5print$result->os->toVersion(); // 10.7.5print$result->device->family; // Otherprint$result->toString(); // Safari 6.0.2/Mac OS X 10.7.5print$result->uaOriginal; // Mozilla/5.0 (Macintosh; Intel Ma...

More information is available in the README in the PHP directory

Usage :: D

import UaParser;
importstd.stdio;
voidmain() {
auto agent = UaParser.parse("Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3");
std.stdio.writeln(agent.browser.family); // Mobile Safaristd.stdio.writeln(agent.browser.major); // 5std.stdio.writeln(agent.browser.minor); // 1std.stdio.writeln(agent.browser.patch); // 0std.stdio.writeln(agent.browser.toString); // Mobile Safari 5.1.0std.stdio.writeln(agent.browser.toVersionString); // 5.1.0std.stdio.writeln(agent.os.family); // iOSstd.stdio.writeln(agent.os.major); // 5std.stdio.writeln(agent.os.minor); // 1std.stdio.writeln(agent.os.patch); // 1std.stdio.writeln(agent.os.toString); // iOS 5.1.1std.stdio.writeln(agent.os.toVersionString); // 5.1.1std.stdio.writeln(agent.toFullString); // Mobile Safari 5.1.0/iOS 5.1.1std.stdio.writeln(agent.device.family); // iPhonestd.stdio.writeln(agent.isMobile); // truestd.stdio.writeln(agent.isSpider); // false
}

Usage :: C#

Install the NuGet package

Install-Package UAParser

Sample Usage:

usingSystem;namespaceUAParser.ConsoleApp{classProgram{staticvoidMain(string[]args){StringuaString="Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-us) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5";ParseruaParser=Parser.GetDefault();ClientInfoc=uaParser.Parse(uaString);Console.WriteLine(c.UserAgent);//Safari 5.0.2Console.WriteLine(c.OS);// Mac OS X 10.6.5Console.WriteLine(c.Device);//Console.ReadLine();}}}

Usage :: Perl

use HTTP::UA::Parser;
my$r = HTTP::UA::Parser->new();
print$r->ua->toString(); # -> "Safari 5.0.1"print$r->ua->toVersionString(); # -> "5.0.1"print$r->ua->family; # -> "Safari"print$r->ua->major; # -> "5"print$r->ua->minor; # -> "0"print$r->ua->patch; # -> "1"print$r->os->toString(); # -> "iOS 5.1"print$r->os->toVersionString(); # -> "5.1"print$r->os->family # -> "iOS"print$r->os->major; # -> "5"print$r->os->minor; # -> "1"print$r->os->patch; # -> undefprint$r->device->family; # -> "iPhone"
More information is available in the README in the perl directory

Usage :: Haskell

{-Install via Hackage and cabal like so:cabal updatecabal install ua-parserNow you're good to go.-}
{-# LANGUAGE OverloadedStrings #-}
moduleMainwhereimportWeb.UAParser-- A test string
test_string ="Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3"-- Main entry point for Haskell
main =do
ua <- loadUAParser
let uaResult = parseUA ua test_string
print uaResult
let osResult = parseOS ua test_string
print osResult
-- Result from user agent parseJust (UAResult {uarFamily ="Mobile Safari", uarV1 =Just"5", uarV2 =Just"1", uarV3 =Nothing})
-- Result from operating system parseJust (OSResult {osrFamily ="iOS", osrV1 =Just"5", osrV2 =Just"1", osrV3 =Nothing, osrV4 =Nothing})

Please refer to Haddocks for more info; the API is pretty straightforward.

Usage :: Go

Install the package:

go get "github.com/tobie/ua-parser/go/uaparser"

Sample Usage

package main
import (
"github.com/tobie/ua-parser/go/uaparser"
"fmt"
)
func main() {
testStr := "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"
regexFile := "../../regexes.yaml"
parser := uaparser.New(regexFile)
client := parser.Parse(testStr)
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"
}

More information is available in the README in the Go directory

License

The data contained in regexes.yaml is Copyright 2009 Google Inc. and available under the Apache License, Version 2.0.

The original python code is Copyright 2008 Google Inc. and is available under the Apache License, Version 2.0.

The JS port is Copyright 2010 Tobie Langel and is available under your choice of MIT or Apache Version 2.0 license.

The PHP port is Copyright (c) 2011-2012 Dave Olsen and is available under the MIT license.

The Java port is Copyright (c) 2012 Twitter, Inc and is available under the Apache License, Version 2.0.

The D port is Copyright (c) 2012 Shripad K and is available under the MIT license.

The C# port is Copyright (c) 2012 Søren Enemærke and is available under the Apache License, Version 2.0.

The Perl port is Copyright (c) 2012 Mamod Mehyar and is available under the Perl License, Version 5.10.1.

The Pig port is Copyright (c) 2013 Niels Basjes and is available under the Apache License, Version 2.0.

The Go port is Copyright (c) 2013 Yihuan Zhou and is available under the MIT License.

About

A multi-language port of Browserscope's user agent parser.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - cloudvox/ua-parser: A multi-language port of Browserscope's user agent parser. · GitHub
Skip to content
This repository was archived by the owner on Jan 23, 2021. It is now read-only.

Repository files navigation

ua-parser Build Status

ua-parser is a multi-language port of BrowserScope's user agent string parser.

The crux of the original parser--the data collected by Steve Souders over the years--has been extracted into a separate YAML file so as to be reusable as is by implementations in other programming languages.

ua-parser is just a small wrapper around this data.

Maintainers

irc channel

#ua-parser on freenode.

Contributing Changes to regexes.yaml

Please read the contributors' guide

Other ua-parser Libraries

There are a few other libraries which make use of ua-parser's patterns. These include:

Usage :: node.js

varr=require('ua-parser').parse(navigator.userAgent);console.log(r.ua.toString());// -> "Safari 5.0.1"console.log(r.ua.toVersionString());// -> "5.0.1"console.log(r.ua.family)// -> "Safari"console.log(r.ua.major);// -> "5"console.log(r.ua.minor);// -> "0"console.log(r.ua.patch);// -> "1"console.log(r.os.toString());// -> "iOS 5.1"console.log(r.os.toVersionString());// -> "5.1"console.log(r.os.family)// -> "iOS"console.log(r.os.major);// -> "5"console.log(r.os.minor);// -> "1"console.log(r.os.patch);// -> nullconsole.log(r.device.family);// -> "iPhone"

Note if you're only interested in one of the ua, device or os objects, you will getter better performance by using the more specific methods (uaParser.parseUA, uaParser.parseOS and uaParser.parseDevice respectively), e.g.:

varp=require('ua-parser');console.log(p.parseUA(navigator.userAgent).toString());// -> "Safari 5.0.1"console.log(p.parseOS(navigator.userAgent).toString());// -> "iOS 5.1"console.log(p.parseDevice(navigator.userAgent).toString());// -> "iPhone"

Usage :: python

You can install ua-parser by running:

pipinstallpyyamlua-parser

And here's how to use it:

fromua_parserimportuser_agent_parser# On the server, you could use a WebOB request object.user_agent_string=request.META.get('HTTP_USER_AGENT')
# For demonstration purposes, though an iPhone ...user_agent_string='Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3'# Get back a big dictionary of all the goodies.result_dict=user_agent_parser.Parse(user_agent_string)
printresult_dict['user_agent']
# {'major': '5', 'minor': '1', 'family': 'Mobile Safari', 'patch': None}printresult_dict['os']
# {'major': '5', 'patch_minor': None, 'minor': '1', 'family': 'iOS', 'patch': None}printresult_dict['device']
# {'family': 'iPhone'}

Usage :: java

importua_parser.Parser;
importua_parser.Client;
...
StringuaString = "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3";
ParseruaParser = newParser();
Clientc = uaParser.parse(uaString);
System.out.println(c.userAgent.family); // => "Mobile Safari"System.out.println(c.userAgent.major); // => "5"System.out.println(c.userAgent.minor); // => "1"System.out.println(c.os.family); // => "iOS"System.out.println(c.os.major); // => "5"System.out.println(c.os.minor); // => "1"System.out.println(c.device.family); // => "iPhone"

Usage :: Pig

For Pig there are UDFs for getting a single value and UDFs for getting a tuple with all values for either Device, Os of UserAgent. For most usecases the tuple UDFs will be the most useful.

REGISTERua-parser-pig-0.1-SNAPSHOT-job.jarDEFINEDeviceua_parser.pig.Device;
DEFINEOsua_parser.pig.Os;
DEFINEUserAgentua_parser.pig.UserAgent;
UserAgents =
Load'useragents.txt'AS (useragent:chararray);
AgentSpecs =
FOREACHUserAgentsGENERATEDevice(useragent) ASDevice,
Os(useragent) ASOs,
UserAgent(useragent) ASUserAgent,
useragentASUseragent;
DESCRIBEAgentSpecs;
DUMPAgentSpecs;

The versions that return only a single value:

REGISTERua-parser-pig-0.1-SNAPSHOT-job.jarDEFINEDeviceFamilyua_parser.pig.device.Family;
DEFINEOsFamilyua_parser.pig.os.Family;
DEFINEOsMajorua_parser.pig.os.Major;
DEFINEOsMinorua_parser.pig.os.Minor;
DEFINEOsPatchua_parser.pig.os.Patch;
DEFINEOsPatchMinorua_parser.pig.os.PatchMinor;
DEFINEUseragentFamilyua_parser.pig.useragent.Family;
DEFINEUseragentMajorua_parser.pig.useragent.Major;
DEFINEUseragentMinorua_parser.pig.useragent.Minor;
DEFINEUseragentPatchua_parser.pig.useragent.Patch;
UserAgents =
Load'useragents.txt'AS (useragent:chararray);
AgentSpecs =
FOREACHUserAgentsGENERATEDeviceFamily(useragent) ASDeviceFamily:chararray,
OsFamily(useragent) ASOsFamily:chararray,
OsMajor(useragent) ASOsMajor:chararray,
OsMinor(useragent) ASOsMinor:chararray,
OsPatch(useragent) ASOsPatch:chararray,
OsPatchMinor(useragent) ASOsPatchMinor:chararray,
UseragentFamily(useragent) ASUseragentFamily:chararray,
UseragentMajor(useragent) ASUseragentMajor:chararray,
UseragentMinor(useragent) ASUseragentMinor:chararray,
UseragentPatch(useragent) ASUseragentPatch:chararray,
useragentASUseragent;
DUMPAgentSpecs;

Usage :: php

require_once'vendor/autoload.php';
useUAParser\Parser;
$ua = "Mozilla/5.0 (Macintosh; Intel Ma...";
$parser = Parser::create();
$result = $parser->parse($ua);
print$result->ua->family; // Safariprint$result->ua->major; // 6print$result->ua->minor; // 0print$result->ua->patch; // 2print$result->ua->toString(); // Safari 6.0.2print$result->ua->toVersion(); // 6.0.2print$result->os->family; // Mac OS Xprint$result->os->major; // 10print$result->os->minor; // 7print$result->os->patch; // 5print$result->os->patchMinor; // [null]print$result->os->toString(); // Mac OS X 10.7.5print$result->os->toVersion(); // 10.7.5print$result->device->family; // Otherprint$result->toString(); // Safari 6.0.2/Mac OS X 10.7.5print$result->uaOriginal; // Mozilla/5.0 (Macintosh; Intel Ma...

More information is available in the README in the PHP directory

Usage :: D

import UaParser;
importstd.stdio;
voidmain() {
auto agent = UaParser.parse("Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3");
std.stdio.writeln(agent.browser.family); // Mobile Safaristd.stdio.writeln(agent.browser.major); // 5std.stdio.writeln(agent.browser.minor); // 1std.stdio.writeln(agent.browser.patch); // 0std.stdio.writeln(agent.browser.toString); // Mobile Safari 5.1.0std.stdio.writeln(agent.browser.toVersionString); // 5.1.0std.stdio.writeln(agent.os.family); // iOSstd.stdio.writeln(agent.os.major); // 5std.stdio.writeln(agent.os.minor); // 1std.stdio.writeln(agent.os.patch); // 1std.stdio.writeln(agent.os.toString); // iOS 5.1.1std.stdio.writeln(agent.os.toVersionString); // 5.1.1std.stdio.writeln(agent.toFullString); // Mobile Safari 5.1.0/iOS 5.1.1std.stdio.writeln(agent.device.family); // iPhonestd.stdio.writeln(agent.isMobile); // truestd.stdio.writeln(agent.isSpider); // false
}

Usage :: C#

Install the NuGet package

Install-Package UAParser

Sample Usage:

usingSystem;namespaceUAParser.ConsoleApp{classProgram{staticvoidMain(string[]args){StringuaString="Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-us) AppleWebKit/533.18.1 (KHTML, like Gecko) Version/5.0.2 Safari/533.18.5";ParseruaParser=Parser.GetDefault();ClientInfoc=uaParser.Parse(uaString);Console.WriteLine(c.UserAgent);//Safari 5.0.2Console.WriteLine(c.OS);// Mac OS X 10.6.5Console.WriteLine(c.Device);//Console.ReadLine();}}}

Usage :: Perl

use HTTP::UA::Parser;
my$r = HTTP::UA::Parser->new();
print$r->ua->toString(); # -> "Safari 5.0.1"print$r->ua->toVersionString(); # -> "5.0.1"print$r->ua->family; # -> "Safari"print$r->ua->major; # -> "5"print$r->ua->minor; # -> "0"print$r->ua->patch; # -> "1"print$r->os->toString(); # -> "iOS 5.1"print$r->os->toVersionString(); # -> "5.1"print$r->os->family # -> "iOS"print$r->os->major; # -> "5"print$r->os->minor; # -> "1"print$r->os->patch; # -> undefprint$r->device->family; # -> "iPhone"
More information is available in the README in the perl directory

Usage :: Haskell

{-Install via Hackage and cabal like so:cabal updatecabal install ua-parserNow you're good to go.-}
{-# LANGUAGE OverloadedStrings #-}
moduleMainwhereimportWeb.UAParser-- A test string
test_string ="Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3"-- Main entry point for Haskell
main =do
ua <- loadUAParser
let uaResult = parseUA ua test_string
print uaResult
let osResult = parseOS ua test_string
print osResult
-- Result from user agent parseJust (UAResult {uarFamily ="Mobile Safari", uarV1 =Just"5", uarV2 =Just"1", uarV3 =Nothing})
-- Result from operating system parseJust (OSResult {osrFamily ="iOS", osrV1 =Just"5", osrV2 =Just"1", osrV3 =Nothing, osrV4 =Nothing})

Please refer to Haddocks for more info; the API is pretty straightforward.

Usage :: Go

Install the package:

go get "github.com/tobie/ua-parser/go/uaparser"

Sample Usage

package main
import (
"github.com/tobie/ua-parser/go/uaparser"
"fmt"
)
func main() {
testStr := "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"
regexFile := "../../regexes.yaml"
parser := uaparser.New(regexFile)
client := parser.Parse(testStr)
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"
}

More information is available in the README in the Go directory

License

The data contained in regexes.yaml is Copyright 2009 Google Inc. and available under the Apache License, Version 2.0.

The original python code is Copyright 2008 Google Inc. and is available under the Apache License, Version 2.0.

The JS port is Copyright 2010 Tobie Langel and is available under your choice of MIT or Apache Version 2.0 license.

The PHP port is Copyright (c) 2011-2012 Dave Olsen and is available under the MIT license.

The Java port is Copyright (c) 2012 Twitter, Inc and is available under the Apache License, Version 2.0.

The D port is Copyright (c) 2012 Shripad K and is available under the MIT license.

The C# port is Copyright (c) 2012 Søren Enemærke and is available under the Apache License, Version 2.0.

The Perl port is Copyright (c) 2012 Mamod Mehyar and is available under the Perl License, Version 5.10.1.

The Pig port is Copyright (c) 2013 Niels Basjes and is available under the Apache License, Version 2.0.

The Go port is Copyright (c) 2013 Yihuan Zhou and is available under the MIT License.

About

A multi-language port of Browserscope's user agent parser.

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages