user_agent_parser 2.1.2 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of user_agent_parser might be problematic. Click here for more details.

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
-