手动实现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