Giter Site home page Giter Site logo

ua-device's Introduction

ua-device Build Status download version

一个用于解析UA来得到用户终端信息的JS库,详情可见线上demo

下载

npm install ua-device

Why ua-device ?

由于在国内生产PC的厂家有限,大众用户使用的浏览器也主要是当前的一些主流浏览器。因此目前的UA解析库在对OS、浏览器外壳、浏览器内核等的识别率都相当高。但是由于国内的移动设备的五花八门,对于移动设备的硬件信息是很难用一套通用的方法进行识别,因此 ua-device 诞生

  1. 通过机型识别品牌: 例如 [-\s](Galaxy[\s-_]nexus|Galaxy[\s-_]\w*[\s-_]\w*|Galaxy[\s-_]\w*|SM-\w*|GT-\w*|s[cgp]h-\w*|shw-\w* 这样的匹配规则以及一些从中关村在线爬取到的机型名称如G3508G3508JG3508i 等识别出来该机型的品牌为Samsung 因为单纯从UA信息确实无法得到品牌数据,这也是为何很多高Star的UA解析库识别手机品牌成功率只有30%-40%的原因(ua-device识别率可见下面测试用例)。
  2. 解决国内UA信息不规范: 由于国内很多手机生产厂家的设计问题,例如小米可供识别的UA数据可能为 mi 2mi2m2mi-2LTEMI-20150XXminote等等,如果匹配规则限制太紧就会导致数据无法命中,如果匹配规则太松又会让其它山寨机型滥竽充数,所以需要一套比较特殊的处理流程。
  3. 解决国内因不同发版而造成的UA数据不一致: 例如很多机型会因同电信、移动、联通而UA信息不同,但实际应该把他们算成同一款手机
  4. 解决机型的重命名与合并: 很多手机在不同时间生产其UA信息可能不同,所以需要对他们进行合并,防止在展示top数据时因数据分散而排不上号。

目录结构

ua-device/
├── LICENSE
├── README.md
├── index.js
├── lib
│   ├── ua-device.js
│   └── useragent-base.js
├── package.json
└── test
    ├── index.js
    ├── test_input
    └── treemap.js

测试

npm test

# you can get the test result like this:
#  ua-device测试数据共3292条
#   ✓ browser_name识别成功共 3234 条,成功率为 98.24%
#   ✓ browser_version识别成功共 2575 条,成功率为 78.22%
#   ✓ engine_name识别成功共 3282 条,成功率为 99.70%
#   ✓ engine_version识别成功共 3279 条,成功率为 99.61%
#   ✓ os_name识别成功共 3291 条,成功率为 99.97%
#   ✓ os_version识别成功共 3289 条,成功率为 99.91%
#   ✓ device_manufacturer识别成功共 2887 条,成功率为 87.70%
#   ✓ device_model识别成功共 3283 条,成功率为 99.73%

有兴趣的同学可以将ua-device与其它高star库进行对比,相信对比后无论在识别成功率还是识别内容的准确性上,你都会选择ua-device

调用方式

var UA = require('ua-device');
var input = 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3';

var output = new UA(input);
console.log(output);

// you can get a json like this:
// {
//     browser: {  //浏览器信息
//         name: 'Chrome',
//         version: {
//             original: '19.0.1084.60',
//         }
//     },
//     engine: {   //浏览器内核
//         name: 'Webkit',
//         version: {
//             original: '534.46.0',
//         }
//     },
//     os: {       //操作系统
//         name: 'iOS',
//         version: {
//             original: '5.1.1',
//         }
//     },
//     device: {   //硬件信息
//         type: 'mobile',
//         manufacturer: 'Apple',
//         model: 'IPHONE'
//     }
// }

ua-device's People

Contributors

airyland avatar kevindu1993 avatar zhangjunah avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ua-device's Issues

Meizu(魅族)系列机型识别度较差

提供UA如下

Pro 6 Plus

Mozilla/5.0 (Linux; Android 6.0.1; PRO 6 Plus Build/MMB29T; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043305 Safari/537.36 MicroMessenger/6.5.7.1041 NetType/4G Language/zh_CN

M5

Mozilla/5.0 (Linux; Android 5.1; M5 Build/LMY47D; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043408 Safari/537.36 MicroMessenger/6.5.8.1060 NetType/WIFI Language/zh_CN

M5 Note

Mozilla/5.0 (Linux; Android 6.0; M5 Note Build/MRA58K; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043305 Safari/537.36 MicroMessenger/6.5.10.1080 NetType/4G Language/zh_CN

M3X

Mozilla/5.0 (Linux; Android 6.0.1; M3X Build/MMB29U; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043305 Safari/537.36 MicroMessenger/6.5.8.1060 NetType/4G Language/zh_CN

部分安卓手机无法有效区分

魅蓝note被识别成小米m1

原因:魅族魅蓝note UA :Mozilla/5.0 (Linux; U; Android 5.1; zh-cn;m1 note Build/LMY47D) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/8.8 TBS/88888888 Mobile Safari/533.1 MicroMessenger/6.3.15.49_r8aff805.760 NetType/WIFI Language/zh_CN(本机UA)

应该是匹配到了m1 被识别成了小米m1

baiduboxapp 继续问

ua解析出来很多的baiduboxapp,看代码中写的是‘百度框’,请问百度框是什么?是百度搜索框吗?如果是的话,为什么单独列出来呢?还望解答。

iOS上Chrome浏览器识别为Safari

iOS上Chrome的UA为: Mozilla/5.0 (iPhone; CPU iPhone OS 11_4 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) CriOS/67.0.3396.87 Mobile/15F79 Safari/604.1
被识别为Safari了,我看测试用例里面也有,应该也被识别错了。代码ua-device.js的615行mobile的识别到iphone或者ipad就统一为Safari有点欠妥。

bug report: Redmi (红米) 未识别厂商信息

Input:

Mozilla/5.0 (Linux; Android 5.1.1; Redmi 3 Build/LMY47V; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043305 Safari/537.36 MicroMessenger/6.5.8.1060 NetType/WIFI Language/zh_CN

Output:

{
  "options": {
    "useFeatures": false,
    "detectCamouflage": true
  },
  "browser": {
    "stock": false,
    "hidden": false,
    "channel": "",
    "name": "QQ Browser",
    "version": {
      "original": "6.2",
      "alias": null
    }
  },
  "engine": {
    "name": "Webkit",
    "version": {
      "original": "537.36",
      "alias": null
    }
  },
  "os": {
    "name": "Android",
    "version": {
      "original": "5.1.1",
      "alias": null
    }
  },
  "device": {
    "type": "mobile",
    "identified": false,
    "model": "Redmi 3"
  },
  "camouflage": false,
  "features": []
}

报错

/Users/qitmac000475/Documents/myWorkspace/qreport_mapping/qreport_mapping/node_modules/ua-device/lib/useragent-base.js:5630
if (this.os.name !== 'iOS' && /AppleWebKit/([0-9]+.[0-9]+)/i.exec(ua)[1] !== /Safari/([0-9]+.[0-9]+)/i.exec(ua)[1]) {
^

TypeError: Cannot read property '1' of null
at Object.module.exports.Detected.detect (/Users/qitmac000475/Documents/myWorkspace/qreport_mapping/qreport_mapping/node_modules/ua-device/lib/useragent-base.js:5630:91)
at Object.module.exports.Detected.initialize (/Users/qitmac000475/Documents/myWorkspace/qreport_mapping/qreport_mapping/node_modules/ua-device/lib/useragent-base.js:2556:18)
at Object.module.exports.Detected (/Users/qitmac000475/Documents/myWorkspace/qreport_mapping/qreport_mapping/node_modules/ua-device/lib/useragent-base.js:2533:25)
at new module.exports (/Users/qitmac000475/Documents/myWorkspace/qreport_mapping/qreport_mapping/node_modules/ua-device/lib/ua-device.js:3:18)
at /Users/qitmac000475/Documents/myWorkspace/qreport_mapping/qreport_mapping/test/uatest.js:35:16
at /Users/qitmac000475/Documents/myWorkspace/qreport_mapping/qreport_mapping/node_modules/line-reader/lib/line_reader.js:277:11
at getLine (/Users/qitmac000475/Documents/myWorkspace/qreport_mapping/qreport_mapping/node_modules/line-reader/lib/line_reader.js:166:7)
at Object.nextLine (/Users/qitmac000475/Documents/myWorkspace/qreport_mapping/qreport_mapping/node_modules/line-reader/lib/line_reader.js:183:7)
at Immediate.readNext (/Users/qitmac000475/Documents/myWorkspace/qreport_mapping/qreport_mapping/node_modules/line-reader/lib/line_reader.js:269:14)
at runCallback (timers.js:570:20)

Google Browser 是什么意思?

检测结果里面,浏览器有一项是 Google Browser, 版本是 4.0。

想问一下这个 Google Browser 是怎么划分的,表示的浏览器是什么?因为这个结果和 https://github.com/hotoo/detector 的检测结果相差很大。之前用 detector 的结果是分散的很多其他各个版本的浏览器,现在都变成了 Google Browser 4.0

Coolpad手机识别错误

Dalvik/1.6.0 (Linux; U; Android 4.4.4; Coolpad Y1 Build/KTU84P)
手机品牌应为Coolpad,ua-device识别结果为Vivo

iOS版Opera浏览器无法识别

iOS版Opera的UA如下:
Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) OPiOS/11.0.1.107866 Version/7.0 Mobile/14E304 Safari/9537.53
应该是可以根据OPiOS识别的,但是该库识别不了。

是否可以识别出百度框的版本

输入:

var input = 'Mozilla/5.0 (Linux; Android 5.1; Coolpad 8722V Build/LMY47D) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/35.0.1916.138 Mobile Safari/537.36 T7/7.4 baiduboxapp/8.1 (Baidu; P1 5.1)';

输出:

{
    "options": {
        "useFeatures": false,
        "detectCamouflage": true
    },
    "browser": {
        "stock": false,
        "hidden": false,
        "channel": "Nightly",
        "name": "百度框",
        "version": {
            "original": "35.0.1916.138"
        }
    },
    "engine": {
        "name": "Webkit",
        "version": {
            "original": "537.36",
            "alias": null
        }
    },
    "os": {
        "name": "Android",
        "version": {
            "alias": "5.1",
            "original": "5.1"
        }
    },
    "device": {
        "type": "mobile",
        "identified": false,
        "model": "8722",
        "manufacturer": "Coolpad"
    },
    "camouflage": false,
    "features": []
}

是否可以输出手百8.1版本号呢

微信浏览器

华为和小米同测,用微信浏览器打开均显示为iphone

具体手机型号判断

不错的框架,不知能否加入手机分辨率识别具体品牌系列型号功能,那样就更完美了

无法识别猎豹浏览器

Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.154 Safari/537.36 LBBROWSER
识别为
{u'browser': {u'channel': u'Nightly',
u'hidden': False,
u'name': u'Chrome',
u'stock': False,
u'version': {u'alias': None, u'original': u'42.0.2311.154'}},
u'camouflage': False,
u'device': {u'identified': False, u'type': u'desktop'},
u'engine': {u'name': u'Webkit',
u'version': {u'alias': None, u'original': u'537.36'}},
u'features': [],
u'options': {u'detectCamouflage': True, u'useFeatures': False},
u'os': {u'name': u'Windows',
u'version': {u'alias': u'8', u'original': u'6.2'}}}

锤子手机

我看在锤子手机的判别里只有SM705|SM701|YQ601|YQ603这四个型号,是不是不太够?

解析结果貌似有误

从nginx日志随机挑了一条解析,结果是微信4.0(这里微信版本也应该是6.3.15.49),如果内核是QQ浏览器,那么浏览器信息应该是QQ浏览器5.4,后面的device.model=M3-5这个解析结果也比较奇怪?

Mozilla/5.0 (Linux; U; Android 5.0.1; zh-cn; M355 Build/LRX22C) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.4 TBS/025489 Mobile Safari/533.1 MicroMessenger/6.3.15.49_r8aff805.760 NetType/WIFI Language/zh_CN

{ options: { useFeatures: false, detectCamouflage: true },
  browser:
   { stock: true,
     hidden: true,
     channel: '',
     name: '微信',
     version: { original: '4.0' } },
  engine: { name: 'Webkit', version: { original: '533.1', alias: null } },
  os:
   { name: 'Android',
     version: { alias: '5.0.1', original: '5.0.1' } },
  device: { type: 'mobile', identified: false, model: 'M3-5' },
  camouflage: false,
  features: [] }

image

add typescript typings?

When use in a typescript project, this lib:

  1. missing typescript typing file.
  2. cannot find @types/ua-device package.

Please help add some d.ts file info into the lib.

无法识别新版本 Opera

我本机的 UA:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36 OPR/36.0.2130.32

OPR/36.0.3130.32 可以用的吧。

ua-device

ua-device里面的if else也太吓人了吧

魅蓝note2在微信中机型识别错误

自带浏览器,识别准确

Mozilla/5.0 (Linux; Android 5.1; MZ-m2 note Build/LMY47D) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/45.0.2454.94 Mobile Safari/537.36

在微信中,识别成小米

Mozilla/5.0 (Linux; U; Android 5.1; zh-cn; m2 note Build/LMY47D) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.4 TBS/025489 Mobile Safari/533.1 MicroMessenger/6.3.15.49_r8aff805.760 NetType/WIFI Language/zh_CN

echo?

js 里面可以用 echo??

展示返回字段和字段解释

能不能有个完整的文档,展示下返回的字段,以及对部分字段的解释,比如browser的stock,hidden,channel。
这样使用者比较方便。免得还要去查看代码。

报错

当引用es6语法时 报错 match 没定义过 在useragent-base.js 里 2741行加 var match;就好了

手机QQ的识别的问题

看到这样一个UA:

Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Mobile/14F89 QQ/7.1.1.440 V1_IPH_SQ_7.1.1_1_APP_A Pixel/750 Core/UIWebView NetType/WIFI QBWebViewType/1

识别成Safari了

华为荣耀8x设备制造商无法识别

华为荣耀8x设备制造商无法识别;UA如下:

Mozilla/5.0 (Linux; U; Android 8.1.0zh-cn; JSN-AL00a Build/HONORJSN-AL00a) AppleWebKit/537.36 (KHTML, like Gecko)Version/4.0 Chrome/57.0.2987.132 MQQBrowser/8.1 Mobile Safari/537.36

报错

刚刚测试

Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3

浏览器应该是 chrome 而不是 safari

iOS 手机 QQ 的 ua 貌似识别失败

类似这样的 ua:

Mozilla/5.0 (iPhone 6sp; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 MQQBrowser/7.3 Mobile/14E304 Safari/8536.25 MttCustomUA/2 QBWebViewType/1

Mozilla/5.0 (iPhone 6sp; CPU iPhone OS 9_3_5 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 MQQBrowser/7.4 Mobile/13G36 Safari/8536.25 MttCustomUA/2 QBWebViewType/1 WKType/1

被识别成 Mac OS 了, 但感觉应该是 iPhone。

无法匹配红米部分机型的 device.model

Mozilla/5.0 (Linux; Android 6.0.1; Redmi Note 4X Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043305 Safari/537.36 MicroMessenger/6.5.8.1060 NetType/WIFI Language/zh_CN

部分安卓机微信下会识别为QQ浏览器

都用的是6.3.15版本的微信,UA如下

Result for: Mozilla/5.0 (Linux; U; Android 5.1.1; zh-cn; SM-N920T Build/LMY47X) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.4 TBS/025489 Mobile Safari/533.1 MicroMessenger/6.3.15.49_r8aff805.760 NetType/WIFI Language/zh_CN(本机UA)
Result for: Mozilla/5.0 (Linux; U; Android 4.4.4; zh-cn; OPPO R7s Build/KTU84P) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.4 TBS/025489 Mobile Safari/533.1 MicroMessenger/6.3.15.49_r8aff805.760 NetType/WIFI Language/zh_CN(本机UA)

另一台华为的也认为是QQ浏览器,iPhone6S下倒是能认出是微信浏览器。
能否统一微信在两种平台上的浏览器判断?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.