user_agent_parser 0.1.2 → 2.1.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.
Potentially problematic release.
This version of user_agent_parser might be problematic. Click here for more details.
- checksums.yaml +15 -0
- data/Readme.md +34 -31
- data/lib/user_agent_parser.rb +4 -15
- data/lib/user_agent_parser/device.rb +23 -0
- data/lib/user_agent_parser/operating_system.rb +20 -18
- data/lib/user_agent_parser/parser.rb +106 -49
- data/lib/user_agent_parser/user_agent.rb +20 -15
- data/lib/user_agent_parser/version.rb +30 -15
- data/vendor/ua-parser/regexes.yaml +388 -139
- metadata +7 -11
@@ -1,32 +1,47 @@
|
|
1
1
|
module UserAgentParser
|
2
|
-
|
3
2
|
class Version
|
4
3
|
|
5
|
-
|
4
|
+
# Private: Regex used to split version string into major, minor, patch,
|
5
|
+
# and patch_minor.
|
6
|
+
SEGMENTS_REGEX = /\d+\-\d+|\d+[a-zA-Z]+$|\d+|[A-Za-z][0-9A-Za-z-]*$/
|
7
|
+
|
8
|
+
attr_reader :version
|
6
9
|
alias :to_s :version
|
7
10
|
|
8
11
|
def initialize(version)
|
9
|
-
|
12
|
+
@version = version.to_s.strip
|
10
13
|
end
|
11
14
|
|
12
|
-
def
|
13
|
-
|
14
|
-
|
15
|
-
|
15
|
+
def major
|
16
|
+
segments[0]
|
17
|
+
end
|
18
|
+
|
19
|
+
def minor
|
20
|
+
segments[1]
|
21
|
+
end
|
22
|
+
|
23
|
+
def patch
|
24
|
+
segments[2]
|
16
25
|
end
|
17
26
|
|
18
|
-
def
|
19
|
-
segments[
|
27
|
+
def patch_minor
|
28
|
+
segments[3]
|
20
29
|
end
|
21
|
-
|
30
|
+
|
22
31
|
def inspect
|
23
32
|
"#<#{self.class} #{to_s}>"
|
24
33
|
end
|
25
|
-
|
26
|
-
def
|
27
|
-
|
34
|
+
|
35
|
+
def eql?(other)
|
36
|
+
self.class.eql?(other.class) &&
|
37
|
+
version == other.version
|
28
38
|
end
|
29
39
|
|
30
|
-
|
40
|
+
alias_method :==, :eql?
|
31
41
|
|
32
|
-
|
42
|
+
# Private
|
43
|
+
def segments
|
44
|
+
@segments ||= version.scan(SEGMENTS_REGEX)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -1,28 +1,29 @@
|
|
1
|
-
### THIS FILE WAS COPIED ON JAN 26 2012.
|
2
|
-
### ORIGINAL IS AT: http://code.google.com/p/ua-parser/source/browse/trunk/resources/user_agent_parser.yaml
|
3
|
-
### Please review the CHANGELOG to see how this file differs from the original
|
4
1
|
user_agent_parsers:
|
5
2
|
#### SPECIAL CASES TOP ####
|
6
3
|
|
7
|
-
# must go before Opera
|
8
|
-
- regex: '^(Opera)/(\d+)\.(\d+) \(Nintendo Wii'
|
9
|
-
family_replacement: 'Wii'
|
10
|
-
|
11
4
|
# must go before Firefox to catch SeaMonkey/Camino
|
12
5
|
- regex: '(SeaMonkey|Camino)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)'
|
13
6
|
|
14
7
|
# Firefox
|
8
|
+
- regex: '(Pale[Mm]oon)/(\d+)\.(\d+)\.?(\d+)?'
|
9
|
+
family_replacement: 'Pale Moon (Firefox Variant)'
|
15
10
|
- regex: '(Fennec)/(\d+)\.(\d+)\.?([ab]?\d+[a-z]*)'
|
16
11
|
family_replacement: 'Firefox Mobile'
|
17
12
|
- regex: '(Fennec)/(\d+)\.(\d+)(pre)'
|
18
|
-
|
13
|
+
family_replacement: 'Firefox Mobile'
|
19
14
|
- regex: '(Fennec)/(\d+)\.(\d+)'
|
20
15
|
family_replacement: 'Firefox Mobile'
|
16
|
+
- regex: 'Mobile.*(Firefox)/(\d+)\.(\d+)'
|
17
|
+
family_replacement: 'Firefox Mobile'
|
21
18
|
- regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)\.(\d+(?:pre)?)'
|
22
19
|
family_replacement: 'Firefox ($1)'
|
23
|
-
- regex: '(Firefox)/(\d+)\.(\d+)(
|
20
|
+
- regex: '(Firefox)/(\d+)\.(\d+)(a\d+[a-z]*)'
|
21
|
+
family_replacement: 'Firefox Alpha'
|
22
|
+
- regex: '(Firefox)/(\d+)\.(\d+)(b\d+[a-z]*)'
|
24
23
|
family_replacement: 'Firefox Beta'
|
25
|
-
- regex: '(Firefox)-(?:\d+\.\d+)?/(\d+)\.(\d+)(
|
24
|
+
- regex: '(Firefox)-(?:\d+\.\d+)?/(\d+)\.(\d+)(a\d+[a-z]*)'
|
25
|
+
family_replacement: 'Firefox Alpha'
|
26
|
+
- regex: '(Firefox)-(?:\d+\.\d+)?/(\d+)\.(\d+)(b\d+[a-z]*)'
|
26
27
|
family_replacement: 'Firefox Beta'
|
27
28
|
- regex: '(Namoroka|Shiretoko|Minefield)/(\d+)\.(\d+)([ab]\d+[a-z]*)?'
|
28
29
|
family_replacement: 'Firefox ($1)'
|
@@ -60,17 +61,21 @@ user_agent_parsers:
|
|
60
61
|
- regex: '(Opera Mini)/att/(\d+)\.(\d+)'
|
61
62
|
- regex: '(Opera)/9.80.*Version/(\d+)\.(\d+)(?:\.(\d+))?'
|
62
63
|
|
64
|
+
# Opera 14 for Android uses a WebKit render engine.
|
65
|
+
- regex: '(?:Mobile Safari).*(OPR)/(\d+)\.(\d+)\.(\d+)'
|
66
|
+
family_replacement: 'Opera Mobile'
|
67
|
+
|
63
68
|
# Palm WebOS looks a lot like Safari.
|
64
|
-
- regex: '(
|
65
|
-
|
66
|
-
family_replacement: 'webOSBrowser'
|
67
|
-
- regex: '(wOSBrowser).+TouchPad/(\d+)\.(\d+)'
|
68
|
-
family_replacement: 'webOS TouchPad'
|
69
|
+
- regex: '(hpw|web)OS/(\d+)\.(\d+)(?:\.(\d+))?'
|
70
|
+
family_replacement: 'webOS Browser'
|
69
71
|
|
70
72
|
# LuaKit has no version info.
|
71
73
|
# http://luakit.org/projects/luakit/
|
72
74
|
- regex: '(luakit)'
|
73
75
|
family_replacement: 'LuaKit'
|
76
|
+
|
77
|
+
# Snowshoe
|
78
|
+
- regex: '(Snowshoe)/(\d+)\.(\d+).(\d+)'
|
74
79
|
|
75
80
|
# Lightning (for Thunderbird)
|
76
81
|
# http://www.mozilla.org/projects/calendar/lightning/
|
@@ -83,6 +88,8 @@ user_agent_parsers:
|
|
83
88
|
family_replacement: 'Swiftfox'
|
84
89
|
|
85
90
|
# Rekonq
|
91
|
+
- regex: '(rekonq)/(\d+)\.(\d+) Safari'
|
92
|
+
family_replacement: 'Rekonq'
|
86
93
|
- regex: 'rekonq'
|
87
94
|
family_replacement: 'Rekonq'
|
88
95
|
|
@@ -100,42 +107,94 @@ user_agent_parsers:
|
|
100
107
|
- regex: '(Comodo_Dragon)/(\d+)\.(\d+)\.(\d+)'
|
101
108
|
family_replacement: 'Comodo Dragon'
|
102
109
|
|
103
|
-
#
|
104
|
-
- regex: '(YottaaMonitor)'
|
105
|
-
|
106
|
-
# must go before NetFront below
|
107
|
-
- regex: '(Kindle)/(\d+)\.(\d+)'
|
110
|
+
# Bots
|
111
|
+
- regex: '(YottaaMonitor|BrowserMob|HttpMonitor|YandexBot|Slurp|BingPreview|PagePeeker|ThumbShotsBot|WebThumb|URL2PNG|ZooShot|GomezA|Catchpoint bot|Willow Internet Crawler|Google SketchUp|Read%20Later)'
|
108
112
|
|
109
113
|
- regex: '(Symphony) (\d+).(\d+)'
|
110
114
|
|
111
|
-
- regex: 'Minimo'
|
115
|
+
- regex: '(Minimo)'
|
112
116
|
|
113
117
|
# Chrome Mobile
|
114
118
|
- regex: '(CrMo)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
115
119
|
family_replacement: 'Chrome Mobile'
|
120
|
+
- regex: '(CriOS)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
121
|
+
family_replacement: 'Chrome Mobile iOS'
|
122
|
+
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+)\.(\d+) Mobile'
|
123
|
+
family_replacement: 'Chrome Mobile'
|
116
124
|
|
117
125
|
# Chrome Frame must come before MSIE.
|
118
126
|
- regex: '(chromeframe)/(\d+)\.(\d+)\.(\d+)'
|
119
127
|
family_replacement: 'Chrome Frame'
|
120
128
|
|
121
129
|
# UC Browser
|
122
|
-
- regex: '(
|
130
|
+
- regex: '(UCBrowser)[ /](\d+)\.(\d+)\.(\d+)'
|
131
|
+
family_replacement: 'UC Browser'
|
132
|
+
- regex: '(UC Browser)[ /](\d+)\.(\d+)\.(\d+)'
|
133
|
+
- regex: '(UC Browser|UCBrowser|UCWEB)(\d+)\.(\d+)\.(\d+)'
|
134
|
+
family_replacement: 'UC Browser'
|
135
|
+
|
136
|
+
# Tizen Browser (second case included in browser/major.minor regex)
|
137
|
+
- regex: '(SLP Browser)/(\d+)\.(\d+)'
|
138
|
+
family_replacement: 'Tizen Browser'
|
139
|
+
|
140
|
+
# Epiphany browser (identifies as Chromium)
|
141
|
+
- regex: '(Epiphany)/(\d+)\.(\d+).(\d+)'
|
142
|
+
|
143
|
+
# Sogou Explorer 2.X
|
144
|
+
- regex: '(SE 2\.X) MetaSr (\d+)\.(\d+)'
|
145
|
+
family_replacement: 'Sogou Explorer'
|
146
|
+
|
147
|
+
# Baidu Browsers (desktop spoofs chrome & IE, explorer is mobile)
|
148
|
+
- regex: '(baidubrowser)[/\s](\d+)'
|
149
|
+
family_replacement: 'Baidu Browser'
|
150
|
+
- regex: '(FlyFlow)/(\d+)\.(\d+)'
|
151
|
+
family_replacement: 'Baidu Explorer'
|
152
|
+
|
153
|
+
# Pingdom
|
154
|
+
- regex: '(Pingdom.com_bot_version_)(\d+)\.(\d+)'
|
155
|
+
family_replacement: 'PingdomBot'
|
156
|
+
|
157
|
+
# Facebook
|
158
|
+
- regex: '(facebookexternalhit)/(\d+)\.(\d+)'
|
159
|
+
family_replacement: 'FacebookBot'
|
160
|
+
|
161
|
+
# Twitterbot
|
162
|
+
- regex: '(Twitterbot)/(\d+)\.(\d+)'
|
163
|
+
family_replacement: 'TwitterBot'
|
164
|
+
|
165
|
+
# Rackspace Monitoring
|
166
|
+
- regex: '(Rackspace Monitoring)/(\d+)\.(\d+)'
|
167
|
+
family_replacement: 'RackspaceBot'
|
168
|
+
|
169
|
+
# PyAMF
|
170
|
+
- regex: '(PyAMF)/(\d+)\.(\d+)\.(\d+)'
|
171
|
+
|
172
|
+
# Yandex Browser
|
173
|
+
- regex: '(YaBrowser)/(\d+)\.(\d+)\.(\d+)'
|
174
|
+
family_replacement: 'Yandex Browser'
|
175
|
+
|
176
|
+
# Mail.ru Amigo/Internet Browser (Chromium-based)
|
177
|
+
- regex: '(Chrome)/(\d+)\.(\d+)\.(\d+).* MRCHROME'
|
178
|
+
family_replacement: 'Mail.ru Chromium Browser'
|
123
179
|
|
124
180
|
#### END SPECIAL CASES TOP ####
|
125
181
|
|
126
182
|
#### MAIN CASES - this catches > 50% of all browsers ####
|
127
183
|
|
128
184
|
# Browser/major_version.minor_version.beta_version
|
129
|
-
- regex: '(AdobeAIR|Chromium|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Shiira|Sunrise|Chrome|Flock|Netscape|Lunascape|
|
185
|
+
- regex: '(AdobeAIR|Chromium|FireWeb|Jasmine|ANTGalio|Midori|Fresco|Lobo|PaleMoon|Maxthon|Lynx|OmniWeb|Dillo|Camino|Demeter|Fluid|Fennec|Shiira|Sunrise|Chrome|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+)'
|
130
186
|
|
131
187
|
# Browser/major_version.minor_version
|
132
|
-
- regex: '(Bolt|Jasmine|IceCat|Skyfire|Midori|Maxthon|Lynx|Arora|IBrowse|Dillo|Camino|Shiira|Fennec|Phoenix|Chrome|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|NetNewsWire|
|
188
|
+
- regex: '(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+)'
|
133
189
|
|
134
190
|
# Browser major_version.minor_version.beta_version (space instead of slash)
|
135
191
|
- regex: '(iRider|Crazy Browser|SkipStone|iCab|Lunascape|Sleipnir|Maemo Browser) (\d+)\.(\d+)\.(\d+)'
|
136
192
|
# Browser major_version.minor_version (space instead of slash)
|
137
|
-
- regex: '(iCab|Lunascape|Opera|Android|Jasmine|Polaris
|
138
|
-
|
193
|
+
- regex: '(iCab|Lunascape|Opera|Android|Jasmine|Polaris) (\d+)\.(\d+)\.?(\d+)?'
|
194
|
+
|
195
|
+
# Kindle WebKit
|
196
|
+
- regex: '(Kindle)/(\d+)\.(\d+)'
|
197
|
+
|
139
198
|
# weird android UAs
|
140
199
|
- regex: '(Android) Donut'
|
141
200
|
v1_replacement: '1'
|
@@ -174,18 +233,33 @@ user_agent_parsers:
|
|
174
233
|
- regex: '(Obigo)InternetBrowser'
|
175
234
|
- regex: '(Obigo)\-Browser'
|
176
235
|
- regex: '(Obigo|OBIGO)[^\d]*(\d+)(?:.(\d+))?'
|
236
|
+
family_replacement: 'Obigo'
|
177
237
|
|
178
238
|
- regex: '(MAXTHON|Maxthon) (\d+)\.(\d+)'
|
179
239
|
family_replacement: 'Maxthon'
|
180
240
|
- regex: '(Maxthon|MyIE2|Uzbl|Shiira)'
|
181
241
|
v1_replacement: '0'
|
182
242
|
|
183
|
-
- regex: '
|
184
|
-
family_replacement: '
|
185
|
-
- regex: '
|
243
|
+
- regex: 'PLAYSTATION 3.+WebKit'
|
244
|
+
family_replacement: 'NetFront NX'
|
245
|
+
- regex: 'PLAYSTATION 3'
|
246
|
+
family_replacement: 'NetFront'
|
247
|
+
- regex: '(PlayStation Portable)'
|
248
|
+
family_replacement: 'NetFront'
|
249
|
+
- regex: '(PlayStation Vita)'
|
250
|
+
family_replacement: 'NetFront NX'
|
251
|
+
|
252
|
+
- regex: 'AppleWebKit.+ (NX)/(\d+)\.(\d+)\.(\d+)'
|
253
|
+
family_replacement: 'NetFront NX'
|
254
|
+
- regex: '(Nintendo 3DS)'
|
255
|
+
family_replacement: 'NetFront NX'
|
186
256
|
|
187
257
|
- regex: '(BrowseX) \((\d+)\.(\d+)\.(\d+)'
|
188
258
|
|
259
|
+
- regex: '(NCSA_Mosaic)/(\d+)\.(\d+)'
|
260
|
+
family_replacement: 'NCSA Mosaic'
|
261
|
+
|
262
|
+
# Polaris/d.d is above
|
189
263
|
- regex: '(POLARIS)/(\d+)\.(\d+)'
|
190
264
|
family_replacement: 'Polaris'
|
191
265
|
- regex: '(Embider)/(\d+)\.(\d+)'
|
@@ -194,56 +268,71 @@ user_agent_parsers:
|
|
194
268
|
- regex: '(BonEcho)/(\d+)\.(\d+)\.(\d+)'
|
195
269
|
family_replacement: 'Bon Echo'
|
196
270
|
|
271
|
+
- regex: 'M?QQBrowser'
|
272
|
+
family_replacement: 'QQ Browser'
|
273
|
+
|
197
274
|
- regex: '(iPod).+Version/(\d+)\.(\d+)\.(\d+)'
|
198
275
|
family_replacement: 'Mobile Safari'
|
199
276
|
- regex: '(iPod).*Version/(\d+)\.(\d+)'
|
200
277
|
family_replacement: 'Mobile Safari'
|
201
|
-
- regex: '(iPod)'
|
202
|
-
family_replacement: 'Mobile Safari'
|
203
278
|
- regex: '(iPhone).*Version/(\d+)\.(\d+)\.(\d+)'
|
204
279
|
family_replacement: 'Mobile Safari'
|
205
280
|
- regex: '(iPhone).*Version/(\d+)\.(\d+)'
|
206
281
|
family_replacement: 'Mobile Safari'
|
207
|
-
- regex: '(iPhone)'
|
208
|
-
family_replacement: 'Mobile Safari'
|
209
282
|
- regex: '(iPad).*Version/(\d+)\.(\d+)\.(\d+)'
|
210
283
|
family_replacement: 'Mobile Safari'
|
211
284
|
- regex: '(iPad).*Version/(\d+)\.(\d+)'
|
212
285
|
family_replacement: 'Mobile Safari'
|
213
|
-
- regex: '(iPad)'
|
286
|
+
- regex: '(iPod|iPhone|iPad);.*CPU.*OS (\d+)(?:_\d+)?_(\d+).*Mobile'
|
287
|
+
family_replacement: 'Mobile Safari'
|
288
|
+
- regex: '(iPod|iPhone|iPad)'
|
214
289
|
family_replacement: 'Mobile Safari'
|
215
290
|
|
216
291
|
- regex: '(AvantGo) (\d+).(\d+)'
|
292
|
+
|
293
|
+
- regex: '(OneBrowser)/(\d+).(\d+)'
|
294
|
+
family_replacement: 'ONE Browser'
|
217
295
|
|
218
296
|
- regex: '(Avant)'
|
219
297
|
v1_replacement: '1'
|
220
298
|
|
299
|
+
# This is the Tesla Model S (see similar entry in device parsers)
|
300
|
+
- regex: '(QtCarBrowser)'
|
301
|
+
v1_replacement: '1'
|
302
|
+
|
303
|
+
- regex: '(iBrowser/Mini)(\d+).(\d+)'
|
304
|
+
family_replacement: 'iBrowser Mini'
|
221
305
|
# nokia browsers
|
222
306
|
# based on: http://www.developer.nokia.com/Community/Wiki/User-Agent_headers_for_Nokia_devices
|
223
307
|
- regex: '^(Nokia)'
|
224
308
|
family_replacement: 'Nokia Services (WAP) Browser'
|
225
309
|
- regex: '(NokiaBrowser)/(\d+)\.(\d+).(\d+)\.(\d+)'
|
310
|
+
family_replacement: 'Nokia Browser'
|
226
311
|
- regex: '(NokiaBrowser)/(\d+)\.(\d+).(\d+)'
|
312
|
+
family_replacement: 'Nokia Browser'
|
227
313
|
- regex: '(NokiaBrowser)/(\d+)\.(\d+)'
|
314
|
+
family_replacement: 'Nokia Browser'
|
228
315
|
- regex: '(BrowserNG)/(\d+)\.(\d+).(\d+)'
|
229
|
-
family_replacement: '
|
316
|
+
family_replacement: 'Nokia Browser'
|
230
317
|
- regex: '(Series60)/5\.0'
|
231
|
-
family_replacement: '
|
318
|
+
family_replacement: 'Nokia Browser'
|
232
319
|
v1_replacement: '7'
|
233
320
|
v2_replacement: '0'
|
234
321
|
- regex: '(Series60)/(\d+)\.(\d+)'
|
235
322
|
family_replacement: 'Nokia OSS Browser'
|
236
323
|
- regex: '(S40OviBrowser)/(\d+)\.(\d+)\.(\d+)\.(\d+)'
|
237
|
-
family_replacement: '
|
324
|
+
family_replacement: 'Ovi Browser'
|
238
325
|
- regex: '(Nokia)[EN]?(\d+)'
|
239
326
|
|
240
327
|
# BlackBerry devices
|
328
|
+
- regex: '(BB10);'
|
329
|
+
family_replacement: 'BlackBerry WebKit'
|
241
330
|
- regex: '(PlayBook).+RIM Tablet OS (\d+)\.(\d+)\.(\d+)'
|
242
|
-
family_replacement: '
|
331
|
+
family_replacement: 'BlackBerry WebKit'
|
243
332
|
- regex: '(Black[bB]erry).+Version/(\d+)\.(\d+)\.(\d+)'
|
244
|
-
family_replacement: '
|
333
|
+
family_replacement: 'BlackBerry WebKit'
|
245
334
|
- regex: '(Black[bB]erry)\s?(\d+)'
|
246
|
-
family_replacement: '
|
335
|
+
family_replacement: 'BlackBerry'
|
247
336
|
|
248
337
|
- regex: '(OmniWeb)/v(\d+)\.(\d+)'
|
249
338
|
|
@@ -262,6 +351,14 @@ user_agent_parsers:
|
|
262
351
|
|
263
352
|
# Amazon Silk, should go before Safari
|
264
353
|
- regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+))?'
|
354
|
+
family_replacement: 'Amazon Silk'
|
355
|
+
|
356
|
+
# Phantomjs, should go before Safari
|
357
|
+
- regex: '(PhantomJS)/(\d+)\.(\d+)\.(\d+)'
|
358
|
+
|
359
|
+
# WebKit Nightly
|
360
|
+
- regex: '(AppleWebKit)/(\d+)\.?(\d+)?\+ .* Safari'
|
361
|
+
family_replacement: 'WebKit Nightly'
|
265
362
|
|
266
363
|
# Safari
|
267
364
|
- regex: '(Version)/(\d+)\.(\d+)(?:\.(\d+))?.*Safari/'
|
@@ -278,11 +375,50 @@ user_agent_parsers:
|
|
278
375
|
|
279
376
|
- regex: '(Teleca)'
|
280
377
|
family_replacement: 'Teleca Browser'
|
378
|
+
|
379
|
+
- regex: '(Phantom)/V(\d+)\.(\d+)'
|
380
|
+
family_replacement: 'Phantom Browser'
|
281
381
|
|
282
|
-
- regex: '(
|
382
|
+
- regex: '([MS]?IE) (\d+)\.(\d+)'
|
283
383
|
family_replacement: 'IE'
|
284
384
|
|
385
|
+
- regex: '(python-requests)/(\d+)\.(\d+)'
|
386
|
+
family_replacement: 'Python Requests'
|
387
|
+
|
285
388
|
os_parsers:
|
389
|
+
|
390
|
+
##########
|
391
|
+
# Android
|
392
|
+
# can actually detect rooted android os. do we care?
|
393
|
+
##########
|
394
|
+
- regex: '(Android) (\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?'
|
395
|
+
- regex: '(Android)\-(\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?'
|
396
|
+
|
397
|
+
- regex: '(Android) Donut'
|
398
|
+
os_v1_replacement: '1'
|
399
|
+
os_v2_replacement: '2'
|
400
|
+
|
401
|
+
- regex: '(Android) Eclair'
|
402
|
+
os_v1_replacement: '2'
|
403
|
+
os_v2_replacement: '1'
|
404
|
+
|
405
|
+
- regex: '(Android) Froyo'
|
406
|
+
os_v1_replacement: '2'
|
407
|
+
os_v2_replacement: '2'
|
408
|
+
|
409
|
+
- regex: '(Android) Gingerbread'
|
410
|
+
os_v1_replacement: '2'
|
411
|
+
os_v2_replacement: '3'
|
412
|
+
|
413
|
+
- regex: '(Android) Honeycomb'
|
414
|
+
os_v1_replacement: '3'
|
415
|
+
|
416
|
+
##########
|
417
|
+
# Kindle Android
|
418
|
+
##########
|
419
|
+
- regex: '(Silk-Accelerated=[a-z]{4,5})'
|
420
|
+
os_replacement: 'Android'
|
421
|
+
|
286
422
|
##########
|
287
423
|
# Windows
|
288
424
|
# http://en.wikipedia.org/wiki/Windows_NT#Releases
|
@@ -291,15 +427,14 @@ os_parsers:
|
|
291
427
|
# lots of ua strings have Windows NT 4.1 !?!?!?!? !?!? !? !????!?! !!! ??? !?!?! ?
|
292
428
|
# (very) roughly ordered in terms of frequency of occurence of regex (win xp currently most frequent, etc)
|
293
429
|
##########
|
294
|
-
|
295
|
-
|
430
|
+
|
296
431
|
- regex: '(Windows (?:NT 5\.2|NT 5\.1))'
|
297
432
|
os_replacement: 'Windows XP'
|
298
433
|
|
299
434
|
# ie mobile des ktop mode
|
300
435
|
# spoofs nt 6.1. must come before windows 7
|
301
436
|
- regex: '(XBLWP7)'
|
302
|
-
os_replacement: 'Windows Phone
|
437
|
+
os_replacement: 'Windows Phone'
|
303
438
|
|
304
439
|
- regex: '(Windows NT 6\.1)'
|
305
440
|
os_replacement: 'Windows 7'
|
@@ -307,7 +442,10 @@ os_parsers:
|
|
307
442
|
- regex: '(Windows NT 6\.0)'
|
308
443
|
os_replacement: 'Windows Vista'
|
309
444
|
|
310
|
-
- regex: '(Windows 98|Windows XP|Windows ME|Windows 95|Windows CE|Windows 7|Windows NT 4\.0|Windows Vista|Windows 2000)'
|
445
|
+
- regex: '(Windows 98|Windows XP|Windows ME|Windows 95|Windows CE|Windows 7|Windows NT 4\.0|Windows Vista|Windows 2000|Windows 3.1)'
|
446
|
+
|
447
|
+
- regex: '(Windows NT 6\.2; ARM;)'
|
448
|
+
os_replacement: 'Windows RT'
|
311
449
|
|
312
450
|
# is this a spoof or is nt 6.2 out and about in some capacity?
|
313
451
|
- regex: '(Windows NT 6\.2)'
|
@@ -316,8 +454,8 @@ os_parsers:
|
|
316
454
|
- regex: '(Windows NT 5\.0)'
|
317
455
|
os_replacement: 'Windows 2000'
|
318
456
|
|
319
|
-
- regex: '(Windows Phone
|
320
|
-
|
457
|
+
- regex: '(Windows Phone) (\d+)\.(\d+)'
|
458
|
+
- regex: '(Windows Phone) OS (\d+)\.(\d+)'
|
321
459
|
- regex: '(Windows ?Mobile)'
|
322
460
|
os_replacement: 'Windows Mobile'
|
323
461
|
|
@@ -328,36 +466,20 @@ os_parsers:
|
|
328
466
|
os_replacement: 'Windows 98'
|
329
467
|
|
330
468
|
##########
|
331
|
-
#
|
332
|
-
#
|
469
|
+
# Tizen OS from Samsung
|
470
|
+
# spoofs Android so pushing it above
|
333
471
|
##########
|
334
|
-
- regex: '(
|
335
|
-
- regex: '(Android)\-(\d+)\.(\d+)(?:[.\-]([a-z0-9]+))?'
|
336
|
-
|
337
|
-
- regex: '(Android) Donut'
|
338
|
-
os_v1_replacement: '1'
|
339
|
-
os_v2_replacement: '2'
|
340
|
-
|
341
|
-
- regex: '(Android) Eclair'
|
342
|
-
os_v1_replacement: '2'
|
343
|
-
os_v2_replacement: '1'
|
344
|
-
|
345
|
-
- regex: '(Android) Froyo'
|
346
|
-
os_v1_replacement: '2'
|
347
|
-
os_v2_replacement: '2'
|
348
|
-
|
349
|
-
- regex: '(Android) Gingerbread'
|
350
|
-
os_v1_replacement: '2'
|
351
|
-
os_v2_replacement: '3'
|
352
|
-
|
353
|
-
- regex: '(Android) Honeycomb'
|
354
|
-
os_v1_replacement: '3'
|
472
|
+
- regex: '(Tizen)/(\d+)\.(\d+)'
|
355
473
|
|
356
474
|
##########
|
357
475
|
# Mac OS
|
358
476
|
# http://en.wikipedia.org/wiki/Mac_OS_X#Versions
|
359
477
|
##########
|
360
478
|
- regex: '(Mac OS X) (\d+)[_.](\d+)(?:[_.](\d+))?'
|
479
|
+
|
480
|
+
# IE on Mac doesn't specify version number
|
481
|
+
- regex: 'Mac_PowerPC'
|
482
|
+
os_replacement: 'Mac OS'
|
361
483
|
|
362
484
|
# builds before tiger don't seem to specify version?
|
363
485
|
|
@@ -379,6 +501,11 @@ os_parsers:
|
|
379
501
|
- regex: '(iPhone|iPad|iPod).*Mac OS X.*Version/(\d+)\.(\d+)'
|
380
502
|
os_replacement: 'iOS'
|
381
503
|
|
504
|
+
- regex: '(AppleTV)/(\d+)\.(\d+)'
|
505
|
+
os_replacement: 'ATV OS X'
|
506
|
+
os_v1_replacement: '$1'
|
507
|
+
os_v2_replacement: '$2'
|
508
|
+
|
382
509
|
##########
|
383
510
|
# Chrome OS
|
384
511
|
# if version 0.0.0, probably this stuff:
|
@@ -412,10 +539,14 @@ os_parsers:
|
|
412
539
|
- regex: '(MeeGo)'
|
413
540
|
- regex: 'Symbian [Oo][Ss]'
|
414
541
|
os_replacement: 'Symbian OS'
|
542
|
+
- regex: 'Series40;'
|
543
|
+
os_replacement: 'Nokia Series 40'
|
415
544
|
|
416
545
|
##########
|
417
546
|
# BlackBerry devices
|
418
547
|
##########
|
548
|
+
- regex: '(BB10);.+Version/(\d+)\.(\d+)\.(\d+)'
|
549
|
+
os_replacement: 'BlackBerry OS'
|
419
550
|
- regex: '(Black[Bb]erry)[0-9a-z]+/(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?'
|
420
551
|
os_replacement: 'BlackBerry OS'
|
421
552
|
- regex: '(Black[Bb]erry).+Version/(\d+)\.(\d+)\.(\d+)(?:\.(\d+))?'
|
@@ -425,13 +556,40 @@ os_parsers:
|
|
425
556
|
- regex: '(Play[Bb]ook)'
|
426
557
|
os_replacement: 'BlackBerry Tablet OS'
|
427
558
|
- regex: '(Black[Bb]erry)'
|
428
|
-
os_replacement: '
|
559
|
+
os_replacement: 'BlackBerry OS'
|
560
|
+
|
561
|
+
##########
|
562
|
+
# Firefox OS
|
563
|
+
##########
|
564
|
+
- regex: '\(Mobile;.+Firefox/\d+\.\d+'
|
565
|
+
os_replacement: 'Firefox OS'
|
566
|
+
|
567
|
+
##########
|
568
|
+
# BREW
|
569
|
+
# yes, Brew is lower-cased for Brew MP
|
570
|
+
##########
|
571
|
+
- regex: '(BREW)[ /](\d+)\.(\d+)\.(\d+)'
|
572
|
+
- regex: '(BREW);'
|
573
|
+
- regex: '(Brew MP|BMP)[ /](\d+)\.(\d+)\.(\d+)'
|
574
|
+
os_replacement: 'Brew MP'
|
575
|
+
- regex: 'BMP;'
|
576
|
+
os_replacement: 'Brew MP'
|
577
|
+
|
578
|
+
##########
|
579
|
+
# Google TV
|
580
|
+
##########
|
581
|
+
- regex: '(GoogleTV) (\d+)\.(\d+)\.(\d+)'
|
582
|
+
# Old style
|
583
|
+
- regex: '(GoogleTV)\/\d+'
|
429
584
|
|
585
|
+
- regex: '(WebTV)/(\d+).(\d+)'
|
586
|
+
|
430
587
|
##########
|
431
588
|
# Misc mobile
|
432
589
|
##########
|
433
|
-
- regex: '(
|
590
|
+
- regex: '(hpw|web)OS/(\d+)\.(\d+)(?:\.(\d+))?'
|
434
591
|
os_replacement: 'webOS'
|
592
|
+
- regex: '(VRE);'
|
435
593
|
|
436
594
|
##########
|
437
595
|
# Generic patterns
|
@@ -448,7 +606,10 @@ os_parsers:
|
|
448
606
|
|
449
607
|
# just os
|
450
608
|
- regex: '(Windows|OpenBSD|FreeBSD|NetBSD|Ubuntu|Kubuntu|Android|Arch Linux|CentOS|WeTab|Slackware)'
|
609
|
+
- regex: '(Linux)/(\d+)\.(\d+)'
|
451
610
|
- regex: '(Linux|BSD)'
|
611
|
+
- regex: 'SunOS'
|
612
|
+
os_replacement: 'Solaris'
|
452
613
|
|
453
614
|
device_parsers:
|
454
615
|
##########
|
@@ -478,30 +639,64 @@ device_parsers:
|
|
478
639
|
- regex: 'Sprint APA(9292)'
|
479
640
|
device_replacement: 'HTC $1 (Sprint)'
|
480
641
|
- regex: 'HTC ([A-Za-z0-9]+ [A-Z])'
|
481
|
-
device_replacement: HTC $1
|
482
|
-
- regex: 'HTC-([A-Za-z0-9]+)'
|
483
|
-
device_replacement: 'HTC $1'
|
484
|
-
- regex: 'HTC_([A-Za-z0-9]+)'
|
485
642
|
device_replacement: 'HTC $1'
|
486
|
-
- regex: 'HTC
|
643
|
+
- regex: 'HTC[-_/\s]([A-Za-z0-9]+)'
|
487
644
|
device_replacement: 'HTC $1'
|
488
|
-
- regex: '(ADR[A-z0-9]+)'
|
645
|
+
- regex: '(ADR[A-Za-z0-9]+)'
|
489
646
|
device_replacement: 'HTC $1'
|
490
647
|
- regex: '(HTC)'
|
491
648
|
|
649
|
+
# Tesla Model S
|
650
|
+
- regex: '(QtCarBrowser)'
|
651
|
+
device_replacement: 'Tesla Model S'
|
652
|
+
|
653
|
+
# Samsung
|
654
|
+
- regex: '(SamsungSGHi560)'
|
655
|
+
device_replacement: 'Samsung SGHi560'
|
656
|
+
|
492
657
|
#########
|
493
658
|
# Ericsson - must come before nokia since they also use symbian
|
494
659
|
#########
|
495
|
-
- regex: 'SonyEricsson([A-z0-9]+)/'
|
660
|
+
- regex: 'SonyEricsson([A-Za-z0-9]+)/'
|
496
661
|
device_replacement: 'Ericsson $1'
|
497
662
|
|
663
|
+
##########
|
664
|
+
# PlayStation
|
665
|
+
# The Vita spoofs the Kindle
|
666
|
+
##########
|
667
|
+
- regex: 'PLAYSTATION 3'
|
668
|
+
device_replacement: 'PlayStation 3'
|
669
|
+
- regex: '(PlayStation Portable)'
|
670
|
+
- regex: '(PlayStation Vita)'
|
671
|
+
|
672
|
+
##########
|
673
|
+
# incomplete!
|
674
|
+
# Kindle
|
675
|
+
# http://amazonsilk.wordpress.com/useful-bits/silk-user-agent/
|
676
|
+
##########
|
677
|
+
- regex: '(KFOT Build)'
|
678
|
+
device_replacement: 'Kindle Fire'
|
679
|
+
- regex: '(KFTT Build)'
|
680
|
+
device_replacement: 'Kindle Fire HD'
|
681
|
+
- regex: '(KFJWI Build)'
|
682
|
+
device_replacement: 'Kindle Fire HD 8.9" WiFi'
|
683
|
+
- regex: '(KFJWA Build)'
|
684
|
+
device_replacement: 'Kindle Fire HD 8.9" 4G'
|
685
|
+
- regex: '(Kindle Fire)'
|
686
|
+
- regex: '(Kindle)'
|
687
|
+
- regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+))?'
|
688
|
+
device_replacement: 'Kindle Fire'
|
689
|
+
|
498
690
|
#########
|
499
691
|
# Android General Device Matching (far from perfect)
|
500
692
|
#########
|
501
|
-
- regex: 'Android[\- ][\d]+\.[\d]
|
502
|
-
- regex: 'Android[\- ][\d]+\.[\d]
|
503
|
-
- regex: 'Android[\- ][\d]+\.[\d]
|
504
|
-
- regex: 'Android[\- ][\d]+\.[\d]
|
693
|
+
- regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{2}; WOWMobile (.+) Build'
|
694
|
+
- regex: 'Android[\- ][\d]+\.[\d]+\-update1; [A-Za-z]{2}\-[A-Za-z]{2}; (.+) Build'
|
695
|
+
- regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{2}; (.+) Build'
|
696
|
+
- regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+;[A-Za-z]{2}\-[A-Za-z]{2};(.+) Build'
|
697
|
+
- regex: 'Android[\- ][\d]+\.[\d]+; [A-Za-z]{2}\-[A-Za-z]{2}; (.+) Build'
|
698
|
+
- regex: 'Android[\- ][\d]+\.[\d]+\.[\d]+; (.+) Build'
|
699
|
+
- regex: 'Android[\- ][\d]+\.[\d]+; (.+) Build'
|
505
700
|
|
506
701
|
##########
|
507
702
|
# NOKIA
|
@@ -509,6 +704,8 @@ device_parsers:
|
|
509
704
|
##########
|
510
705
|
- regex: 'NokiaN([0-9]+)'
|
511
706
|
device_replacement: 'Nokia N$1'
|
707
|
+
- regex: 'NOKIA([A-Za-z0-9\v-]+)'
|
708
|
+
device_replacement: 'Nokia $1'
|
512
709
|
- regex: 'Nokia([A-Za-z0-9\v-]+)'
|
513
710
|
device_replacement: 'Nokia $1'
|
514
711
|
- regex: 'NOKIA ([A-Za-z0-9\-]+)'
|
@@ -521,14 +718,19 @@ device_parsers:
|
|
521
718
|
device_replacement: 'Nokia'
|
522
719
|
|
523
720
|
##########
|
524
|
-
#
|
721
|
+
# BlackBerry
|
525
722
|
# http://www.useragentstring.com/pages/BlackBerry/
|
526
723
|
##########
|
724
|
+
- regex: 'BB10; ([A-Za-z0-9\- ]+)\)'
|
725
|
+
device_replacement: 'BlackBerry $1'
|
527
726
|
- regex: '(PlayBook).+RIM Tablet OS'
|
528
|
-
device_replacement: '
|
529
|
-
- regex: '
|
727
|
+
device_replacement: 'BlackBerry Playbook'
|
728
|
+
- regex: 'Black[Bb]erry ([0-9]+);'
|
729
|
+
device_replacement: 'BlackBerry $1'
|
530
730
|
- regex: 'Black[Bb]erry([0-9]+)'
|
531
731
|
device_replacement: 'BlackBerry $1'
|
732
|
+
- regex: 'Black[Bb]erry;'
|
733
|
+
device_replacement: 'BlackBerry'
|
532
734
|
|
533
735
|
##########
|
534
736
|
# PALM / HP
|
@@ -538,26 +740,35 @@ device_parsers:
|
|
538
740
|
device_replacement: 'Palm Pre'
|
539
741
|
- regex: '(Pixi)/(\d+)\.(\d+)'
|
540
742
|
device_replacement: 'Palm Pixi'
|
541
|
-
- regex: '(
|
542
|
-
device_replacement: 'HP
|
543
|
-
- regex: 'HPiPAQ([A-z0-9]+)/(\d+).(\d+)'
|
743
|
+
- regex: '(Touch[Pp]ad)/(\d+)\.(\d+)'
|
744
|
+
device_replacement: 'HP TouchPad'
|
745
|
+
- regex: 'HPiPAQ([A-Za-z0-9]+)/(\d+).(\d+)'
|
544
746
|
device_replacement: 'HP iPAQ $1'
|
545
|
-
- regex: 'Palm([A-z0-9]+)'
|
747
|
+
- regex: 'Palm([A-Za-z0-9]+)'
|
546
748
|
device_replacement: 'Palm $1'
|
547
|
-
- regex: 'Treo([A-z0-9]+)'
|
749
|
+
- regex: 'Treo([A-Za-z0-9]+)'
|
548
750
|
device_replacement: 'Palm Treo $1'
|
549
751
|
- regex: 'webOS.*(P160UNA)/(\d+).(\d+)'
|
550
752
|
device_replacement: 'HP Veer'
|
551
753
|
|
552
754
|
##########
|
553
|
-
#
|
554
|
-
#
|
755
|
+
# AppleTV
|
756
|
+
# No built in browser that I can tell
|
757
|
+
# Stack Overflow indicated iTunes-AppleTV/4.1 as a known UA for app available and I'm seeing it in live traffic
|
555
758
|
##########
|
556
|
-
- regex: '(
|
557
|
-
|
558
|
-
- regex: '(Silk)/(\d+)\.(\d+)(?:\.([0-9\-]+))?'
|
559
|
-
device_replacement: 'Kindle Fire'
|
759
|
+
- regex: '(AppleTV)'
|
760
|
+
device_replacement: 'AppleTV'
|
560
761
|
|
762
|
+
##########
|
763
|
+
# Catch the google mobile crawler before checking for iPhones.
|
764
|
+
##########
|
765
|
+
|
766
|
+
- regex: 'AdsBot-Google-Mobile'
|
767
|
+
device_replacement: 'Spider'
|
768
|
+
|
769
|
+
- regex: 'Googlebot-Mobile/(\d+).(\d+)'
|
770
|
+
device_replacement: 'Spider'
|
771
|
+
|
561
772
|
##########
|
562
773
|
# complete but probably catches spoofs
|
563
774
|
# iSTUFF
|
@@ -573,101 +784,113 @@ device_parsers:
|
|
573
784
|
##########
|
574
785
|
# Acer
|
575
786
|
##########
|
576
|
-
- regex: 'acer_([A-z0-9]+)_'
|
787
|
+
- regex: 'acer_([A-Za-z0-9]+)_'
|
577
788
|
device_replacement: 'Acer $1'
|
578
|
-
- regex: 'acer_([A-z0-9]+)_'
|
789
|
+
- regex: 'acer_([A-Za-z0-9]+)_'
|
579
790
|
device_replacement: 'Acer $1'
|
580
791
|
|
792
|
+
##########
|
793
|
+
# Alcatel
|
794
|
+
##########
|
795
|
+
- regex: 'ALCATEL-([A-Za-z0-9]+)'
|
796
|
+
device_replacement: 'Alcatel $1'
|
797
|
+
- regex: 'Alcatel-([A-Za-z0-9]+)'
|
798
|
+
device_replacement: 'Alcatel $1'
|
799
|
+
|
581
800
|
##########
|
582
801
|
# Amoi
|
583
802
|
##########
|
584
|
-
- regex: 'Amoi\-([A-z0-9]+)'
|
803
|
+
- regex: 'Amoi\-([A-Za-z0-9]+)'
|
585
804
|
device_replacement: 'Amoi $1'
|
586
|
-
- regex: 'AMOI\-([A-z0-9]+)'
|
805
|
+
- regex: 'AMOI\-([A-Za-z0-9]+)'
|
587
806
|
device_replacement: 'Amoi $1'
|
588
807
|
|
589
808
|
##########
|
590
809
|
# Amoi
|
591
810
|
##########
|
592
|
-
- regex: 'Asus\-([A-z0-9]+)'
|
811
|
+
- regex: 'Asus\-([A-Za-z0-9]+)'
|
593
812
|
device_replacement: 'Asus $1'
|
594
|
-
- regex: 'ASUS\-([A-z0-9]+)'
|
813
|
+
- regex: 'ASUS\-([A-Za-z0-9]+)'
|
595
814
|
device_replacement: 'Asus $1'
|
596
815
|
|
597
816
|
##########
|
598
817
|
# Bird
|
599
818
|
##########
|
600
|
-
- regex: 'BIRD\-([A-z0-9]+)'
|
819
|
+
- regex: 'BIRD\-([A-Za-z0-9]+)'
|
601
820
|
device_replacement: 'Bird $1'
|
602
|
-
- regex: 'BIRD\.([A-z0-9]+)'
|
821
|
+
- regex: 'BIRD\.([A-Za-z0-9]+)'
|
603
822
|
device_replacement: 'Bird $1'
|
604
|
-
- regex: 'BIRD ([A-z0-9]+)'
|
823
|
+
- regex: 'BIRD ([A-Za-z0-9]+)'
|
605
824
|
device_replacement: 'Bird $1'
|
606
825
|
|
607
826
|
##########
|
608
827
|
# Dell
|
609
828
|
##########
|
610
|
-
- regex: 'Dell ([A-z0-9]+)'
|
829
|
+
- regex: 'Dell ([A-Za-z0-9]+)'
|
611
830
|
device_replacement: 'Dell $1'
|
612
831
|
|
613
832
|
##########
|
614
833
|
# DoCoMo
|
615
834
|
##########
|
616
|
-
- regex: 'DoCoMo/2\.0 ([A-z0-9]+)'
|
835
|
+
- regex: 'DoCoMo/2\.0 ([A-Za-z0-9]+)'
|
617
836
|
device_replacement: 'DoCoMo $1'
|
618
|
-
- regex: '([A-z0-9]+)
|
837
|
+
- regex: '([A-Za-z0-9]+)_W\;FOMA'
|
619
838
|
device_replacement: 'DoCoMo $1'
|
620
|
-
- regex: '([A-z0-9]+)\;FOMA'
|
839
|
+
- regex: '([A-Za-z0-9]+)\;FOMA'
|
621
840
|
device_replacement: 'DoCoMo $1'
|
622
841
|
|
623
842
|
##########
|
624
|
-
# Huawei
|
843
|
+
# Huawei
|
625
844
|
##########
|
626
|
-
- regex: '
|
845
|
+
- regex: 'Huawei([A-Za-z0-9]+)'
|
846
|
+
device_replacement: 'Huawei $1'
|
847
|
+
- regex: 'HUAWEI-([A-Za-z0-9]+)'
|
848
|
+
device_replacement: 'Huawei $1'
|
849
|
+
- regex: 'vodafone([A-Za-z0-9]+)'
|
627
850
|
device_replacement: 'Huawei Vodafone $1'
|
628
851
|
|
629
852
|
##########
|
630
853
|
# i-mate
|
631
854
|
##########
|
632
|
-
- regex: 'i\-mate ([A-z0-9]+)'
|
855
|
+
- regex: 'i\-mate ([A-Za-z0-9]+)'
|
633
856
|
device_replacement: 'i-mate $1'
|
634
857
|
|
635
858
|
##########
|
636
859
|
# kyocera
|
637
860
|
##########
|
638
|
-
- regex: 'Kyocera\-([A-z0-9]+)'
|
861
|
+
- regex: 'Kyocera\-([A-Za-z0-9]+)'
|
639
862
|
device_replacement: 'Kyocera $1'
|
640
|
-
- regex: 'KWC\-([A-z0-9]+)'
|
863
|
+
- regex: 'KWC\-([A-Za-z0-9]+)'
|
641
864
|
device_replacement: 'Kyocera $1'
|
642
865
|
|
643
866
|
##########
|
644
867
|
# lenovo
|
645
868
|
##########
|
646
|
-
- regex: 'Lenovo\-([A-z0-9]+)'
|
869
|
+
- regex: 'Lenovo\-([A-Za-z0-9]+)'
|
647
870
|
device_replacement: 'Lenovo $1'
|
648
|
-
- regex: '
|
871
|
+
- regex: 'Lenovo_([A-Za-z0-9]+)'
|
649
872
|
device_replacement: 'Lenovo $1'
|
650
873
|
|
651
874
|
##########
|
652
875
|
# lg
|
653
876
|
##########
|
654
|
-
- regex: 'LG/([A-z0-9]+)'
|
877
|
+
- regex: 'LG/([A-Za-z0-9]+)'
|
655
878
|
device_replacement: 'LG $1'
|
656
|
-
- regex: 'LG-LG([A-z0-9]+)'
|
879
|
+
- regex: 'LG-LG([A-Za-z0-9]+)'
|
657
880
|
device_replacement: 'LG $1'
|
658
|
-
- regex: 'LGE-LG([A-z0-9]+)'
|
881
|
+
- regex: 'LGE-LG([A-Za-z0-9]+)'
|
659
882
|
device_replacement: 'LG $1'
|
660
|
-
- regex: 'LGE VX([A-z0-9]+)'
|
883
|
+
- regex: 'LGE VX([A-Za-z0-9]+)'
|
661
884
|
device_replacement: 'LG $1'
|
662
|
-
- regex: 'LG ([A-z0-9]+)'
|
885
|
+
- regex: 'LG ([A-Za-z0-9]+)'
|
663
886
|
device_replacement: 'LG $1'
|
664
|
-
- regex: 'LGE LG\-AX([A-z0-9]+)'
|
887
|
+
- regex: 'LGE LG\-AX([A-Za-z0-9]+)'
|
665
888
|
device_replacement: 'LG $1'
|
666
|
-
- regex: 'LG\-([A-z0-9]+)'
|
889
|
+
- regex: 'LG\-([A-Za-z0-9]+)'
|
667
890
|
device_replacement: 'LG $1'
|
668
|
-
- regex: 'LGE\-([A-z0-9]+)'
|
891
|
+
- regex: 'LGE\-([A-Za-z0-9]+)'
|
669
892
|
device_replacement: 'LG $1'
|
670
|
-
- regex: 'LG([A-z0-9]+)'
|
893
|
+
- regex: 'LG([A-Za-z0-9]+)'
|
671
894
|
device_replacement: 'LG $1'
|
672
895
|
|
673
896
|
##########
|
@@ -681,36 +904,61 @@ device_parsers:
|
|
681
904
|
##########
|
682
905
|
# motorola
|
683
906
|
##########
|
684
|
-
- regex: '(Motorola)\-([A-z0-9]+)'
|
685
|
-
- regex: 'MOTO\-([A-z0-9]+)'
|
907
|
+
- regex: '(Motorola)\-([A-Za-z0-9]+)'
|
908
|
+
- regex: 'MOTO\-([A-Za-z0-9]+)'
|
686
909
|
device_replacement: 'Motorola $1'
|
687
|
-
- regex: 'MOT\-([A-z0-9]+)'
|
910
|
+
- regex: 'MOT\-([A-Za-z0-9]+)'
|
688
911
|
device_replacement: 'Motorola $1'
|
912
|
+
|
913
|
+
##########
|
914
|
+
# nintendo
|
915
|
+
##########
|
916
|
+
- regex: '(Nintendo WiiU)'
|
917
|
+
device_replacement: 'Nintendo Wii U'
|
918
|
+
- regex: 'Nintendo (DS|3DS|DSi|Wii);'
|
919
|
+
device_replacement: 'Nintendo $1'
|
689
920
|
|
921
|
+
##########
|
922
|
+
# pantech
|
923
|
+
##########
|
924
|
+
- regex: 'Pantech([A-Za-z0-9]+)'
|
925
|
+
device_replacement: 'Pantech $1'
|
926
|
+
|
690
927
|
##########
|
691
928
|
# philips
|
692
929
|
##########
|
693
|
-
- regex: 'Philips([A-z0-9]+)'
|
930
|
+
- regex: 'Philips([A-Za-z0-9]+)'
|
694
931
|
device_replacement: 'Philips $1'
|
695
|
-
- regex: 'Philips ([A-z0-9]+)'
|
932
|
+
- regex: 'Philips ([A-Za-z0-9]+)'
|
696
933
|
device_replacement: 'Philips $1'
|
697
934
|
|
698
935
|
##########
|
699
936
|
# Samsung
|
700
937
|
##########
|
701
|
-
- regex: 'SAMSUNG-([A-z0-9\-]+)'
|
938
|
+
- regex: 'SAMSUNG-([A-Za-z0-9\-]+)'
|
702
939
|
device_replacement: 'Samsung $1'
|
703
|
-
- regex: 'SAMSUNG\; ([A-z0-9\-]+)'
|
940
|
+
- regex: 'SAMSUNG\; ([A-Za-z0-9\-]+)'
|
704
941
|
device_replacement: 'Samsung $1'
|
705
942
|
|
943
|
+
##########
|
944
|
+
# Sega
|
945
|
+
##########
|
946
|
+
- regex: 'Dreamcast'
|
947
|
+
device_replacement: 'Sega Dreamcast'
|
948
|
+
|
706
949
|
##########
|
707
950
|
# Softbank
|
708
951
|
##########
|
709
|
-
- regex: 'Softbank/1\.0/([A-z0-9]+)'
|
952
|
+
- regex: 'Softbank/1\.0/([A-Za-z0-9]+)'
|
710
953
|
device_replacement: 'Softbank $1'
|
711
|
-
- regex: 'Softbank/2\.0/([A-z0-9]+)'
|
954
|
+
- regex: 'Softbank/2\.0/([A-Za-z0-9]+)'
|
712
955
|
device_replacement: 'Softbank $1'
|
713
956
|
|
957
|
+
##########
|
958
|
+
# WebTV
|
959
|
+
##########
|
960
|
+
- regex: '(WebTV)/(\d+).(\d+)'
|
961
|
+
|
714
962
|
##########
|
715
963
|
# Generic Smart Phone
|
716
964
|
##########
|
@@ -720,17 +968,18 @@ device_parsers:
|
|
720
968
|
##########
|
721
969
|
# Generic Feature Phone
|
722
970
|
##########
|
723
|
-
- 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\-|
|
971
|
+
- 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)'
|
724
972
|
device_replacement: 'Generic Feature Phone'
|
725
|
-
- regex: '^(htcp|htcs|htct|
|
973
|
+
- 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)'
|
726
974
|
device_replacement: 'Generic Feature Phone'
|
727
975
|
- 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)'
|
728
976
|
device_replacement: 'Generic Feature Phone'
|
729
|
-
- 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\-|
|
977
|
+
- 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_)'
|
730
978
|
device_replacement: 'Generic Feature Phone'
|
731
979
|
|
732
980
|
##########
|
733
981
|
# Spiders (this is hack...)
|
734
982
|
##########
|
735
|
-
- regex: '(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)'
|
983
|
+
- regex: '(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)'
|
736
984
|
device_replacement: 'Spider'
|
985
|
+
|