performancehorizongroup / ua-parser
Browserscope的用户代理解析器的多语言版本。
Requires
- symfony/console: ~2
- symfony/filesystem: ~2
- symfony/finder: ~2
- symfony/yaml: ~2
Requires (Dev)
- phpunit/phpunit: ~3
This package is not auto-updated.
Last update: 2024-09-10 06:54:52 UTC
README
ua-parser
是 Browserscope 的 BrowserScope 用户代理字符串解析器的多语言版本 user agent string parser。
原始解析器的核心——由 Steve Souders 多年来收集的数据——已被提取到单独的 YAML 文件 中,以便其他编程语言的实现可以“即用”地重用它。
ua-parser
只是这个数据的一个小封装。
维护者
- C#: Søren Enemærke (@sorenenemaerke)
- D: Shripad K (@24shri)
- Go: Yihuan Zhou (@yihuanz)
- Haskell: Ozgun Ataman (@ozataman)
- Java: Steve Jiang (@sjiang)
- JavaScript: Tobie Langel (@tobie)
- Perl: Mamod Mehyar (@mamod)
- PHP: Lars Strojny (@lstrojny)
- Pig: Niels Basjes (@nielsbasjes)
- Python: Lindsey Simon (@elsigh)
regexes.yaml
: Lindsey Simon & Tobie Langel
irc频道
#ua-parser 在 freenode。
向 regexes.yaml 贡献更改
请阅读 贡献者指南
其他 ua-parser 库
还有一些其他库使用了 ua-parser 的模式。包括
- Ruby - user_agent_parser
使用 :: node.js
var r = 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); // -> null console.log(r.device.family); // -> "iPhone"
注意:如果你只对 ua
、device
或 os
中的一个对象感兴趣,使用更具体的方法(分别对应 uaParser.parseUA
、uaParser.parseOS
和 uaParser.parseDevice
)将获得更好的性能,例如
var p = 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"
使用 :: python
你可以通过运行以下命令安装 ua-parser
pip install pyyaml ua-parser
以下是使用方法
from ua_parser import user_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) print result_dict['user_agent'] # {'major': '5', 'minor': '1', 'family': 'Mobile Safari', 'patch': None} print result_dict['os'] # {'major': '5', 'patch_minor': None, 'minor': '1', 'family': 'iOS', 'patch': None} print result_dict['device'] # {'family': 'iPhone'}
使用 :: java
import ua_parser.Parser; import ua_parser.Client; ... String uaString = "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"; Parser uaParser = new Parser(); Client c = 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"
使用 :: Pig
对于 Pig,有用于获取单个值的 UDF 和用于获取 Device、Os 或 UserAgent 所有值的元组 UDF。对于大多数用例,元组 UDF 将最有用。
REGISTER ua-parser-pig-0.1-SNAPSHOT-job.jar DEFINE Device ua_parser.pig.Device; DEFINE Os ua_parser.pig.Os; DEFINE UserAgent ua_parser.pig.UserAgent; UserAgents = Load 'useragents.txt' AS (useragent:chararray); AgentSpecs = FOREACH UserAgents GENERATE Device(useragent) AS Device, Os(useragent) AS Os, UserAgent(useragent) AS UserAgent, useragent AS Useragent; DESCRIBE AgentSpecs; DUMP AgentSpecs;
仅返回单个值的版本
REGISTER ua-parser-pig-0.1-SNAPSHOT-job.jar DEFINE DeviceFamily ua_parser.pig.device.Family; DEFINE OsFamily ua_parser.pig.os.Family; DEFINE OsMajor ua_parser.pig.os.Major; DEFINE OsMinor ua_parser.pig.os.Minor; DEFINE OsPatch ua_parser.pig.os.Patch; DEFINE OsPatchMinor ua_parser.pig.os.PatchMinor; DEFINE UseragentFamily ua_parser.pig.useragent.Family; DEFINE UseragentMajor ua_parser.pig.useragent.Major; DEFINE UseragentMinor ua_parser.pig.useragent.Minor; DEFINE UseragentPatch ua_parser.pig.useragent.Patch; UserAgents = Load 'useragents.txt' AS (useragent:chararray); AgentSpecs = FOREACH UserAgents GENERATE DeviceFamily(useragent) AS DeviceFamily:chararray, OsFamily(useragent) AS OsFamily:chararray, OsMajor(useragent) AS OsMajor:chararray, OsMinor(useragent) AS OsMinor:chararray, OsPatch(useragent) AS OsPatch:chararray, OsPatchMinor(useragent) AS OsPatchMinor:chararray, UseragentFamily(useragent) AS UseragentFamily:chararray, UseragentMajor(useragent) AS UseragentMajor:chararray, UseragentMinor(useragent) AS UseragentMinor:chararray, UseragentPatch(useragent) AS UseragentPatch:chararray, useragent AS Useragent; DUMP AgentSpecs;
使用 :: php
require_once 'vendor/autoload.php'; use UAParser\Parser; $ua = "Mozilla/5.0 (Macintosh; Intel Ma..."; $parser = Parser::create(); $result = $parser->parse($ua); print $result->ua->family; // Safari print $result->ua->major; // 6 print $result->ua->minor; // 0 print $result->ua->patch; // 2 print $result->ua->toString(); // Safari 6.0.2 print $result->ua->toVersion(); // 6.0.2 print $result->os->family; // Mac OS X print $result->os->major; // 10 print $result->os->minor; // 7 print $result->os->patch; // 5 print $result->os->patchMinor; // [null] print $result->os->toString(); // Mac OS X 10.7.5 print $result->os->toVersion(); // 10.7.5 print $result->device->family; // Other print $result->toString(); // Safari 6.0.2/Mac OS X 10.7.5 print $result->uaOriginal; // Mozilla/5.0 (Macintosh; Intel Ma...
更多信息请参阅PHP目录下的README。
用法 :: D
import UaParser; import std.stdio; void main() { 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 Safari std.stdio.writeln(agent.browser.major); // 5 std.stdio.writeln(agent.browser.minor); // 1 std.stdio.writeln(agent.browser.patch); // 0 std.stdio.writeln(agent.browser.toString); // Mobile Safari 5.1.0 std.stdio.writeln(agent.browser.toVersionString); // 5.1.0 std.stdio.writeln(agent.os.family); // iOS std.stdio.writeln(agent.os.major); // 5 std.stdio.writeln(agent.os.minor); // 1 std.stdio.writeln(agent.os.patch); // 1 std.stdio.writeln(agent.os.toString); // iOS 5.1.1 std.stdio.writeln(agent.os.toVersionString); // 5.1.1 std.stdio.writeln(agent.toFullString); // Mobile Safari 5.1.0/iOS 5.1.1 std.stdio.writeln(agent.device.family); // iPhone std.stdio.writeln(agent.isMobile); // true std.stdio.writeln(agent.isSpider); // false }
用法 :: C#
安装NuGet包
Install-Package UAParser
示例用法
using System; namespace UAParser.ConsoleApp { class Program { static void Main(string[] args) { String uaString = "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"; Parser uaParser = Parser.GetDefault(); ClientInfo c = uaParser.Parse(uaString); Console.WriteLine(c.UserAgent); //Safari 5.0.2 Console.WriteLine(c.OS); // Mac OS X 10.6.5 Console.WriteLine(c.Device); // Console.ReadLine(); } } }
用法 :: 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; # -> undef print $r->device->family; # -> "iPhone" More information is available in the README in the perl directory
用法 :: Haskell
{- Install via Hackage and cabal like so: cabal update cabal install ua-parser Now you're good to go. -} {-# LANGUAGE OverloadedStrings #-} module Main where import Web.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 parse Just (UAResult {uarFamily = "Mobile Safari", uarV1 = Just "5", uarV2 = Just "1", uarV3 = Nothing}) -- Result from operating system parse Just (OSResult {osrFamily = "iOS", osrV1 = Just "5", osrV2 = Just "1", osrV3 = Nothing, osrV4 = Nothing})
请参阅Haddocks获取更多信息;API非常直观。
用法 :: Go
安装包
go get "github.com/tobie/ua-parser/go/uaparser"
示例用法
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"
}
更多信息请参阅Go目录下的README。
许可证
regexes.yaml
中包含的数据版权为2009年Google Inc.所有,可在Apache License, Version 2.0下获得。
原始的Python代码版权为2008年Google Inc.,可在Apache License, Version 2.0下获得。
JavaScript版本由Tobie Langel于2010年版权所有,可在您选择的MIT或Apache Version 2.0许可证下获得。
PHP版本由Dave Olsen于2011-2012年版权所有,可在MIT许可证下获得。
Java版本由Twitter, Inc于2012年版权所有,可在Apache License, Version 2.0下获得。
D版本由Shripad K于2012年版权所有,可在MIT许可证下获得。
C#版本由Søren Enemærke于2012年版权所有,可在Apache License, Version 2.0下获得。
Perl版本由Mamod Mehyar于2012年版权所有,可在Perl License, Version 5.10.1下获得。
Pig版本由Niels Basjes于2013年版权所有,可在Apache License, Version 2.0下获得。
Go版本由Yihuan Zhou于2013年版权所有,可在MIT许可证下获得。