Skip to content
This repository was archived by the owner on Feb 17, 2023. It is now read-only.

Commit 746647a

Browse files
authored
feature: add information on the model of mobile devices
1 parent e13ed2b commit 746647a

File tree

5 files changed

+114
-35
lines changed

5 files changed

+114
-35
lines changed

README.md

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,23 @@ func main() {
2222
// The "New" function will create a new UserAgent object and it will parse
2323
// the given string. If you need to parse more strings, you can re-use
2424
// this object and call: ua.Parse("another string")
25-
ua := user_agent.New("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11")
25+
ua := user_agent.New("Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1")
2626

27-
fmt.Printf("%v\n", ua.Mobile()) // => false
27+
fmt.Printf("%v\n", ua.Mobile()) // => true
2828
fmt.Printf("%v\n", ua.Bot()) // => false
2929
fmt.Printf("%v\n", ua.Mozilla()) // => "5.0"
30+
fmt.Printf("%v\n", ua.Model()) // => "Nexus One"
3031

31-
fmt.Printf("%v\n", ua.Platform()) // => "X11"
32-
fmt.Printf("%v\n", ua.OS()) // => "Linux x86_64"
32+
fmt.Printf("%v\n", ua.Platform()) // => "Linux"
33+
fmt.Printf("%v\n", ua.OS()) // => "Android 2.3.7"
3334

3435
name, version := ua.Engine()
3536
fmt.Printf("%v\n", name) // => "AppleWebKit"
36-
fmt.Printf("%v\n", version) // => "537.11"
37+
fmt.Printf("%v\n", version) // => "533.1"
3738

3839
name, version = ua.Browser()
39-
fmt.Printf("%v\n", name) // => "Chrome"
40-
fmt.Printf("%v\n", version) // => "23.0.1271.97"
40+
fmt.Printf("%v\n", name) // => "Android"
41+
fmt.Printf("%v\n", version) // => "4.0"
4142

4243
// Let's see an example with a bot.
4344

all_test.go

Lines changed: 64 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ var uastrings = []struct {
3232
{
3333
title: "GoogleBotSmartphone (Android)",
3434
ua: "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
35-
expected: "Mozilla:5.0 Browser:Googlebot-2.1 Bot:true Mobile:true",
35+
expected: "Mozilla:5.0 Model:Nexus 5X Browser:Googlebot-2.1 Bot:true Mobile:true",
3636
},
3737
{
3838
title: "GoogleBotEmulateMozilla",
@@ -52,7 +52,7 @@ var uastrings = []struct {
5252
{
5353
title: "BingBotSmartphone(Android)",
5454
ua: "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 Edg/80.0.345.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)",
55-
expected: "Mozilla:5.0 Browser:bingbot-2.0 Bot:true Mobile:true",
55+
expected: "Mozilla:5.0 Model:Nexus 5X Browser:bingbot-2.0 Bot:true Mobile:true",
5656
},
5757
{
5858
title: "BingBotEmulateMozilla",
@@ -388,13 +388,13 @@ var uastrings = []struct {
388388
{
389389
title: "YandexBrowserAndroid",
390390
ua: "Mozilla/5.0 (Linux; Android 4.4.4; GT-I9300I Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 YaBrowser/17.9.0.523.00 Mobile Safari/537.36",
391-
expected: "Mozilla:5.0 Platform:Linux OS:Android 4.4.4 Browser:YaBrowser-17.9.0.523.00 Engine:AppleWebKit-537.36 Bot:false Mobile:true",
391+
expected: "Mozilla:5.0 Platform:Linux OS:Android 4.4.4 Model:GT-I9300I Browser:YaBrowser-17.9.0.523.00 Engine:AppleWebKit-537.36 Bot:false Mobile:true",
392392
},
393393

394394
{
395395
title: "YandexBrowserIOS",
396396
ua: "Mozilla/5.0 (iPad; CPU OS 10_1_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 YaBrowser/16.11.1.716.11 Mobile/14B100 Safari/602.1",
397-
expected: "Mozilla:5.0 Platform:iPad OS:CPU OS 10_1_1 like Mac OS X Browser:YaBrowser-16.11.1.716.11 Engine:AppleWebKit-602.1.50 Bot:false Mobile:true",
397+
expected: "Mozilla:5.0 Platform:iPad OS:CPU OS 10_1_1 like Mac OS X Model:iPad Browser:YaBrowser-16.11.1.716.11 Engine:AppleWebKit-602.1.50 Bot:false Mobile:true",
398398
},
399399
// Other
400400
{
@@ -489,13 +489,13 @@ var uastrings = []struct {
489489
{
490490
title: "iPhone7",
491491
ua: "Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_3 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11B511 Safari/9537.53",
492-
expected: "Mozilla:5.0 Platform:iPhone OS:CPU iPhone OS 7_0_3 like Mac OS X Browser:Safari-7.0 Engine:AppleWebKit-537.51.1 Bot:false Mobile:true",
492+
expected: "Mozilla:5.0 Platform:iPhone OS:CPU iPhone OS 7_0_3 like Mac OS X Model:iPhone Browser:Safari-7.0 Engine:AppleWebKit-537.51.1 Bot:false Mobile:true",
493493
expectedOS: &OSInfo{"CPU iPhone OS 7_0_3 like Mac OS X", "iPhone OS", "7.0.3"},
494494
},
495495
{
496496
title: "iPhone",
497497
ua: "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A102 Safari/419",
498-
expected: "Mozilla:5.0 Platform:iPhone OS:CPU like Mac OS X Localization:en Browser:Safari-3.0 Engine:AppleWebKit-420.1 Bot:false Mobile:true",
498+
expected: "Mozilla:5.0 Platform:iPhone OS:CPU like Mac OS X Localization:en Model:iPhone Browser:Safari-3.0 Engine:AppleWebKit-420.1 Bot:false Mobile:true",
499499
},
500500
{
501501
title: "iPod",
@@ -505,7 +505,7 @@ var uastrings = []struct {
505505
{
506506
title: "iPad",
507507
ua: "Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10",
508-
expected: "Mozilla:5.0 Platform:iPad OS:CPU OS 3_2 like Mac OS X Localization:en-us Browser:Safari-4.0.4 Engine:AppleWebKit-531.21.10 Bot:false Mobile:true",
508+
expected: "Mozilla:5.0 Platform:iPad OS:CPU OS 3_2 like Mac OS X Localization:en-us Model:iPad Browser:Safari-4.0.4 Engine:AppleWebKit-531.21.10 Bot:false Mobile:true",
509509
},
510510
{
511511
title: "webOS",
@@ -515,7 +515,7 @@ var uastrings = []struct {
515515
{
516516
title: "Android",
517517
ua: "Mozilla/5.0 (Linux; U; Android 1.5; de-; HTC Magic Build/PLAT-RC33) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1",
518-
expected: "Mozilla:5.0 Platform:Linux OS:Android 1.5 Localization:de- Browser:Android-3.1.2 Engine:AppleWebKit-528.5+ Bot:false Mobile:true",
518+
expected: "Mozilla:5.0 Platform:Linux OS:Android 1.5 Localization:de- Model:HTC Magic Browser:Android-3.1.2 Engine:AppleWebKit-528.5+ Bot:false Mobile:true",
519519
},
520520
{
521521
title: "BlackBerry",
@@ -537,12 +537,12 @@ var uastrings = []struct {
537537
{
538538
title: "ChromeAndroid",
539539
ua: "Mozilla/5.0 (Linux; Android 4.2.1; Galaxy Nexus Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19",
540-
expected: "Mozilla:5.0 Platform:Linux OS:Android 4.2.1 Browser:Chrome-18.0.1025.166 Engine:AppleWebKit-535.19 Bot:false Mobile:true",
540+
expected: "Mozilla:5.0 Platform:Linux OS:Android 4.2.1 Model:Galaxy Nexus Browser:Chrome-18.0.1025.166 Engine:AppleWebKit-535.19 Bot:false Mobile:true",
541541
},
542542
{
543543
title: "Chrome for iOS",
544544
ua: "Mozilla/5.0 (iPhone; CPU iPhone OS 11_3_1 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) CriOS/67.0.3396.87 Mobile/15E302 Safari/604.1",
545-
expected: "Mozilla:5.0 Platform:iPhone OS:CPU iPhone OS 11_3_1 like Mac OS X Browser:Chrome-67.0.3396.87 Engine:AppleWebKit-604.1.34 Bot:false Mobile:true",
545+
expected: "Mozilla:5.0 Platform:iPhone OS:CPU iPhone OS 11_3_1 like Mac OS X Model:iPhone Browser:Chrome-67.0.3396.87 Engine:AppleWebKit-604.1.34 Bot:false Mobile:true",
546546
},
547547
{
548548
title: "WebkitNoPlatform",
@@ -552,7 +552,7 @@ var uastrings = []struct {
552552
{
553553
title: "OperaWebkitMobile",
554554
ua: "Mozilla/5.0 (Linux; Android 4.2.2; Galaxy Nexus Build/JDQ39) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Mobile Safari/537.31 OPR/14.0.1074.57453",
555-
expected: "Mozilla:5.0 Platform:Linux OS:Android 4.2.2 Browser:Opera-14.0.1074.57453 Engine:AppleWebKit-537.31 Bot:false Mobile:true",
555+
expected: "Mozilla:5.0 Platform:Linux OS:Android 4.2.2 Model:Galaxy Nexus Browser:Opera-14.0.1074.57453 Engine:AppleWebKit-537.31 Bot:false Mobile:true",
556556
},
557557
{
558558
title: "OperaWebkitDesktop",
@@ -582,17 +582,17 @@ var uastrings = []struct {
582582
{
583583
title: "Firefox for iOS",
584584
ua: "Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) FxiOS/1.0 Mobile/12F69 Safari/600.1.4",
585-
expected: "Mozilla:5.0 Platform:iPhone OS:CPU iPhone OS 8_3 like Mac OS X Browser:Firefox-1.0 Engine:AppleWebKit-600.1.4 Bot:false Mobile:true",
585+
expected: "Mozilla:5.0 Platform:iPhone OS:CPU iPhone OS 8_3 like Mac OS X Model:iPhone Browser:Firefox-1.0 Engine:AppleWebKit-600.1.4 Bot:false Mobile:true",
586586
},
587587
{
588588
title: "Firefox Focus for iOS",
589589
ua: "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/7.0.4 Mobile/16B91 Safari/605.1.15",
590-
expected: "Mozilla:5.0 Platform:iPhone OS:CPU iPhone OS 12_1 like Mac OS X Browser:Firefox-7.0.4 Engine:AppleWebKit-605.1.15 Bot:false Mobile:true",
590+
expected: "Mozilla:5.0 Platform:iPhone OS:CPU iPhone OS 12_1 like Mac OS X Model:iPhone Browser:Firefox-7.0.4 Engine:AppleWebKit-605.1.15 Bot:false Mobile:true",
591591
},
592592
{
593593
title: "Firefox on iPad",
594594
ua: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/24.1 Safari/605.1.15",
595-
expected: "Mozilla:5.0 Platform:iPad OS:Intel Mac OS X 10.15 Browser:Firefox-24.1 Engine:AppleWebKit-605.1.15 Bot:false Mobile:true",
595+
expected: "Mozilla:5.0 Platform:iPad OS:Intel Mac OS X 10.15 Model:iPad Browser:Firefox-24.1 Engine:AppleWebKit-605.1.15 Bot:false Mobile:true",
596596
},
597597
{
598598
title: "Electron",
@@ -607,55 +607,55 @@ var uastrings = []struct {
607607
{
608608
title: "LinkedInApp",
609609
ua: "Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 [LinkedInApp]",
610-
expected: "Mozilla:5.0 Platform:iPhone OS:CPU iPhone OS 14_6 like Mac OS X Browser:Mobile App Engine:AppleWebKit-605.1.15 Bot:false Mobile:true",
610+
expected: "Mozilla:5.0 Platform:iPhone OS:CPU iPhone OS 14_6 like Mac OS X Model:iPhone Browser:Mobile App Engine:AppleWebKit-605.1.15 Bot:false Mobile:true",
611611
},
612612
{
613613
title: "Google App for iOS",
614614
ua: "Mozilla/5.0 (iPhone; CPU iPhone OS 14_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/170.0.386351093 Mobile/15E148 Safari/604.1",
615-
expected: "Mozilla:5.0 Platform:iPhone OS:CPU iPhone OS 14_1 like Mac OS X Browser:Google App-170.0.386351093 Engine:AppleWebKit-605.1.15 Bot:false Mobile:true",
615+
expected: "Mozilla:5.0 Platform:iPhone OS:CPU iPhone OS 14_1 like Mac OS X Model:iPhone Browser:Google App-170.0.386351093 Engine:AppleWebKit-605.1.15 Bot:false Mobile:true",
616616
},
617617
{
618618
title: "DuckDuckGo Browser for iOS",
619619
ua: "Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.6 Mobile/15E148 DuckDuckGo/7 Safari/605.1.15",
620-
expected: "Mozilla:5.0 Platform:iPhone OS:CPU iPhone OS 14_6 like Mac OS X Browser:DuckDuckGo-7 Engine:AppleWebKit-605.1.15 Bot:false Mobile:true",
620+
expected: "Mozilla:5.0 Platform:iPhone OS:CPU iPhone OS 14_6 like Mac OS X Model:iPhone Browser:DuckDuckGo-7 Engine:AppleWebKit-605.1.15 Bot:false Mobile:true",
621621
},
622622

623623
// Dalvik
624624
{
625625
title: "Dalvik - Dell:001DL",
626626
ua: "Dalvik/1.2.0 (Linux; U; Android 2.2.2; 001DL Build/FRG83G)",
627-
expected: "Mozilla:5.0 Platform:Linux OS:Android 2.2.2 Bot:false Mobile:true",
627+
expected: "Mozilla:5.0 Platform:Linux OS:Android 2.2.2 Model:001DL Bot:false Mobile:true",
628628
},
629629
{
630630
title: "Dalvik - HTC:001HT",
631631
ua: "Dalvik/1.4.0 (Linux; U; Android 2.3.3; 001HT Build/GRI40)",
632-
expected: "Mozilla:5.0 Platform:Linux OS:Android 2.3.3 Bot:false Mobile:true",
632+
expected: "Mozilla:5.0 Platform:Linux OS:Android 2.3.3 Model:001HT Bot:false Mobile:true",
633633
},
634634
{
635635
title: "Dalvik - ZTE:009Z",
636636
ua: "Dalvik/1.4.0 (Linux; U; Android 2.3.4; 009Z Build/GINGERBREAD)",
637-
expected: "Mozilla:5.0 Platform:Linux OS:Android 2.3.4 Bot:false Mobile:true",
637+
expected: "Mozilla:5.0 Platform:Linux OS:Android 2.3.4 Model:009Z Bot:false Mobile:true",
638638
},
639639
{
640640
title: "Dalvik - A850",
641641
ua: "Dalvik/1.6.0 (Linux; U; Android 4.2.2; A850 Build/JDQ39) Configuration/CLDC-1.1; Opera Mini/att/4.2",
642-
expected: "Mozilla:5.0 Platform:Linux OS:Android 4.2.2 Bot:false Mobile:true",
642+
expected: "Mozilla:5.0 Platform:Linux OS:Android 4.2.2 Model:A850 Bot:false Mobile:true",
643643
},
644644
{
645645
title: "Dalvik - Asus:T00Q",
646646
ua: "Dalvik/1.6.0 (Linux; U; Android 4.4.2; ASUS_T00Q Build/KVT49L)/CLDC-1.1",
647-
expected: "Mozilla:5.0 Platform:Linux OS:Android 4.4.2 Bot:false Mobile:true",
647+
expected: "Mozilla:5.0 Platform:Linux OS:Android 4.4.2 Model:ASUS_T00Q Bot:false Mobile:true",
648648
expectedOS: &OSInfo{"Android 4.4.2", "Android", "4.4.2"},
649649
},
650650
{
651651
title: "Dalvik - W2430",
652652
ua: "Dalvik/1.6.0 (Linux; U; Android 4.0.4; W2430 Build/IMM76D)014; Profile/MIDP-2.1 Configuration/CLDC-1",
653-
expected: "Mozilla:5.0 Platform:Linux OS:Android 4.0.4 Bot:false Mobile:true",
653+
expected: "Mozilla:5.0 Platform:Linux OS:Android 4.0.4 Model:W2430 Bot:false Mobile:true",
654654
},
655655
{
656656
title: "Samsung S5 Facebook App",
657657
ua: "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.121 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/35.0.0.48.273;]",
658-
expected: "Mozilla:5.0 Platform:Linux OS:Android 5.0 Localization:wv Browser:Android-4.0 Engine:AppleWebKit-537.36 Bot:false Mobile:true",
658+
expected: "Mozilla:5.0 Platform:Linux OS:Android 5.0 Localization:wv Model:SM-G900P Browser:Android-4.0 Engine:AppleWebKit-537.36 Bot:false Mobile:true",
659659
},
660660
{
661661
title: "Facebook - No Browser Or OS",
@@ -667,12 +667,44 @@ var uastrings = []struct {
667667
{
668668
title: "Samsung S7 Edge - YaBrowser",
669669
ua: "Mozilla/5.0 (Linux; arm_64; Android 8.0.0; SM-G935F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 YaBrowser/19.12.3.101.00 Mobile Safari/537.36",
670-
expected: "Mozilla:5.0 Platform:Linux OS:Android 8.0.0 Localization:SM-G935F Browser:YaBrowser-19.12.3.101.00 Engine:AppleWebKit-537.36 Bot:false Mobile:true",
670+
expected: "Mozilla:5.0 Platform:Linux OS:Android 8.0.0 Localization:SM-G935F Model:SM-G935F Browser:YaBrowser-19.12.3.101.00 Engine:AppleWebKit-537.36 Bot:false Mobile:true",
671+
},
672+
673+
// Get Phone Model
674+
{
675+
title: "HUAWEI P20 lite - YaBrowser",
676+
ua: "Mozilla/5.0 (Linux; arm_64; Android 9; ANE-LX2J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.136 YaBrowser/20.2.6.114.00 Mobile Safari/537.36",
677+
expected: "Mozilla:5.0 Platform:Linux OS:Android 9 Localization:ANE-LX2J Model:ANE-LX2J Browser:YaBrowser-20.2.6.114.00 Engine:AppleWebKit-537.36 Bot:false Mobile:true",
678+
},
679+
{
680+
title: "OPPO R9sk",
681+
ua: "Mozilla/5.0 (Linux; Android 7.1.1; OPPO R9sk) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.111 Mobile Safari/537.36",
682+
expected: "Mozilla:5.0 Platform:Linux OS:Android 7.1.1 Model:OPPO R9sk Browser:Chrome-76.0.3809.111 Engine:AppleWebKit-537.36 Bot:false Mobile:true",
683+
},
684+
{
685+
title: "Nexus One",
686+
ua: "Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
687+
expected: "Mozilla:5.0 Platform:Linux OS:Android 2.3.7 Localization:en-us Model:Nexus One Browser:Android-4.0 Engine:AppleWebKit-533.1 Bot:false Mobile:true",
671688
},
672689
{
673-
title: "HUAWEI P20 lite - YaBrowser",
674-
ua: "Mozilla/5.0 (Linux; arm_64; Android 9; ANE-LX2J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.136 YaBrowser/20.2.6.114.00 Mobile Safari/537.36",
675-
expected: "Mozilla:5.0 Platform:Linux OS:Android 9 Localization:ANE-LX2J Browser:YaBrowser-20.2.6.114.00 Engine:AppleWebKit-537.36 Bot:false Mobile:true",
690+
title: "HUAWEIELE",
691+
ua: "Mozilla/5.0 (Linux; Android 9; ELE-AL00 Build/HUAWEIELE-AL0001; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/63.0.3239.83 Mobile Safari/537.36 T7/11.15 baiduboxapp/11.15.5.10 (Baidu; P1 9)",
692+
expected: "Mozilla:5.0 Platform:Linux OS:Android 9 Localization:wv Model:ELE-AL00 Browser:Android-4.0 Engine:AppleWebKit-537.36 Bot:false Mobile:true",
693+
},
694+
{
695+
title: "Redmi Note 3",
696+
ua: "Mozilla/5.0 (Linux; U; Android 5.0.2; zh-cn; Redmi Note 3 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.146 Mobile Safari/537.36 XiaoMi/MiuiBrowser/8.8.7",
697+
expected: "Mozilla:5.0 Platform:Linux OS:Android 5.0.2 Localization:zh-cn Model:Redmi Note 3 Browser:Android-4.0 Engine:AppleWebKit-537.36 Bot:false Mobile:true",
698+
},
699+
{
700+
title: "XiaoMi 6",
701+
ua: "Mozilla/5.0 (Linux; Android 8.0.0; MI 6 Build/OPR1.170623.027; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.89 Mobile Safari/537.36 T7/11.12 swan/2.11.0 baiduboxapp/11.15.0.0 (Baidu; P1 8.0.0)",
702+
expected: "Mozilla:5.0 Platform:Linux OS:Android 8.0.0 Localization:wv Model:MI 6 Browser:Android-4.0 Engine:AppleWebKit-537.36 Bot:false Mobile:true",
703+
},
704+
{
705+
title: "HTC_Wildfire_A3333",
706+
ua: "Mozilla/5.0 (Linux; U; Android 2.2.1; zh-cn; HTC_Wildfire_A3333 Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",
707+
expected: "Mozilla:5.0 Platform:Linux OS:Android 2.2.1 Localization:zh-cn Model:HTC_Wildfire_A3333 Browser:Android-4.0 Engine:AppleWebKit-533.1 Bot:false Mobile:true",
676708
},
677709
}
678710

@@ -695,6 +727,9 @@ func beautify(ua *UserAgent) (s string) {
695727
if len(ua.Localization()) > 0 {
696728
s += "Localization:" + ua.Localization() + " "
697729
}
730+
if len(ua.Model()) > 0 {
731+
s += "Model:" + ua.Model() + " "
732+
}
698733
str1, str2 := ua.Browser()
699734
if len(str1) > 0 {
700735
s += "Browser:" + str1
@@ -733,6 +768,7 @@ func TestUserAgent(t *testing.T) {
733768
t.Errorf("\nTest %v\ngot: %#v\nexpected %#v\n", tt.title, gotOSInfo, tt.expectedOS)
734769
}
735770
}
771+
736772
}
737773
}
738774

model.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package user_agent
2+
3+
import (
4+
"strings"
5+
)
6+
// detectModel some properties of the model from the given section.
7+
func (p *UserAgent) detectModel(s section) {
8+
if !p.mobile {
9+
return
10+
}
11+
if p.platform == "iPhone" || p.platform == "iPad" {
12+
p.model = p.platform
13+
return
14+
}
15+
// Android model
16+
if s.name == "Mozilla" && p.platform == "Linux" && len(s.comment) > 2 {
17+
mostAndroidModel := s.comment[2]
18+
if strings.Contains(mostAndroidModel, "Android") || strings.Contains(mostAndroidModel, "Linux") {
19+
mostAndroidModel = s.comment[len(s.comment) - 1]
20+
}
21+
tmp := strings.Split(mostAndroidModel, "Build")
22+
if len(tmp) > 0 {
23+
p.model = strings.Trim(tmp[0], " ")
24+
return
25+
}
26+
}
27+
// traverse all item
28+
for _, v := range s.comment {
29+
if strings.Contains(v, "Build") {
30+
tmp := strings.Split(v, "Build")
31+
p.model = strings.Trim(tmp[0], " ")
32+
}
33+
}
34+
}

operating_systems.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,11 @@ func (p *UserAgent) Localization() string {
310310
return p.localization
311311
}
312312

313+
// Model returns a string containing the Phone Model like "Nexus 5X"
314+
func (p *UserAgent) Model() string{
315+
return p.model
316+
}
317+
313318
// Return OS name and version from a slice of strings created from the full name of the OS.
314319
func osName(osSplit []string) (name, version string) {
315320
if len(osSplit) == 1 {

user_agent.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ type UserAgent struct {
2626
platform string
2727
os string
2828
localization string
29+
model string
2930
browser Browser
3031
bot bool
3132
mobile bool
@@ -116,6 +117,7 @@ func (p *UserAgent) initialize() {
116117
p.platform = ""
117118
p.os = ""
118119
p.localization = ""
120+
p.model = ""
119121
p.browser.Engine = ""
120122
p.browser.EngineVersion = ""
121123
p.browser.Name = ""
@@ -158,6 +160,7 @@ func (p *UserAgent) Parse(ua string) {
158160

159161
p.detectBrowser(sections)
160162
p.detectOS(sections[0])
163+
p.detectModel(sections[0])
161164

162165
if p.undecided {
163166
p.checkBot(sections)

0 commit comments

Comments
 (0)