user_agent_parser 2.3.0 → 2.3.1
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.
- checksums.yaml +4 -4
- data/vendor/uap-core/regexes.yaml +232 -71
- metadata +4 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7fe22bcba079cdff8ad9ae2c58b4270ebf2b877f
|
|
4
|
+
data.tar.gz: 63e31e3fdc2f9074e44dfb7e52c3774d6bc03e9e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 153fe2308068f9c566f8b5c25085f5cca6efa0bd05f8a0c0ef69c77d4b072dac6fb837dd76fc7c3f3ac6ff1fde7692d5bbf7299936e0dabe233da14fbd3b07bf
|
|
7
|
+
data.tar.gz: e8854b5205443f2de36364a1c65d51d6f1c56a49caed1d3a305c1283edcce8bc83bfde797048c5465783618887e83f76d1686509df8adf24445eecc6360ea801
|
|
@@ -8,6 +8,13 @@ user_agent_parsers:
|
|
|
8
8
|
# Pingdom
|
|
9
9
|
- regex: '(Pingdom.com_bot_version_)(\d+)\.(\d+)'
|
|
10
10
|
family_replacement: 'PingdomBot'
|
|
11
|
+
# 'Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) PingdomTMS/0.8.5 Safari/534.34'
|
|
12
|
+
- regex: '(PingdomTMS)/(\d+)\.(\d+)\.(\d+)'
|
|
13
|
+
family_replacement: 'PingdomBot'
|
|
14
|
+
|
|
15
|
+
#StatusCake
|
|
16
|
+
- regex: '(\(StatusCake\))'
|
|
17
|
+
family_replacement: 'StatusCakeBot'
|
|
11
18
|
|
|
12
19
|
# Facebook
|
|
13
20
|
- regex: '(facebookexternalhit)/(\d+)\.(\d+)'
|
|
@@ -17,20 +24,28 @@ user_agent_parsers:
|
|
|
17
24
|
- regex: 'Google.*/\+/web/snippet'
|
|
18
25
|
family_replacement: 'GooglePlusBot'
|
|
19
26
|
|
|
27
|
+
# Gmail
|
|
28
|
+
- regex: 'via ggpht.com GoogleImageProxy'
|
|
29
|
+
family_replacement: 'GmailImageProxy'
|
|
30
|
+
|
|
31
|
+
# Twitter
|
|
32
|
+
- regex: '(Twitterbot)/(\d+)\.(\d+)'
|
|
33
|
+
family_replacement: 'TwitterBot'
|
|
34
|
+
|
|
20
35
|
# Bots Pattern '/name-0.0'
|
|
21
36
|
- regex: '/((?:Ant-)?Nutch|[A-z]+[Bb]ot|[A-z]+[Ss]pider|Axtaris|fetchurl|Isara|ShopSalad|Tailsweep)[ \-](\d+)(?:\.(\d+)(?:\.(\d+))?)?'
|
|
22
37
|
# Bots Pattern 'name/0.0'
|
|
23
|
-
- regex: '(008|Altresium|Argus|BaiduMobaider|BoardReader|DNSGroup|DataparkSearch|EDI|Goodzer|Grub|INGRID|Infohelfer|LinkedInBot|LOOQ|Nutch|PathDefender|Peew|PostPost|Steeler|Twitterbot|VSE|WebCrunch|WebZIP|Y!J-BR[A-Z]|YahooSeeker|envolk|sproose|wminer)/(\d+)(?:\.(\d+)(?:\.(\d+))?)?'
|
|
38
|
+
- regex: '\b(008|Altresium|Argus|BaiduMobaider|BoardReader|DNSGroup|DataparkSearch|EDI|Goodzer|Grub|INGRID|Infohelfer|LinkedInBot|LOOQ|Nutch|PathDefender|Peew|PostPost|Steeler|Twitterbot|VSE|WebCrunch|WebZIP|Y!J-BR[A-Z]|YahooSeeker|envolk|sproose|wminer)/(\d+)(?:\.(\d+)(?:\.(\d+))?)?'
|
|
24
39
|
|
|
25
40
|
# MSIECrawler
|
|
26
41
|
- regex: '(MSIE) (\d+)\.(\d+)([a-z]\d?)?;.* MSIECrawler'
|
|
27
42
|
family_replacement: 'MSIECrawler'
|
|
28
43
|
|
|
29
44
|
# Downloader ...
|
|
30
|
-
- regex: '(Google-HTTP-Java-Client|Apache-HttpClient|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?'
|
|
45
|
+
- regex: '(Google-HTTP-Java-Client|Apache-HttpClient|http%20client|Python-urllib|HttpMonitor|TLSProber|WinHTTP|JNLP|okhttp)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?'
|
|
31
46
|
|
|
32
47
|
# Bots
|
|
33
|
-
- regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint bot|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|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]+Bot|jbot\b|KaloogaBot|Kraken|Kurzor|larbin|LEIA|LesnikBot|Linguee Bot|LinkAider|LinkedInBot|Lite Bot|Llaut|lycos|Mail\.RU_Bot|masidani_bot|Mediapartners-Google|Microsoft .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|
|
|
48
|
+
- regex: '(1470\.net crawler|50\.nu|8bo Crawler Bot|Aboundex|Accoona-[A-z]+-Agent|AdsBot-Google(?:-[a-z]+)?|altavista|AppEngine-Google|archive.*?\.org_bot|archiver|Ask Jeeves|[Bb]ai[Dd]u[Ss]pider(?:-[A-Za-z]+)*|bingbot|BingPreview|blitzbot|BlogBridge|BoardReader(?: [A-Za-z]+)*|boitho.com-dc|BotSeer|\b\w*favicon\w*\b|\bYeti(?:-[a-z]+)?|Catchpoint bot|[Cc]harlotte|Checklinks|clumboot|Comodo HTTP\(S\) Crawler|Comodo-Webinspector-Crawler|ConveraCrawler|CRAWL-E|CrawlConvera|Daumoa(?:-feedfetcher)?|Feed Seeker Bot|findlinks|Flamingo_SearchEngine|FollowSite Bot|furlbot|Genieo|gigabot|GomezAgent|gonzo1|(?:[a-zA-Z]+-)?Googlebot(?:-[a-zA-Z]+)?|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]+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 .*? Bot|mogimogi|mozDex|MJ12bot|msnbot(?:-media *)?|msrbot|netresearch|Netvibes|NewsGator[^/]*|^NING|Nutch[^/]*|Nymesis|ObjectsSearch|Orbiter|OOZBOT|PagePeeker|PagesInventory|PaxleFramework|Peeplo Screenshot Bot|PlantyNet_WebRobot|Pompos|Read%20Later|Reaper|RedCarpet|Retreiver|Riddler|Rival IQ|scooter|Scrapy|Scrubby|searchsight|seekbot|semanticdiscovery|Simpy|SimplePie|SEOstats|SimpleRSS|SiteCon|Slackbot-LinkExpanding|Slack-ImgProxy|Slurp|snappy|Speedy Spider|Squrl Java|TheUsefulbot|ThumbShotsBot|Thumbshots\.ru|TwitterBot|WhatsApp|URL2PNG|Vagabondo|VoilaBot|^vortex|Votay bot|^voyager|WASALive.Bot|Web-sniffer|WebThumb|WeSEE:[A-z]+|WhatWeb|WIRE|WordPress|Wotbox|www\.almaden\.ibm\.com|Xenu(?:.s)? Link Sleuth|Xerka [A-z]+Bot|yacy(?:bot)?|Yahoo[a-z]*Seeker|Yahoo! Slurp|Yandex\w+|YodaoBot(?:-[A-z]+)?|YottaaMonitor|Yowedo|^Zao|^Zao-Crawler|ZeBot_www\.ze\.bz|ZooShot|ZyBorg)(?:[ /]v?(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?'
|
|
34
49
|
|
|
35
50
|
# Bots General matcher 'name/0.0'
|
|
36
51
|
- regex: '(?:\/[A-Za-z0-9\.]+)? *([A-Za-z0-9 \-_\!\[\]:]*(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]*))/(\d+)(?:\.(\d+)(?:\.(\d+))?)?'
|
|
@@ -55,9 +70,11 @@ user_agent_parsers:
|
|
|
55
70
|
- regex: '\[(Pinterest)/[^\]]+\]'
|
|
56
71
|
- regex: '(Pinterest)(?: for Android(?: Tablet)?)?/(\d+)(?:\.(\d+)(?:\.(\d)+)?)?'
|
|
57
72
|
|
|
73
|
+
# Pale Moon
|
|
74
|
+
- regex: '(PaleMoon)/(\d+)\.(\d+)\.?(\d+)?'
|
|
75
|
+
family_replacement: 'Pale Moon'
|
|
76
|
+
|
|
58
77
|
# Firefox
|
|
59
|
-
- regex: '(Pale[Mm]oon)/(\d+)\.(\d+)\.?(\d+)?'
|
|
60
|
-
family_replacement: 'Pale Moon (Firefox Variant)'
|
|
61
78
|
- regex: '(Fennec)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)'
|
|
62
79
|
family_replacement: 'Firefox Mobile'
|
|
63
80
|
- regex: '(Fennec)/(\d+)\.(\d+)(pre)'
|
|
@@ -103,9 +120,15 @@ user_agent_parsers:
|
|
|
103
120
|
- regex: '(MyIBrow)/(\d+)\.(\d+)'
|
|
104
121
|
family_replacement: 'My Internet Browser'
|
|
105
122
|
|
|
123
|
+
# UC Browser
|
|
124
|
+
# we need check it before opera. In other case case UC Browser detected look like Opera Mini
|
|
125
|
+
- regex: '(UC? ?Browser|UCWEB|U3)[ /]?(\d+)\.(\d+)\.(\d+)'
|
|
126
|
+
family_replacement: 'UC Browser'
|
|
127
|
+
|
|
106
128
|
# Opera will stop at 9.80 and hide the real version in the Version string.
|
|
107
129
|
# see: http://dev.opera.com/articles/view/opera-ua-string-changes/
|
|
108
130
|
- regex: '(Opera Tablet).*Version/(\d+)\.(\d+)(?:\.(\d+))?'
|
|
131
|
+
- regex: '(Opera Mini)(?:/att)?/?(\d+)?(?:\.(\d+))?(?:\.(\d+))?'
|
|
109
132
|
- regex: '(Opera)/.+Opera Mobi.+Version/(\d+)\.(\d+)'
|
|
110
133
|
family_replacement: 'Opera Mobile'
|
|
111
134
|
- regex: '(Opera)/(\d+)\.(\d+).+Opera Mobi'
|
|
@@ -114,7 +137,6 @@ user_agent_parsers:
|
|
|
114
137
|
family_replacement: 'Opera Mobile'
|
|
115
138
|
- regex: 'Opera Mobi'
|
|
116
139
|
family_replacement: 'Opera Mobile'
|
|
117
|
-
- regex: '(Opera Mini)(?:/att)?/(\d+)\.(\d+)'
|
|
118
140
|
- regex: '(Opera)/9.80.*Version/(\d+)\.(\d+)(?:\.(\d+))?'
|
|
119
141
|
|
|
120
142
|
# Opera 14 for Android uses a WebKit render engine.
|
|
@@ -133,6 +155,10 @@ user_agent_parsers:
|
|
|
133
155
|
- regex: '(OPiOS)/(\d+).(\d+).(\d+)'
|
|
134
156
|
family_replacement: 'Opera Mini'
|
|
135
157
|
|
|
158
|
+
# Opera Neon
|
|
159
|
+
- regex: 'Chrome/.+( MMS)/(\d+).(\d+).(\d+)'
|
|
160
|
+
family_replacement: 'Opera Neon'
|
|
161
|
+
|
|
136
162
|
# Palm WebOS looks a lot like Safari.
|
|
137
163
|
- regex: '(hpw|web)OS/(\d+)\.(\d+)(?:\.(\d+))?'
|
|
138
164
|
family_replacement: 'webOS Browser'
|
|
@@ -147,7 +173,7 @@ user_agent_parsers:
|
|
|
147
173
|
|
|
148
174
|
# Lightning (for Thunderbird)
|
|
149
175
|
# http://www.mozilla.org/projects/calendar/lightning/
|
|
150
|
-
- regex: '(Lightning)/(\d+)\.(\d+)\.?((?:[ab]?\d+[a-z]*)|(?:\d*))'
|
|
176
|
+
- regex: 'Gecko/\d+ (Lightning)/(\d+)\.(\d+)\.?((?:[ab]?\d+[a-z]*)|(?:\d*))'
|
|
151
177
|
|
|
152
178
|
# Swiftfox
|
|
153
179
|
- regex: '(Firefox)/(\d+)\.(\d+)\.(\d+(?:pre)?) \(Swiftfox\)'
|
|
@@ -177,8 +203,6 @@ user_agent_parsers:
|
|
|
177
203
|
|
|
178
204
|
- regex: '(Symphony) (\d+).(\d+)'
|
|
179
205
|
|
|
180
|
-
- regex: '(Minimo)'
|
|
181
|
-
|
|
182
206
|
- regex: 'PLAYSTATION 3.+WebKit'
|
|
183
207
|
family_replacement: 'NetFront NX'
|
|
184
208
|
- regex: 'PLAYSTATION 3'
|
|
@@ -197,29 +221,37 @@ user_agent_parsers:
|
|
|
197
221
|
- regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+))?'
|
|
198
222
|
family_replacement: 'Amazon Silk'
|
|
199
223
|
|
|
200
|
-
|
|
201
224
|
# @ref: http://www.puffinbrowser.com
|
|
202
225
|
- regex: '(Puffin)/(\d+)\.(\d+)(?:\.(\d+))?'
|
|
203
226
|
|
|
227
|
+
# Edge Mobile
|
|
228
|
+
- regex: 'Windows Phone .*(Edge)/(\d+)\.(\d+)'
|
|
229
|
+
family_replacement: 'Edge Mobile'
|
|
230
|
+
|
|
231
|
+
# Samsung Internet (based on Chrome, but lacking some features)
|
|
232
|
+
- regex: '(SamsungBrowser)/(\d+)\.(\d+)'
|
|
233
|
+
family_replacement: 'Samsung Internet'
|
|
234
|
+
|
|
235
|
+
# Baidu Browsers (desktop spoofs chrome & IE, explorer is mobile)
|
|
236
|
+
- regex: '(baidubrowser)[/\s](\d+)(?:\.(\d+)(?:\.(\d+))?)?'
|
|
237
|
+
family_replacement: 'Baidu Browser'
|
|
238
|
+
- regex: '(FlyFlow)/(\d+)\.(\d+)'
|
|
239
|
+
family_replacement: 'Baidu Explorer'
|
|
240
|
+
|
|
204
241
|
# Chrome Mobile
|
|
205
242
|
- regex: '(CrMo)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
|
206
243
|
family_replacement: 'Chrome Mobile'
|
|
207
244
|
- regex: '(CriOS)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
|
208
245
|
family_replacement: 'Chrome Mobile iOS'
|
|
209
|
-
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+) Mobile'
|
|
246
|
+
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+) Mobile(?:[ /]|$)'
|
|
247
|
+
family_replacement: 'Chrome Mobile'
|
|
248
|
+
- regex: ' Mobile .*(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
|
210
249
|
family_replacement: 'Chrome Mobile'
|
|
211
250
|
|
|
212
251
|
# Chrome Frame must come before MSIE.
|
|
213
252
|
- regex: '(chromeframe)/(\d+)\.(\d+)\.(\d+)'
|
|
214
253
|
family_replacement: 'Chrome Frame'
|
|
215
254
|
|
|
216
|
-
# UC Browser
|
|
217
|
-
- regex: '(UCBrowser)[ /](\d+)\.(\d+)\.(\d+)'
|
|
218
|
-
family_replacement: 'UC Browser'
|
|
219
|
-
- regex: '(UC Browser)[ /](\d+)\.(\d+)\.(\d+)'
|
|
220
|
-
- regex: '(UC Browser|UCBrowser|UCWEB)(\d+)\.(\d+)\.(\d+)'
|
|
221
|
-
family_replacement: 'UC Browser'
|
|
222
|
-
|
|
223
255
|
# Tizen Browser (second case included in browser/major.minor regex)
|
|
224
256
|
- regex: '(SLP Browser)/(\d+)\.(\d+)'
|
|
225
257
|
family_replacement: 'Tizen Browser'
|
|
@@ -228,12 +260,6 @@ user_agent_parsers:
|
|
|
228
260
|
- regex: '(SE 2\.X) MetaSr (\d+)\.(\d+)'
|
|
229
261
|
family_replacement: 'Sogou Explorer'
|
|
230
262
|
|
|
231
|
-
# Baidu Browsers (desktop spoofs chrome & IE, explorer is mobile)
|
|
232
|
-
- regex: '(baidubrowser)[/\s](\d+)'
|
|
233
|
-
family_replacement: 'Baidu Browser'
|
|
234
|
-
- regex: '(FlyFlow)/(\d+)\.(\d+)'
|
|
235
|
-
family_replacement: 'Baidu Explorer'
|
|
236
|
-
|
|
237
263
|
# QQ Browsers
|
|
238
264
|
- regex: '(MQQBrowser/Mini)(?:(\d+)(?:\.(\d+)(?:\.(\d+))?)?)?'
|
|
239
265
|
family_replacement: 'QQ Browser Mini'
|
|
@@ -260,20 +286,24 @@ user_agent_parsers:
|
|
|
260
286
|
# AOL Browser (IE-based)
|
|
261
287
|
- regex: '(AOL) (\d+)\.(\d+); AOLBuild (\d+)'
|
|
262
288
|
|
|
289
|
+
# MxBrowser is Maxthon
|
|
290
|
+
- regex: '(MxBrowser)/(\d+)\.(\d+)(?:\.(\d+))?'
|
|
291
|
+
family_replacement: 'Maxthon'
|
|
292
|
+
|
|
263
293
|
#### END SPECIAL CASES TOP ####
|
|
264
294
|
|
|
265
295
|
#### MAIN CASES - this catches > 50% of all browsers ####
|
|
266
296
|
|
|
267
297
|
# Browser/major_version.minor_version.beta_version
|
|
268
|
-
- regex: '(
|
|
298
|
+
- regex: '\b(MobileIron|Crosswalk|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Spotify|Flock|Netscape|Lunascape|WebPilot|NetFront|Netfront|Konqueror|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|Opera Mini|iCab|NetNewsWire|ThunderBrowse|Iris|UP\.Browser|Bunjalloo|Google Earth|Raven for Mac|Openwave|MacOutlook|Electron)/(\d+)\.(\d+)\.(\d+)'
|
|
269
299
|
|
|
270
300
|
# Outlook 2007
|
|
271
|
-
- regex: 'MSOffice 12'
|
|
301
|
+
- regex: 'Microsoft Office Outlook 12\.\d+\.\d+|MSOffice 12'
|
|
272
302
|
family_replacement: 'Outlook'
|
|
273
303
|
v1_replacement: '2007'
|
|
274
304
|
|
|
275
305
|
# Outlook 2010
|
|
276
|
-
- regex: 'MSOffice 14'
|
|
306
|
+
- regex: 'Microsoft Outlook 14\.\d+\.\d+|MSOffice 14'
|
|
277
307
|
family_replacement: 'Outlook'
|
|
278
308
|
v1_replacement: '2010'
|
|
279
309
|
|
|
@@ -282,31 +312,63 @@ user_agent_parsers:
|
|
|
282
312
|
family_replacement: 'Outlook'
|
|
283
313
|
v1_replacement: '2013'
|
|
284
314
|
|
|
315
|
+
# Outlook 2016
|
|
316
|
+
- regex: 'Microsoft Outlook (?:Mail )?16\.\d+\.\d+'
|
|
317
|
+
family_replacement: 'Outlook'
|
|
318
|
+
v1_replacement: '2016'
|
|
319
|
+
|
|
320
|
+
# Windows Live Mail
|
|
321
|
+
- regex: 'Outlook-Express\/7\.0.*'
|
|
322
|
+
family_replacement: 'Windows Live Mail'
|
|
323
|
+
|
|
285
324
|
# Apple Air Mail
|
|
286
325
|
- regex: '(Airmail) (\d+)\.(\d+)(?:\.(\d+))?'
|
|
287
326
|
|
|
288
327
|
# Thunderbird
|
|
289
|
-
- regex: '(Thunderbird)/(\d+)\.(\d+)
|
|
328
|
+
- regex: '(Thunderbird)/(\d+)\.(\d+)(?:\.(\d+(?:pre)?))?'
|
|
290
329
|
family_replacement: 'Thunderbird'
|
|
291
330
|
|
|
331
|
+
# Postbox
|
|
332
|
+
- regex: '(Postbox)/(\d+)\.(\d+)\.(\d+)'
|
|
333
|
+
family_replacement: 'Postbox'
|
|
334
|
+
|
|
335
|
+
# Barca
|
|
336
|
+
- regex: '(Barca(?:Pro)?)/(\d+)\.(\d+)(?:\.(\d+))?'
|
|
337
|
+
family_replacement: 'Barca'
|
|
338
|
+
|
|
339
|
+
# Lotus Notes
|
|
340
|
+
- regex: '(Lotus-Notes)/(\d+)\.(\d+)(?:\.(\d+))?'
|
|
341
|
+
family_replacement: 'Lotus Notes'
|
|
342
|
+
|
|
292
343
|
# Vivaldi uses "Vivaldi"
|
|
293
344
|
- regex: '(Vivaldi)/(\d+)\.(\d+)\.(\d+)'
|
|
294
345
|
|
|
295
346
|
# Edge/major_version.minor_version
|
|
296
347
|
- regex: '(Edge)/(\d+)\.(\d+)'
|
|
297
348
|
|
|
298
|
-
#
|
|
299
|
-
- regex: '(
|
|
349
|
+
# Brave Browser https://brave.com/
|
|
350
|
+
- regex: '(brave)/(\d+)\.(\d+)\.(\d+) Chrome'
|
|
351
|
+
family_replacement: 'Brave'
|
|
352
|
+
|
|
353
|
+
# Iron Browser ~since version 50
|
|
354
|
+
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)[\d.]* Iron[^/]'
|
|
355
|
+
family_replacement: 'Iron'
|
|
300
356
|
|
|
301
357
|
# Dolphin Browser
|
|
302
358
|
# @ref: http://www.dolphin.com
|
|
303
359
|
- regex: '\b(Dolphin)(?: |HDCN/|/INT\-)(\d+)\.(\d+)\.?(\d+)?'
|
|
304
360
|
|
|
361
|
+
# Headless Chrome
|
|
362
|
+
# https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md
|
|
363
|
+
# Currently only available on Linux
|
|
364
|
+
- regex: 'HeadlessChrome'
|
|
365
|
+
family_replacement: 'HeadlessChrome'
|
|
366
|
+
|
|
305
367
|
# Browser/major_version.minor_version
|
|
306
|
-
- regex: '(bingbot|Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|
|
|
368
|
+
- regex: '(bingbot|Bolt|AdobeAIR|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|iTunes|MacAppStore|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser|mDolphin|qutebrowser|Otter|QupZilla|MailBar|kmail2|YahooMobileMail|ExchangeWebServices|ExchangeServicesClient|Dragon|Outlook-iOS-Android)/(\d+)\.(\d+)(?:\.(\d+))?'
|
|
307
369
|
|
|
308
370
|
# Chrome/Chromium/major_version.minor_version
|
|
309
|
-
- regex: '(Chromium|Chrome)/(\d+)\.(\d+)'
|
|
371
|
+
- regex: '(Chromium|Chrome)/(\d+)\.(\d+)(?:\.(\d+))?'
|
|
310
372
|
|
|
311
373
|
##########
|
|
312
374
|
# IE Mobile needs to happen before Android to catch cases such as:
|
|
@@ -320,10 +382,13 @@ user_agent_parsers:
|
|
|
320
382
|
- regex: '(IEMobile)[ /](\d+)\.(\d+)'
|
|
321
383
|
family_replacement: 'IE Mobile'
|
|
322
384
|
|
|
385
|
+
# Baca Berita App News Reader
|
|
386
|
+
- regex: '(BacaBerita App)\/(\d+)\.(\d+)\.(\d+)'
|
|
387
|
+
|
|
323
388
|
# Browser major_version.minor_version.beta_version (space instead of slash)
|
|
324
389
|
- regex: '(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\d+)\.(\d+)\.(\d+)'
|
|
325
390
|
# Browser major_version.minor_version (space instead of slash)
|
|
326
|
-
- regex: '(iCab|Lunascape|Opera|Android|Jasmine|Polaris) (\d+)\.(\d+)\.?(\d+)?'
|
|
391
|
+
- regex: '(iCab|Lunascape|Opera|Android|Jasmine|Polaris|Microsoft SkyDriveSync|The Bat!) (\d+)\.(\d+)\.?(\d+)?'
|
|
327
392
|
|
|
328
393
|
# Kindle WebKit
|
|
329
394
|
- regex: '(Kindle)/(\d+)\.(\d+)'
|
|
@@ -353,6 +418,10 @@ user_agent_parsers:
|
|
|
353
418
|
- regex: '(MSIE) (\d+)\.(\d+).*XBLWP7'
|
|
354
419
|
family_replacement: 'IE Large Screen'
|
|
355
420
|
|
|
421
|
+
# Slack desktop client (needs to be before Apple Mail as it gets wrongly detected on Mac OS otherwise)
|
|
422
|
+
- regex: '(Slack_SSB)/(\d+)\.(\d+)\.(\d+)'
|
|
423
|
+
family_replacement: 'Slack Desktop Client'
|
|
424
|
+
|
|
356
425
|
#### END MAIN CASES ####
|
|
357
426
|
|
|
358
427
|
#### SPECIAL CASES ####
|
|
@@ -381,22 +450,18 @@ user_agent_parsers:
|
|
|
381
450
|
family_replacement: 'Bon Echo'
|
|
382
451
|
|
|
383
452
|
# @note: iOS / OSX Applications
|
|
384
|
-
- regex: '(iPod).+Version/(\d+)\.(\d+)
|
|
385
|
-
family_replacement: 'Mobile Safari'
|
|
386
|
-
- regex: '(iPod).*Version/(\d+)\.(\d+)'
|
|
387
|
-
family_replacement: 'Mobile Safari'
|
|
388
|
-
- regex: '(iPhone).*Version/(\d+)\.(\d+)\.(\d+)'
|
|
453
|
+
- regex: '(iPod|iPhone|iPad).+Version/(\d+)\.(\d+)(?:\.(\d+))?.*[ +]Safari'
|
|
389
454
|
family_replacement: 'Mobile Safari'
|
|
390
|
-
- regex: '(iPhone)
|
|
455
|
+
- regex: '(iPod|iPhone|iPad).+Version/(\d+)\.(\d+)(?:\.(\d+))?'
|
|
456
|
+
family_replacement: 'Mobile Safari UI/WKWebView'
|
|
457
|
+
- regex: '(iPod|iPod touch|iPhone|iPad);.*CPU.*OS[ +](\d+)_(\d+)(?:_(\d+))?.*Mobile.*[ +]Safari'
|
|
391
458
|
family_replacement: 'Mobile Safari'
|
|
392
|
-
- regex: '(iPad).*
|
|
393
|
-
family_replacement: 'Mobile Safari'
|
|
394
|
-
- regex: '(iPad).*
|
|
395
|
-
family_replacement: 'Mobile Safari'
|
|
396
|
-
- regex: '(iPod|iPhone|iPad);.*CPU.*OS (\d+)_(\d+)(?:_(\d+))?.*Mobile'
|
|
459
|
+
- regex: '(iPod|iPod touch|iPhone|iPad);.*CPU.*OS[ +](\d+)_(\d+)(?:_(\d+))?.*Mobile'
|
|
460
|
+
family_replacement: 'Mobile Safari UI/WKWebView'
|
|
461
|
+
- regex: '(iPod|iPhone|iPad).* Safari'
|
|
397
462
|
family_replacement: 'Mobile Safari'
|
|
398
463
|
- regex: '(iPod|iPhone|iPad)'
|
|
399
|
-
family_replacement: 'Mobile Safari'
|
|
464
|
+
family_replacement: 'Mobile Safari UI/WKWebView'
|
|
400
465
|
|
|
401
466
|
- regex: '(AvantGo) (\d+).(\d+)'
|
|
402
467
|
|
|
@@ -437,11 +502,9 @@ user_agent_parsers:
|
|
|
437
502
|
- regex: '(Nokia)[EN]?(\d+)'
|
|
438
503
|
|
|
439
504
|
# BlackBerry devices
|
|
440
|
-
- regex: '(BB10);'
|
|
441
|
-
family_replacement: 'BlackBerry WebKit'
|
|
442
505
|
- regex: '(PlayBook).+RIM Tablet OS (\d+)\.(\d+)\.(\d+)'
|
|
443
506
|
family_replacement: 'BlackBerry WebKit'
|
|
444
|
-
- regex: '(Black[bB]erry).+Version/(\d+)\.(\d+)\.(\d+)'
|
|
507
|
+
- regex: '(Black[bB]erry|BB10).+Version/(\d+)\.(\d+)\.(\d+)'
|
|
445
508
|
family_replacement: 'BlackBerry WebKit'
|
|
446
509
|
- regex: '(Black[bB]erry)\s?(\d+)'
|
|
447
510
|
family_replacement: 'BlackBerry'
|
|
@@ -500,7 +563,7 @@ user_agent_parsers:
|
|
|
500
563
|
|
|
501
564
|
# apple mail - not directly detectable, have it after Safari stuff
|
|
502
565
|
- regex: '(AppleWebKit)/(\d+)\.(\d+)\.(\d+)'
|
|
503
|
-
family_replacement: '
|
|
566
|
+
family_replacement: 'Apple Mail'
|
|
504
567
|
|
|
505
568
|
# AFTER THE EDGE CASES ABOVE!
|
|
506
569
|
# AFTER IE11
|
|
@@ -514,8 +577,19 @@ user_agent_parsers:
|
|
|
514
577
|
- regex: '(python-requests)/(\d+)\.(\d+)'
|
|
515
578
|
family_replacement: 'Python Requests'
|
|
516
579
|
|
|
580
|
+
# headless user-agents
|
|
581
|
+
- regex: '\b(Windows-Update-Agent|Microsoft-CryptoAPI|SophosUpdateManager|SophosAgent|Debian APT-HTTP|Ubuntu APT-HTTP|libcurl-agent|libwww-perl|urlgrabber|curl|Wget|OpenBSD ftp|jupdate)(?:[ /](\d+)(?:\.(\d+)(?:\.(\d+))?)?)?'
|
|
582
|
+
|
|
517
583
|
- regex: '(Java)[/ ]{0,1}\d+\.(\d+)\.(\d+)[_-]*([a-zA-Z0-9]+)*'
|
|
518
584
|
|
|
585
|
+
# Roku Digital-Video-Players https://www.roku.com/
|
|
586
|
+
- regex: '^(Roku)/DVP-(\d+)\.(\d+)'
|
|
587
|
+
|
|
588
|
+
# Kurio App News Reader https://kurio.co.id/
|
|
589
|
+
- regex: '(Kurio)\/(\d+)\.(\d+)\.(\d+)'
|
|
590
|
+
family_replacement: 'Kurio App'
|
|
591
|
+
|
|
592
|
+
|
|
519
593
|
os_parsers:
|
|
520
594
|
##########
|
|
521
595
|
# HbbTV vendors
|
|
@@ -585,6 +659,10 @@ os_parsers:
|
|
|
585
659
|
|
|
586
660
|
- regex: '(Windows Phone) (?:OS[ /])?(\d+)\.(\d+)'
|
|
587
661
|
|
|
662
|
+
# Again a MS-special one: iPhone.*Outlook-iOS-Android/x.x is erroneously detected as Android
|
|
663
|
+
- regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+))?.*Outlook-iOS-Android'
|
|
664
|
+
os_replacement: 'iOS'
|
|
665
|
+
|
|
588
666
|
##########
|
|
589
667
|
# Android
|
|
590
668
|
# can actually detect rooted android os. do we care?
|
|
@@ -613,7 +691,7 @@ os_parsers:
|
|
|
613
691
|
# UCWEB
|
|
614
692
|
- regex: '^UCWEB.*; (Adr) (\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?;'
|
|
615
693
|
os_replacement: 'Android'
|
|
616
|
-
- regex: '^UCWEB.*; (iPad
|
|
694
|
+
- regex: '^UCWEB.*; (iPad|iPh|iPd) OS (\d+)_(\d+)(?:_(\d+))?;'
|
|
617
695
|
os_replacement: 'iOS'
|
|
618
696
|
- regex: '^UCWEB.*; (wds) (\d+)\.(\d+)(?:\.(\d+))?;'
|
|
619
697
|
os_replacement: 'Windows Phone'
|
|
@@ -696,14 +774,14 @@ os_parsers:
|
|
|
696
774
|
# Tizen OS from Samsung
|
|
697
775
|
# spoofs Android so pushing it above
|
|
698
776
|
##########
|
|
699
|
-
- regex: '(Tizen)/(\d+)\.(\d+)'
|
|
777
|
+
- regex: '(Tizen)[/ ](\d+)\.(\d+)'
|
|
700
778
|
|
|
701
779
|
##########
|
|
702
780
|
# Mac OS
|
|
703
781
|
# @ref: http://en.wikipedia.org/wiki/Mac_OS_X#Versions
|
|
704
782
|
# @ref: http://www.puredarwin.org/curious/versions
|
|
705
783
|
##########
|
|
706
|
-
- regex: '((?:Mac ?|; )OS X)[\s
|
|
784
|
+
- regex: '((?:Mac[ +]?|; )OS[ +]X)[\s+/](?:(\d+)[_.](\d+)(?:[_.](\d+))?|Mach-O)'
|
|
707
785
|
os_replacement: 'Mac OS X'
|
|
708
786
|
# Leopard
|
|
709
787
|
- regex: ' (Dar)(win)/(9).(\d+).*\((?:i386|x86_64|Power Macintosh)\)'
|
|
@@ -750,7 +828,7 @@ os_parsers:
|
|
|
750
828
|
- regex: '(Apple\s?TV)(?:/(\d+)\.(\d+))?'
|
|
751
829
|
os_replacement: 'ATV OS X'
|
|
752
830
|
|
|
753
|
-
- regex: '(CPU OS|iPhone OS|CPU iPhone) +(\d+)[_\.](\d+)(?:[_\.](\d+))?'
|
|
831
|
+
- regex: '(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS)[ +]+(\d+)[_\.](\d+)(?:[_\.](\d+))?'
|
|
754
832
|
os_replacement: 'iOS'
|
|
755
833
|
|
|
756
834
|
# remaining cases are mostly only opera uas, so catch opera as to not catch iphone spoofs
|
|
@@ -797,11 +875,30 @@ os_parsers:
|
|
|
797
875
|
os_replacement: 'Mac OS X'
|
|
798
876
|
os_v1_replacement: '10'
|
|
799
877
|
os_v2_replacement: '10'
|
|
878
|
+
- regex: '(CF)(Network)/(760)\.(\d)'
|
|
879
|
+
os_replacement: 'Mac OS X'
|
|
880
|
+
os_v1_replacement: '10'
|
|
881
|
+
os_v2_replacement: '11'
|
|
800
882
|
- regex: '(CF)(Network)/758\.(\d)'
|
|
801
883
|
os_replacement: 'iOS'
|
|
802
884
|
os_v1_replacement: '9'
|
|
885
|
+
- regex: '(CF)(Network)/808\.(\d)'
|
|
886
|
+
os_replacement: 'iOS'
|
|
887
|
+
os_v1_replacement: '10'
|
|
803
888
|
|
|
804
889
|
##########
|
|
890
|
+
# CFNetwork macOS Apps (must be before CFNetwork iOS Apps
|
|
891
|
+
# @ref: https://en.wikipedia.org/wiki/Darwin_(operating_system)#Release_history
|
|
892
|
+
##########
|
|
893
|
+
- regex: 'CFNetwork/.* Darwin/16\.\d+.*\(x86_64\)'
|
|
894
|
+
os_replacement: 'Mac OS X'
|
|
895
|
+
os_v1_replacement: '10'
|
|
896
|
+
os_v2_replacement: '12'
|
|
897
|
+
- regex: 'CFNetwork/8.* Darwin/15\.\d+.*\(x86_64\)'
|
|
898
|
+
os_replacement: 'Mac OS X'
|
|
899
|
+
os_v1_replacement: '10'
|
|
900
|
+
os_v2_replacement: '11'
|
|
901
|
+
##########
|
|
805
902
|
# CFNetwork iOS Apps
|
|
806
903
|
# @ref: https://en.wikipedia.org/wiki/Darwin_(operating_system)#Release_history
|
|
807
904
|
##########
|
|
@@ -828,9 +925,19 @@ os_parsers:
|
|
|
828
925
|
os_replacement: 'iOS'
|
|
829
926
|
os_v1_replacement: '9'
|
|
830
927
|
os_v2_replacement: '0'
|
|
928
|
+
- regex: 'CFNetwork/8.* Darwin/(16)\.\d+'
|
|
929
|
+
os_replacement: 'iOS'
|
|
930
|
+
os_v1_replacement: '10'
|
|
831
931
|
# iOS Apps
|
|
832
|
-
- regex: '\b(iOS[ /]|iPhone(?:/| v|[ _]OS[/,]|; | OS : |\d,\d/|\d,\d; )|iPad/)(\d{1,2})[_\.](\d{1,2})(?:[_\.](\d+))?'
|
|
932
|
+
- regex: '\b(iOS[ /]|iOS; |iPhone(?:/| v|[ _]OS[/,]|; | OS : |\d,\d/|\d,\d; )|iPad/)(\d{1,2})[_\.](\d{1,2})(?:[_\.](\d+))?'
|
|
833
933
|
os_replacement: 'iOS'
|
|
934
|
+
- regex: '\((iOS);'
|
|
935
|
+
|
|
936
|
+
##########
|
|
937
|
+
# Apple TV
|
|
938
|
+
##########
|
|
939
|
+
- regex: '(tvOS)/(\d+).(\d+)'
|
|
940
|
+
os_replacement: 'tvOS'
|
|
834
941
|
|
|
835
942
|
##########
|
|
836
943
|
# Chrome OS
|
|
@@ -949,6 +1056,12 @@ os_parsers:
|
|
|
949
1056
|
|
|
950
1057
|
- regex: '(WebTV)/(\d+).(\d+)'
|
|
951
1058
|
|
|
1059
|
+
##########
|
|
1060
|
+
# Chromecast
|
|
1061
|
+
##########
|
|
1062
|
+
- regex: '(CrKey)(?:[/](\d+)\.(\d+)(?:\.(\d+))?)?'
|
|
1063
|
+
os_replacement: 'Chromecast'
|
|
1064
|
+
|
|
952
1065
|
##########
|
|
953
1066
|
# Misc mobile
|
|
954
1067
|
##########
|
|
@@ -970,20 +1083,23 @@ os_parsers:
|
|
|
970
1083
|
- regex: '\((Bada);'
|
|
971
1084
|
|
|
972
1085
|
# just os
|
|
973
|
-
- regex: '(Windows|Android|WeTab|Maemo)'
|
|
974
|
-
- regex: '(Ubuntu|Kubuntu|Arch Linux|CentOS|Slackware|Gentoo|openSUSE|SUSE|Red Hat|Fedora|PCLinuxOS|
|
|
1086
|
+
- regex: '(Windows|Android|WeTab|Maemo|Web0S)'
|
|
1087
|
+
- regex: '(Ubuntu|Kubuntu|Arch Linux|CentOS|Slackware|Gentoo|openSUSE|SUSE|Red Hat|Fedora|PCLinuxOS|Mageia|(?:Free|Open|Net|\b)BSD)'
|
|
975
1088
|
# Linux + Kernel Version
|
|
976
1089
|
- regex: '(Linux)(?:[ /](\d+)\.(\d+)(?:\.(\d+))?)?'
|
|
977
1090
|
- regex: 'SunOS'
|
|
978
1091
|
os_replacement: 'Solaris'
|
|
979
1092
|
|
|
1093
|
+
# Roku Digital-Video-Players https://www.roku.com/
|
|
1094
|
+
- regex: '^(Roku)/DVP-(\d+)\.(\d+)'
|
|
1095
|
+
|
|
980
1096
|
device_parsers:
|
|
981
1097
|
|
|
982
1098
|
#########
|
|
983
1099
|
# Mobile Spiders
|
|
984
1100
|
# Catch the mobile crawler before checking for iPhones / Androids.
|
|
985
1101
|
#########
|
|
986
|
-
- regex: '(?:(?:iPhone|Windows CE|Android).*(?:(?:Bot|Yeti)-Mobile|YRSpider|bots?/\d|(?:bot|spider)\.html)|AdsBot-Google-Mobile.*iPhone)'
|
|
1102
|
+
- regex: '(?:(?:iPhone|Windows CE|Windows Phone|Android).*(?:(?:Bot|Yeti)-Mobile|YRSpider|BingPreview|bots?/\d|(?:bot|spider)\.html)|AdsBot-Google-Mobile.*iPhone)'
|
|
987
1103
|
regex_flag: 'i'
|
|
988
1104
|
device_replacement: 'Spider'
|
|
989
1105
|
brand_replacement: 'Spider'
|
|
@@ -1877,6 +1993,10 @@ device_parsers:
|
|
|
1877
1993
|
device_replacement: '$1'
|
|
1878
1994
|
brand_replacement: 'Google'
|
|
1879
1995
|
model_replacement: '$1'
|
|
1996
|
+
- regex: '; *(Pixel \w+) Build'
|
|
1997
|
+
device_replacement: '$1'
|
|
1998
|
+
brand_replacement: 'Google'
|
|
1999
|
+
model_replacement: '$1'
|
|
1880
2000
|
|
|
1881
2001
|
#########
|
|
1882
2002
|
# Gigabyte
|
|
@@ -2029,7 +2149,7 @@ device_parsers:
|
|
|
2029
2149
|
device_replacement: '$1'
|
|
2030
2150
|
brand_replacement: 'Huawei'
|
|
2031
2151
|
model_replacement: '$1'
|
|
2032
|
-
- regex: '; *([^;]+) Build/Huawei'
|
|
2152
|
+
- regex: '; *([^;]+) Build/(?:Huawei|HUAWEI)'
|
|
2033
2153
|
device_replacement: '$1'
|
|
2034
2154
|
brand_replacement: 'Huawei'
|
|
2035
2155
|
model_replacement: '$1'
|
|
@@ -2045,7 +2165,7 @@ device_parsers:
|
|
|
2045
2165
|
device_replacement: 'Huawei Ideos$1'
|
|
2046
2166
|
brand_replacement: 'Huawei'
|
|
2047
2167
|
model_replacement: 'Ideos$1'
|
|
2048
|
-
- regex: '; *(Orange Daytona|Pulse|Pulse Mini|Vodafone 858|C8500|C8600|C8650|C8660) Build'
|
|
2168
|
+
- regex: '; *(Orange Daytona|Pulse|Pulse Mini|Vodafone 858|C8500|C8600|C8650|C8660|Nexus 6P|ATH-.+?) Build[/ ]'
|
|
2049
2169
|
device_replacement: 'Huawei $1'
|
|
2050
2170
|
brand_replacement: 'Huawei'
|
|
2051
2171
|
model_replacement: '$1'
|
|
@@ -2567,7 +2687,7 @@ device_parsers:
|
|
|
2567
2687
|
# LG
|
|
2568
2688
|
# @ref: http://www.lg.com/uk/mobile
|
|
2569
2689
|
#########
|
|
2570
|
-
- regex: '; *(E[34][0-9]{2}|LS[6-8][0-9]{2}|VS[6-9][0-9]+[^;/]+|Nexus
|
|
2690
|
+
- regex: '; *(E[34][0-9]{2}|LS[6-8][0-9]{2}|VS[6-9][0-9]+[^;/]+|Nexus 4|Nexus 5X?|GT540f?|Optimus (?:2X|G|4X HD)|OptimusX4HD) *(?:Build|;)'
|
|
2571
2691
|
device_replacement: '$1'
|
|
2572
2692
|
brand_replacement: 'LG'
|
|
2573
2693
|
model_replacement: '$1'
|
|
@@ -2587,6 +2707,10 @@ device_parsers:
|
|
|
2587
2707
|
device_replacement: '$1 $2'
|
|
2588
2708
|
brand_replacement: 'LG'
|
|
2589
2709
|
model_replacement: '$2'
|
|
2710
|
+
- regex: '(Web0S); Linux/(SmartTV)'
|
|
2711
|
+
device_replacement: 'LG $1 $2'
|
|
2712
|
+
brand_replacement: 'LG'
|
|
2713
|
+
model_replacement: '$1 $2'
|
|
2590
2714
|
|
|
2591
2715
|
#########
|
|
2592
2716
|
# Malata
|
|
@@ -2959,6 +3083,19 @@ device_parsers:
|
|
|
2959
3083
|
brand_replacement: 'Odys'
|
|
2960
3084
|
model_replacement: '$1'
|
|
2961
3085
|
|
|
3086
|
+
#########
|
|
3087
|
+
# OnePlus
|
|
3088
|
+
# @ref https://oneplus.net/
|
|
3089
|
+
#########
|
|
3090
|
+
- regex: '; (ONE [a-zA-Z]\d+) Build/'
|
|
3091
|
+
device_replacement: 'OnePlus $1'
|
|
3092
|
+
brand_replacement: 'OnePlus'
|
|
3093
|
+
model_replacement: '$1'
|
|
3094
|
+
- regex: '; (ONEPLUS [a-zA-Z]\d+) Build/'
|
|
3095
|
+
device_replacement: 'OnePlus $1'
|
|
3096
|
+
brand_replacement: 'OnePlus'
|
|
3097
|
+
model_replacement: '$1'
|
|
3098
|
+
|
|
2962
3099
|
#########
|
|
2963
3100
|
# Orion
|
|
2964
3101
|
# @ref: http://www.orion.ua/en/products/computer-products/tablet-pcs.html
|
|
@@ -3199,6 +3336,15 @@ device_parsers:
|
|
|
3199
3336
|
brand_replacement: 'Quanta'
|
|
3200
3337
|
model_replacement: '$1'
|
|
3201
3338
|
|
|
3339
|
+
#########
|
|
3340
|
+
# RCA
|
|
3341
|
+
# @ref: http://rcamobilephone.com/
|
|
3342
|
+
#########
|
|
3343
|
+
- regex: '; (RCT\w+) Build/'
|
|
3344
|
+
device_replacement: '$1'
|
|
3345
|
+
brand_replacement: 'RCA'
|
|
3346
|
+
model_replacement: '$1'
|
|
3347
|
+
|
|
3202
3348
|
#########
|
|
3203
3349
|
# Rockchip
|
|
3204
3350
|
# @ref: http://www.rock-chips.com/a/cn/product/index.html
|
|
@@ -3837,7 +3983,7 @@ device_parsers:
|
|
|
3837
3983
|
# XiaoMi
|
|
3838
3984
|
# @ref: http://www.xiaomi.com/event/buyphone
|
|
3839
3985
|
#########
|
|
3840
|
-
- regex: '; *(MI
|
|
3986
|
+
- regex: '; *((MI|HM|MI-ONE|Redmi)[ -](NOTE |Note )?[^;/]*) (Build|MIUI)/'
|
|
3841
3987
|
device_replacement: 'XiaoMi $1'
|
|
3842
3988
|
brand_replacement: 'XiaoMi'
|
|
3843
3989
|
model_replacement: '$1'
|
|
@@ -4282,10 +4428,10 @@ device_parsers:
|
|
|
4282
4428
|
# cannot determine specific device type from ua string. (3g, 3gs, 4, etc)
|
|
4283
4429
|
##########
|
|
4284
4430
|
# @note: on some ua the device can be identified e.g. iPhone5,1
|
|
4285
|
-
- regex: '(
|
|
4431
|
+
- regex: '(iPhone|iPad|iPod)(\d+,\d+)'
|
|
4286
4432
|
device_replacement: '$1'
|
|
4287
4433
|
brand_replacement: 'Apple'
|
|
4288
|
-
model_replacement: '$1'
|
|
4434
|
+
model_replacement: '$1$2'
|
|
4289
4435
|
# @note: iPad needs to be before iPhone
|
|
4290
4436
|
- regex: '(iPad)(?:;| Simulator;)'
|
|
4291
4437
|
device_replacement: '$1'
|
|
@@ -4304,6 +4450,12 @@ device_parsers:
|
|
|
4304
4450
|
device_replacement: '$1$2,$3'
|
|
4305
4451
|
brand_replacement: 'Apple'
|
|
4306
4452
|
model_replacement: '$1$2,$3'
|
|
4453
|
+
# @note: newer desktop applications don't show device info
|
|
4454
|
+
# This is here so as to not have them recorded as iOS-Device
|
|
4455
|
+
- regex: 'CFNetwork/.* Darwin/\d+\.\d+\.\d+ \(x86_64\)'
|
|
4456
|
+
device_replacement: 'Mac'
|
|
4457
|
+
brand_replacement: 'Apple'
|
|
4458
|
+
model_replacement: 'Mac'
|
|
4307
4459
|
# @note: iOS applications do not show device info
|
|
4308
4460
|
- regex: 'CFNetwork/.* Darwin/\d'
|
|
4309
4461
|
device_replacement: 'iOS-Device'
|
|
@@ -4569,6 +4721,11 @@ device_parsers:
|
|
|
4569
4721
|
##########
|
|
4570
4722
|
# Samsung
|
|
4571
4723
|
##########
|
|
4724
|
+
# Samsung Smart-TV
|
|
4725
|
+
- regex: '(SMART-TV); .* Tizen '
|
|
4726
|
+
device_replacement: 'Samsung $1'
|
|
4727
|
+
brand_replacement: 'Samsung'
|
|
4728
|
+
model_replacement: '$1'
|
|
4572
4729
|
# Samsung Symbian Devices
|
|
4573
4730
|
- regex: 'SymbianOS/9\.\d.* Samsung[/\-]([A-Za-z0-9 \-]+)'
|
|
4574
4731
|
device_replacement: 'Samsung $1'
|
|
@@ -4659,27 +4816,27 @@ device_parsers:
|
|
|
4659
4816
|
#########
|
|
4660
4817
|
# Android General Device Matching (far from perfect)
|
|
4661
4818
|
#########
|
|
4662
|
-
- regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{0,2}; WOWMobile (.+) Build'
|
|
4819
|
+
- regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{0,2}; WOWMobile (.+) Build[/ ]'
|
|
4663
4820
|
brand_replacement: 'Generic_Android'
|
|
4664
4821
|
model_replacement: '$1'
|
|
4665
|
-
- regex: 'Android[\- ][\d]+\.[\d]+\-update1; [A-Za-z]{2}\-[A-Za-z]{0,2} *; *(.+?) Build'
|
|
4822
|
+
- regex: 'Android[\- ][\d]+\.[\d]+\-update1; [A-Za-z]{2}\-[A-Za-z]{0,2} *; *(.+?) Build[/ ]'
|
|
4666
4823
|
brand_replacement: 'Generic_Android'
|
|
4667
4824
|
model_replacement: '$1'
|
|
4668
|
-
- regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *[A-Za-z]{2}[_\-][A-Za-z]{0,2}\-? *; *(.+?) Build'
|
|
4825
|
+
- regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *[A-Za-z]{2}[_\-][A-Za-z]{0,2}\-? *; *(.+?) Build[/ ]'
|
|
4669
4826
|
brand_replacement: 'Generic_Android'
|
|
4670
4827
|
model_replacement: '$1'
|
|
4671
|
-
- regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *[A-Za-z]{0,2}\- *; *(.+?) Build'
|
|
4828
|
+
- regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *[A-Za-z]{0,2}\- *; *(.+?) Build[/ ]'
|
|
4672
4829
|
brand_replacement: 'Generic_Android'
|
|
4673
4830
|
model_replacement: '$1'
|
|
4674
4831
|
# No build info at all - "Build" follows locale immediately
|
|
4675
|
-
- regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *[a-z]{0,2}[_\-]?[A-Za-z]{0,2};? Build'
|
|
4832
|
+
- regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *[a-z]{0,2}[_\-]?[A-Za-z]{0,2};? Build[/ ]'
|
|
4676
4833
|
device_replacement: 'Generic Smartphone'
|
|
4677
4834
|
brand_replacement: 'Generic'
|
|
4678
4835
|
model_replacement: 'Smartphone'
|
|
4679
|
-
- regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *\-?[A-Za-z]{2}; *(.+?) Build'
|
|
4836
|
+
- regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}; *\-?[A-Za-z]{2}; *(.+?) Build[/ ]'
|
|
4680
4837
|
brand_replacement: 'Generic_Android'
|
|
4681
4838
|
model_replacement: '$1'
|
|
4682
|
-
- regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}(?:;.*)?; *(.+?) Build'
|
|
4839
|
+
- regex: 'Android[\- ][\d]+(?:\.[\d]+){1,2}(?:;.*)?; *(.+?) Build[/ ]'
|
|
4683
4840
|
brand_replacement: 'Generic_Android'
|
|
4684
4841
|
model_replacement: '$1'
|
|
4685
4842
|
|
|
@@ -4696,6 +4853,10 @@ device_parsers:
|
|
|
4696
4853
|
- regex: '(WebTV)/\d+.\d+'
|
|
4697
4854
|
brand_replacement: 'Generic_Inettv'
|
|
4698
4855
|
model_replacement: '$1'
|
|
4856
|
+
# Roku Digital-Video-Players https://www.roku.com/
|
|
4857
|
+
- regex: '^(Roku)/DVP-\d+\.\d+'
|
|
4858
|
+
brand_replacement: 'Generic_Inettv'
|
|
4859
|
+
model_replacement: '$1'
|
|
4699
4860
|
|
|
4700
4861
|
##########
|
|
4701
4862
|
# Generic Tablet
|
|
@@ -4722,7 +4883,7 @@ device_parsers:
|
|
|
4722
4883
|
##########
|
|
4723
4884
|
# Spiders (this is hack...)
|
|
4724
4885
|
##########
|
|
4725
|
-
- regex: '(bot|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes)'
|
|
4886
|
+
- regex: '(bot|zao|borg|DBot|oegp|silk|Xenu|zeal|^NING|CCBot|crawl|htdig|lycos|slurp|teoma|voila|yahoo|Sogou|CiBra|Nutch|^Java/|^JNLP/|Daumoa|Genieo|ichiro|larbin|pompos|Scrapy|snappy|speedy|spider|msnbot|msrbot|vortex|^vortex|crawler|favicon|indexer|Riddler|scooter|scraper|scrubby|WhatWeb|WinHTTP|bingbot|BingPreview|openbot|gigabot|furlbot|polybot|seekbot|^voyager|archiver|Icarus6j|mogimogi|Netvibes|blitzbot|altavista|charlotte|findlinks|Retreiver|TLSProber|WordPress|SeznamBot|ProoXiBot|wsr\-agent|Squrl Java|EtaoSpider|PaperLiBot|SputnikBot|A6\-Indexer|netresearch|searchsight|baiduspider|YisouSpider|ICC\-Crawler|http%20client|Python-urllib|dataparksearch|converacrawler|Screaming Frog|AppEngine-Google|YahooCacheSystem|fast\-webcrawler|Sogou Pic Spider|semanticdiscovery|Innovazion Crawler|facebookexternalhit|Google.*/\+/web/snippet|Google-HTTP-Java-Client|BlogBridge|IlTrovatore-Setaccio|InternetArchive|GomezAgent|WebThumbnail|heritrix|NewsGator|PagePeeker|Reaper|ZooShot|holmes|NL-Crawler|Pingdom|StatusCake|WhatsApp|masscan)'
|
|
4726
4887
|
regex_flag: 'i'
|
|
4727
4888
|
device_replacement: 'Spider'
|
|
4728
4889
|
brand_replacement: 'Spider'
|
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.3.
|
|
4
|
+
version: 2.3.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tim Lucas
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2017-05-07 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
|
|
@@ -29,7 +29,7 @@ files:
|
|
|
29
29
|
- lib/user_agent_parser/user_agent.rb
|
|
30
30
|
- lib/user_agent_parser/version.rb
|
|
31
31
|
- vendor/uap-core/regexes.yaml
|
|
32
|
-
homepage:
|
|
32
|
+
homepage: https://github.com/ua-parser/uap-ruby
|
|
33
33
|
licenses:
|
|
34
34
|
- MIT
|
|
35
35
|
metadata: {}
|
|
@@ -49,7 +49,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
49
49
|
version: '0'
|
|
50
50
|
requirements: []
|
|
51
51
|
rubyforge_project:
|
|
52
|
-
rubygems_version: 2.
|
|
52
|
+
rubygems_version: 2.6.10
|
|
53
53
|
signing_key:
|
|
54
54
|
specification_version: 4
|
|
55
55
|
summary: A simple, comprehensive Ruby gem for parsing user agent strings with the
|