device_detector 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.rubocop.yml +49 -0
- data/.ruby-version +1 -0
- data/.travis.yml +1 -1
- data/CHANGELOG.md +5 -0
- data/README.md +4 -4
- data/Rakefile +6 -17
- data/device_detector.gemspec +1 -0
- data/lib/device_detector.rb +17 -28
- data/lib/device_detector/bot.rb +2 -2
- data/lib/device_detector/client.rb +3 -2
- data/lib/device_detector/device.rb +44 -21
- data/lib/device_detector/memory_cache.rb +5 -5
- data/lib/device_detector/metadata_extractor.rb +7 -8
- data/lib/device_detector/model_extractor.rb +3 -3
- data/lib/device_detector/name_extractor.rb +2 -2
- data/lib/device_detector/os.rb +121 -114
- data/lib/device_detector/parser.rb +22 -9
- data/lib/device_detector/version.rb +1 -1
- data/lib/device_detector/version_extractor.rb +2 -3
- data/regexes/bots.yml +228 -12
- data/regexes/client/browser_engine.yml +4 -1
- data/regexes/client/browsers.yml +358 -34
- data/regexes/client/feed_readers.yml +1 -1
- data/regexes/client/libraries.yml +16 -1
- data/regexes/client/mediaplayers.yml +14 -2
- data/regexes/client/mobile_apps.yml +26 -2
- data/regexes/client/pim.yml +1 -1
- data/regexes/device/cameras.yml +1 -1
- data/regexes/device/car_browsers.yml +7 -3
- data/regexes/device/consoles.yml +3 -3
- data/regexes/device/mobiles.yml +2468 -823
- data/regexes/device/portable_media_player.yml +2 -2
- data/regexes/device/televisions.yml +1 -1
- data/regexes/oss.yml +20 -5
- data/regexes/vendorfragments.yml +5 -1
- data/spec/device_detector/device_spec.rb +4 -24
- data/spec/fixtures/client/browser.yml +632 -2
- data/spec/fixtures/client/library.yml +18 -0
- data/spec/fixtures/client/mobile_app.yml +24 -0
- data/spec/fixtures/detector/bots.yml +533 -67
- data/spec/fixtures/detector/camera.yml +20 -0
- data/spec/fixtures/detector/car_browser.yml +60 -0
- data/spec/fixtures/detector/console.yml +40 -0
- data/spec/fixtures/detector/desktop.yml +140 -40
- data/spec/fixtures/detector/mediaplayer.yml +43 -0
- data/spec/fixtures/detector/mobile_apps.yml +40 -2
- data/spec/fixtures/detector/phablet.yml +383 -1
- data/spec/fixtures/detector/smart_speaker.yml +55 -0
- data/spec/fixtures/detector/smartphone-1.yml +3669 -3695
- data/spec/fixtures/detector/smartphone-10.yml +4147 -4094
- data/spec/fixtures/detector/smartphone-11.yml +4475 -4473
- data/spec/fixtures/detector/smartphone-12.yml +5502 -4251
- data/spec/fixtures/detector/smartphone-13.yml +9920 -0
- data/spec/fixtures/detector/smartphone-14.yml +2662 -0
- data/spec/fixtures/detector/smartphone-2.yml +3738 -3713
- data/spec/fixtures/detector/smartphone-3.yml +3970 -3912
- data/spec/fixtures/detector/smartphone-4.yml +4518 -4506
- data/spec/fixtures/detector/smartphone-5.yml +3645 -3664
- data/spec/fixtures/detector/smartphone-6.yml +3868 -3829
- data/spec/fixtures/detector/smartphone-7.yml +3992 -3985
- data/spec/fixtures/detector/smartphone-8.yml +4510 -4475
- data/spec/fixtures/detector/smartphone-9.yml +4226 -4255
- data/spec/fixtures/detector/smartphone.yml +3197 -3197
- data/spec/fixtures/detector/tablet-1.yml +3940 -3968
- data/spec/fixtures/detector/tablet-2.yml +3773 -3764
- data/spec/fixtures/detector/tablet-3.yml +5243 -3071
- data/spec/fixtures/detector/tablet-4.yml +4528 -0
- data/spec/fixtures/detector/tablet.yml +3145 -3125
- data/spec/fixtures/detector/tv.yml +1695 -95
- data/spec/fixtures/detector/unknown.yml +13 -60
- data/spec/fixtures/detector/wearable.yml +61 -0
- data/spec/fixtures/device/car_browser.yml +6 -0
- data/spec/fixtures/parser/oss.yml +36 -1
- data/spec/fixtures/parser/vendorfragments.yml +6 -0
- metadata +32 -7
@@ -1,8 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class DeviceDetector
|
2
4
|
class ModelExtractor < MetadataExtractor
|
3
|
-
|
4
5
|
def call
|
5
|
-
s = super.to_s.gsub('_',' ').strip
|
6
|
+
s = super.to_s.gsub('_', ' ').strip
|
6
7
|
s = s.gsub(/ TD$/i, '')
|
7
8
|
|
8
9
|
return nil if s == 'Build'
|
@@ -19,6 +20,5 @@ class DeviceDetector
|
|
19
20
|
def regex
|
20
21
|
@regex ||= regex_meta[:regex_model] || regex_meta[:regex]
|
21
22
|
end
|
22
|
-
|
23
23
|
end
|
24
24
|
end
|
@@ -1,6 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class DeviceDetector
|
2
4
|
class NameExtractor < MetadataExtractor
|
3
|
-
|
4
5
|
def call
|
5
6
|
if /\$[0-9]/ =~ metadata_string
|
6
7
|
extract_metadata
|
@@ -14,6 +15,5 @@ class DeviceDetector
|
|
14
15
|
def metadata_string
|
15
16
|
regex_meta[:name]
|
16
17
|
end
|
17
|
-
|
18
18
|
end
|
19
19
|
end
|
data/lib/device_detector/os.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'set'
|
2
4
|
|
3
5
|
class DeviceDetector
|
4
6
|
class OS < Parser
|
5
|
-
|
6
7
|
def name
|
7
8
|
os_info[:name]
|
8
9
|
end
|
@@ -38,128 +39,134 @@ class DeviceDetector
|
|
38
39
|
end
|
39
40
|
end
|
40
41
|
|
41
|
-
DESKTOP_OSS = Set.new(
|
42
|
+
DESKTOP_OSS = Set.new(
|
43
|
+
[
|
44
|
+
'AmigaOS', 'IBM', 'GNU/Linux', 'Mac', 'Unix', 'Windows', 'BeOS', 'Chrome OS'
|
45
|
+
]
|
46
|
+
)
|
42
47
|
|
43
48
|
# OS short codes mapped to long names
|
44
49
|
OPERATING_SYSTEMS = {
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
50
|
+
'AIX' => 'AIX',
|
51
|
+
'AND' => 'Android',
|
52
|
+
'AMG' => 'AmigaOS',
|
53
|
+
'ATV' => 'Apple TV',
|
54
|
+
'ARL' => 'Arch Linux',
|
55
|
+
'BTR' => 'BackTrack',
|
56
|
+
'SBA' => 'Bada',
|
57
|
+
'BEO' => 'BeOS',
|
58
|
+
'BLB' => 'BlackBerry OS',
|
59
|
+
'QNX' => 'BlackBerry Tablet OS',
|
60
|
+
'BMP' => 'Brew',
|
61
|
+
'CES' => 'CentOS',
|
62
|
+
'COS' => 'Chrome OS',
|
63
|
+
'CYN' => 'CyanogenMod',
|
64
|
+
'DEB' => 'Debian',
|
65
|
+
'DFB' => 'DragonFly',
|
66
|
+
'FED' => 'Fedora',
|
67
|
+
'FOS' => 'Firefox OS',
|
68
|
+
'FIR' => 'Fire OS',
|
69
|
+
'BSD' => 'FreeBSD',
|
70
|
+
'GNT' => 'Gentoo',
|
71
|
+
'GTV' => 'Google TV',
|
72
|
+
'HPX' => 'HP-UX',
|
73
|
+
'HAI' => 'Haiku OS',
|
74
|
+
'IRI' => 'IRIX',
|
75
|
+
'INF' => 'Inferno',
|
76
|
+
'KOS' => 'KaiOS',
|
77
|
+
'KNO' => 'Knoppix',
|
78
|
+
'KBT' => 'Kubuntu',
|
79
|
+
'LIN' => 'GNU/Linux',
|
80
|
+
'LBT' => 'Lubuntu',
|
81
|
+
'VLN' => 'VectorLinux',
|
82
|
+
'MAC' => 'Mac',
|
83
|
+
'MAE' => 'Maemo',
|
84
|
+
'MDR' => 'Mandriva',
|
85
|
+
'SMG' => 'MeeGo',
|
86
|
+
'MCD' => 'MocorDroid',
|
87
|
+
'MIN' => 'Mint',
|
88
|
+
'MLD' => 'MildWild',
|
89
|
+
'MOR' => 'MorphOS',
|
90
|
+
'NBS' => 'NetBSD',
|
91
|
+
'MTK' => 'MTK / Nucleus',
|
92
|
+
'WII' => 'Nintendo',
|
93
|
+
'NDS' => 'Nintendo Mobile',
|
94
|
+
'OS2' => 'OS/2',
|
95
|
+
'T64' => 'OSF1',
|
96
|
+
'OBS' => 'OpenBSD',
|
97
|
+
'ORD' => 'Ordissimo',
|
98
|
+
'PSP' => 'PlayStation Portable',
|
99
|
+
'PS3' => 'PlayStation',
|
100
|
+
'RHT' => 'Red Hat',
|
101
|
+
'ROS' => 'RISC OS',
|
102
|
+
'REM' => 'Remix OS',
|
103
|
+
'RZD' => 'RazoDroiD',
|
104
|
+
'SAB' => 'Sabayon',
|
105
|
+
'SSE' => 'SUSE',
|
106
|
+
'SAF' => 'Sailfish OS',
|
107
|
+
'SLW' => 'Slackware',
|
108
|
+
'SOS' => 'Solaris',
|
109
|
+
'SYL' => 'Syllable',
|
110
|
+
'SYM' => 'Symbian',
|
111
|
+
'SYS' => 'Symbian OS',
|
112
|
+
'S40' => 'Symbian OS Series 40',
|
113
|
+
'S60' => 'Symbian OS Series 60',
|
114
|
+
'SY3' => 'Symbian^3',
|
115
|
+
'TDX' => 'ThreadX',
|
116
|
+
'TIZ' => 'Tizen',
|
117
|
+
'TOS' => 'TmaxOS',
|
118
|
+
'UBT' => 'Ubuntu',
|
119
|
+
'WTV' => 'WebTV',
|
120
|
+
'WIN' => 'Windows',
|
121
|
+
'WCE' => 'Windows CE',
|
122
|
+
'WIO' => 'Windows IoT',
|
123
|
+
'WMO' => 'Windows Mobile',
|
124
|
+
'WPH' => 'Windows Phone',
|
125
|
+
'WRT' => 'Windows RT',
|
126
|
+
'XBX' => 'Xbox',
|
127
|
+
'XBT' => 'Xubuntu',
|
128
|
+
'YNS' => 'YunOs',
|
129
|
+
'IOS' => 'iOS',
|
130
|
+
'POS' => 'palmOS',
|
131
|
+
'WOS' => 'webOS'
|
132
|
+
}.freeze
|
133
|
+
|
134
|
+
DOWNCASED_OPERATING_SYSTEMS = OPERATING_SYSTEMS.each_with_object({}) do |(short, long), h|
|
135
|
+
h[long.downcase] = short
|
136
|
+
end
|
128
137
|
|
129
138
|
OS_FAMILIES = {
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
}
|
154
|
-
|
155
|
-
FAMILY_TO_OS = OS_FAMILIES.each_with_object({}) do |(family,oss),h|
|
156
|
-
oss.each{|os| h[os] = family}
|
139
|
+
'Android' => %w[AND CYN FIR REM RZD MLD MCD YNS],
|
140
|
+
'AmigaOS' => %w[AMG MOR],
|
141
|
+
'Apple TV' => ['ATV'],
|
142
|
+
'BlackBerry' => %w[BLB QNX],
|
143
|
+
'Brew' => ['BMP'],
|
144
|
+
'BeOS' => %w[BEO HAI],
|
145
|
+
'Chrome OS' => ['COS'],
|
146
|
+
'Firefox OS' => %w[FOS KOS],
|
147
|
+
'Gaming Console' => %w[WII PS3],
|
148
|
+
'Google TV' => ['GTV'],
|
149
|
+
'IBM' => ['OS2'],
|
150
|
+
'iOS' => ['IOS'],
|
151
|
+
'RISC OS' => ['ROS'],
|
152
|
+
'GNU/Linux' => %w[LIN ARL DEB KNO MIN UBT KBT XBT LBT FED RHT VLN MDR GNT SAB SLW SSE CES BTR SAF ORD TOS],
|
153
|
+
'Mac' => ['MAC'],
|
154
|
+
'Mobile Gaming Console' => %w[PSP NDS XBX],
|
155
|
+
'Real-time OS' => %w[MTK TDX],
|
156
|
+
'Other Mobile' => %w[WOS POS SBA TIZ SMG MAE],
|
157
|
+
'Symbian' => %w[SYM SYS SY3 S60 S40],
|
158
|
+
'Unix' => %w[SOS AIX HPX BSD NBS OBS DFB SYL IRI T64 INF],
|
159
|
+
'WebTV' => ['WTV'],
|
160
|
+
'Windows' => ['WIN'],
|
161
|
+
'Windows Mobile' => %w[WPH WMO WCE WRT WIO]
|
162
|
+
}.freeze
|
163
|
+
|
164
|
+
FAMILY_TO_OS = OS_FAMILIES.each_with_object({}) do |(family, oss), h|
|
165
|
+
oss.each { |os| h[os] = family }
|
157
166
|
end
|
158
167
|
|
159
168
|
def filenames
|
160
169
|
['oss.yml']
|
161
170
|
end
|
162
|
-
|
163
171
|
end
|
164
|
-
|
165
172
|
end
|
@@ -1,7 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class DeviceDetector
|
2
|
-
class Parser
|
4
|
+
class Parser
|
5
|
+
ROOT = File.expand_path('../..', __dir__)
|
6
|
+
|
7
|
+
REGEX_CACHE = ::DeviceDetector::MemoryCache.new({})
|
8
|
+
private_constant :REGEX_CACHE
|
9
|
+
|
10
|
+
def initialize(user_agent)
|
11
|
+
@user_agent = user_agent
|
12
|
+
end
|
3
13
|
|
4
|
-
|
14
|
+
attr_reader :user_agent
|
5
15
|
|
6
16
|
def name
|
7
17
|
from_cache(['name', self.class.name, user_agent]) do
|
@@ -32,17 +42,17 @@ class DeviceDetector
|
|
32
42
|
end
|
33
43
|
|
34
44
|
def filenames
|
35
|
-
|
45
|
+
raise NotImplementedError
|
36
46
|
end
|
37
47
|
|
38
48
|
def filepaths
|
39
49
|
filenames.map do |filename|
|
40
|
-
[
|
50
|
+
[filename.to_sym, File.join(ROOT, 'regexes', filename)]
|
41
51
|
end
|
42
52
|
end
|
43
53
|
|
44
54
|
def regexes_for(file_paths)
|
45
|
-
|
55
|
+
REGEX_CACHE.get_or_set(file_paths) do
|
46
56
|
load_regexes(file_paths).flat_map { |path, regex| parse_regexes(path, regex) }
|
47
57
|
end
|
48
58
|
end
|
@@ -54,16 +64,20 @@ class DeviceDetector
|
|
54
64
|
def symbolize_keys!(object)
|
55
65
|
case object
|
56
66
|
when Array
|
57
|
-
object.map!{ |v| symbolize_keys!(v) }
|
67
|
+
object.map! { |v| symbolize_keys!(v) }
|
58
68
|
when Hash
|
59
|
-
|
69
|
+
keys = object.keys
|
70
|
+
keys.each do |k|
|
71
|
+
object[k.to_sym] = symbolize_keys!(object.delete(k)) if k.is_a?(String)
|
72
|
+
end
|
60
73
|
end
|
61
74
|
object
|
62
75
|
end
|
63
76
|
|
64
77
|
def parse_regexes(path, raw_regexes)
|
65
78
|
raw_regexes.map do |meta|
|
66
|
-
|
79
|
+
raise "invalid device spec: #{meta.inspect}" unless meta[:regex].is_a? String
|
80
|
+
|
67
81
|
meta[:regex] = build_regex(meta[:regex])
|
68
82
|
meta[:path] = path
|
69
83
|
meta
|
@@ -77,6 +91,5 @@ class DeviceDetector
|
|
77
91
|
def from_cache(key)
|
78
92
|
DeviceDetector.cache.get_or_set(key) { yield }
|
79
93
|
end
|
80
|
-
|
81
94
|
end
|
82
95
|
end
|
data/regexes/bots.yml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
###############
|
2
2
|
# Device Detector - The Universal Device Detection library for parsing User Agents
|
3
3
|
#
|
4
|
-
# @link
|
4
|
+
# @link https://matomo.org
|
5
5
|
# @license http://www.gnu.org/licenses/lgpl.html LGPL v3 or later
|
6
6
|
###############
|
7
7
|
|
@@ -100,6 +100,14 @@
|
|
100
100
|
name: 'Sarosys LLC'
|
101
101
|
url: 'http://www.sarosys.com/'
|
102
102
|
|
103
|
+
- regex: 'AspiegelBot'
|
104
|
+
name: 'AspiegelBot'
|
105
|
+
category: 'Crawler'
|
106
|
+
url: 'https://aspiegel.com/'
|
107
|
+
producer:
|
108
|
+
name: 'Huawei'
|
109
|
+
url: 'https://www.huawei.com/'
|
110
|
+
|
103
111
|
- regex: 'Castro 2, Episode Duration Lookup'
|
104
112
|
name: 'Castro 2'
|
105
113
|
category: 'Service Agent'
|
@@ -283,13 +291,13 @@
|
|
283
291
|
name: 'CloudFlare'
|
284
292
|
url: 'http://www.cloudflare.com'
|
285
293
|
|
286
|
-
- regex: 'coccoc
|
294
|
+
- regex: 'coccoc|coccocbot(-ads|-fast|-image|-shopping|-web)?'
|
287
295
|
name: 'Cốc Cốc Bot'
|
288
|
-
url: '
|
296
|
+
url: 'https://help.coccoc.com/en/search-engine/coccoc-robots'
|
289
297
|
category: 'Search bot'
|
290
298
|
producer:
|
291
299
|
name: 'Cốc Cốc'
|
292
|
-
url: '
|
300
|
+
url: 'https://coccoc.com/'
|
293
301
|
|
294
302
|
- regex: 'collectd'
|
295
303
|
name: 'Collectd'
|
@@ -443,7 +451,7 @@
|
|
443
451
|
name: 'SEOmoz, Inc.'
|
444
452
|
url: 'http://moz.com/'
|
445
453
|
|
446
|
-
- regex: 'facebookexternalhit|facebookplatform'
|
454
|
+
- regex: 'facebookexternalhit|facebookplatform|facebookexternalua'
|
447
455
|
name: 'Facebook External Hit'
|
448
456
|
category: 'Social Media Agent'
|
449
457
|
url: 'https://www.facebook.com/externalhit_uatext.php'
|
@@ -577,6 +585,14 @@
|
|
577
585
|
name: 'Google Inc.'
|
578
586
|
url: 'http://www.google.com'
|
579
587
|
|
588
|
+
- regex: 'Google-Cloud-Scheduler'
|
589
|
+
name: 'Google Cloud Scheduler'
|
590
|
+
category: 'Crawler'
|
591
|
+
url: 'https://cloud.google.com/scheduler'
|
592
|
+
producer:
|
593
|
+
name: 'Google Inc.'
|
594
|
+
url: 'https://www.google.com'
|
595
|
+
|
580
596
|
- regex: 'Google-Structured-Data-Testing-Tool'
|
581
597
|
name: 'Google Structured Data Testing Tool'
|
582
598
|
category: 'Validator'
|
@@ -585,6 +601,14 @@
|
|
585
601
|
name: 'Google Inc.'
|
586
602
|
url: 'http://www.google.com'
|
587
603
|
|
604
|
+
- regex: 'GoogleStackdriverMonitoring'
|
605
|
+
name: 'Google Stackdriver Monitoring'
|
606
|
+
category: 'Site Monitor'
|
607
|
+
url: 'https://cloud.google.com/monitoring'
|
608
|
+
producer:
|
609
|
+
name: 'Google Inc.'
|
610
|
+
url: 'https://www.google.com'
|
611
|
+
|
588
612
|
- regex: 'via ggpht\.com GoogleImageProxy'
|
589
613
|
name: 'Gmail Image Proxy'
|
590
614
|
category: 'Crawler'
|
@@ -592,7 +616,7 @@
|
|
592
616
|
producer:
|
593
617
|
name: 'Google Inc.'
|
594
618
|
url: 'http://www.google.com'
|
595
|
-
|
619
|
+
|
596
620
|
- regex: 'SeznamEmailProxy'
|
597
621
|
name: 'Seznam Email Proxy'
|
598
622
|
category: 'Crawler'
|
@@ -625,7 +649,7 @@
|
|
625
649
|
name: 'Visual Meta'
|
626
650
|
url: 'https://www.shopalike.cz/'
|
627
651
|
|
628
|
-
- regex: '
|
652
|
+
- regex: 'AdsBot-Google(-Mobile)?|Adwords-(DisplayAds|Express|Instant)|Google Web Preview|Google[ -]Publisher[ -]Plugin|Google-(Adwords|AMPHTML|Assess|HotelAdsVerifier|Read-Aloud|Shopping-Quality|Site-Verification|speakr|Test|Youtube-Links)|(APIs|DuplexWeb|Feedfetcher|Mediapartners)-Google|Googlebot(-Mobile|-Image|-Video|-News)?|GoogleProducer|Google.*/\+/web/snippet'
|
629
653
|
name: 'Googlebot'
|
630
654
|
category: 'Search bot'
|
631
655
|
url: 'http://www.google.com/bot.html'
|
@@ -1561,6 +1585,14 @@
|
|
1561
1585
|
name: 'Wotbox'
|
1562
1586
|
url: 'http://www.wotbox.com'
|
1563
1587
|
|
1588
|
+
- regex: 'XenForo'
|
1589
|
+
name: 'XenForo'
|
1590
|
+
category: 'Service Agent'
|
1591
|
+
url: 'https://xenforo.com/'
|
1592
|
+
producer:
|
1593
|
+
name: 'XenForo Ltd.'
|
1594
|
+
url: 'https://xenforo.com/'
|
1595
|
+
|
1564
1596
|
- regex: 'yacybot'
|
1565
1597
|
name: 'YaCy'
|
1566
1598
|
category: 'Search bot'
|
@@ -1593,7 +1625,15 @@
|
|
1593
1625
|
name: 'Yahoo! Inc.'
|
1594
1626
|
url: 'http://www.yahoo.com'
|
1595
1627
|
|
1596
|
-
- regex: '
|
1628
|
+
- regex: 'Y!J-BRW'
|
1629
|
+
name: 'Yahoo! Japan BRW'
|
1630
|
+
category: 'Crawler'
|
1631
|
+
url: 'https://www.yahoo-help.jp/app/answers/detail/p/595/a_id/42716/~/ウェブページにアクセスするシステムのユーザーエージェントについて'
|
1632
|
+
producer:
|
1633
|
+
name: 'Yahoo! Japan Corp.'
|
1634
|
+
url: 'https://www.yahoo.co.jp/'
|
1635
|
+
|
1636
|
+
- regex: 'Yandex(SpravBot|ScreenshotBot|MobileBot|AccessibilityBot|ForDomain|Vertis|Market|Catalog|Calendar|Sitelinks|AdNet|Pagechecker|Webmaster|Media|Video|Bot|Images|Antivirus|Direct|Blogs|Favicons|ImageResizer|Verticals|News(links)?|Metrika|\.Gazeta Bot)|YaDirectFetcher|YandexTurbo|YandexTracker|YandexSearchShop|YandexRCA|YandexPartner|YandexOntoDBAPI|YandexOntoDB|YandexMobileScreenShotBot'
|
1597
1637
|
name: 'Yandex Bot'
|
1598
1638
|
category: 'Search bot'
|
1599
1639
|
url: 'http://www.yandex.com/bots'
|
@@ -1601,7 +1641,7 @@
|
|
1601
1641
|
name: 'Yandex LLC'
|
1602
1642
|
url: 'http://company.yandex.com'
|
1603
1643
|
|
1604
|
-
- regex: 'Yeti'
|
1644
|
+
- regex: 'Yeti|NaverJapan'
|
1605
1645
|
name: 'Yeti/Naverbot'
|
1606
1646
|
category: 'Search bot'
|
1607
1647
|
url: 'http://help.naver.com/robots/'
|
@@ -1683,9 +1723,9 @@
|
|
1683
1723
|
name: 'HubPages'
|
1684
1724
|
url: 'http://hubpages.com/'
|
1685
1725
|
|
1686
|
-
- regex: 'Pinterest
|
1726
|
+
- regex: 'Pinterest(bot)?/\d\.\d.*www\.pinterest\.com.*'
|
1687
1727
|
name: 'Pinterest'
|
1688
|
-
url: ''
|
1728
|
+
url: 'http://www.pinterest.com/bot.html'
|
1689
1729
|
category: 'Crawler'
|
1690
1730
|
producer:
|
1691
1731
|
name: 'Pinterest'
|
@@ -1805,7 +1845,7 @@
|
|
1805
1845
|
- regex: 'RSSRadio \(Push Notification Scanner;support@dorada\.co\.uk\)'
|
1806
1846
|
name: 'RSSRadio Bot'
|
1807
1847
|
|
1808
|
-
- regex: '(A6-Indexer|nuhk|TsolCrawler|Yammybot|Openbot|Gulper Web Bot|grub-client|Download Demon|SearchExpress|Microsoft URL Control|borg|altavista|dataminr.com|tweetedtimes.com|TrendsmapResolver|teoma|blitzbot|oegp|furlbot|http%20client|polybot|htdig|mogimogi|larbin|scrubby|searchsight|seekbot|semanticdiscovery|snappy|vortex(?! Build)|zeal|fast-webcrawler|converacrawler|dataparksearch|findlinks|BrowserMob|HttpMonitor|ThumbShotsBot|URL2PNG|ZooShot|GomezA|Google SketchUp|Read%20Later|
|
1848
|
+
- regex: '(A6-Indexer|nuhk|TsolCrawler|Yammybot|Openbot|Gulper Web Bot|grub-client|Download Demon|SearchExpress|Microsoft URL Control|borg|altavista|dataminr.com|tweetedtimes.com|TrendsmapResolver|teoma|blitzbot|oegp|furlbot|http%20client|polybot|htdig|mogimogi|larbin|scrubby|searchsight|seekbot|semanticdiscovery|snappy|vortex(?! Build)|zeal|fast-webcrawler|converacrawler|dataparksearch|findlinks|BrowserMob|HttpMonitor|ThumbShotsBot|URL2PNG|ZooShot|GomezA|Google SketchUp|Read%20Later|RackspaceBot|robots|SeopultContentAnalyzer|7Siters|centuryb.o.t9)'
|
1809
1849
|
name: 'Generic Bot'
|
1810
1850
|
|
1811
1851
|
- regex: '^sentry'
|
@@ -1824,6 +1864,182 @@
|
|
1824
1864
|
name: 'The Knowledge AI'
|
1825
1865
|
category: 'Crawler'
|
1826
1866
|
|
1867
|
+
- regex: 'Embedly'
|
1868
|
+
name: 'Embedly'
|
1869
|
+
category: 'Crawler'
|
1870
|
+
url: 'https://support.embed.ly/hc/en-us'
|
1871
|
+
producer:
|
1872
|
+
name: 'A Medium, Corp.'
|
1873
|
+
url: 'https://medium.com/'
|
1874
|
+
|
1875
|
+
- regex: 'BrandVerity'
|
1876
|
+
name: 'BrandVerity'
|
1877
|
+
category: 'Crawler'
|
1878
|
+
url: 'https://www.brandverity.com/why-is-brandverity-visiting-me'
|
1879
|
+
producer:
|
1880
|
+
name: 'BrandVerity, Inc.'
|
1881
|
+
url: 'https://www.brandverity.com/'
|
1882
|
+
|
1883
|
+
- regex: 'Kaspersky Lab CFR link resolver'
|
1884
|
+
name: 'Kaspersky'
|
1885
|
+
category: 'Security Checker'
|
1886
|
+
url: 'https://www.kaspersky.com/'
|
1887
|
+
producer:
|
1888
|
+
name: 'AO Kaspersky Lab'
|
1889
|
+
url: 'https://www.kaspersky.com/'
|
1890
|
+
|
1891
|
+
- regex: 'eZ Publish Link Validator'
|
1892
|
+
name: 'eZ Publish Link Validator'
|
1893
|
+
category: 'Crawler'
|
1894
|
+
url: 'https://ez.no/'
|
1895
|
+
producer:
|
1896
|
+
name: 'eZ Systems AS'
|
1897
|
+
url: 'https://ez.no/'
|
1898
|
+
|
1899
|
+
- regex: 'woorankreview'
|
1900
|
+
name: 'WooRank'
|
1901
|
+
category: 'Search bot'
|
1902
|
+
url: 'https://www.woorank.com/'
|
1903
|
+
producer:
|
1904
|
+
name: 'WooRank sprl'
|
1905
|
+
url: 'https://www.woorank.com/'
|
1906
|
+
|
1907
|
+
- regex: '(Match|LinkCheck) by Siteimprove.com'
|
1908
|
+
name: 'Siteimprove'
|
1909
|
+
category: 'Search bot'
|
1910
|
+
url: 'https://siteimprove.com/'
|
1911
|
+
producer:
|
1912
|
+
name: 'Siteimprove GmbH'
|
1913
|
+
url: 'https://siteimprove.com/'
|
1914
|
+
|
1915
|
+
- regex: 'CATExplorador'
|
1916
|
+
name: 'CATExplorador'
|
1917
|
+
category: 'Search bot'
|
1918
|
+
url: 'https://fundacio.cat/ca/domini/'
|
1919
|
+
producer:
|
1920
|
+
name: 'Fundació puntCAT'
|
1921
|
+
url: 'https://fundacio.cat/ca/domini/'
|
1922
|
+
|
1923
|
+
- regex: 'Buck'
|
1924
|
+
name: 'Buck'
|
1925
|
+
category: 'Search bot'
|
1926
|
+
url: 'https://hypefactors.com/'
|
1927
|
+
producer:
|
1928
|
+
name: 'Hypefactors A/S'
|
1929
|
+
url: 'https://hypefactors.com/'
|
1930
|
+
|
1931
|
+
- regex: 'tracemyfile'
|
1932
|
+
name: 'TraceMyFile'
|
1933
|
+
category: 'Search bot'
|
1934
|
+
url: 'https://www.tracemyfile.com/'
|
1935
|
+
producer:
|
1936
|
+
name: 'Idee Inc.'
|
1937
|
+
url: 'http://ideeinc.com/'
|
1938
|
+
|
1939
|
+
- regex: 'zelist.ro feed parser'
|
1940
|
+
name: 'Ze List'
|
1941
|
+
url: 'https://www.zelist.ro/'
|
1942
|
+
category: 'Feed Fetcher'
|
1943
|
+
producer:
|
1944
|
+
name: 'Treeworks SRL'
|
1945
|
+
url: 'https://www.tree.ro/'
|
1946
|
+
|
1947
|
+
- regex: 'weborama-fetcher'
|
1948
|
+
name: 'Weborama'
|
1949
|
+
category: 'Search bot'
|
1950
|
+
url: 'https://weborama.com/'
|
1951
|
+
producer:
|
1952
|
+
name: 'Weborama SA'
|
1953
|
+
url: 'https://weborama.com/'
|
1954
|
+
|
1955
|
+
- regex: 'BoardReader Favicon Fetcher'
|
1956
|
+
name: 'BoardReader'
|
1957
|
+
category: 'Search bot'
|
1958
|
+
url: 'http://boardreader.com/'
|
1959
|
+
producer:
|
1960
|
+
name: 'Effyis Inc'
|
1961
|
+
url: 'http://boardreader.com/'
|
1962
|
+
|
1963
|
+
- regex: 'IDG/IT'
|
1964
|
+
name: 'IDG/IT'
|
1965
|
+
category: 'Search bot'
|
1966
|
+
url: 'https://spaziodati.eu/'
|
1967
|
+
producer:
|
1968
|
+
name: 'SpazioDati S.r.l.'
|
1969
|
+
url: 'https://spaziodati.eu/'
|
1970
|
+
|
1971
|
+
- regex: 'Bytespider'
|
1972
|
+
name: 'Bytespider'
|
1973
|
+
category: 'Search bot'
|
1974
|
+
url: 'https://bytedance.com/'
|
1975
|
+
producer:
|
1976
|
+
name: 'ByteDance Ltd.'
|
1977
|
+
url: 'https://bytedance.com/'
|
1978
|
+
|
1979
|
+
- regex: 'WikiDo'
|
1980
|
+
name: 'WikiDo'
|
1981
|
+
category: 'Search bot'
|
1982
|
+
url: 'https://www.wikido.com/'
|
1983
|
+
producer:
|
1984
|
+
name: 'Fotolitografie Fiorentine di Becchi Antonio s.n.c.'
|
1985
|
+
url: 'https://www.wikido.com/'
|
1986
|
+
|
1987
|
+
- regex: 'AwarioSmartBot'
|
1988
|
+
name: 'Awario'
|
1989
|
+
category: 'Search bot'
|
1990
|
+
url: 'https://awario.com/bots.html'
|
1991
|
+
producer:
|
1992
|
+
name: 'Awario'
|
1993
|
+
url: 'https://awario.com/'
|
1994
|
+
|
1995
|
+
- regex: 'AwarioRssBot'
|
1996
|
+
name: 'Awario'
|
1997
|
+
category: 'Feed Fetcher'
|
1998
|
+
url: 'https://awario.com/bots.html'
|
1999
|
+
producer:
|
2000
|
+
name: 'Awario'
|
2001
|
+
url: 'https://awario.com/'
|
2002
|
+
|
2003
|
+
- regex: 'oBot'
|
2004
|
+
name: 'oBot'
|
2005
|
+
category: 'Search bot'
|
2006
|
+
url: 'http://www.xforce-security.com/crawler/'
|
2007
|
+
producer:
|
2008
|
+
name: 'IBM Germany Research & Development GmbH'
|
2009
|
+
url: 'https://exchange.xforce.ibmcloud.com/'
|
2010
|
+
|
2011
|
+
- regex: 'SMTBot'
|
2012
|
+
name: 'SMTBot'
|
2013
|
+
category: 'Search bot'
|
2014
|
+
url: 'https://www.similartech.com/smtbot'
|
2015
|
+
producer:
|
2016
|
+
name: 'SimilarTech Ltd.'
|
2017
|
+
url: 'https://www.similartech.com/'
|
2018
|
+
|
2019
|
+
- regex: 'LCC'
|
2020
|
+
name: 'LCC'
|
2021
|
+
category: 'Search bot'
|
2022
|
+
url: 'https://corpora.uni-leipzig.de/crawler_faq.html'
|
2023
|
+
producer:
|
2024
|
+
name: 'Universität Leipzig'
|
2025
|
+
url: 'https://www.uni-leipzig.de/'
|
2026
|
+
|
2027
|
+
- regex: 'Startpagina-Linkchecker'
|
2028
|
+
name: 'Startpagina Linkchecker'
|
2029
|
+
category: 'Search bot'
|
2030
|
+
url: 'https://www.startpagina.nl/linkchecker'
|
2031
|
+
producer:
|
2032
|
+
name: 'Startpagina B.V.'
|
2033
|
+
url: 'https://www.startpagina.nl/'
|
2034
|
+
|
2035
|
+
- regex: 'GTmetrix'
|
2036
|
+
name: 'GTmetrix'
|
2037
|
+
category: 'Crawler'
|
2038
|
+
url: 'https://gtmetrix.com/'
|
2039
|
+
producer:
|
2040
|
+
name: 'Carbon60 Operating Co. Ltd.'
|
2041
|
+
url: 'https://www.carbon60.com/'
|
2042
|
+
|
1827
2043
|
# Generic detections
|
1828
2044
|
|
1829
2045
|
- regex: 'Nutch'
|