思路:先分析各种手机品牌的请求头中user_agent的特点,总结出规律。然后用正则匹配来进行分类,并进行统计。最后在页面中实现可视化显示。
一.各种终端UA格式(以安卓系统为例)
Tablet
1 | Mozilla/5.0 (Linux; Android android-version; product-model Build/product-build) AppleWebKit/webkit-version (KHTML, like Gecko) Silk/browser-version like Chrome/chrome-version Safari/webkit-version |
Desktop
1 | Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/webkit-version (KHTML, like Gecko) Silk/browser-version like Chrome/chrome-version Safari/webkit-version |
Mobile
1 | Mozilla/5.0 (Linux; Android android-version; product-model Build/product-build) AppleWebKit/webkit-version (KHTML, like Gecko) Silk/browser-version like Chrome/chrome-version Mobile Safari/webkit-version |
Note
1 | Red and italics indicates variable fields, which are described below. |
二. 品牌-brand
search key_word: user-agent detect type of platform device;
List of user agents for mobile phones
按照使用量降序
- 手机phone
1.1 国外品牌
iphone
blackberry
nokia lumia
samsung
Sony
Nokia
Kindle Fire HD(KFTT)
1.2 国内品牌
华为,huawei和honor两个品牌,PLK-AL10是荣耀7
小米,MI
2. 平板tablet
3. 笔记本desktop
三. 思考问题
- db中user_agent为空的,怎么得出来machine_brand?
- 手机类型应该是从数据库中取出,而非实时分析统计的。
- 只要手机品牌信息,不要型号等后缀。
- user_agent 是否完整?
- 优化还是改型
- 数据怎么打到前台。
数据库操作:resources-com.xxx-portal.dao-*.xml
1 | String userAgent = request.getHeader("User-Agent"); |
1 | //以build匹配方式,虽然可以得到build前面的型号,但不知道手机品牌,需要分类。 |
Build下一级再分一下,还是直接匹配。
不是所有的UA都有build。
1 | Pattern p = Pattern.compile("a*b"); //将给定的正则表达式编译到模式中。 |
pattern取出(…xxx)的字符串?
用字符串匹配方法String.comtains(),
正则怎么表示出来。数组?
序列化所有的正则,对应到机型。?
循环正则(用数组对象来表达),匹配到即跳出
java正则特殊之处:
- 转义字符时需要两个
//
- 不区分大小写在前面加上
(?i)
,而js
是后面加/i
四. 验证
写一个单页面?访问数据库
- 先用单个数据做实验,先看能不能匹配到,再去想怎么做模型
- 建立分类模型
初级的正则已经完成编辑,需要 在分类,用更合理的方法,运算太复杂,循环次数影响性能。 - 拷贝到本地数据库,jdbc?查到数据
jdbc取数据(20160725),取出之后经过分析,再在数据库建一个字段,储存分析结果 - 分析结果展示,统计类型数
1 | SELECT * FROM portal_logrecord WHERE MACHINE_BRAND LIKE "%asus%";//模糊查询 |
不要忽略手机的更新速度,注意最新机型。
尽量用小写,减少运算。
五. 最终匹配代码
1 | //java版本,js版本见-七[资源参考] |
六. 总结
- 以上正则能够匹配常见机型,得出品牌类型;不足之处是有几个重复识别了。
- 对正则有了更深入的了解,强大的工具
- java程序组成结构需要更深入的学习
七. Reference资源参考
常见User-Agent站点
UADetector:http://uadetector.sourceforge.net/
相关js库
- 本文作者: Linking
- 本文链接: https://linking.fun/2016/07/28/常见手机品牌正则匹配/
- 版权声明: 版权所有,转载请注明出处!