手动实现userAgent解析

手动实现userAgent解析


import java.util
import java.util.regex.Pattern

import org.slf4j.LoggerFactory

import scala.beans.BeanProperty

class UserAgentAnalyzer() extends Serializable{
  val logger4j = LoggerFactory.getLogger(this.getClass)
  @BeanProperty
  var browser: String ="-1"
  @BeanProperty
  var os: String = "-1"   //日志时间
  @BeanProperty
  var device: String="-1"
  @BeanProperty
  var engine : String = "-1"
  @BeanProperty
  var osVersion : String = "-1"
  @BeanProperty
  var deviceVersion : String = "-1"
  @BeanProperty
  var browserVersion : String = "-1"
  @BeanProperty
  var engineVersion : String = "-1"
  def init(): Unit ={
    this.browser="-1"
    this.os="-1"
    this.device="-1"
    this.engine="-1"
    this.osVersion="-1"
    this.deviceVersion="-1"
    this.browserVersion="-1"
    this.engineVersion="-1"
  }
  override def toString = s"BaseLog($browser,$os,$device,$engine,$browserVersion,$osVersion,$deviceVersion,$engineVersion)"

  def getAgentInfo(agent:String){
    getAgentDevice(agent)
    getAgentOs(agent)
    getAgentBrowser(agent)

  }
  def getAgentInfoVersion(agent:String): Unit ={
    getAgentDeviceVersion(agent)
    getAgentOsVersion(agent)
    getAgentBrowserVersion(agent)
    getAgentEngineVersion(agent)
  }
  def getMapAgentInfo(agent:String): util.HashMap[String,Any] ={
    val agentInfo = new util.HashMap[String,Any]()
    getAgentInfoVersion(agent)
    agentInfo.put("browser",this.browser)
    agentInfo.put("browserVersion",this.browserVersion)
    agentInfo.put("os",this.os)
    agentInfo.put("osVersion",this.osVersion)
    agentInfo.put("device",this.device)
    agentInfo.put("deviceVersion",this.deviceVersion)
    agentInfo.put("engine",this.engine)
    agentInfo.put("engineVersion",this.engineVersion)
    agentInfo.put("strAgent",agent)
    agentInfo
  }
  def getAgentBrowser(agent:String)=agent.toLowerCase match {
    case agentLc:String if (UserAgentAnalyzer.edge.matcher(agentLc).find())=>this.browser = "edge"
    case agentLc:String if ((agentLc.contains("sogoumobilebrowser") && UserAgentAnalyzer.sogou1.matcher(agentLc).find()) || agentLc.contains("sogoumse") || UserAgentAnalyzer.sogou2.matcher(agentLc).find())=>this.browser = "sogou"
    case agentLc:String if (UserAgentAnalyzer.theworld.matcher(agentLc).find())=>this.browser = "theworld"
    case agentLc:String if ((agentLc.contains("360 aphone browser") && UserAgentAnalyzer._360t.matcher(agentLc).find()) || UserAgentAnalyzer._360o.matcher(agentLc).find()) => this.browser = "360"
    case agentLc:String if (UserAgentAnalyzer.maxthon.matcher(agentLc).find()) => this.browser = "maxthon"
    case agentLc:String if (UserAgentAnalyzer.micromessenger.matcher(agentLc).find()) => this.browser = "micromessenger"
    case agentLc:String if (UserAgentAnalyzer.qq.matcher(agentLc).find()) => this.browser = "qq"
    case agentLc:String if (UserAgentAnalyzer.green.matcher(agentLc).find()) => this.browser = "green"
    case agentLc:String if (UserAgentAnalyzer.tt.matcher(agentLc).find()) => this.browser = "tt"
    case agentLc:String if ((agentLc.contains("liebaofast") && UserAgentAnalyzer.liebao.matcher(agentLc).find()) || agentLc.contains("lbbrowser")) => this.browser = "liebao"
    case agentLc:String if (UserAgentAnalyzer.tao.matcher(agentLc).find()) => this.browser = "tao"
    case agentLc:String if (UserAgentAnalyzer.coolnovo.matcher(agentLc).find()) => this.browser = "coolnovo"
    case agentLc:String if (UserAgentAnalyzer.saayaa.matcher(agentLc).find()) => this.browser = "saayaa"
    case agentLc:String if (UserAgentAnalyzer.baidu.matcher(agentLc).find()) => this.browser = "baidu"
    case agentLc:String if (!agentLc.contains("googlebot") && UserAgentAnalyzer.ie.matcher(agentLc).find()) => this.browser = "ie"
    case agentLc:String if (UserAgentAnalyzer.mi.matcher(agentLc).find()) => this.browser = "mi"
    case agentLc:String if (UserAgentAnalyzer.opera1.matcher(agentLc).find() || UserAgentAnalyzer.opera2.matcher(agentLc).find()) => this.browser = "opera"
    case agentLc:String if (UserAgentAnalyzer.oupeng.matcher(agentLc).find()) => this.browser = "oupeng"
    case agentLc:String if (UserAgentAnalyzer.yandex.matcher(agentLc).find()) => this.browser = "yandex"
    case agentLc:String if ((agentLc.contains("aliapp") && UserAgentAnalyzer.ali_ap1.matcher(agentLc).find()) || UserAgentAnalyzer.ali_ap2.matcher(agentLc).find()) => this.browser = "ali-ap"
    case agentLc:String if (UserAgentAnalyzer.ali_ap_pd.matcher(agentLc).find()) => this.browser = "ali-ap-pd"
    case agentLc:String if (UserAgentAnalyzer.ali_am.matcher(agentLc).find()) => this.browser = "ali-am"
    case agentLc:String if (UserAgentAnalyzer.ali_tb.matcher(agentLc).find()) => this.browser = "ali-tb"
    case agentLc:String if (UserAgentAnalyzer.ali_tb_pd.matcher(agentLc).find()) => this.browser = "ali-tb-pd"
    case agentLc:String if (UserAgentAnalyzer.ali_tm.matcher(agentLc).find()) => this.browser = "ali-tm"
    case agentLc:String if (UserAgentAnalyzer.ali_tm_pd.matcher(agentLc).find()) => this.browser = "ali-tm-pd"
    case agentLc:String if ((agentLc.contains("ucbrowser/") && UserAgentAnalyzer.uc1.matcher(agentLc).find()) ||(agentLc.contains("ubrowser/") && UserAgentAnalyzer.uc2.matcher(agentLc).find()) ||UserAgentAnalyzer.uc3.matcher(agentLc).find() ||(agentLc.contains("ucweb") && UserAgentAnalyzer.uc4.matcher(agentLc).find()) ||UserAgentAnalyzer.uc5.matcher(agentLc).find()) => this.browser = "uc"
    case agentLc:String if (UserAgentAnalyzer.baiduboxapp1.matcher(agentLc).find() &&(UserAgentAnalyzer.baiduboxapp2.matcher(agentLc).find() || UserAgentAnalyzer.baiduboxapp3.matcher(agentLc).find())) => this.browser = "baiduboxapp"
    case agentLc:String if (UserAgentAnalyzer.oppobrowser.matcher(agentLc).find()) => this.browser = "oppobrowser"
    case agentLc:String if (UserAgentAnalyzer.googlebot.matcher(agentLc).find() )=> this.browser="googlebot"
    case agentLc:String if ( UserAgentAnalyzer.chrome.matcher(agentLc).find()) => this.browser = "chrome"
    case agentLc:String if (UserAgentAnalyzer.quark.matcher(agentLc).find()) => this.browser = "quark"
    case agentLc:String if (UserAgentAnalyzer.blackberry1.matcher(agentLc).find() || UserAgentAnalyzer.blackberry2.matcher(agentLc).find() || UserAgentAnalyzer.blackberry3.matcher(agentLc).find()) => this.browser = "blackberry"
    case agentLc:String if (UserAgentAnalyzer.nokia.matcher(agentLc).find()) => this.browser = "nokia"
    case agentLc:String if (UserAgentAnalyzer.baiduspider.matcher(agentLc).find() )=> this.browser="baiduspider"
    case agentLc:String if (UserAgentAnalyzer.baiduspider_image.matcher(agentLc).find()) => this.browser = "baiduspider-image"
    case agentLc:String if (UserAgentAnalyzer.baiduspider_video.matcher(agentLc).find()) => this.browser = "baiduspider_video"
    case agentLc:String if (UserAgentAnalyzer.baiduspider_news.matcher(agentLc).find()) => this.browser = "baiduspider_news"
    case agentLc:String if (UserAgentAnalyzer.baiduspider_favo.matcher(agentLc).find())=> this.browser = "baiduspider_favo"
    case agentLc:String if (UserAgentAnalyzer.baiduspider_cpro.matcher(agentLc).find())=> this.browser = "baiduspider_cpro"
    case agentLc:String if (UserAgentAnalyzer.baiduspider_ads.matcher(agentLc).find())=> this.browser = "baiduspider_ads"
    case agentLc:String if (agentLc.contains("android") && UserAgentAnalyzer.android.matcher(agentLc).find() )=> this.browser="android"
    case agentLc:String if (UserAgentAnalyzer.safari.matcher(agentLc).find() )=> this.browser="safari"
    case agentLc:String if (UserAgentAnalyzer.webview.matcher(agentLc).find() )=> this.browser="webview"
    case agentLc:String if (UserAgentAnalyzer.firefox.matcher(agentLc).find() )=> this.browser="firefox"
    case agentLc:String if (UserAgentAnalyzer.bingbot.matcher(agentLc).find() )=> this.browser="bingbot"
    case agentLc:String if (UserAgentAnalyzer.msnbot.matcher(agentLc).find() )=> this.browser="msnbot"
    case agentLc:String if (UserAgentAnalyzer.nuhkbot.matcher(agentLc).find() )=> this.browser="nuhkbot"
    case agentLc:String if (UserAgentAnalyzer.alexabot.matcher(agentLc).find() )=> this.browser="alexabot"
    case agentLc:String if (UserAgentAnalyzer.curl.matcher(agentLc).find() )=> this.browser="curl"
    case agentLc:String if (UserAgentAnalyzer.android_last.matcher(agentLc).find())=> this.browser="android"
    case _=>
  }

  def getAgentBrowserVersion(agent:String)=agent.toLowerCase match {
    case agentLc: String if (UserAgentAnalyzer.edge.matcher(agentLc).find()) => this.browser = "edge"
    case agentLc: String if ((agentLc.contains("sogoumobilebrowser") && UserAgentAnalyzer.sogou1.matcher(agentLc).find()) || agentLc.contains("sogoumse") || UserAgentAnalyzer.sogou2.matcher(agentLc).find()) =>
      val matche = UserAgentAnalyzer.sogou1.matcher(agentLc)
      val matche2 = UserAgentAnalyzer.sogou2.matcher(agentLc)
      if (matche.find()) {
        this.browserVersion = matche.group().replaceAll("sogoumobilebrowser/", "")
      }else if (matche2.find()) {
          this.browserVersion = matche2.group().replaceAll("se ", "")
        }
        this.browser = "sogou"
    case agentLc: String if (UserAgentAnalyzer.theworld.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer.theworld.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("theworld(?: )", "")
        }
        this.browser = "theworld"
    case agentLc: String if ((agentLc.contains("360 aphone browser") && UserAgentAnalyzer._360t.matcher(agentLc).find()) || UserAgentAnalyzer._360o.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer._360t.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("360 aphone browser \\(", "").replaceAll("\\)", "")
        }
        this.browser = "360"
    case agentLc: String if (UserAgentAnalyzer.maxthon.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer.maxthon.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("(?:maxthon|mxbrowser)(?:[ /])", "")
        }
        this.browser = "maxthon"
    case agentLc: String if (UserAgentAnalyzer.micromessenger.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer.micromessenger.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("micromessenger\\/", "")
        }
        this.browser = "micromessenger"
    case agentLc: String if (UserAgentAnalyzer.qq.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer.qq.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("m?qqbrowser\\/", "")
        }
        this.browser = "qq"
    case agentLc: String if (UserAgentAnalyzer.green.matcher(agentLc).find()) =>
        val matche = Pattern.compile("(?:msie |ie |trident\\/[0-9].*rv[ :])([0-9.]+)").matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("(?:msie |ie |trident\\/[0-9].*rv[ :])", "")
        }
        this.browser = "green"
    case agentLc: String if (UserAgentAnalyzer.tt.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer.tt.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("tencenttraveler ", "")
        }
        this.browser = "tt"
    case agentLc: String if ((agentLc.contains("liebaofast") && UserAgentAnalyzer.liebao.matcher(agentLc).find()) || agentLc.contains("lbbrowser")) =>
        val matche = UserAgentAnalyzer.liebao.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("liebaofast\\/", "")
        }
        this.browser = "liebao"
    case agentLc: String if (UserAgentAnalyzer.tao.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer.tao.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("taobrowser\\/", "")
        }
        this.browser = "tao"
    case agentLc: String if (UserAgentAnalyzer.coolnovo.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer.coolnovo.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("coolnovo\\/", "")
        }
        this.browser = "coolnovo"
    case agentLc: String if (UserAgentAnalyzer.saayaa.matcher(agentLc).find()) =>
        val matche = Pattern.compile("(?:msie |ie |trident\\/[0-9].*rv[ :])([0-9.]+)").matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("(?:msie |ie |trident\\/[0-9].*rv[ :])", "")
        }
        this.browser = "saayaa"
    case agentLc: String if (UserAgentAnalyzer.baidu.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer.baidu.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("(?:ba?idubrowser|baiduhd)[ \\/]", "")
        }
        this.browser = "baidu"
    case agentLc: String if (!agentLc.contains("googlebot") && UserAgentAnalyzer.ie.matcher(agentLc).find()) =>this.browser = "ie"
    case agentLc: String if (UserAgentAnalyzer.mi.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer.mi.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("miuibrowser\\/", "")
        }
        this.browser = "mi"
    case agentLc: String if (UserAgentAnalyzer.opera1.matcher(agentLc).find() || UserAgentAnalyzer.opera2.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer.opera1.matcher(agentLc)
        val matche2 = UserAgentAnalyzer.opera2.matcher(agentLc)

        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll(" opr/", "")
        } else if (matche2.find()) {
          this.browserVersion = matche2.group().replaceAll("opera.+version/", "")
        }
        this.browser = "opera"
    case agentLc: String if (UserAgentAnalyzer.oupeng.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer.oupeng.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("oupeng\\/", "")
        }
        this.browser = "oupeng"
    case agentLc: String if (UserAgentAnalyzer.yandex.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer.yandex.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("yabrowser\\/", "")
        }
        this.browser = "yandex"
    case agentLc: String if ((agentLc.contains("aliapp") && UserAgentAnalyzer.ali_ap1.matcher(agentLc).find()) || UserAgentAnalyzer.ali_ap2.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer.ali_ap1.matcher(agentLc)
        val matche2 = UserAgentAnalyzer.ali_ap2.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("aliapp\\(ap\\/", "")
        } else if (matche2.find()) {
          this.browserVersion = matche2.group().replaceAll("alipayclient\\/", "")
        }
        this.browser = "ali-ap"
    case agentLc: String if (UserAgentAnalyzer.ali_ap_pd.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer.ali_ap_pd.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("aliapp\\(ap-pd\\/", "").replaceAll("\\)", "")
        }
        this.browser = "ali-ap-pd"
    case agentLc: String if (UserAgentAnalyzer.ali_am.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer.ali_am.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("aliapp\\(am\\/", "").replaceAll("\\)", "")
        }
        this.browser = "ali-am"
    case agentLc: String if (UserAgentAnalyzer.ali_tb.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer.ali_tb.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("aliapp\\(tb\\/", "").replaceAll("\\)", "")
        }
        this.browser = "ali-tb"
    case agentLc: String if (UserAgentAnalyzer.ali_tb_pd.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer.ali_tb_pd.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("aliapp\\(tb-pd\\/", "").replaceAll("\\)", "")
        }
        this.browser = "ali-tb-pd"
    case agentLc: String if (UserAgentAnalyzer.ali_tm.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer.ali_tm.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("aliapp\\(tm\\/", "").replaceAll("\\)", "")
        }
        this.browser = "ali-tm"
    case agentLc: String if (UserAgentAnalyzer.ali_tm_pd.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer.ali_tm.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("aliapp\\(tm-pd\\/", "").replaceAll("\\)", "")
        }
        this.browser = "ali-tm-pd"
    case agentLc: String if ((agentLc.contains("ucbrowser/") && UserAgentAnalyzer.uc1.matcher(agentLc).find()) || (agentLc.contains("ubrowser/") && UserAgentAnalyzer.uc2.matcher(agentLc).find()) || UserAgentAnalyzer.uc3.matcher(agentLc).find() || (agentLc.contains("ucweb") && UserAgentAnalyzer.uc4.matcher(agentLc).find()) || UserAgentAnalyzer.uc5.matcher(agentLc).find()) =>
        val matche = UserAgentAnalyzer.uc1.matcher(agentLc)
        val matche2 = UserAgentAnalyzer.uc2.matcher(agentLc)
        val matche3 = UserAgentAnalyzer.uc3.matcher(agentLc)
        val matche4 = UserAgentAnalyzer.uc4.matcher(agentLc)
        if (matche.find()) {
          this.browserVersion = matche.group().replaceAll("(ucbrowser|ubrowser|uc)\\/", "")
        } else if (matche2.find()) {
          this.browserVersion = matche2.group().replaceAll("ubrowser\\/", "")
        } else if (matche3.f
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值