thadafinser/user-agent-parser

正确解析 UserAgent http://useragent.mkf.solutions/

v2.0.0 2017-02-16 13:22 UTC

README

Build Status Code Coverage Scrutinizer Code Quality

Latest Stable Version Latest Unstable Version License Total Downloads

用户代理 解析一直是一件痛苦的事情。

本包的目标是让这个过程不那么痛苦,通过为许多用户代理解析器提供抽象层来实现。

目前有 11 个本地提供者6 个 HTTP 提供者 可用! 在这里查看比较列表

因此您可以使用以下方法:

  • 使用 Chain 提供者同时使用多个提供者
  • 同时使用本地和/或 HTTP API 提供者
  • 在不同的解析器之间切换,而无需更改您的代码
  • 比较不同解析器的结果
  • 无论您当前使用哪个解析器,都能始终得到相同的结果模型

本包的质量目前由以下覆盖:

  • 单元测试(373 个测试,746 个断言)
  • 集成测试(86 个测试,310 个断言)
  • 常规真实结果测试(超过 33,000 个用户代理的结果在这里比较这里

试试看

实时测试

比较解析器的检测结果

安装

目前,使用 composer 是安装此包的唯一支持方式。

composer require thadafinser/user-agent-parser

注意: 要使用本地提供者,您需要安装额外的包,这些包列在 composer 的 suggests 部分

入门

您需要注册一个 API 密钥或安装一个额外的包(在 composer.jsonsuggest 部分),

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 提供者

本地提供者

本地提供者(大多数情况下)比 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();