user_agent_parser 2.1.2 → 2.3.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.
metadata CHANGED
@@ -1,31 +1,34 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: user_agent_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.2
4
+ version: 2.3.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: 2014-01-30 00:00:00.000000000 Z
11
+ date: 2015-10-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
15
15
  email: t@toolmantim.com
16
- executables: []
16
+ executables:
17
+ - user_agent_parser
17
18
  extensions: []
18
19
  extra_rdoc_files: []
19
20
  files:
20
21
  - MIT-LICENSE
21
22
  - Readme.md
23
+ - bin/user_agent_parser
22
24
  - lib/user_agent_parser.rb
25
+ - lib/user_agent_parser/cli.rb
23
26
  - lib/user_agent_parser/device.rb
24
27
  - lib/user_agent_parser/operating_system.rb
25
28
  - lib/user_agent_parser/parser.rb
26
29
  - lib/user_agent_parser/user_agent.rb
27
30
  - lib/user_agent_parser/version.rb
28
- - vendor/ua-parser/regexes.yaml
31
+ - vendor/uap-core/regexes.yaml
29
32
  homepage: http://github.com/toolmantim/user_agent_parser
30
33
  licenses:
31
34
  - MIT
@@ -46,7 +49,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
46
49
  version: '0'
47
50
  requirements: []
48
51
  rubyforge_project:
49
- rubygems_version: 2.2.1
52
+ rubygems_version: 2.4.5.1
50
53
  signing_key:
51
54
  specification_version: 4
52
55
  summary: A simple, comprehensive Ruby gem for parsing user agent strings with the
@@ -1,1120 +0,0 @@
1
- user_agent_parsers:
2
- #### SPECIAL CASES TOP ####
3
-
4
- # HbbTV standard defines what features the browser should understand.
5
- # but it's like targeting "HTML5 browsers", effective browser support depends on the model
6
- # See os_parsers if you want to target a specific TV
7
- - regex: '(HbbTV)/(\d+)\.(\d+)\.(\d+) \('
8
-
9
- # must go before Firefox to catch SeaMonkey/Camino
10
- - regex: '(SeaMonkey|Camino)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)'
11
-
12
- # Firefox
13
- - regex: '(Pale[Mm]oon)/(\d+)\.(\d+)\.?(\d+)?'
14
- family_replacement: 'Pale Moon (Firefox Variant)'
15
- - regex: '(Fennec)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)'
16
- family_replacement: 'Firefox Mobile'
17
- - regex: '(Fennec)/(\d+)\.(\d+)(pre)'
18
- family_replacement: 'Firefox Mobile'
19
- - regex: '(Fennec)/(\d+)\.(\d+)'
20
- family_replacement: 'Firefox Mobile'
21
- - regex: 'Mobile.*(Firefox)/(\d+)\.(\d+)'
22
- family_replacement: 'Firefox Mobile'
23
- - regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)\.(\d+(?:pre)?)'
24
- family_replacement: 'Firefox ($1)'
25
- - regex: '(Firefox)/(\d+)\.(\d+)(a\d+[a-z]*)'
26
- family_replacement: 'Firefox Alpha'
27
- - regex: '(Firefox)/(\d+)\.(\d+)(b\d+[a-z]*)'
28
- family_replacement: 'Firefox Beta'
29
- - regex: '(Firefox)-(?:\d+\.\d+)?/(\d+)\.(\d+)(a\d+[a-z]*)'
30
- family_replacement: 'Firefox Alpha'
31
- - regex: '(Firefox)-(?:\d+\.\d+)?/(\d+)\.(\d+)(b\d+[a-z]*)'
32
- family_replacement: 'Firefox Beta'
33
- - regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)([ab]\d+[a-z]*)?'
34
- family_replacement: 'Firefox ($1)'
35
- - regex: '(Firefox).*Tablet browser (\d+)\.(\d+)\.(\d+)'
36
- family_replacement: 'MicroB'
37
- - regex: '(MozillaDeveloperPreview)/(\d+)\.(\d+)([ab]\d+[a-z]*)?'
38
-
39
- # e.g.: Flock/2.0b2
40
- - regex: '(Flock)/(\d+)\.(\d+)(b\d+?)'
41
-
42
- # RockMelt
43
- - regex: '(RockMelt)/(\d+)\.(\d+)\.(\d+)'
44
-
45
- # e.g.: Fennec/0.9pre
46
- - regex: '(Navigator)/(\d+)\.(\d+)\.(\d+)'
47
- family_replacement: 'Netscape'
48
-
49
- - regex: '(Navigator)/(\d+)\.(\d+)([ab]\d+)'
50
- family_replacement: 'Netscape'
51
-
52
- - regex: '(Netscape6)/(\d+)\.(\d+)\.(\d+)'
53
- family_replacement: 'Netscape'
54
-
55
- - regex: '(MyIBrow)/(\d+)\.(\d+)'
56
- family_replacement: 'My Internet Browser'
57
-
58
- # Opera will stop at 9.80 and hide the real version in the Version string.
59
- # see: http://dev.opera.com/articles/view/opera-ua-string-changes/
60
- - regex: '(Opera Tablet).*Version/(\d+)\.(\d+)(?:\.(\d+))?'
61
- - regex: '(Opera)/.+Opera Mobi.+Version/(\d+)\.(\d+)'
62
- family_replacement: 'Opera Mobile'
63
- - regex: 'Opera Mobi'
64
- family_replacement: 'Opera Mobile'
65
- - regex: '(Opera Mini)/(\d+)\.(\d+)'
66
- - regex: '(Opera Mini)/att/(\d+)\.(\d+)'
67
- - regex: '(Opera)/9.80.*Version/(\d+)\.(\d+)(?:\.(\d+))?'
68
-
69
- # Opera 14 for Android uses a WebKit render engine.
70
- - regex: '(?:Mobile Safari).*(OPR)/(\d+)\.(\d+)\.(\d+)'
71
- family_replacement: 'Opera Mobile'
72
-
73
- # Opera 15 for Desktop is similar to Chrome but includes an "OPR" Version string.
74
- - regex: '(?:Chrome).*(OPR)/(\d+)\.(\d+)\.(\d+)'
75
- family_replacement: 'Opera'
76
-
77
- # Palm WebOS looks a lot like Safari.
78
- - regex: '(hpw|web)OS/(\d+)\.(\d+)(?:\.(\d+))?'
79
- family_replacement: 'webOS Browser'
80
-
81
- # LuaKit has no version info.
82
- # http://luakit.org/projects/luakit/
83
- - regex: '(luakit)'
84
- family_replacement: 'LuaKit'
85
-
86
- # Snowshoe
87
- - regex: '(Snowshoe)/(\d+)\.(\d+).(\d+)'
88
-
89
- # Lightning (for Thunderbird)
90
- # http://www.mozilla.org/projects/calendar/lightning/
91
- - regex: '(Lightning)/(\d+)\.(\d+)\.?((?:[ab]?\d+[a-z]*)|(?:\d*))'
92
-
93
- # Swiftfox
94
- - regex: '(Firefox)/(\d+)\.(\d+)\.(\d+(?:pre)?) \(Swiftfox\)'
95
- family_replacement: 'Swiftfox'
96
- - regex: '(Firefox)/(\d+)\.(\d+)([ab]\d+[a-z]*)? \(Swiftfox\)'
97
- family_replacement: 'Swiftfox'
98
-
99
- # Rekonq
100
- - regex: '(rekonq)/(\d+)\.(\d+)\.?(\d+)? Safari'
101
- family_replacement: 'Rekonq'
102
- - regex: 'rekonq'
103
- family_replacement: 'Rekonq'
104
-
105
- # Conkeror lowercase/uppercase
106
- # http://conkeror.org/
107
- - regex: '(conkeror|Conkeror)/(\d+)\.(\d+)\.?(\d+)?'
108
- family_replacement: 'Conkeror'
109
-
110
- # catches lower case konqueror
111
- - regex: '(konqueror)/(\d+)\.(\d+)\.(\d+)'
112
- family_replacement: 'Konqueror'
113
-
114
- - regex: '(WeTab)-Browser'
115
-
116
- - regex: '(Comodo_Dragon)/(\d+)\.(\d+)\.(\d+)'
117
- family_replacement: 'Comodo Dragon'
118
-
119
- # Bots
120
- - regex: '(YottaaMonitor|BrowserMob|HttpMonitor|YandexBot|Slurp|BingPreview|PagePeeker|ThumbShotsBot|WebThumb|URL2PNG|ZooShot|GomezA|Catchpoint bot|Willow Internet Crawler|Google SketchUp|Read%20Later)'
121
-
122
- - regex: '(Symphony) (\d+).(\d+)'
123
-
124
- - regex: '(Minimo)'
125
-
126
- # Chrome Mobile
127
- - regex: '(CrMo)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
128
- family_replacement: 'Chrome Mobile'
129
- - regex: '(CriOS)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
130
- family_replacement: 'Chrome Mobile iOS'
131
- - regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+) Mobile'
132
- family_replacement: 'Chrome Mobile'
133
-
134
- # Chrome Frame must come before MSIE.
135
- - regex: '(chromeframe)/(\d+)\.(\d+)\.(\d+)'
136
- family_replacement: 'Chrome Frame'
137
-
138
- # UC Browser
139
- - regex: '(UCBrowser)[ /](\d+)\.(\d+)\.(\d+)'
140
- family_replacement: 'UC Browser'
141
- - regex: '(UC Browser)[ /](\d+)\.(\d+)\.(\d+)'
142
- - regex: '(UC Browser|UCBrowser|UCWEB)(\d+)\.(\d+)\.(\d+)'
143
- family_replacement: 'UC Browser'
144
-
145
- # Tizen Browser (second case included in browser/major.minor regex)
146
- - regex: '(SLP Browser)/(\d+)\.(\d+)'
147
- family_replacement: 'Tizen Browser'
148
-
149
- # Sogou Explorer 2.X
150
- - regex: '(SE 2\.X) MetaSr (\d+)\.(\d+)'
151
- family_replacement: 'Sogou Explorer'
152
-
153
- # Baidu Browsers (desktop spoofs chrome & IE, explorer is mobile)
154
- - regex: '(baidubrowser)[/\s](\d+)'
155
- family_replacement: 'Baidu Browser'
156
- - regex: '(FlyFlow)/(\d+)\.(\d+)'
157
- family_replacement: 'Baidu Explorer'
158
-
159
- # Pingdom
160
- - regex: '(Pingdom.com_bot_version_)(\d+)\.(\d+)'
161
- family_replacement: 'PingdomBot'
162
-
163
- # Facebook
164
- - regex: '(facebookexternalhit)/(\d+)\.(\d+)'
165
- family_replacement: 'FacebookBot'
166
-
167
- # LinkedIn
168
- - regex: '(LinkedInBot)/(\d+)\.(\d+)'
169
- family_replacement: 'LinkedInBot'
170
-
171
- # Twitterbot
172
- - regex: '(Twitterbot)/(\d+)\.(\d+)'
173
- family_replacement: 'TwitterBot'
174
-
175
- # Rackspace Monitoring
176
- - regex: '(Rackspace Monitoring)/(\d+)\.(\d+)'
177
- family_replacement: 'RackspaceBot'
178
-
179
- # PyAMF
180
- - regex: '(PyAMF)/(\d+)\.(\d+)\.(\d+)'
181
-
182
- # Yandex Browser
183
- - regex: '(YaBrowser)/(\d+)\.(\d+)\.(\d+)'
184
- family_replacement: 'Yandex Browser'
185
-
186
- # Mail.ru Amigo/Internet Browser (Chromium-based)
187
- - regex: '(Chrome)/(\d+)\.(\d+)\.(\d+).* MRCHROME'
188
- family_replacement: 'Mail.ru Chromium Browser'
189
-
190
- # AOL Browser (IE-based)
191
- - regex: '(AOL) (\d+)\.(\d+); AOLBuild (\d+)'
192
-
193
-
194
-
195
-
196
- #### END SPECIAL CASES TOP ####
197
-
198
- #### MAIN CASES - this catches > 50% of all browsers ####
199
-
200
- # Browser/major_version.minor_version.beta_version
201
- - regex: '(AdobeAIR|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Epiphany|Shiira|Sunrise|Flock|Netscape|Lunascape|WebPilot|Vodafone|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)/(\d+)\.(\d+)\.(\d+)'
202
-
203
- # Outlook 2007
204
- - regex: 'MSOffice 12'
205
- family_replacement: 'Outlook'
206
- v1_replacement: '2007'
207
-
208
- # Outlook 2010
209
- - regex: 'MSOffice 14'
210
- family_replacement: 'Outlook'
211
- v1_replacement: '2010'
212
-
213
- # Outlook 2013
214
- - regex: 'Microsoft Outlook 15\.\d+\.\d+'
215
- family_replacement: 'Outlook'
216
- v1_replacement: '2013'
217
-
218
- # Apple Air Mail
219
- - regex: '(Airmail) (\d+)\.(\d+)(?:\.(\d+))?'
220
-
221
- # Thunderbird
222
- - regex: '(Thunderbird)/(\d+)\.(\d+)\.(\d+(?:pre)?)'
223
- family_replacement: 'Thunderbird'
224
-
225
- # Chrome/Chromium/major_version.minor_version.beta_version
226
- - regex: '(Chromium|Chrome)/(\d+)\.(\d+)\.(\d+)'
227
-
228
- # Browser/major_version.minor_version
229
- - regex: '(bingbot|Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|Flock|Netscape|Lunascape|Epiphany|WebPilot|Opera Mini|Opera|Vodafone|NetFront|Netfront|Konqueror|Googlebot|SeaMonkey|Kazehakase|Vienna|Iceape|Iceweasel|IceWeasel|Iron|K-Meleon|Sleipnir|Galeon|GranParadiso|iCab|NetNewsWire|Space Bison|Stainless|Orca|Dolfin|BOLT|Minimo|Tizen Browser|Polaris|Abrowser|Planetweb|ICE Browser)/(\d+)\.(\d+)'
230
-
231
- # Chrome/Chromium/major_version.minor_version
232
- - regex: '(Chromium|Chrome)/(\d+)\.(\d+)'
233
-
234
- # Browser major_version.minor_version.beta_version (space instead of slash)
235
- - regex: '(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\d+)\.(\d+)\.(\d+)'
236
- # Browser major_version.minor_version (space instead of slash)
237
- - regex: '(iCab|Lunascape|Opera|Android|Jasmine|Polaris) (\d+)\.(\d+)\.?(\d+)?'
238
-
239
- # Kindle WebKit
240
- - regex: '(Kindle)/(\d+)\.(\d+)'
241
-
242
- # weird android UAs
243
- - regex: '(Android) Donut'
244
- v1_replacement: '1'
245
- v2_replacement: '2'
246
-
247
- - regex: '(Android) Eclair'
248
- v1_replacement: '2'
249
- v2_replacement: '1'
250
-
251
- - regex: '(Android) Froyo'
252
- v1_replacement: '2'
253
- v2_replacement: '2'
254
-
255
- - regex: '(Android) Gingerbread'
256
- v1_replacement: '2'
257
- v2_replacement: '3'
258
-
259
- - regex: '(Android) Honeycomb'
260
- v1_replacement: '3'
261
-
262
- # IE Mobile
263
- - regex: '(IEMobile)[ /](\d+)\.(\d+)'
264
- family_replacement: 'IE Mobile'
265
- # desktop mode
266
- # http://www.anandtech.com/show/3982/windows-phone-7-review
267
- - regex: '(MSIE) (\d+)\.(\d+).*XBLWP7'
268
- family_replacement: 'IE Large Screen'
269
-
270
- #### END MAIN CASES ####
271
-
272
- #### SPECIAL CASES ####
273
- - regex: '(Obigo)InternetBrowser'
274
- - regex: '(Obigo)\-Browser'
275
- - regex: '(Obigo|OBIGO)[^\d]*(\d+)(?:.(\d+))?'
276
- family_replacement: 'Obigo'
277
-
278
- - regex: '(MAXTHON|Maxthon) (\d+)\.(\d+)'
279
- family_replacement: 'Maxthon'
280
- - regex: '(Maxthon|MyIE2|Uzbl|Shiira)'
281
- v1_replacement: '0'
282
-
283
- - regex: 'PLAYSTATION 3.+WebKit'
284
- family_replacement: 'NetFront NX'
285
- - regex: 'PLAYSTATION 3'
286
- family_replacement: 'NetFront'
287
- - regex: '(PlayStation Portable)'
288
- family_replacement: 'NetFront'
289
- - regex: '(PlayStation Vita)'
290
- family_replacement: 'NetFront NX'
291
-
292
- - regex: 'AppleWebKit.+ (NX)/(\d+)\.(\d+)\.(\d+)'
293
- family_replacement: 'NetFront NX'
294
- - regex: '(Nintendo 3DS)'
295
- family_replacement: 'NetFront NX'
296
-
297
- - regex: '(BrowseX) \((\d+)\.(\d+)\.(\d+)'
298
-
299
- - regex: '(NCSA_Mosaic)/(\d+)\.(\d+)'
300
- family_replacement: 'NCSA Mosaic'
301
-
302
- # Polaris/d.d is above
303
- - regex: '(POLARIS)/(\d+)\.(\d+)'
304
- family_replacement: 'Polaris'
305
- - regex: '(Embider)/(\d+)\.(\d+)'
306
- family_replacement: 'Polaris'
307
-
308
- - regex: '(BonEcho)/(\d+)\.(\d+)\.(\d+)'
309
- family_replacement: 'Bon Echo'
310
-
311
- - regex: 'M?QQBrowser'
312
- family_replacement: 'QQ Browser'
313
-
314
- - regex: '(iPod).+Version/(\d+)\.(\d+)\.(\d+)'
315
- family_replacement: 'Mobile Safari'
316
- - regex: '(iPod).*Version/(\d+)\.(\d+)'
317
- family_replacement: 'Mobile Safari'
318
- - regex: '(iPhone).*Version/(\d+)\.(\d+)\.(\d+)'
319
- family_replacement: 'Mobile Safari'
320
- - regex: '(iPhone).*Version/(\d+)\.(\d+)'
321
- family_replacement: 'Mobile Safari'
322
- - regex: '(iPad).*Version/(\d+)\.(\d+)\.(\d+)'
323
- family_replacement: 'Mobile Safari'
324
- - regex: '(iPad).*Version/(\d+)\.(\d+)'
325
- family_replacement: 'Mobile Safari'
326
- - regex: '(iPod|iPhone|iPad);.*CPU.*OS (\d+)(?:_\d+)?_(\d+).*Mobile'
327
- family_replacement: 'Mobile Safari'
328
- - regex: '(iPod|iPhone|iPad)'
329
- family_replacement: 'Mobile Safari'
330
-
331
- - regex: '(AvantGo) (\d+).(\d+)'
332
-
333
- - regex: '(OneBrowser)/(\d+).(\d+)'
334
- family_replacement: 'ONE Browser'
335
-
336
- - regex: '(Avant)'
337
- v1_replacement: '1'
338
-
339
- # This is the Tesla Model S (see similar entry in device parsers)
340
- - regex: '(QtCarBrowser)'
341
- v1_replacement: '1'
342
-
343
- - regex: '(iBrowser/Mini)(\d+).(\d+)'
344
- family_replacement: 'iBrowser Mini'
345
- # nokia browsers
346
- # based on: http://www.developer.nokia.com/Community/Wiki/User-Agent_headers_for_Nokia_devices
347
- - regex: '^(Nokia)'
348
- family_replacement: 'Nokia Services (WAP) Browser'
349
- - regex: '(NokiaBrowser)/(\d+)\.(\d+).(\d+)\.(\d+)'
350
- family_replacement: 'Nokia Browser'
351
- - regex: '(NokiaBrowser)/(\d+)\.(\d+).(\d+)'
352
- family_replacement: 'Nokia Browser'
353
- - regex: '(NokiaBrowser)/(\d+)\.(\d+)'
354
- family_replacement: 'Nokia Browser'
355
- - regex: '(BrowserNG)/(\d+)\.(\d+).(\d+)'
356
- family_replacement: 'Nokia Browser'
357
- - regex: '(Series60)/5\.0'
358
- family_replacement: 'Nokia Browser'
359
- v1_replacement: '7'
360
- v2_replacement: '0'
361
- - regex: '(Series60)/(\d+)\.(\d+)'
362
- family_replacement: 'Nokia OSS Browser'
363
- - regex: '(S40OviBrowser)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
364
- family_replacement: 'Ovi Browser'
365
- - regex: '(Nokia)[EN]?(\d+)'
366
-
367
- # BlackBerry devices
368
- - regex: '(BB10);'
369
- family_replacement: 'BlackBerry WebKit'
370
- - regex: '(PlayBook).+RIM Tablet OS (\d+)\.(\d+)\.(\d+)'
371
- family_replacement: 'BlackBerry WebKit'
372
- - regex: '(Black[bB]erry).+Version/(\d+)\.(\d+)\.(\d+)'
373
- family_replacement: 'BlackBerry WebKit'
374
- - regex: '(Black[bB]erry)\s?(\d+)'
375
- family_replacement: 'BlackBerry'
376
-
377
- - regex: '(OmniWeb)/v(\d+)\.(\d+)'
378
-
379
- - regex: '(Blazer)/(\d+)\.(\d+)'
380
- family_replacement: 'Palm Blazer'
381
-
382
- - regex: '(Pre)/(\d+)\.(\d+)'
383
- family_replacement: 'Palm Pre'
384
-
385
- # fork of Links
386
- - regex: '(ELinks)/(\d+)\.(\d+)'
387
- - regex: '(ELinks) \((\d+)\.(\d+)'
388
- - regex: '(Links) \((\d+)\.(\d+)'
389
-
390
- - regex: '(QtWeb) Internet Browser/(\d+)\.(\d+)'
391
-
392
- #- regex: '\(iPad;.+(Version)/(\d+)\.(\d+)(?:\.(\d+))?.*Safari/'
393
- # family_replacement: 'iPad'
394
-
395
- # Amazon Silk, should go before Safari
396
- - regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+))?'
397
- family_replacement: 'Amazon Silk'
398
-
399
- # Phantomjs, should go before Safari
400
- - regex: '(PhantomJS)/(\d+)\.(\d+)\.(\d+)'
401
-
402
- # WebKit Nightly
403
- - regex: '(AppleWebKit)/(\d+)\.?(\d+)?\+ .* Safari'
404
- family_replacement: 'WebKit Nightly'
405
-
406
- # Safari
407
- - regex: '(Version)/(\d+)\.(\d+)(?:\.(\d+))?.*Safari/'
408
- family_replacement: 'Safari'
409
- # Safari didn't provide "Version/d.d.d" prior to 3.0
410
- - regex: '(Safari)/\d+'
411
-
412
- - regex: '(OLPC)/Update(\d+)\.(\d+)'
413
-
414
- - regex: '(OLPC)/Update()\.(\d+)'
415
- v1_replacement: '0'
416
-
417
- - regex: '(SEMC\-Browser)/(\d+)\.(\d+)'
418
-
419
- - regex: '(Teleca)'
420
- family_replacement: 'Teleca Browser'
421
-
422
- - regex: '(Phantom)/V(\d+)\.(\d+)'
423
- family_replacement: 'Phantom Browser'
424
-
425
- - regex: 'Trident(.*)rv.(\d+)\.(\d+)'
426
- family_replacement: 'IE'
427
-
428
- # Apple Mail
429
-
430
- # apple mail - not directly detectable, have it after Safari stuff
431
- - regex: '(AppleWebKit)/(\d+)\.(\d+)\.(\d+)'
432
- family_replacement: 'AppleMail'
433
-
434
- # AFTER THE EDGE CASES ABOVE!
435
- # AFTER IE11
436
- # BEFORE all other IE
437
- - regex: '(Firefox)/(\d+)\.(\d+)\.(\d+)'
438
- - regex: '(Firefox)/(\d+)\.(\d+)(pre|[ab]\d+[a-z]*)?'
439
-
440
- - regex: '([MS]?IE) (\d+)\.(\d+)'
441
- family_replacement: 'IE'
442
-
443
- - regex: '(python-requests)/(\d+)\.(\d+)'
444
- family_replacement: 'Python Requests'
445
-
446
- os_parsers:
447
- ##########
448
- # HbbTV vendors
449
- ##########
450
-
451
- # starts with the easy one : Panasonic seems consistent across years, hope it will continue
452
- #HbbTV/1.1.1 (;Panasonic;VIERA 2011;f.532;0071-0802 2000-0000;)
453
- #HbbTV/1.1.1 (;Panasonic;VIERA 2012;1.261;0071-3103 2000-0000;)
454
- #HbbTV/1.2.1 (;Panasonic;VIERA 2013;3.672;4101-0003 0002-0000;)
455
- #- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Panasonic);VIERA ([0-9]{4});'
456
-
457
- # Sony is consistent too but do not place year like the other
458
- # Opera/9.80 (Linux armv7l; HbbTV/1.1.1 (; Sony; KDL32W650A; PKG3.211EUA; 2013;); ) Presto/2.12.362 Version/12.11
459
- # Opera/9.80 (Linux mips; U; HbbTV/1.1.1 (; Sony; KDL40HX751; PKG1.902EUA; 2012;);; en) Presto/2.10.250 Version/11.60
460
- # Opera/9.80 (Linux mips; U; HbbTV/1.1.1 (; Sony; KDL22EX320; PKG4.017EUA; 2011;);; en) Presto/2.7.61 Version/11.00
461
- #- regex: 'HbbTV/\d+\.\d+\.\d+ \(; (Sony);.*;.*; ([0-9]{4});\)'
462
-
463
-
464
- # LG is consistent too, but we need to add manually the year model
465
- #Mozilla/5.0 (Unknown; Linux armv7l) AppleWebKit/537.1+ (KHTML, like Gecko) Safari/537.1+ HbbTV/1.1.1 ( ;LGE ;NetCast 4.0 ;03.20.30 ;1.0M ;)
466
- #Mozilla/5.0 (DirectFB; Linux armv7l) AppleWebKit/534.26+ (KHTML, like Gecko) Version/5.0 Safari/534.26+ HbbTV/1.1.1 ( ;LGE ;NetCast 3.0 ;1.0 ;1.0M ;)
467
- - regex: 'HbbTV/\d+\.\d+\.\d+ \( ;(LG)E ;NetCast 4.0'
468
- os_v1_replacement: '2013'
469
- - regex: 'HbbTV/\d+\.\d+\.\d+ \( ;(LG)E ;NetCast 3.0'
470
- os_v1_replacement: '2012'
471
-
472
- # Samsung is on its way of normalizing their user-agent
473
- # HbbTV/1.1.1 (;Samsung;SmartTV2013;T-FXPDEUC-1102.2;;) WebKit
474
- # HbbTV/1.1.1 (;Samsung;SmartTV2013;T-MST12DEUC-1102.1;;) WebKit
475
- # HbbTV/1.1.1 (;Samsung;SmartTV2012;;;) WebKit
476
- # HbbTV/1.1.1 (;;;;;) Maple_2011
477
- - regex: 'HbbTV/1.1.1 \(;;;;;\) Maple_2011'
478
- os_replacement: 'Samsung'
479
- os_v1_replacement: '2011'
480
- # manage the two models of 2013
481
- - regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});.*FXPDEUC'
482
- os_v2_replacement: 'UE40F7000'
483
- - regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});.*MST12DEUC'
484
- os_v2_replacement: 'UE32F4500'
485
- # generic Samsung (works starting in 2012)
486
- #- regex: 'HbbTV/\d+\.\d+\.\d+ \(;(Samsung);SmartTV([0-9]{4});'
487
-
488
- # Philips : not found any other way than a manual mapping
489
- # Opera/9.80 (Linux mips; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/4.1.3 PHILIPSTV/1.1.1; en) Presto/2.10.250 Version/11.60
490
- # Opera/9.80 (Linux mips ; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/3.2.1; en) Presto/2.6.33 Version/10.70
491
- - regex: 'HbbTV/1.1.1 \(; (Philips);.*NETTV/4'
492
- os_v1_replacement: '2013'
493
- - regex: 'HbbTV/1.1.1 \(; (Philips);.*NETTV/3'
494
- os_v1_replacement: '2012'
495
- - regex: 'HbbTV/1.1.1 \(; (Philips);.*NETTV/2'
496
- os_v1_replacement: '2011'
497
-
498
- # the HbbTV emulator developers use HbbTV/1.1.1 (;;;;;) firetv-firefox-plugin 1.1.20
499
- - regex: 'HbbTV/\d+\.\d+\.\d+.*(firetv)-firefox-plugin (\d+).(\d+).(\d+)'
500
- os_replacement: 'FireHbbTV'
501
-
502
- # generic HbbTV, hoping to catch manufacturer name (always after 2nd comma) and the first string that looks like a 2011-2019 year
503
- - regex: 'HbbTV/\d+\.\d+\.\d+ \(.*; ?([a-zA-Z]+) ?;.*(201[1-9]).*\)'
504
-
505
- ##########
506
- # Android
507
- # can actually detect rooted android os. do we care?
508
- ##########
509
- - regex: '(Android) (\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?'
510
- - regex: '(Android)\-(\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?'
511
-
512
- - regex: '(Android) Donut'
513
- os_v1_replacement: '1'
514
- os_v2_replacement: '2'
515
-
516
- - regex: '(Android) Eclair'
517
- os_v1_replacement: '2'
518
- os_v2_replacement: '1'
519
-
520
- - regex: '(Android) Froyo'
521
- os_v1_replacement: '2'
522
- os_v2_replacement: '2'
523
-
524
- - regex: '(Android) Gingerbread'
525
- os_v1_replacement: '2'
526
- os_v2_replacement: '3'
527
-
528
- - regex: '(Android) Honeycomb'
529
- os_v1_replacement: '3'
530
-
531
- ##########
532
- # Kindle Android
533
- ##########
534
- - regex: '(Silk-Accelerated=[a-z]{4,5})'
535
- os_replacement: 'Android'
536
-
537
- ##########
538
- # Windows
539
- # http://en.wikipedia.org/wiki/Windows_NT#Releases
540
- # possibility of false positive when different marketing names share same NT kernel
541
- # e.g. windows server 2003 and windows xp
542
- # lots of ua strings have Windows NT 4.1 !?!?!?!? !?!? !? !????!?! !!! ??? !?!?! ?
543
- # (very) roughly ordered in terms of frequency of occurence of regex (win xp currently most frequent, etc)
544
- ##########
545
-
546
- - regex: '(Windows (?:NT 5\.2|NT 5\.1))'
547
- os_replacement: 'Windows XP'
548
-
549
- # ie mobile des ktop mode
550
- # spoofs nt 6.1. must come before windows 7
551
- - regex: '(XBLWP7)'
552
- os_replacement: 'Windows Phone'
553
-
554
- - regex: '(Windows NT 6\.1)'
555
- os_replacement: 'Windows 7'
556
-
557
- - regex: '(Windows NT 6\.0)'
558
- os_replacement: 'Windows Vista'
559
-
560
- - regex: '(Win 9x 4\.90)'
561
- os_replacement: 'Windows Me'
562
-
563
- - regex: '(Windows 98|Windows XP|Windows ME|Windows 95|Windows CE|Windows 7|Windows NT 4\.0|Windows Vista|Windows 2000|Windows 3.1)'
564
-
565
- - regex: '(Windows NT 6\.2; ARM;)'
566
- os_replacement: 'Windows RT'
567
-
568
- # is this a spoof or is nt 6.2 out and about in some capacity?
569
- - regex: '(Windows NT 6\.2)'
570
- os_replacement: 'Windows 8'
571
-
572
- - regex: '(Windows NT 5\.0)'
573
- os_replacement: 'Windows 2000'
574
-
575
- - regex: '(Windows Phone) (\d+)\.(\d+)'
576
- - regex: '(Windows Phone) OS (\d+)\.(\d+)'
577
- - regex: '(Windows ?Mobile)'
578
- os_replacement: 'Windows Mobile'
579
-
580
- - regex: '(WinNT4.0)'
581
- os_replacement: 'Windows NT 4.0'
582
-
583
- - regex: '(Win98)'
584
- os_replacement: 'Windows 98'
585
-
586
- ##########
587
- # Tizen OS from Samsung
588
- # spoofs Android so pushing it above
589
- ##########
590
- - regex: '(Tizen)/(\d+)\.(\d+)'
591
-
592
- ##########
593
- # Mac OS
594
- # http://en.wikipedia.org/wiki/Mac_OS_X#Versions
595
- ##########
596
- - regex: '(Mac OS X) (\d+)[_.](\d+)(?:[_.](\d+))?'
597
-
598
- # IE on Mac doesn't specify version number
599
- - regex: 'Mac_PowerPC'
600
- os_replacement: 'Mac OS'
601
-
602
- # builds before tiger don't seem to specify version?
603
-
604
- # ios devices spoof (mac os x), so including intel/ppc prefixes
605
- - regex: '(?:PPC|Intel) (Mac OS X)'
606
-
607
- ##########
608
- # iOS
609
- # http://en.wikipedia.org/wiki/IOS_version_history
610
- ##########
611
- - regex: '(CPU OS|iPhone OS) (\d+)_(\d+)(?:_(\d+))?'
612
- os_replacement: 'iOS'
613
-
614
- # remaining cases are mostly only opera uas, so catch opera as to not catch iphone spoofs
615
- - regex: '(iPhone|iPad|iPod); Opera'
616
- os_replacement: 'iOS'
617
-
618
- # few more stragglers
619
- - regex: '(iPhone|iPad|iPod).*Mac OS X.*Version/(\d+)\.(\d+)'
620
- os_replacement: 'iOS'
621
-
622
- - regex: '(AppleTV)/(\d+)\.(\d+)'
623
- os_replacement: 'ATV OS X'
624
-
625
- ##########
626
- # Chrome OS
627
- # if version 0.0.0, probably this stuff:
628
- # http://code.google.com/p/chromium-os/issues/detail?id=11573
629
- # http://code.google.com/p/chromium-os/issues/detail?id=13790
630
- ##########
631
- - regex: '(CrOS) [a-z0-9_]+ (\d+)\.(\d+)(?:\.(\d+))?'
632
- os_replacement: 'Chrome OS'
633
-
634
- ##########
635
- # Linux distros
636
- ##########
637
- - regex: '([Dd]ebian)'
638
- os_replacement: 'Debian'
639
- - regex: '(Linux Mint)(?:/(\d+))?'
640
- - regex: '(Mandriva)(?: Linux)?/(?:[\d.-]+m[a-z]{2}(\d+).(\d))?'
641
-
642
- ##########
643
- # Symbian + Symbian OS
644
- # http://en.wikipedia.org/wiki/History_of_Symbian
645
- ##########
646
- - regex: '(Symbian[Oo][Ss])/(\d+)\.(\d+)'
647
- os_replacement: 'Symbian OS'
648
- - regex: '(Symbian/3).+NokiaBrowser/7\.3'
649
- os_replacement: 'Symbian^3 Anna'
650
- - regex: '(Symbian/3).+NokiaBrowser/7\.4'
651
- os_replacement: 'Symbian^3 Belle'
652
- - regex: '(Symbian/3)'
653
- os_replacement: 'Symbian^3'
654
- - regex: '(Series 60|SymbOS|S60)'
655
- os_replacement: 'Symbian OS'
656
- - regex: '(MeeGo)'
657
- - regex: 'Symbian [Oo][Ss]'
658
- os_replacement: 'Symbian OS'
659
- - regex: 'Series40;'
660
- os_replacement: 'Nokia Series 40'
661
-
662
- ##########
663
- # BlackBerry devices
664
- ##########
665
- - regex: '(BB10);.+Version/(\d+)\.(\d+)\.(\d+)'
666
- os_replacement: 'BlackBerry OS'
667
- - regex: '(Black[Bb]erry)[0-9a-z]+/(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?'
668
- os_replacement: 'BlackBerry OS'
669
- - regex: '(Black[Bb]erry).+Version/(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?'
670
- os_replacement: 'BlackBerry OS'
671
- - regex: '(RIM Tablet OS) (\d+)\.(\d+)\.(\d+)'
672
- os_replacement: 'BlackBerry Tablet OS'
673
- - regex: '(Play[Bb]ook)'
674
- os_replacement: 'BlackBerry Tablet OS'
675
- - regex: '(Black[Bb]erry)'
676
- os_replacement: 'BlackBerry OS'
677
-
678
- ##########
679
- # Firefox OS
680
- ##########
681
- - regex: '\((?:Mobile|Tablet);.+Firefox/\d+\.\d+'
682
- os_replacement: 'Firefox OS'
683
-
684
- ##########
685
- # BREW
686
- # yes, Brew is lower-cased for Brew MP
687
- ##########
688
- - regex: '(BREW)[ /](\d+)\.(\d+)\.(\d+)'
689
- - regex: '(BREW);'
690
- - regex: '(Brew MP|BMP)[ /](\d+)\.(\d+)\.(\d+)'
691
- os_replacement: 'Brew MP'
692
- - regex: 'BMP;'
693
- os_replacement: 'Brew MP'
694
-
695
- ##########
696
- # Google TV
697
- ##########
698
- - regex: '(GoogleTV) (\d+)\.(\d+)\.(\d+)'
699
- # Old style
700
- - regex: '(GoogleTV)/[\da-z]+'
701
-
702
- - regex: '(WebTV)/(\d+).(\d+)'
703
-
704
- ##########
705
- # Misc mobile
706
- ##########
707
- - regex: '(hpw|web)OS/(\d+)\.(\d+)(?:\.(\d+))?'
708
- os_replacement: 'webOS'
709
- - regex: '(VRE);'
710
-
711
- ##########
712
- # Generic patterns
713
- # since the majority of os cases are very specific, these go last
714
- ##########
715
- # first.second.third.fourth bits
716
- - regex: '(Fedora|Red Hat|PCLinuxOS)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
717
-
718
- # first.second.third bits
719
- - regex: '(Red Hat|Puppy|PCLinuxOS)/(\d+)\.(\d+)\.(\d+)'
720
-
721
- # first.second bits
722
- - regex: '(Ubuntu|Kindle|Bada|Lubuntu|BackTrack|Red Hat|Slackware)/(\d+)\.(\d+)'
723
-
724
- # just os
725
- - regex: '(Windows|OpenBSD|FreeBSD|NetBSD|Android|WeTab)'
726
- - regex: '(Ubuntu|Kubuntu|Arch Linux|CentOS|Slackware|Gentoo|openSUSE|SUSE|Red Hat|Fedora|PCLinuxOS|Gentoo|Mageia)'
727
- - regex: '(Linux)/(\d+)\.(\d+)'
728
- - regex: '(Linux|BSD)'
729
- - regex: 'SunOS'
730
- os_replacement: 'Solaris'
731
-
732
- device_parsers:
733
- ##########
734
- # incomplete!
735
- # multiple replacement placeholds i.e. ($1) ($2) help solve problem of single device with multiple representations in ua
736
- # e.g. HTC Dream S should parse to the same device as HTC_DreamS
737
- ##########
738
-
739
- ##########
740
- # incomplete!
741
- # HTC
742
- # http://en.wikipedia.org/wiki/List_of_HTC_phones
743
- # this is quickly getting unwieldy
744
- ##########
745
- # example: Mozilla/5.0 (Linux; U; Android 2.3.2; fr-fr; HTC HD2 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
746
- - regex: 'HTC ([A-Z][a-z0-9]+) Build'
747
- device_replacement: 'HTC $1'
748
- # example: Mozilla/5.0 (Linux; U; Android 2.1; es-es; HTC Legend 1.23.161.1 Build/ERD79) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17,gzip
749
- - regex: 'HTC ([A-Z][a-z0-9 ]+) \d+\.\d+\.\d+\.\d+'
750
- device_replacement: 'HTC $1'
751
- # example: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; HTC_Touch_Diamond2_T5353; Windows Phone 6.5.3.5)
752
- - regex: 'HTC_Touch_([A-Za-z0-9]+)'
753
- device_replacement: 'HTC Touch ($1)'
754
- # should come after HTC_Touch
755
- - regex: 'USCCHTC(\d+)'
756
- device_replacement: 'HTC $1 (US Cellular)'
757
- - regex: 'Sprint APA(9292)'
758
- device_replacement: 'HTC $1 (Sprint)'
759
- - regex: 'HTC ([A-Za-z0-9]+ [A-Z])'
760
- device_replacement: 'HTC $1'
761
- - regex: 'HTC[-_/\s]([A-Za-z0-9]+)'
762
- device_replacement: 'HTC $1'
763
- - regex: '(ADR[A-Za-z0-9]+)'
764
- device_replacement: 'HTC $1'
765
- - regex: '(HTC)'
766
-
767
- # Tesla Model S
768
- - regex: '(QtCarBrowser)'
769
- device_replacement: 'Tesla Model S'
770
-
771
- # Samsung
772
- - regex: '(SamsungSGHi560)'
773
- device_replacement: 'Samsung SGHi560'
774
-
775
- #########
776
- # Ericsson - must come before nokia since they also use symbian
777
- #########
778
- - regex: 'SonyEricsson([A-Za-z0-9]+)/'
779
- device_replacement: 'Ericsson $1'
780
-
781
- ##########
782
- # PlayStation
783
- # The Vita spoofs the Kindle
784
- ##########
785
- - regex: 'PLAYSTATION 3'
786
- device_replacement: 'PlayStation 3'
787
- - regex: '(PlayStation Portable)'
788
- - regex: '(PlayStation Vita)'
789
-
790
- ##########
791
- # incomplete!
792
- # Kindle
793
- # http://amazonsilk.wordpress.com/useful-bits/silk-user-agent/
794
- ##########
795
- - regex: '(KFOT Build)'
796
- device_replacement: 'Kindle Fire'
797
- - regex: '(KFTT Build)'
798
- device_replacement: 'Kindle Fire HD'
799
- - regex: '(KFJWI Build)'
800
- device_replacement: 'Kindle Fire HD 8.9" WiFi'
801
- - regex: '(KFJWA Build)'
802
- device_replacement: 'Kindle Fire HD 8.9" 4G'
803
- - regex: '(KFSOWI Build)'
804
- device_replacement: 'Kindle Fire HD 7" WiFi'
805
- - regex: '(KFTHWI Build)'
806
- device_replacement: 'Kindle Fire HDX 7" WiFi'
807
- - regex: '(KFTHWA Build)'
808
- device_replacement: 'Kindle Fire HDX 7" 4G'
809
- - regex: '(KFAPWI Build)'
810
- device_replacement: 'Kindle Fire HDX 8.9" WiFi'
811
- - regex: '(KFAPWA Build)'
812
- device_replacement: 'Kindle Fire HDX 8.9" 4G'
813
- - regex: '(Kindle Fire)'
814
- - regex: '(Kindle)'
815
- - regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+))?'
816
- device_replacement: 'Kindle Fire'
817
-
818
- #########
819
- # Android General Device Matching (far from perfect)
820
- #########
821
- - regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{0,2}; WOWMobile (.+) Build'
822
- - regex: 'Android[\- ][\d]+\.[\d]+\-update1; [A-Za-z]{2}\-[A-Za-z]{0,2}; (.+) Build'
823
- - regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{0,2}; (.+) Build'
824
- - regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+;[A-Za-z]{2}\-[A-Za-z]{0,2};(.+) Build'
825
- - regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{0,2}; (.+) Build'
826
- - regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+; (.+) Build'
827
- - regex: 'Android[\- ][\d]+\.[\d]+; (.+) Build'
828
-
829
- ##########
830
- # NOKIA
831
- # nokia NokiaN8-00 comes before iphone. sometimes spoofs iphone
832
- ##########
833
- - regex: 'NokiaN([0-9]+)'
834
- device_replacement: 'Nokia N$1'
835
- - regex: 'NOKIA([A-Za-z0-9\v-]+)'
836
- device_replacement: 'Nokia $1'
837
- - regex: 'Nokia([A-Za-z0-9\v-]+)'
838
- device_replacement: 'Nokia $1'
839
- - regex: 'NOKIA ([A-Za-z0-9\-]+)'
840
- device_replacement: 'Nokia $1'
841
- - regex: 'Nokia ([A-Za-z0-9\-]+)'
842
- device_replacement: 'Nokia $1'
843
- - regex: 'Lumia ([A-Za-z0-9\-]+)'
844
- device_replacement: 'Lumia $1'
845
- - regex: 'Symbian'
846
- device_replacement: 'Nokia'
847
-
848
- ##########
849
- # BlackBerry
850
- # http://www.useragentstring.com/pages/BlackBerry/
851
- ##########
852
- - regex: 'BB10; ([A-Za-z0-9\- ]+)\)'
853
- device_replacement: 'BlackBerry $1'
854
- - regex: '(PlayBook).+RIM Tablet OS'
855
- device_replacement: 'BlackBerry Playbook'
856
- - regex: 'Black[Bb]erry ([0-9]+);'
857
- device_replacement: 'BlackBerry $1'
858
- - regex: 'Black[Bb]erry([0-9]+)'
859
- device_replacement: 'BlackBerry $1'
860
- - regex: 'Black[Bb]erry;'
861
- device_replacement: 'BlackBerry'
862
-
863
- ##########
864
- # PALM / HP
865
- ##########
866
- # some palm devices must come before iphone. sometimes spoofs iphone in ua
867
- - regex: '(Pre)/(\d+)\.(\d+)'
868
- device_replacement: 'Palm Pre'
869
- - regex: '(Pixi)/(\d+)\.(\d+)'
870
- device_replacement: 'Palm Pixi'
871
- - regex: '(Touch[Pp]ad)/(\d+)\.(\d+)'
872
- device_replacement: 'HP TouchPad'
873
- - regex: 'HPiPAQ([A-Za-z0-9]+)/(\d+).(\d+)'
874
- device_replacement: 'HP iPAQ $1'
875
- - regex: 'Palm([A-Za-z0-9]+)'
876
- device_replacement: 'Palm $1'
877
- - regex: 'Treo([A-Za-z0-9]+)'
878
- device_replacement: 'Palm Treo $1'
879
- - regex: 'webOS.*(P160UNA)/(\d+).(\d+)'
880
- device_replacement: 'HP Veer'
881
-
882
- ##########
883
- # AppleTV
884
- # No built in browser that I can tell
885
- # Stack Overflow indicated iTunes-AppleTV/4.1 as a known UA for app available and I'm seeing it in live traffic
886
- ##########
887
- - regex: '(AppleTV)'
888
- device_replacement: 'AppleTV'
889
-
890
- ##########
891
- # Catch the google mobile crawler before checking for iPhones.
892
- ##########
893
-
894
- - regex: 'AdsBot-Google-Mobile'
895
- device_replacement: 'Spider'
896
-
897
- - regex: 'Googlebot-Mobile/(\d+).(\d+)'
898
- device_replacement: 'Spider'
899
-
900
- ##########
901
- # complete but probably catches spoofs
902
- # iSTUFF
903
- ##########
904
- # ipad and ipod must be parsed before iphone
905
- # cannot determine specific device type from ua string. (3g, 3gs, 4, etc)
906
- - regex: '(iPad) Simulator;'
907
- - regex: '(iPad);'
908
- - regex: '(iPod) touch;'
909
- - regex: '(iPod);'
910
- - regex: '(iPhone) Simulator;'
911
- - regex: '(iPhone);'
912
-
913
- ##########
914
- # Acer
915
- ##########
916
- - regex: 'acer_([A-Za-z0-9]+)_'
917
- device_replacement: 'Acer $1'
918
- - regex: 'acer_([A-Za-z0-9]+)_'
919
- device_replacement: 'Acer $1'
920
-
921
- ##########
922
- # Alcatel
923
- ##########
924
- - regex: 'ALCATEL-([A-Za-z0-9]+)'
925
- device_replacement: 'Alcatel $1'
926
- - regex: 'Alcatel-([A-Za-z0-9]+)'
927
- device_replacement: 'Alcatel $1'
928
-
929
- ##########
930
- # Amoi
931
- ##########
932
- - regex: 'Amoi\-([A-Za-z0-9]+)'
933
- device_replacement: 'Amoi $1'
934
- - regex: 'AMOI\-([A-Za-z0-9]+)'
935
- device_replacement: 'Amoi $1'
936
-
937
- ##########
938
- # Amoi
939
- ##########
940
- - regex: 'Asus\-([A-Za-z0-9]+)'
941
- device_replacement: 'Asus $1'
942
- - regex: 'ASUS\-([A-Za-z0-9]+)'
943
- device_replacement: 'Asus $1'
944
-
945
- ##########
946
- # Bird
947
- ##########
948
- - regex: 'BIRD\-([A-Za-z0-9]+)'
949
- device_replacement: 'Bird $1'
950
- - regex: 'BIRD\.([A-Za-z0-9]+)'
951
- device_replacement: 'Bird $1'
952
- - regex: 'BIRD ([A-Za-z0-9]+)'
953
- device_replacement: 'Bird $1'
954
-
955
- ##########
956
- # Dell
957
- ##########
958
- - regex: 'Dell ([A-Za-z0-9]+)'
959
- device_replacement: 'Dell $1'
960
-
961
- ##########
962
- # DoCoMo
963
- ##########
964
- - regex: 'DoCoMo/2\.0 ([A-Za-z0-9]+)'
965
- device_replacement: 'DoCoMo $1'
966
- - regex: '([A-Za-z0-9]+)_W\;FOMA'
967
- device_replacement: 'DoCoMo $1'
968
- - regex: '([A-Za-z0-9]+)\;FOMA'
969
- device_replacement: 'DoCoMo $1'
970
-
971
- ##########
972
- # Huawei
973
- ##########
974
- - regex: 'Huawei([A-Za-z0-9]+)'
975
- device_replacement: 'Huawei $1'
976
- - regex: 'HUAWEI-([A-Za-z0-9]+)'
977
- device_replacement: 'Huawei $1'
978
- - regex: 'vodafone([A-Za-z0-9]+)'
979
- device_replacement: 'Huawei Vodafone $1'
980
-
981
- ##########
982
- # i-mate
983
- ##########
984
- - regex: 'i\-mate ([A-Za-z0-9]+)'
985
- device_replacement: 'i-mate $1'
986
-
987
- ##########
988
- # kyocera
989
- ##########
990
- - regex: 'Kyocera\-([A-Za-z0-9]+)'
991
- device_replacement: 'Kyocera $1'
992
- - regex: 'KWC\-([A-Za-z0-9]+)'
993
- device_replacement: 'Kyocera $1'
994
-
995
- ##########
996
- # lenovo
997
- ##########
998
- - regex: 'Lenovo\-([A-Za-z0-9]+)'
999
- device_replacement: 'Lenovo $1'
1000
- - regex: 'Lenovo_([A-Za-z0-9]+)'
1001
- device_replacement: 'Lenovo $1'
1002
-
1003
- ##########
1004
- # HbbTV (European and Australian standard)
1005
- # written before the LG regexes, as LG is making HbbTV too
1006
- ##########
1007
- - regex: '(HbbTV)/[0-9]+\.[0-9]+\.[0-9]+'
1008
-
1009
- ##########
1010
- # lg
1011
- ##########
1012
- - regex: 'LG/([A-Za-z0-9]+)'
1013
- device_replacement: 'LG $1'
1014
- - regex: 'LG-LG([A-Za-z0-9]+)'
1015
- device_replacement: 'LG $1'
1016
- - regex: 'LGE-LG([A-Za-z0-9]+)'
1017
- device_replacement: 'LG $1'
1018
- - regex: 'LGE VX([A-Za-z0-9]+)'
1019
- device_replacement: 'LG $1'
1020
- - regex: 'LG ([A-Za-z0-9]+)'
1021
- device_replacement: 'LG $1'
1022
- - regex: 'LGE LG\-AX([A-Za-z0-9]+)'
1023
- device_replacement: 'LG $1'
1024
- - regex: 'LG\-([A-Za-z0-9]+)'
1025
- device_replacement: 'LG $1'
1026
- - regex: 'LGE\-([A-Za-z0-9]+)'
1027
- device_replacement: 'LG $1'
1028
- - regex: 'LG([A-Za-z0-9]+)'
1029
- device_replacement: 'LG $1'
1030
-
1031
- ##########
1032
- # kin
1033
- ##########
1034
- - regex: '(KIN)\.One (\d+)\.(\d+)'
1035
- device_replacement: 'Microsoft $1'
1036
- - regex: '(KIN)\.Two (\d+)\.(\d+)'
1037
- device_replacement: 'Microsoft $1'
1038
-
1039
- ##########
1040
- # motorola
1041
- ##########
1042
- - regex: '(Motorola)\-([A-Za-z0-9]+)'
1043
- - regex: 'MOTO\-([A-Za-z0-9]+)'
1044
- device_replacement: 'Motorola $1'
1045
- - regex: 'MOT\-([A-Za-z0-9]+)'
1046
- device_replacement: 'Motorola $1'
1047
-
1048
- ##########
1049
- # nintendo
1050
- ##########
1051
- - regex: '(Nintendo WiiU)'
1052
- device_replacement: 'Nintendo Wii U'
1053
- - regex: 'Nintendo (DS|3DS|DSi|Wii);'
1054
- device_replacement: 'Nintendo $1'
1055
-
1056
- ##########
1057
- # pantech
1058
- ##########
1059
- - regex: 'Pantech([A-Za-z0-9]+)'
1060
- device_replacement: 'Pantech $1'
1061
-
1062
- ##########
1063
- # philips
1064
- ##########
1065
- - regex: 'Philips([A-Za-z0-9]+)'
1066
- device_replacement: 'Philips $1'
1067
- - regex: 'Philips ([A-Za-z0-9]+)'
1068
- device_replacement: 'Philips $1'
1069
-
1070
- ##########
1071
- # Samsung
1072
- ##########
1073
- - regex: 'SAMSUNG-([A-Za-z0-9\-]+)'
1074
- device_replacement: 'Samsung $1'
1075
- - regex: 'SAMSUNG\; ([A-Za-z0-9\-]+)'
1076
- device_replacement: 'Samsung $1'
1077
-
1078
- ##########
1079
- # Sega
1080
- ##########
1081
- - regex: 'Dreamcast'
1082
- device_replacement: 'Sega Dreamcast'
1083
-
1084
- ##########
1085
- # Softbank
1086
- ##########
1087
- - regex: 'Softbank/1\.0/([A-Za-z0-9]+)'
1088
- device_replacement: 'Softbank $1'
1089
- - regex: 'Softbank/2\.0/([A-Za-z0-9]+)'
1090
- device_replacement: 'Softbank $1'
1091
-
1092
- ##########
1093
- # WebTV
1094
- ##########
1095
- - regex: '(WebTV)/(\d+).(\d+)'
1096
-
1097
- ##########
1098
- # Generic Smart Phone
1099
- ##########
1100
- - regex: '(hiptop|avantgo|plucker|xiino|blazer|elaine|up.browser|up.link|mmp|smartphone|midp|wap|vodafone|o2|pocket|mobile|pda)'
1101
- device_replacement: "Generic Smartphone"
1102
-
1103
- ##########
1104
- # Generic Feature Phone
1105
- ##########
1106
- - regex: '^(1207|3gso|4thp|501i|502i|503i|504i|505i|506i|6310|6590|770s|802s|a wa|acer|acs\-|airn|alav|asus|attw|au\-m|aur |aus |abac|acoo|aiko|alco|alca|amoi|anex|anny|anyw|aptu|arch|argo|bell|bird|bw\-n|bw\-u|beck|benq|bilb|blac|c55/|cdm\-|chtm|capi|comp|cond|craw|dall|dbte|dc\-s|dica|ds\-d|ds12|dait|devi|dmob|doco|dopo|el49|erk0|esl8|ez40|ez60|ez70|ezos|ezze|elai|emul|eric|ezwa|fake|fly\-|fly_|g\-mo|g1 u|g560|gf\-5|grun|gene|go.w|good|grad|hcit|hd\-m|hd\-p|hd\-t|hei\-|hp i|hpip|hs\-c|htc |htc\-|htca|htcg)'
1107
- device_replacement: 'Generic Feature Phone'
1108
- - regex: '^(htcp|htcs|htct|htc_|haie|hita|huaw|hutc|i\-20|i\-go|i\-ma|i230|iac|iac\-|iac/|ig01|im1k|inno|iris|jata|java|kddi|kgt|kgt/|kpt |kwc\-|klon|lexi|lg g|lg\-a|lg\-b|lg\-c|lg\-d|lg\-f|lg\-g|lg\-k|lg\-l|lg\-m|lg\-o|lg\-p|lg\-s|lg\-t|lg\-u|lg\-w|lg/k|lg/l|lg/u|lg50|lg54|lge\-|lge/|lynx|leno|m1\-w|m3ga|m50/|maui|mc01|mc21|mcca|medi|meri|mio8|mioa|mo01|mo02|mode|modo|mot |mot\-|mt50|mtp1|mtv |mate|maxo|merc|mits|mobi|motv|mozz|n100|n101|n102|n202|n203|n300|n302|n500|n502|n505|n700|n701|n710|nec\-|nem\-|newg|neon)'
1109
- device_replacement: 'Generic Feature Phone'
1110
- - regex: '^(netf|noki|nzph|o2 x|o2\-x|opwv|owg1|opti|oran|ot\-s|p800|pand|pg\-1|pg\-2|pg\-3|pg\-6|pg\-8|pg\-c|pg13|phil|pn\-2|pt\-g|palm|pana|pire|pock|pose|psio|qa\-a|qc\-2|qc\-3|qc\-5|qc\-7|qc07|qc12|qc21|qc32|qc60|qci\-|qwap|qtek|r380|r600|raks|rim9|rove|s55/|sage|sams|sc01|sch\-|scp\-|sdk/|se47|sec\-|sec0|sec1|semc|sgh\-|shar|sie\-|sk\-0|sl45|slid|smb3|smt5|sp01|sph\-|spv |spv\-|sy01|samm|sany|sava|scoo|send|siem|smar|smit|soft|sony|t\-mo|t218|t250|t600|t610|t618|tcl\-|tdg\-|telm|tim\-|ts70|tsm\-|tsm3|tsm5|tx\-9|tagt)'
1111
- device_replacement: 'Generic Feature Phone'
1112
- - regex: '^(talk|teli|topl|tosh|up.b|upg1|utst|v400|v750|veri|vk\-v|vk40|vk50|vk52|vk53|vm40|vx98|virg|vite|voda|vulc|w3c |w3c\-|wapj|wapp|wapu|wapm|wig |wapi|wapr|wapv|wapy|wapa|waps|wapt|winc|winw|wonu|x700|xda2|xdag|yas\-|your|zte\-|zeto|aste|audi|avan|blaz|brew|brvw|bumb|ccwa|cell|cldc|cmd\-|dang|eml2|fetc|hipt|http|ibro|idea|ikom|ipaq|jbro|jemu|jigs|keji|kyoc|kyok|libw|m\-cr|midp|mmef|moto|mwbp|mywa|newt|nok6|o2im|pant|pdxg|play|pluc|port|prox|rozo|sama|seri|smal|symb|treo|upsi|vx52|vx53|vx60|vx61|vx70|vx80|vx81|vx83|vx85|wap\-|webc|whit|wmlb|xda\-|xda_)'
1113
- device_replacement: 'Generic Feature Phone'
1114
-
1115
- ##########
1116
- # Spiders (this is hack...)
1117
- ##########
1118
- - regex: '(bingbot|bot|borg|google(^tv)|yahoo|slurp|msnbot|msrbot|openbot|archiver|netresearch|lycos|scooter|altavista|teoma|gigabot|baiduspider|blitzbot|oegp|charlotte|furlbot|http%20client|polybot|htdig|ichiro|mogimogi|larbin|pompos|scrubby|searchsight|seekbot|semanticdiscovery|silk|snappy|speedy|spider|voila|vortex|voyager|zao|zeal|fast\-webcrawler|converacrawler|dataparksearch|findlinks|crawler)'
1119
- device_replacement: 'Spider'
1120
-