user_agent_parser 2.6.0 → 2.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/vendor/uap-core/regexes.yaml +121 -14
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3064c6d3d2f4ce1c0cfc27261bcf6ff6a6c034efad5f32e7a5de654eba929fdc
4
- data.tar.gz: 0c5d6247bfd246a9ad885a536a6b4dd4f58bf3eac760f0c2865d0ccbde9ec83d
3
+ metadata.gz: f36ea17c827ff0d9a4a57841e491bafed8ae2c3a5caea5af858d6cdbb580d897
4
+ data.tar.gz: 48cce3afc9daaf42f180ce5564c9fc37c5fb288c115e93bb20b6291d43ae452f
5
5
  SHA512:
6
- metadata.gz: dbf4da6764707f6ab43a9b7070fb73efe71bdff39c6e51097f58688bacf6556837b43e213be7ce6b44413af22f3d3eb9b9528bcaa13cb13a3d0448054716d293
7
- data.tar.gz: 568eeacaf99ad147c7c10112df9ca515c790d3813e4f39d8f95d5bf3b7e1cd10d7bf031c47a5f9eefc788a24ddf3e3a22d2c17aff2241fd24d5b3275a8438ba5
6
+ metadata.gz: 4c695d6238bb7542309a94daaea5149109aca5c0f4a1205d7a078f5182eb2d02ea768bf0884803d59a0d2f4f4f57a5ddbb8750d523469f028fcdc0b88f3f56c4
7
+ data.tar.gz: 39fa0993955155d19eabb8f31356173bfda97b2e430ce469d895713421c793ad047d327a50f1165e64861064ded84ae977a782fdbef078b6229f1c347b8f2113
@@ -1,6 +1,50 @@
1
1
  user_agent_parsers:
2
2
  #### SPECIAL CASES TOP ####
3
3
 
4
+ # ESRI Server products
5
+ - regex: '(GeoEvent Server) (\d+)(?:\.(\d+)(?:\.(\d+)|)|)'
6
+
7
+ # ESRI ArcGIS Desktop Products
8
+ - regex: '(ArcGIS Pro)(?: (\d+)\.(\d+)\.([^ ]+)|)'
9
+
10
+ - regex: 'ArcGIS Client Using WinInet'
11
+ family_replacement: 'ArcMap'
12
+
13
+ - regex: '(OperationsDashboard)-(?:Windows)-(\d+)\.(\d+)\.(\d+)'
14
+ family_replacement: 'Operations Dashboard for ArcGIS'
15
+
16
+ - regex: '(arcgisearth)/(\d+)\.(\d+)(?:\.(\d+)|)'
17
+ family_replacement: 'ArcGIS Earth'
18
+
19
+ - regex: 'com.esri.(earth).phone/(\d+)\.(\d+)(?:\.(\d+)|)'
20
+ family_replacement: 'ArcGIS Earth'
21
+
22
+ # ESRI ArcGIS Mobile Products
23
+ - regex: '(arcgis-explorer)/(\d+)\.(\d+)\.(\d+)'
24
+ family_replacement: 'Explorer for ArcGIS'
25
+
26
+ - regex: 'arcgis-(collector|aurora)/(\d+)\.(\d+)\.(\d+)'
27
+ family_replacement: 'Collector for ArcGIS'
28
+
29
+ - regex: '(arcgis-workforce)/(\d+)\.(\d+)\.(\d+)'
30
+ family_replacement: 'Workforce for ArcGIS'
31
+
32
+ - regex: '(Collector|Explorer|Workforce)-(?:Android|iOS)-(\d+)\.(\d+)(?:\.(\d+)|)'
33
+ family_replacement: '$1 for ArcGIS'
34
+
35
+ - regex: '(Explorer|Collector)/(\d+) CFNetwork'
36
+ family_replacement: '$1 for ArcGIS'
37
+
38
+ # ESRI ArcGIS Runtimes
39
+ - regex: 'ArcGISRuntime-(Android|iOS|NET|Qt)/(\d+)\.(\d+)(?:\.(\d+)|)'
40
+ family_replacement: 'ArcGIS Runtime SDK for $1'
41
+
42
+ - regex: 'ArcGIS\.?(iOS|Android|NET|Qt)(?:-|\.)(\d+)\.(\d+)(?:\.(\d+)|)'
43
+ family_replacement: 'ArcGIS Runtime SDK for $1'
44
+
45
+ - regex: 'ArcGIS\.Runtime\.(Qt)\.(\d+)\.(\d+)(?:\.(\d+)|)'
46
+ family_replacement: 'ArcGIS Runtime SDK for $1'
47
+
4
48
  # CFNetwork Podcast catcher Applications
5
49
  - regex: '^(Luminary)[Stage]+/(\d+) CFNetwork'
6
50
  - regex: '(ESPN)[%20| ]+Radio/(\d+)\.(\d+)\.(\d+) CFNetwork'
@@ -101,12 +145,24 @@ user_agent_parsers:
101
145
  family_replacement: 'Pinterestbot'
102
146
 
103
147
  # Bots
104
- - regex: '(CSimpleSpider|Cityreview Robot|CrawlDaddy|CrawlFire|Finderbots|Index crawler|Job Roboter|KiwiStatus Spider|Lijit Crawler|QuerySeekerSpider|ScollSpider|Trends Crawler|USyd-NLP-Spider|SiteCat Webbot|BotName\/\$BotVersion|123metaspider-Bot|1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]{1,30}-Agent|AdsBot-Google(?:-[a-z]{1,30}|)|altavista|AppEngine-Google|archive.{0,30}\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]{1,30})(?:-[A-Za-z]{1,30}|)|bingbot|BingPreview|blitzbot|BlogBridge|Bloglovin|BoardReader Blog Indexer|BoardReader Favicon Fetcher|boitho.com-dc|BotSeer|BUbiNG|\b\w{0,30}favicon\w{0,30}\b|\bYeti(?:-[a-z]{1,30}|)|Catchpoint(?: bot|)|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher|)|Feed Seeker Bot|Feedbin|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]{1,30}-|)Googlebot(?:-[a-zA-Z]{1,30}|)|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile|)|IconSurf|IlTrovatore(?:-Setaccio|)|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]{1,30}Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .{0,30} Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media {0,2}|)|msrbot|Mtps Feed Aggregation System|netresearch|Netvibes|NewsGator[^/]{0,30}|^NING|Nutch[^/]{0,30}|Nymesis|ObjectsSearch|OgScrper|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Qwantify|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|SemrushBot|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|Stringer|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|Tiny Tiny RSS|Twitterbot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]{1,30}|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s|) Link Sleuth|Xerka [A-z]{1,30}Bot|yacy(?:bot|)|YahooSeeker|Yahoo! Slurp|Yandex\w{1,30}|YodaoBot(?:-[A-z]{1,30}|)|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+)|)|)|)'
148
+ - regex: '(CSimpleSpider|Cityreview Robot|CrawlDaddy|CrawlFire|Finderbots|Index crawler|Job Roboter|KiwiStatus Spider|Lijit Crawler|QuerySeekerSpider|ScollSpider|Trends Crawler|USyd-NLP-Spider|SiteCat Webbot|BotName\/\$BotVersion|123metaspider-Bot|1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]{1,30}-Agent|AdsBot-Google(?:-[a-z]{1,30}|)|altavista|AppEngine-Google|archive.{0,30}\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]{1,30})(?:-[A-Za-z]{1,30}|)|bingbot|BingPreview|blitzbot|BlogBridge|Bloglovin|BoardReader Blog Indexer|BoardReader Favicon Fetcher|boitho.com-dc|BotSeer|BUbiNG|\b\w{0,30}favicon\w{0,30}\b|\bYeti(?:-[a-z]{1,30}|)|Catchpoint(?: bot|)|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher|)|Feed Seeker Bot|Feedbin|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]{1,30}-|)Googlebot(?:-[a-zA-Z]{1,30}|)|Google SketchUp|grub-client|gsa-crawler|heritrix|HiddenMarket|holmes|HooWWWer|htdig|ia_archiver|ICC-Crawler|Icarus6j|ichiro(?:/mobile|)|IconSurf|IlTrovatore(?:-Setaccio|)|InfuzApp|Innovazion Crawler|InternetArchive|IP2[a-z]{1,30}Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masscan|masidani_bot|Mediapartners-Google|Microsoft .{0,30} Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media {0,2}|)|msrbot|Mtps Feed Aggregation System|netresearch|Netvibes|NewsGator[^/]{0,30}|^NING|Nutch[^/]{0,30}|Nymesis|ObjectsSearch|OgScrper|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Qwantify|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|SemrushBot|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|Stringer|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|Tiny Tiny RSS|Twitterbot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]{1,30}|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s|) Link Sleuth|Xerka [A-z]{1,30}Bot|yacy(?:bot|)|YahooSeeker|Yahoo! Slurp|Yandex\w{1,30}|YodaoBot(?:-[A-z]{1,30}|)|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg|ArcGIS Hub Indexer)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+)|)|)|)'
105
149
 
106
150
  # AWS S3 Clients
107
151
  # must come before "Bots General matcher" to catch "boto"/"boto3" before "bot"
108
152
  - regex: '\b(Boto3?|JetS3t|aws-(?:cli|sdk-(?:cpp|go|java|nodejs|ruby2?|dotnet-(?:\d{1,2}|core)))|s3fs)/(\d+)\.(\d+)(?:\.(\d+)|)'
109
153
 
154
+ # SAFE FME
155
+ - regex: '(FME)\/(\d+\.\d+)\.(\d+)\.(\d+)'
156
+
157
+ # QGIS
158
+ - regex: '(QGIS)\/(\d)\.?0?(\d{1,2})\.?0?(\d{1,2})'
159
+
160
+ # JOSM
161
+ - regex: '(JOSM)/(\d+)\.(\d+)'
162
+
163
+ # Tygron Platform
164
+ - regex: '(Tygron Platform) \((\d+)\.(\d+)\.(\d+(?:\.\d+| RC \d+\.\d+))'
165
+
110
166
  # Facebook
111
167
  # Must come before "Bots General matcher" to catch OrangeBotswana
112
168
  # Facebook Messenger must go before Facebook
@@ -156,6 +212,17 @@ user_agent_parsers:
156
212
  - regex: '(Twitter for (?:iPhone|iPad)|TwitterAndroid)(?:\/(\d+)\.(\d+)|)'
157
213
  family_replacement: 'Twitter'
158
214
 
215
+ # aspiegel.com spider (owned by Huawei)
216
+ - regex: 'Mozilla.*Mobile.*AspiegelBot'
217
+ family_replacement: 'Spider'
218
+ brand_replacement: 'Spider'
219
+ model_replacement: 'Smartphone'
220
+
221
+ - regex: 'AspiegelBot'
222
+ family_replacement: 'Spider'
223
+ brand_replacement: 'Spider'
224
+ model_replacement: 'Desktop'
225
+
159
226
  # Basilisk
160
227
  - regex: '(Firefox)/(\d+)\.(\d+) Basilisk/(\d+)'
161
228
  family_replacement: 'Basilisk'
@@ -317,9 +384,7 @@ user_agent_parsers:
317
384
  # Edge Mobile
318
385
  - regex: 'Windows Phone .*(Edge)/(\d+)\.(\d+)'
319
386
  family_replacement: 'Edge Mobile'
320
- - regex: '(EdgA)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
321
- family_replacement: 'Edge Mobile'
322
- - regex: '(EdgiOS)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
387
+ - regex: '(EdgiOS|EdgA)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
323
388
  family_replacement: 'Edge Mobile'
324
389
 
325
390
  # Samsung Internet (based on Chrome, but lacking some features)
@@ -406,6 +471,9 @@ user_agent_parsers:
406
471
  - regex: '(Rackspace Monitoring)/(\d+)\.(\d+)'
407
472
  family_replacement: 'RackspaceBot'
408
473
 
474
+ # PRTG Network Monitoring
475
+ - regex: '(PRTG Network Monitor)'
476
+
409
477
  # PyAMF
410
478
  - regex: '(PyAMF)/(\d+)\.(\d+)\.(\d+)'
411
479
 
@@ -611,7 +679,7 @@ user_agent_parsers:
611
679
  # Browser major_version.minor_version.beta_version (space instead of slash)
612
680
  - regex: '(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\d+)\.(\d+)\.(\d+)'
613
681
  # Browser major_version.minor_version (space instead of slash)
614
- - regex: '(iCab|Lunascape|Opera|Android|Jasmine|Polaris|Microsoft SkyDriveSync|The Bat!) (\d+)\.(\d+)(?:\.(\d+)|)'
682
+ - regex: '(iCab|Lunascape|Opera|Android|Jasmine|Polaris|Microsoft SkyDriveSync|The Bat!) (\d+)(?:\.(\d+)|)(?:\.(\d+)|)'
615
683
 
616
684
  # Kindle WebKit
617
685
  - regex: '(Kindle)/(\d+)\.(\d+)'
@@ -839,12 +907,11 @@ user_agent_parsers:
839
907
  family_replacement: 'Python Requests'
840
908
 
841
909
  # headless user-agents
842
- - regex: '\b(Windows-Update-Agent|Microsoft-CryptoAPI|SophosUpdateManager|SophosAgent|Debian APT-HTTP|Ubuntu APT-HTTP|libcurl-agent|libwww-perl|urlgrabber|curl|PycURL|Wget|aria2|Axel|OpenBSD ftp|lftp|jupdate|insomnia|fetch libfetch|akka-http|got)(?:[ /](\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)'
910
+ - regex: '\b(Windows-Update-Agent|WindowsPowerShell|Microsoft-CryptoAPI|SophosUpdateManager|SophosAgent|Debian APT-HTTP|Ubuntu APT-HTTP|libcurl-agent|libwww-perl|urlgrabber|curl|PycURL|Wget|wget2|aria2|Axel|OpenBSD ftp|lftp|jupdate|insomnia|fetch libfetch|akka-http|got)(?:[ /](\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)'
843
911
 
844
912
  # Asynchronous HTTP Client/Server for asyncio and Python (https://aiohttp.readthedocs.io/)
845
913
  - regex: '(Python/3\.\d{1,3} aiohttp)/(\d+)\.(\d+)\.(\d+)'
846
- # Asynchronous HTTP Client/Server for asyncio and Python (https://aiohttp.readthedocs.io/)
847
- - regex: '(Python/3\.\d{1,3} aiohttp)/(\d+)\.(\d+)\.(\d+)'
914
+ family_replacement: 'Python aiohttp'
848
915
 
849
916
  - regex: '(Java)[/ ]?\d+\.(\d+)\.(\d+)[_-]*([a-zA-Z0-9]+|)'
850
917
 
@@ -932,6 +999,10 @@ os_parsers:
932
999
  # generic HbbTV, hoping to catch manufacturer name (always after 2nd comma) and the first string that looks like a 2011-2019 year
933
1000
  - regex: 'HbbTV/\d+\.\d+\.\d+ \(.*; ?([a-zA-Z]+) ?;.*(201[1-9]).*\)'
934
1001
 
1002
+ # aspiegel.com spider (owned by Huawei)
1003
+ - regex: 'AspiegelBot'
1004
+ os_replacement: 'Other'
1005
+
935
1006
  ##########
936
1007
  # @note: Windows Phone needs to come before Windows NT 6.1 *and* before Android to catch cases such as:
937
1008
  # Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 920)...
@@ -946,6 +1017,12 @@ os_parsers:
946
1017
  - regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+)|).*Outlook-iOS-Android'
947
1018
  os_replacement: 'iOS'
948
1019
 
1020
+ # Special case for old ArcGIS Mobile products
1021
+ - regex: 'ArcGIS\.?(iOS|Android)-\d+\.\d+(?:\.\d+|)(?:[^\/]+|)\/(\d+)(?:\.(\d+)(?:\.(\d+)|)|)'
1022
+
1023
+ # Special case for new ArcGIS Mobile products
1024
+ - regex: 'ArcGISRuntime-(?:Android|iOS)\/\d+\.\d+(?:\.\d+|) \((Android|iOS) (\d+)(?:\.(\d+)(?:\.(\d+)|)|);'
1025
+
949
1026
  ##########
950
1027
  # Android
951
1028
  # can actually detect rooted android os. do we care?
@@ -1029,11 +1106,11 @@ os_parsers:
1029
1106
  os_replacement: 'Windows'
1030
1107
  os_v1_replacement: 'XP'
1031
1108
 
1032
- - regex: '(Windows NT 6\.1)'
1109
+ - regex: '(Win(?:dows NT |32NT\/)6\.1)'
1033
1110
  os_replacement: 'Windows'
1034
1111
  os_v1_replacement: '7'
1035
1112
 
1036
- - regex: '(Windows NT 6\.0)'
1113
+ - regex: '(Win(?:dows NT |32NT\/)6\.0)'
1037
1114
  os_replacement: 'Windows'
1038
1115
  os_v1_replacement: 'Vista'
1039
1116
 
@@ -1045,7 +1122,7 @@ os_parsers:
1045
1122
  os_replacement: 'Windows'
1046
1123
  os_v1_replacement: 'RT'
1047
1124
 
1048
- - regex: '(Windows NT 6\.2)'
1125
+ - regex: '(Win(?:dows NT |32NT\/)6\.2)'
1049
1126
  os_replacement: 'Windows'
1050
1127
  os_v1_replacement: '8'
1051
1128
 
@@ -1054,12 +1131,12 @@ os_parsers:
1054
1131
  os_v1_replacement: 'RT 8'
1055
1132
  os_v2_replacement: '1'
1056
1133
 
1057
- - regex: '(Windows NT 6\.3)'
1134
+ - regex: '(Win(?:dows NT |32NT\/)6\.3)'
1058
1135
  os_replacement: 'Windows'
1059
1136
  os_v1_replacement: '8'
1060
1137
  os_v2_replacement: '1'
1061
1138
 
1062
- - regex: '(Windows NT 6\.4)'
1139
+ - regex: '(Win(?:dows NT |32NT\/)6\.4)'
1063
1140
  os_replacement: 'Windows'
1064
1141
  os_v1_replacement: '10'
1065
1142
 
@@ -1568,6 +1645,16 @@ device_parsers:
1568
1645
  device_replacement: 'Spider'
1569
1646
  brand_replacement: 'Spider'
1570
1647
 
1648
+ # aspiegel.com spider (owned by Huawei)
1649
+ - regex: 'Mozilla.*Mobile.*AspiegelBot'
1650
+ device_replacement: 'Spider'
1651
+ brand_replacement: 'Spider'
1652
+ model_replacement: 'Smartphone'
1653
+ - regex: 'Mozilla.*AspiegelBot'
1654
+ device_replacement: 'Spider'
1655
+ brand_replacement: 'Spider'
1656
+ model_replacement: 'Desktop'
1657
+
1571
1658
  #########
1572
1659
  # WebBrowser for SmartWatch
1573
1660
  # @ref: https://play.google.com/store/apps/details?id=se.vaggan.webbrowser&hl=en
@@ -2866,6 +2953,15 @@ device_parsers:
2866
2953
  brand_replacement: 'Iru'
2867
2954
  model_replacement: '$1'
2868
2955
 
2956
+ #########
2957
+ # Itel Mobile
2958
+ # @ref: https://www.itel-mobile.com/global/products/
2959
+ #########
2960
+ - regex: '; *itel ([^;/]*)(?: Build|\) AppleWebKit)'
2961
+ device_replacement: 'Itel $1'
2962
+ brand_replacement: 'Itel'
2963
+ model_replacement: '$1'
2964
+
2869
2965
  #########
2870
2966
  # Ivio
2871
2967
  # @ref: http://www.ivio.com/mobile.php
@@ -3463,6 +3559,10 @@ device_parsers:
3463
3559
  device_replacement: '$1$2$3'
3464
3560
  brand_replacement: 'Nokia'
3465
3561
  model_replacement: '$3'
3562
+ - regex: '; *(TA\-\d{4})(?: Build|\) AppleWebKit)'
3563
+ device_replacement: 'Nokia $1'
3564
+ brand_replacement: 'Nokia'
3565
+ model_replacement: '$1'
3466
3566
 
3467
3567
  #########
3468
3568
  # Nook
@@ -3519,7 +3619,7 @@ device_parsers:
3519
3619
  # Oppo
3520
3620
  # @ref: http://en.oppo.com/products/
3521
3621
  #########
3522
- - regex: '; *(Find ?(?:5|7a)|R8[012]\d{1,2}|T703\d?|U70\d{1,2}T?|X90\d{1,2})(?: Build|\) AppleWebKit)'
3622
+ - regex: '; *(Find ?(?:5|7a)|R8[012]\d{1,2}|T703\d?|U70\d{1,2}T?|X90\d{1,2}|[AFR]\d{1,2}[a-z]{1,2})(?: Build|\) AppleWebKit)'
3523
3623
  device_replacement: 'Oppo $1'
3524
3624
  brand_replacement: 'Oppo'
3525
3625
  model_replacement: '$1'
@@ -3527,6 +3627,13 @@ device_parsers:
3527
3627
  device_replacement: 'Oppo $1'
3528
3628
  brand_replacement: 'Oppo'
3529
3629
  model_replacement: '$1'
3630
+ - regex: '; *(CPH\d{1,4}|RMX\d{1,4}|P[A-Z]{3}\d{2})(?: Build|\) AppleWebKit)'
3631
+ device_replacement: 'Oppo $1'
3632
+ brand_replacement: 'Oppo'
3633
+ - regex: '; *(A1601)(?: Build|\) AppleWebKit)'
3634
+ device_replacement: 'Oppo F1s'
3635
+ brand_replacement: 'Oppo'
3636
+ model_replacement: '$1'
3530
3637
 
3531
3638
  #########
3532
3639
  # Odys
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: user_agent_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.0
4
+ version: 2.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Lucas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-06 00:00:00.000000000 Z
11
+ date: 2020-05-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A simple, comprehensive Ruby gem for parsing user agent strings with
14
14
  the help of BrowserScope's UA database