thadafinser / user-agent-parser
正确解析 UserAgent http://useragent.mkf.solutions/
Requires
- php: ~5.6|~7.0
- guzzlehttp/guzzle: ^6.1
- thadafinser/package-info: ^1.0
Requires (Dev)
- browscap/browscap-php: ^3.0
- donatj/phpuseragentparser: ^0.5.0
- endorphin-studio/browser-detector: ^3.0
- friendsofphp/php-cs-fixer: ^1.11
- handsetdetection/php-apikit: ^4.1.10
- jenssegers/agent: ^2.3
- mimmi20/wurfl: ^1.7.1.1
- mobiledetect/mobiledetectlib: ^2.7.5
- phpunit/phpunit: ^5.6.8
- piwik/device-detector: ^3.6
- sinergi/browser-detector: ^6.0
- ua-parser/uap-php: ^3.4.3
- whichbrowser/parser: ^2.0.10
- woothee/woothee: ^1.2
- zsxsoft/php-useragent: >=1.2,<1.4
Suggests
- browscap/browscap-php: Needed to use Provider\BrowscapPhp
- donatj/phpuseragentparser: Needed to use Provider\DonatjUAParser
- endorphin-studio/browser-detector: Needed to use Provider\Endorphin
- handsetdetection/php-apikit: Needed to use Provider\HandsetDetection
- jenssegers/agent: Needed to use Provider\JenssegersAgent
- mimmi20/wurfl: Needed to use Provider\Wurfl
- piwik/device-detector: Needed to use Provider\PiwikDeviceDetector
- sinergi/browser-detector: Needed to use Provider\SinergiBrowserDetector
- ua-parser/uap-php: Needed to use Provider\UAParser
- whichbrowser/parser: Needed to use Provider\WhichBrowser
- woothee/woothee: Needed to use Provider\Woothee
- zsxsoft/php-useragent: Needed to use Provider\Zsxsoft
Conflicts
- browscap/browscap-php: <3,>=4
- donatj/phpuseragentparser: <0.5,>=1
- jenssegers/agent: <2.3,>=3
- mimmi20/wurfl: <1.6.4,>=2
- mobiledetect/mobiledetectlib: <2.7.5,>=3
- piwik/device-detector: <3.6,>=4
- sinergi/browser-detector: <6,>=7
- ua-parser/uap-php: <3.4.3,>=4
- whichbrowser/parser: <2.0.10,>=3
- woothee/woothee: <1.2,>=2
- zsxsoft/php-useragent: <1.2,>=2
This package is not auto-updated.
Last update: 2024-09-17 13:37:22 UTC
README
用户代理
解析一直是一件痛苦的事情。
本包的目标是让这个过程不那么痛苦,通过为许多用户代理解析器提供抽象层来实现。
目前有 11 个本地提供者 和 6 个 HTTP 提供者 可用! 在这里查看比较列表
因此您可以使用以下方法:
- 使用
Chain
提供者同时使用多个提供者 - 同时使用本地和/或 HTTP API 提供者
- 在不同的解析器之间切换,而无需更改您的代码
- 比较不同解析器的结果
- 无论您当前使用哪个解析器,都能始终得到相同的结果模型
本包的质量目前由以下覆盖:
- 单元测试(373 个测试,746 个断言)
- 集成测试(86 个测试,310 个断言)
- 常规真实结果测试(超过 33,000 个用户代理的结果在这里比较这里)
试试看
安装
目前,使用 composer 是安装此包的唯一支持方式。
composer require thadafinser/user-agent-parser
注意:
要使用本地提供者,您需要安装额外的包,这些包列在 composer 的 suggests 部分
中
入门
您需要注册一个 API 密钥或安装一个额外的包(在 composer.json
的 suggest
部分),
use UserAgentParser\Exception\NoResultFoundException; use UserAgentParser\Provider\WhichBrowser; $provider = new WhichBrowser(); try { /* @var $result \UserAgentParser\Model\UserAgent */ $result = $provider->parse('Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36'); } catch (NoResultFoundException $ex){ // nothing found } if($result->isBot() === true) { // if one part has no result, it's always set not null $result->getBot()->getName(); $result->getBot()->getType(); } else { // if one part has no result, it's always set not null $result->getBrowser()->getName(); $result->getBrowser()->getVersion()->getComplete(); $result->getRenderingEngine()->getName(); $result->getRenderingEngine()->getVersion()->getComplete(); $result->getOperatingSystem()->getName(); $result->getOperatingSystem()->getVersion()->getComplete(); $result->getDevice()->getModel(); $result->getDevice()->getBrand(); $result->getDevice()->getType(); $result->getDevice()->getIsMobile(); $result->getDevice()->getIsTouch(); }
用例
机器人或人类
// initialisation see Getting started if($result->isBot() === true) { // do something special with the bot }
移动设备检测
// initialisation see Getting started if($result->isMobile() === true) { // redirect to the the mobile optimized page or suggest the other to download your app // NOTE mobile means not "phone". It can be any moveable device, e.g. tablet, media player, watch, ... }
提供者
UserAgentParser 随附本地和 http 提供者
在此处查看详细文档
本地提供者
本地提供者(大多数情况下)比 HTTP 提供者快,且不需要一个有效的互联网连接。但是您需要不时地自行更新它们,以确保检测到最新的 UAs。
- BrowscapFull
- BrowscapLite
- BrowscapPhp
- DonatjUAParser
- Endorphin
- HandsetDetection
- JenssegersAgent
- PiwikDeviceDetector
- SinergiBrowserDetector
- UAParser
- WhichBrowser
- Woothee
- Zsxsoft
HTTP 提供者(API)
HTTP 提供者使用简单,因为您只需要一个 API 密钥即可开始。但是它们需要(始终)一个有效的互联网连接。
- Http\DeviceAtlasCom
- Http\FiftyOneDegreesCom
- Http\NeutrinoApiCom
- Http\UdgerCom
- Http\UserAgentApiCom
- Http\WhatIsMyBrowserCom
比较矩阵
这里是一个比较矩阵,其中包含许多已分析的 UserAgent 字符串,以帮助您确定哪个提供者符合您的需求。每个提供者都有其优势和劣势,因此您应该根据您的需求选择使用哪个。
概述
单个提供者
require 'vendor/autoload.php'; use UserAgentParser\Provider; $userAgent = 'Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_5 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5'; $provider = new Provider\PiwikDeviceDetector(); /* @var $result \UserAgentParser\Model\UserAgent */ $result = $provider->parse($userAgent); // optional add all headers, to improve the result further // $result = $provider->parse($userAgent, getallheaders()); $result->getBrowser()->getName(); // Mobile Safari $result->getOperatingSystem()->getName(); // iOS $result->getDevice()->getBrand(); // iPod Touch $result->getDevice()->getBrand(); // Apple $result->getDevice()->getType(); // portable media player $resultArray = $result->toArray();
链式提供者
这对于提高结果非常有用。链式提供者从第一个提供者开始,检查是否有结果,如果没有,则获取下一个,依此类推。如果没有一个提供结果,它将像单个提供者一样抛出一个 NoResultException。
require 'vendor/autoload.php'; use UserAgentParser\Provider; $userAgent = 'Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_5 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5'; $chain = new Provider\Chain([ new Provider\PiwikDeviceDetector(), new Provider\WhichBrowser(), new Provider\UAParser(), new Provider\Woothee(), new Provider\DonatjUAParser() ]); /* @var $result \UserAgentParser\Model\UserAgent */ $result = $chain->parse($userAgent); // optional add all headers, to improve the result further (used currently only by WhichBrowser) //$result = $chain->parse($userAgent, getallheaders()); $result->getBrowser()->getName(); // Mobile Safari $result->getOperatingSystem()->getName(); // iOS $result->getDevice()->getBrand(); // iPod Touch $result->getDevice()->getBrand(); // Apple $result->getDevice()->getType(); // portable media player $resultArray = $result->toArray();