podcast_agent_parser 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +20 -0
- data/README.md +24 -0
- data/lib/podcast_agent_parser.rb +17 -0
- data/lib/podcast_agent_parser/agent.rb +14 -0
- data/lib/podcast_agent_parser/parser.rb +27 -0
- data/vendor/opawg/user-agents.json +1476 -0
- metadata +50 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c554518b264fea34da4f2e1dc8d74223ed5f0033d675dcfe0a353a5471e0ba6f
|
4
|
+
data.tar.gz: 84dd8038b82a9fe23cf39860b71bec6368a8111b604e7709212cebe89f6e41d6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: dd5e3623f90ba2b3eb71b6e171a38b4c72197a3fc3fdd65c4d05cfa310239d5917f0a0aef0f909426bb9b8b07e7e163b5b66c40eaaf6fa81a534a57a7f7529a9
|
7
|
+
data.tar.gz: 0c832eb21c52fd37e3b7a8943debfff1e3395a04d57d18502edabb45fc229779fdd0aa6d719a5a79b9d28b421c757429770452d5a1c5333731f731f4cd578e2e
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2019 Dan Benjamin
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# Podcast Agent Parser
|
2
|
+
|
3
|
+
The Podcast Agent Parser is a user agent parser written in Ruby, using [regex patterns](https://github.com/opawg/user-agents "regex patterns from the Open Podcast Analytics Working Group") from the Open Podcast Analytics Working Group.
|
4
|
+
|
5
|
+
Installation:
|
6
|
+
|
7
|
+
```
|
8
|
+
gem 'podcast_agent_parser', '~> 0.1.1'
|
9
|
+
```
|
10
|
+
|
11
|
+
Then, look up your user agents like so:
|
12
|
+
|
13
|
+
```
|
14
|
+
agent_text = "iTunes/12.9.5 (Macintosh; OS X 10.14.5) AppleWebKit/607.2.6.1.1"
|
15
|
+
|
16
|
+
agent_parser = PodcastAgentParser::Parser.new()
|
17
|
+
|
18
|
+
parsed = agent_parser.parse(agent_text)
|
19
|
+
|
20
|
+
parsed.app # iTunes
|
21
|
+
parsed.os # macOS
|
22
|
+
parsed.device # PC
|
23
|
+
parsed.bot # false
|
24
|
+
```
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'podcast_agent_parser/agent'
|
2
|
+
require 'podcast_agent_parser/parser'
|
3
|
+
|
4
|
+
module PodcastAgentParser
|
5
|
+
DefaultPatternsPath = File.join(File.dirname(__FILE__), '../vendor/opawg/user-agents.json')
|
6
|
+
OsNames = {
|
7
|
+
'homepod os' => 'HomePod OS',
|
8
|
+
'ios' => 'iOS',
|
9
|
+
'ipados' => 'iPadOS',
|
10
|
+
'macos' => 'macOS',
|
11
|
+
'watchos' => 'watchOS'
|
12
|
+
}
|
13
|
+
DeviceNames = {
|
14
|
+
'pc' => 'PC',
|
15
|
+
'tv' => 'TV'
|
16
|
+
}
|
17
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module PodcastAgentParser
|
2
|
+
|
3
|
+
class Agent
|
4
|
+
attr_accessor :app, :device, :os, :bot
|
5
|
+
|
6
|
+
def initialize(app, device, os, bot)
|
7
|
+
@app = app
|
8
|
+
@device = DeviceNames.key?(device) ? DeviceNames[device] : (device.nil? ? nil : device.capitalize)
|
9
|
+
@os = OsNames.key?(os) ? OsNames[os] : (os.nil? ? nil : os.capitalize)
|
10
|
+
@bot = bot.nil? ? false : bot
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module PodcastAgentParser
|
4
|
+
|
5
|
+
class Parser
|
6
|
+
def initialize
|
7
|
+
@patterns_path = File.read(PodcastAgentParser::DefaultPatternsPath)
|
8
|
+
end
|
9
|
+
|
10
|
+
def parse(user_agent_string)
|
11
|
+
JSON.parse(@patterns_path).each do |pattern|
|
12
|
+
pattern['user_agents'].each do |str|
|
13
|
+
if Regexp.new(str).match(user_agent_string)
|
14
|
+
return Agent.new(
|
15
|
+
pattern['app'],
|
16
|
+
pattern['device'],
|
17
|
+
pattern['os'],
|
18
|
+
pattern['bot']
|
19
|
+
)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
return nil
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,1476 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"user_agents": [
|
4
|
+
"^Acast.+[Aa]ndroid"
|
5
|
+
],
|
6
|
+
"app": "Acast",
|
7
|
+
"device": "phone",
|
8
|
+
"os": "android"
|
9
|
+
},
|
10
|
+
{
|
11
|
+
"user_agents": [
|
12
|
+
"^Acast.+iOS"
|
13
|
+
],
|
14
|
+
"app": "Acast",
|
15
|
+
"device": "phone",
|
16
|
+
"os": "ios"
|
17
|
+
},
|
18
|
+
{
|
19
|
+
"user_agents": [
|
20
|
+
"^AdsBot-Google"
|
21
|
+
],
|
22
|
+
"bot": true
|
23
|
+
},
|
24
|
+
{
|
25
|
+
"user_agents": [
|
26
|
+
"AhrefsBot"
|
27
|
+
],
|
28
|
+
"bot": true
|
29
|
+
},
|
30
|
+
{
|
31
|
+
"user_agents": [
|
32
|
+
"^AlexaMediaPlayer/1\\.",
|
33
|
+
"^AlexaMediaPlayer/16\\.",
|
34
|
+
"^AlexaMediaPlayer/2\\."
|
35
|
+
],
|
36
|
+
"app": "Alexa-enabled device",
|
37
|
+
"device": "speaker",
|
38
|
+
"os": "alexa",
|
39
|
+
"svg": "amazon.svg"
|
40
|
+
},
|
41
|
+
{
|
42
|
+
"user_agents": [
|
43
|
+
"^AmazonNewsContentService"
|
44
|
+
],
|
45
|
+
"app": "Amazon Alexa Flash Briefing caching service",
|
46
|
+
"description": "A service which downloads, caches and normalises audio for the Flash Briefing service on Alexa-enabled devices",
|
47
|
+
"os": "alexa",
|
48
|
+
"info_url": "https://developer.amazon.com/docs/flashbriefing/flash-briefing-skill-api-feed-reference.html#performance-requirements",
|
49
|
+
"developer_notes": "Stats are available within the Alexa skills dashboard",
|
50
|
+
"svg": "amazon.svg",
|
51
|
+
"bot": true
|
52
|
+
},
|
53
|
+
{
|
54
|
+
"user_agents": [
|
55
|
+
"^AlexaMediaPlayer/5\\."
|
56
|
+
],
|
57
|
+
"app": "Amazon Echo Dot",
|
58
|
+
"device": "speaker",
|
59
|
+
"os": "alexa",
|
60
|
+
"svg": "amazon.svg"
|
61
|
+
},
|
62
|
+
{
|
63
|
+
"user_agents": [
|
64
|
+
"Android 5.*ford/"
|
65
|
+
],
|
66
|
+
"app": "Amazon Kindle Fire",
|
67
|
+
"device": "tablet",
|
68
|
+
"os": "android"
|
69
|
+
},
|
70
|
+
{
|
71
|
+
"user_agents": [
|
72
|
+
"^AndroidDownloadManager"
|
73
|
+
],
|
74
|
+
"os": "android"
|
75
|
+
},
|
76
|
+
{
|
77
|
+
"user_agents": [
|
78
|
+
"^AntennaPod/",
|
79
|
+
"^de.danoeh.antennapod/"
|
80
|
+
],
|
81
|
+
"app": "AntennaPod",
|
82
|
+
"examples": [
|
83
|
+
"de.danoeh.antennapod/1.7.3b (Linux;Android 8.0.0) ExoPlayerLib/2.9.3"
|
84
|
+
],
|
85
|
+
"info_url": "https://github.com/AntennaPod/AntennaPod",
|
86
|
+
"os": "android"
|
87
|
+
},
|
88
|
+
{
|
89
|
+
"user_agents": [
|
90
|
+
"Apache-HttpClient"
|
91
|
+
],
|
92
|
+
"bot": true
|
93
|
+
},
|
94
|
+
{
|
95
|
+
"user_agents": [
|
96
|
+
"^AppleCoreMedia/1\\..*iPod"
|
97
|
+
],
|
98
|
+
"app": "Apple Podcasts",
|
99
|
+
"device": "mp3_player",
|
100
|
+
"examples": [
|
101
|
+
"AppleCoreMedia/1.0.0.16G114 (iPod touch; U; CPU OS 12_4_2 like Mac OS X; en_us)"
|
102
|
+
],
|
103
|
+
"os": "ios"
|
104
|
+
},
|
105
|
+
{
|
106
|
+
"user_agents": [
|
107
|
+
"^AppleCoreMedia/1\\..*Macintosh"
|
108
|
+
],
|
109
|
+
"examples": [
|
110
|
+
"AppleCoreMedia/1.0.0.19A583 (Macintosh; U; Intel Mac OS X 10_15; en_us)"
|
111
|
+
],
|
112
|
+
"app": "Apple Podcasts",
|
113
|
+
"device": "pc",
|
114
|
+
"os": "macos",
|
115
|
+
"description": "The Apple Podcasts app on MacOS Catalina and above",
|
116
|
+
"developer_notes": "Used when progressively downloading podcasts"
|
117
|
+
},
|
118
|
+
{
|
119
|
+
"user_agents": [
|
120
|
+
"^AppleCoreMedia/1\\..*iPhone"
|
121
|
+
],
|
122
|
+
"app": "Apple Podcasts",
|
123
|
+
"device": "phone",
|
124
|
+
"examples": [
|
125
|
+
"AppleCoreMedia/1.0.0.15G77 (iPhone; U; CPU OS 11_4_1 like Mac OS X; en_us)"
|
126
|
+
],
|
127
|
+
"os": "ios"
|
128
|
+
},
|
129
|
+
{
|
130
|
+
"user_agents": [
|
131
|
+
"^AppleCoreMedia/1\\..*iPad"
|
132
|
+
],
|
133
|
+
"app": "Apple Podcasts",
|
134
|
+
"device": "tablet",
|
135
|
+
"examples": [
|
136
|
+
"AppleCoreMedia/1.0.0.17A860 (iPad; U; CPU OS 13_1_2 like Mac OS X; en_us)"
|
137
|
+
],
|
138
|
+
"os": "ios"
|
139
|
+
},
|
140
|
+
{
|
141
|
+
"user_agents": [
|
142
|
+
"^AppleCoreMedia/1\\..*HomePod"
|
143
|
+
],
|
144
|
+
"app": "Apple Podcasts",
|
145
|
+
"device": "speaker",
|
146
|
+
"examples": [
|
147
|
+
"AppleCoreMedia/1.0.0.16G78 (HomePod; U; CPU OS 12_4 like Mac OS X; en_us)"
|
148
|
+
],
|
149
|
+
"os": "homepod_os"
|
150
|
+
},
|
151
|
+
{
|
152
|
+
"user_agents": [
|
153
|
+
"^AppleCoreMedia/1\\..*Apple TV"
|
154
|
+
],
|
155
|
+
"app": "Apple Podcasts",
|
156
|
+
"device": "tv",
|
157
|
+
"examples": [
|
158
|
+
"AppleCoreMedia/1.0.0.17J586 (Apple TV; U; CPU OS 13_0 like Mac OS X; en_us)"
|
159
|
+
],
|
160
|
+
"os": "tvos"
|
161
|
+
},
|
162
|
+
{
|
163
|
+
"user_agents": [
|
164
|
+
"^AppleCoreMedia/1\\..*Apple Watch",
|
165
|
+
"watchOS/"
|
166
|
+
],
|
167
|
+
"app": "Apple Podcasts",
|
168
|
+
"device": "watch",
|
169
|
+
"examples": [
|
170
|
+
"atc/1.0 watchOS/6.0.1 model/Watch4,1 hwp/t8006 build/17R605 (6; dt:190)"
|
171
|
+
],
|
172
|
+
"os": "watchos"
|
173
|
+
},
|
174
|
+
{
|
175
|
+
"user_agents": [
|
176
|
+
"^Podcasts/.*\\(.*\\)",
|
177
|
+
|
178
|
+
"^Balados/.*\\(.*\\)",
|
179
|
+
"^Podcasti/.*\\(.*\\)",
|
180
|
+
"^Podcastit/.*\\(.*\\)",
|
181
|
+
"^Podcasturi/.*\\(.*\\)",
|
182
|
+
"^Podcasty/.*\\(.*\\)",
|
183
|
+
"^Podcast’ler/.*\\(.*\\)",
|
184
|
+
"^Podkaster/.*\\(.*\\)",
|
185
|
+
"^Podcaster/.*\\(.*\\)",
|
186
|
+
"^Подкасти/.*\\(.*\\)",
|
187
|
+
"^Подкасты/.*\\(.*\\)",
|
188
|
+
"^פודקאסטים/.*\\(.*\\)",
|
189
|
+
"^البودكاست/.*\\(.*\\)",
|
190
|
+
"^पॉडकास्ट/.*\\(.*\\)",
|
191
|
+
"^พ็อดคาสท์/.*\\(.*\\)",
|
192
|
+
"^播客/.*\\(.*\\)",
|
193
|
+
"^팟캐스트/.*\\(.*\\)"
|
194
|
+
],
|
195
|
+
"examples": [
|
196
|
+
"Podcasts/1410.53 CFNetwork/1111 Darwin/19.0.0 (x86_64)",
|
197
|
+
"Podcaster/1410.53 CFNetwork/1111 Darwin/19.0.0 (x86_64)"
|
198
|
+
],
|
199
|
+
"app": "Apple Podcasts",
|
200
|
+
"device": "pc",
|
201
|
+
"os": "macos",
|
202
|
+
"description": "The Apple Podcasts app on MacOS Catalina and above",
|
203
|
+
"developer_notes": "Used when downloading podcasts (not progressive downloads), with support for the following languages: Arabic, Chinese, Finnish, French, English, Hebrew, Hindi, Korean, Polish, Romanian, Russian, Serbian, Slovenian, Swedish, Thai, Turkish."
|
204
|
+
},
|
205
|
+
{
|
206
|
+
"user_agents": [
|
207
|
+
"^Podcasts/.*\\d$",
|
208
|
+
|
209
|
+
"^Balados/.*\\d$",
|
210
|
+
"^Podcasti/.*\\d$",
|
211
|
+
"^Podcastit/.*\\d$",
|
212
|
+
"^Podcasturi/.*\\d$",
|
213
|
+
"^Podcasty/.*\\d$",
|
214
|
+
"^Podcast’ler/.*\\d$",
|
215
|
+
"^Podkaster/.*\\d$",
|
216
|
+
"^Podcaster/.*\\d$",
|
217
|
+
"^Podcast/.*\\d$",
|
218
|
+
"^Подкасти/.*\\d$",
|
219
|
+
"^Подкасты/.*\\d$",
|
220
|
+
"^פודקאסטים/.*\\d$",
|
221
|
+
"^البودكاست/.*\\d$",
|
222
|
+
"^पॉडकास्ट/.*\\d$",
|
223
|
+
"^พ็อดคาสท์/.*\\d$",
|
224
|
+
"^播客/.*\\d$",
|
225
|
+
"^팟캐스트/.*\\d$"
|
226
|
+
],
|
227
|
+
"app": "Apple Podcasts",
|
228
|
+
"os": "ios",
|
229
|
+
"description": "The Apple Podcasts app on devices other than MacOS Catalina and above",
|
230
|
+
"developer_notes": "Used when downloading podcasts (not progressive downloads), with support for the following languages: Arabic, Chinese, Finnish, French, English, Hebrew, Hindi, Korean, Polish, Romanian, Russian, Serbian, Slovenian, Swedish, Thai, Turkish",
|
231
|
+
"examples": [
|
232
|
+
"Podcasts/2.6",
|
233
|
+
"Podcast/1150.47 CFNetwork/811.5.4 Darwin/16.6.0"
|
234
|
+
]
|
235
|
+
},
|
236
|
+
{
|
237
|
+
"user_agents": [
|
238
|
+
"^BashPodder"
|
239
|
+
],
|
240
|
+
"app": "BashPodder",
|
241
|
+
"device": "pc",
|
242
|
+
"info_url": "http://lincgeek.org/bashpodder/"
|
243
|
+
},
|
244
|
+
{
|
245
|
+
"user_agents": [
|
246
|
+
"BBC%20Sounds/"
|
247
|
+
],
|
248
|
+
"app": "BBC Sounds",
|
249
|
+
"device": "phone",
|
250
|
+
"examples": [
|
251
|
+
"BBC%20Sounds/1.13.1.7716 CFNetwork/1107.1 Darwin/19.0.0"
|
252
|
+
],
|
253
|
+
"info_url": "https://www.bbc.co.uk/sounds/help/questions/getting-started-with-bbc-sounds/sounds-intro"
|
254
|
+
},
|
255
|
+
{
|
256
|
+
"user_agents": [
|
257
|
+
"BBCiPlayerRadio/"
|
258
|
+
],
|
259
|
+
"app": "BBC iPlayer Radio",
|
260
|
+
"device": "phone",
|
261
|
+
"examples": [
|
262
|
+
"BBCiPlayerRadio/2.16.0.8764 CFNetwork/1107.1 Darwin/19.0.0"
|
263
|
+
],
|
264
|
+
"info_url": "https://www.bbc.co.uk/programmes/p00zh17p"
|
265
|
+
},
|
266
|
+
{
|
267
|
+
"user_agents": [
|
268
|
+
"; BeyondPod"
|
269
|
+
],
|
270
|
+
"app": "BeyondPod",
|
271
|
+
"device": "phone",
|
272
|
+
"examples": [
|
273
|
+
"Mozilla/5.0 (Linux; U; en-us; BeyondPod 4)"
|
274
|
+
],
|
275
|
+
"os": "android"
|
276
|
+
},
|
277
|
+
{
|
278
|
+
"user_agents": [
|
279
|
+
"^Bose/"
|
280
|
+
],
|
281
|
+
"app": "Bose SoundTouch",
|
282
|
+
"device": "speaker"
|
283
|
+
},
|
284
|
+
{
|
285
|
+
"user_agents": [
|
286
|
+
"^Breaker/"
|
287
|
+
],
|
288
|
+
"app": "Breaker",
|
289
|
+
"device": "phone"
|
290
|
+
},
|
291
|
+
{
|
292
|
+
"user_agents": [
|
293
|
+
"Android.+(?:B|b)rave"
|
294
|
+
],
|
295
|
+
"app": "Brave",
|
296
|
+
"os": "android"
|
297
|
+
},
|
298
|
+
{
|
299
|
+
"user_agents": [
|
300
|
+
"Linux.+(?:B|b)rave"
|
301
|
+
],
|
302
|
+
"app": "Brave",
|
303
|
+
"device": "pc",
|
304
|
+
"os": "linux"
|
305
|
+
},
|
306
|
+
{
|
307
|
+
"user_agents": [
|
308
|
+
"Mac OS X.+(?:B|b)rave"
|
309
|
+
],
|
310
|
+
"app": "Brave",
|
311
|
+
"device": "pc",
|
312
|
+
"os": "macos"
|
313
|
+
},
|
314
|
+
{
|
315
|
+
"user_agents": [
|
316
|
+
"Windows.+(?:B|b)rave"
|
317
|
+
],
|
318
|
+
"app": "Brave",
|
319
|
+
"device": "pc",
|
320
|
+
"os": "windows"
|
321
|
+
},
|
322
|
+
{
|
323
|
+
"user_agents": [
|
324
|
+
"^Cast(?:b|B)ox/.+Android"
|
325
|
+
],
|
326
|
+
"app": "CastBox",
|
327
|
+
"device": "phone",
|
328
|
+
"examples": [
|
329
|
+
"CastBox/8.2.6-191015245 (Linux;Android 10) ExoPlayerLib/2.10.4"
|
330
|
+
],
|
331
|
+
"os": "android"
|
332
|
+
},
|
333
|
+
{
|
334
|
+
"user_agents": [
|
335
|
+
"^Cast(?:b|B)ox/.+iOS"
|
336
|
+
],
|
337
|
+
"app": "CastBox",
|
338
|
+
"device": "phone",
|
339
|
+
"examples": [
|
340
|
+
"CastBox/8.5.1 (fm.castbox.audiobook.radio.podcast; build:11; iOS 13.1.2)"
|
341
|
+
],
|
342
|
+
"os": "ios"
|
343
|
+
},
|
344
|
+
{
|
345
|
+
"user_agents": [
|
346
|
+
"^Cast(?:b|B)ox"
|
347
|
+
],
|
348
|
+
"app": "CastBox",
|
349
|
+
"developer_notes": "There are CastBox compatible User Agents that come without Android/iOS platform marker",
|
350
|
+
"examples": [
|
351
|
+
"CastBox/5.7.5-190508115.r1a805d3"
|
352
|
+
]
|
353
|
+
},
|
354
|
+
{
|
355
|
+
"user_agents": [
|
356
|
+
"^castget "
|
357
|
+
],
|
358
|
+
"app": "castget",
|
359
|
+
"examples": [
|
360
|
+
"castget 1.2.4 (castget rss enclosure downloader)"
|
361
|
+
],
|
362
|
+
"info_url": "https://castget.johndal.com/",
|
363
|
+
"device": "pc"
|
364
|
+
},
|
365
|
+
{
|
366
|
+
"user_agents": [
|
367
|
+
"Castro "
|
368
|
+
],
|
369
|
+
"app": "Castro",
|
370
|
+
"device": "phone",
|
371
|
+
"examples": [
|
372
|
+
"Castro 2019.13/1167"
|
373
|
+
],
|
374
|
+
"os": "ios"
|
375
|
+
},
|
376
|
+
{
|
377
|
+
"user_agents": [
|
378
|
+
"\\ CrKey/"
|
379
|
+
],
|
380
|
+
"app": "Chromecast device",
|
381
|
+
"device": "speaker",
|
382
|
+
"os": "android"
|
383
|
+
},
|
384
|
+
{
|
385
|
+
"user_agents": [
|
386
|
+
"^Clementine "
|
387
|
+
],
|
388
|
+
"app": "Clementine Music Player",
|
389
|
+
"device": "pc",
|
390
|
+
"info_url": "https://www.clementine-player.org/"
|
391
|
+
},
|
392
|
+
{
|
393
|
+
"user_agents": [
|
394
|
+
"^curl"
|
395
|
+
],
|
396
|
+
"bot": true
|
397
|
+
},
|
398
|
+
{
|
399
|
+
"user_agents": [
|
400
|
+
"^Dalvik/"
|
401
|
+
],
|
402
|
+
"examples": [
|
403
|
+
"Dalvik/2.1.0 (Linux; U; Android 9; SM-N950U Build/PPR1.180610.011)"
|
404
|
+
],
|
405
|
+
"os": "android"
|
406
|
+
},
|
407
|
+
{
|
408
|
+
"user_agents": [
|
409
|
+
"^datagnionbot"
|
410
|
+
],
|
411
|
+
"bot": true
|
412
|
+
},
|
413
|
+
{
|
414
|
+
"user_agents": [
|
415
|
+
"Deezer/.*Android;"
|
416
|
+
],
|
417
|
+
"app": "Deezer",
|
418
|
+
"device": "phone",
|
419
|
+
"os": "android"
|
420
|
+
},
|
421
|
+
{
|
422
|
+
"user_agents": [
|
423
|
+
"^Deezer"
|
424
|
+
],
|
425
|
+
"app": "Deezer"
|
426
|
+
},
|
427
|
+
{
|
428
|
+
"user_agents": [
|
429
|
+
"DoggCatcher"
|
430
|
+
],
|
431
|
+
"app": "DoggCatcher",
|
432
|
+
"device": "phone",
|
433
|
+
"examples": [
|
434
|
+
"Mozilla/5.0 (Linux; U; Windows NT 6.1; en-us; dream) DoggCatcher"
|
435
|
+
],
|
436
|
+
"os": "android"
|
437
|
+
},
|
438
|
+
{
|
439
|
+
"user_agents": [
|
440
|
+
"DotBot/1"
|
441
|
+
],
|
442
|
+
"bot": true
|
443
|
+
},
|
444
|
+
{
|
445
|
+
"user_agents": [
|
446
|
+
"^doubleTwist CloudPlayer"
|
447
|
+
],
|
448
|
+
"examples": [
|
449
|
+
"doubleTwist CloudPlayer"
|
450
|
+
],
|
451
|
+
"app": "doubleTwitch CloudPlayer",
|
452
|
+
"device": "phone",
|
453
|
+
"info_url": "https://www.doubletwist.com/cloudplayer",
|
454
|
+
"os": "android"
|
455
|
+
},
|
456
|
+
{
|
457
|
+
"user_agents": [
|
458
|
+
"Downcast/"
|
459
|
+
],
|
460
|
+
"app": "Downcast",
|
461
|
+
"device": "phone",
|
462
|
+
"examples": [
|
463
|
+
"Downcast/2.9.42 (iPhone; iOS 12.4.1; Scale/3.00)"
|
464
|
+
],
|
465
|
+
"os": "ios"
|
466
|
+
},
|
467
|
+
{
|
468
|
+
"user_agents": [
|
469
|
+
"Xbox.+Edge/"
|
470
|
+
],
|
471
|
+
"app": "Edge",
|
472
|
+
"device": "games_console",
|
473
|
+
"os": "windows"
|
474
|
+
},
|
475
|
+
{
|
476
|
+
"user_agents": [
|
477
|
+
"Windows Phone.+Edge/"
|
478
|
+
],
|
479
|
+
"app": "Edge",
|
480
|
+
"device": "phone",
|
481
|
+
"os": "windows"
|
482
|
+
},
|
483
|
+
{
|
484
|
+
"user_agents": [
|
485
|
+
"Windows.+Edge/"
|
486
|
+
],
|
487
|
+
"app": "Edge",
|
488
|
+
"device": "pc",
|
489
|
+
"examples": [
|
490
|
+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; WebView/3.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299"
|
491
|
+
],
|
492
|
+
"os": "windows"
|
493
|
+
},
|
494
|
+
{
|
495
|
+
"user_agents": [
|
496
|
+
"^Echo/1\\."
|
497
|
+
],
|
498
|
+
"device": "speaker",
|
499
|
+
"os": "alexa",
|
500
|
+
"svg": "amazon.svg"
|
501
|
+
},
|
502
|
+
{
|
503
|
+
"user_agents": [
|
504
|
+
"FacebookBot"
|
505
|
+
],
|
506
|
+
"bot": true
|
507
|
+
},
|
508
|
+
{
|
509
|
+
"user_agents": [
|
510
|
+
"Linux.*Firefox/"
|
511
|
+
],
|
512
|
+
"app": "Firefox",
|
513
|
+
"device": "pc",
|
514
|
+
"os": "linux"
|
515
|
+
},
|
516
|
+
{
|
517
|
+
"user_agents": [
|
518
|
+
"Mac OS X.*Firefox/"
|
519
|
+
],
|
520
|
+
"app": "Firefox",
|
521
|
+
"device": "pc",
|
522
|
+
"os": "macos"
|
523
|
+
},
|
524
|
+
{
|
525
|
+
"user_agents": [
|
526
|
+
"Windows.*Firefox/"
|
527
|
+
],
|
528
|
+
"app": "Firefox",
|
529
|
+
"device": "pc",
|
530
|
+
"examples": [
|
531
|
+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0"
|
532
|
+
],
|
533
|
+
"os": "windows"
|
534
|
+
},
|
535
|
+
{
|
536
|
+
"user_agents": [
|
537
|
+
"Android.*(Focus|Firefox)/"
|
538
|
+
],
|
539
|
+
"app": "Firefox",
|
540
|
+
"os": "android"
|
541
|
+
},
|
542
|
+
{
|
543
|
+
"user_agents": [
|
544
|
+
"iPhone.*Focus/"
|
545
|
+
],
|
546
|
+
"app": "Firefox",
|
547
|
+
"device": "phone",
|
548
|
+
"os": "ios"
|
549
|
+
},
|
550
|
+
{
|
551
|
+
"user_agents": [
|
552
|
+
"iPad.*Focus/"
|
553
|
+
],
|
554
|
+
"app": "Firefox",
|
555
|
+
"device": "tablet",
|
556
|
+
"os": "ios"
|
557
|
+
},
|
558
|
+
{
|
559
|
+
"user_agents": [
|
560
|
+
"^Lavf/"
|
561
|
+
],
|
562
|
+
"app": "ffmpeg"
|
563
|
+
},
|
564
|
+
{
|
565
|
+
"user_agents": [
|
566
|
+
"^MAC "
|
567
|
+
],
|
568
|
+
"app": "Flash",
|
569
|
+
"device": "pc",
|
570
|
+
"os": "macos"
|
571
|
+
},
|
572
|
+
{
|
573
|
+
"user_agents": [
|
574
|
+
"^WIN\\ "
|
575
|
+
],
|
576
|
+
"app": "Flash",
|
577
|
+
"device": "pc",
|
578
|
+
"os": "windows"
|
579
|
+
},
|
580
|
+
{
|
581
|
+
"user_agents": [
|
582
|
+
"^foobar2000/"
|
583
|
+
],
|
584
|
+
"app": "foobar2000",
|
585
|
+
"examples": [
|
586
|
+
"foobar2000/1.x"
|
587
|
+
],
|
588
|
+
"info_url": "https://www.foobar2000.org/"
|
589
|
+
},
|
590
|
+
{
|
591
|
+
"user_agents": [
|
592
|
+
"^fyyd-poll"
|
593
|
+
],
|
594
|
+
"bot": true
|
595
|
+
},
|
596
|
+
{
|
597
|
+
"user_agents": [
|
598
|
+
"^Go-http-client"
|
599
|
+
],
|
600
|
+
"bot": true
|
601
|
+
},
|
602
|
+
{
|
603
|
+
"user_agents": [
|
604
|
+
"^Googlebot"
|
605
|
+
],
|
606
|
+
"bot": true
|
607
|
+
},
|
608
|
+
{
|
609
|
+
"user_agents": [
|
610
|
+
"Google-Podcast"
|
611
|
+
],
|
612
|
+
"bot": true
|
613
|
+
},
|
614
|
+
{
|
615
|
+
"user_agents": [
|
616
|
+
"^Google-Speech-Actions"
|
617
|
+
],
|
618
|
+
"app": "Google Home",
|
619
|
+
"device": "speaker",
|
620
|
+
"os": "google_assistant"
|
621
|
+
},
|
622
|
+
{
|
623
|
+
"user_agents": [
|
624
|
+
"GoogleChirp"
|
625
|
+
],
|
626
|
+
"app": "Google Podcasts",
|
627
|
+
"device": "speaker",
|
628
|
+
"os": "google_assistant"
|
629
|
+
},
|
630
|
+
{
|
631
|
+
"user_agents": [
|
632
|
+
"iPhone;.*GSA/"
|
633
|
+
],
|
634
|
+
"app": "Google Podcasts",
|
635
|
+
"device": "phone",
|
636
|
+
"os": "ios"
|
637
|
+
},
|
638
|
+
{
|
639
|
+
"user_agents": [
|
640
|
+
"iPad;.*GSA/"
|
641
|
+
],
|
642
|
+
"app": "Google Podcasts",
|
643
|
+
"device": "tablet",
|
644
|
+
"os": "ios"
|
645
|
+
},
|
646
|
+
{
|
647
|
+
"user_agents": [
|
648
|
+
"(?:Android;.+)?GSA/"
|
649
|
+
],
|
650
|
+
"app": "Google Podcasts",
|
651
|
+
"os": "android"
|
652
|
+
},
|
653
|
+
{
|
654
|
+
"user_agents": [
|
655
|
+
"Linux; Android.*SM-T350"
|
656
|
+
],
|
657
|
+
"device": "tablet",
|
658
|
+
"os": "android"
|
659
|
+
},
|
660
|
+
{
|
661
|
+
"user_agents": [
|
662
|
+
"Android.*Chrome/"
|
663
|
+
],
|
664
|
+
"app": "Google Chrome",
|
665
|
+
"os": "android"
|
666
|
+
},
|
667
|
+
{
|
668
|
+
"user_agents": [
|
669
|
+
"CrOS.*Chrome/"
|
670
|
+
],
|
671
|
+
"app": "Google Chrome",
|
672
|
+
"device": "pc",
|
673
|
+
"os": "chromeos"
|
674
|
+
},
|
675
|
+
{
|
676
|
+
"user_agents": [
|
677
|
+
"Linux.*Chrome/"
|
678
|
+
],
|
679
|
+
"app": "Google Chrome",
|
680
|
+
"device": "pc",
|
681
|
+
"os": "linux"
|
682
|
+
},
|
683
|
+
{
|
684
|
+
"user_agents": [
|
685
|
+
"Mac OS X.*Chrome/"
|
686
|
+
],
|
687
|
+
"app": "Google Chrome",
|
688
|
+
"device": "pc",
|
689
|
+
"examples": [
|
690
|
+
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36"
|
691
|
+
],
|
692
|
+
"os": "macos"
|
693
|
+
},
|
694
|
+
{
|
695
|
+
"user_agents": [
|
696
|
+
"Windows.*Chrome/"
|
697
|
+
],
|
698
|
+
"app": "Google Chrome",
|
699
|
+
"device": "pc",
|
700
|
+
"examples": [
|
701
|
+
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"
|
702
|
+
],
|
703
|
+
"os": "windows"
|
704
|
+
},
|
705
|
+
{
|
706
|
+
"user_agents": [
|
707
|
+
"iPad.*CriOS/"
|
708
|
+
],
|
709
|
+
"app": "Google Chrome",
|
710
|
+
"device": "tablet",
|
711
|
+
"os": "ios"
|
712
|
+
},
|
713
|
+
{
|
714
|
+
"user_agents": [
|
715
|
+
"iPhone.*CriOS/"
|
716
|
+
],
|
717
|
+
"app": "Google Chrome",
|
718
|
+
"device": "phone",
|
719
|
+
"os": "ios"
|
720
|
+
},
|
721
|
+
{
|
722
|
+
"user_agents": [
|
723
|
+
"^gPodder/",
|
724
|
+
"^gpodder\\.net"
|
725
|
+
],
|
726
|
+
"app": "gPodder",
|
727
|
+
"examples": [
|
728
|
+
"gPodder/3.10.8 (+http://gpodder.org/) Windows/10"
|
729
|
+
]
|
730
|
+
},
|
731
|
+
{
|
732
|
+
"user_agents": [
|
733
|
+
"^GStreamer"
|
734
|
+
],
|
735
|
+
"device": "radio"
|
736
|
+
},
|
737
|
+
{
|
738
|
+
"user_agents": [
|
739
|
+
"^Guardian-iOSLive/"
|
740
|
+
],
|
741
|
+
"app": "Guardian",
|
742
|
+
"os": "ios"
|
743
|
+
},
|
744
|
+
{
|
745
|
+
"user_agents": [
|
746
|
+
"GuardianAndroidApp/"
|
747
|
+
],
|
748
|
+
"app": "Guardian",
|
749
|
+
"os": "android"
|
750
|
+
},
|
751
|
+
{
|
752
|
+
"user_agents": [
|
753
|
+
"^gvfs"
|
754
|
+
],
|
755
|
+
"bot": true
|
756
|
+
},
|
757
|
+
{
|
758
|
+
"user_agents": [
|
759
|
+
"^\\+hermespod\\.com/"
|
760
|
+
],
|
761
|
+
"app": "HermesPod",
|
762
|
+
"device": "pc",
|
763
|
+
"examples": [
|
764
|
+
"+hermespod.com/v1.5.x"
|
765
|
+
],
|
766
|
+
"info_url": "http://hermespod.com/",
|
767
|
+
"os": "windows"
|
768
|
+
},
|
769
|
+
{
|
770
|
+
"user_agents": [
|
771
|
+
"^Himalaya/"
|
772
|
+
],
|
773
|
+
"app": "Himalaya"
|
774
|
+
},
|
775
|
+
{
|
776
|
+
"user_agents": [
|
777
|
+
"^iCatcher"
|
778
|
+
],
|
779
|
+
"app": "iCatcher",
|
780
|
+
"device": "phone",
|
781
|
+
"os": "ios"
|
782
|
+
},
|
783
|
+
{
|
784
|
+
"user_agents": [
|
785
|
+
"^iHeartRadio/"
|
786
|
+
],
|
787
|
+
"app": "iHeartRadio"
|
788
|
+
},
|
789
|
+
{
|
790
|
+
"user_agents": [
|
791
|
+
"MSIE "
|
792
|
+
],
|
793
|
+
"app": "Internet Explorer",
|
794
|
+
"device": "pc",
|
795
|
+
"examples": [
|
796
|
+
"Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)"
|
797
|
+
],
|
798
|
+
"os": "windows"
|
799
|
+
},
|
800
|
+
{
|
801
|
+
"user_agents": [
|
802
|
+
"iTMS",
|
803
|
+
"itunesstored"
|
804
|
+
],
|
805
|
+
"bot": true
|
806
|
+
},
|
807
|
+
{
|
808
|
+
"user_agents": [
|
809
|
+
"^iTunes/.+Mac OS"
|
810
|
+
],
|
811
|
+
"examples": [
|
812
|
+
"iTunes/10.6.3 (Macintosh; Intel Mac OS X 10.5.8) AppleWebKit/534.50.2"
|
813
|
+
],
|
814
|
+
"app": "iTunes",
|
815
|
+
"device": "pc",
|
816
|
+
"info_url": "https://www.apple.com/itunes/",
|
817
|
+
"os": "macos"
|
818
|
+
},
|
819
|
+
{
|
820
|
+
"user_agents": [
|
821
|
+
"^iTunes/1[12]\\."
|
822
|
+
],
|
823
|
+
"examples": [
|
824
|
+
"iTunes/11.4 (Windows; Microsoft Windows 7 x64 Home Premium Edition (Build 7600)) AppleWebKit/7600.1017.0.24"
|
825
|
+
],
|
826
|
+
"app": "iTunes",
|
827
|
+
"device": "pc",
|
828
|
+
"os": "windows"
|
829
|
+
},
|
830
|
+
{
|
831
|
+
"user_agents": [
|
832
|
+
"^iTunes/4"
|
833
|
+
],
|
834
|
+
"device": "speaker"
|
835
|
+
},
|
836
|
+
{
|
837
|
+
"user_agents": [
|
838
|
+
"J. River Internet Reader"
|
839
|
+
],
|
840
|
+
"examples": [
|
841
|
+
"Microsoft-Windows-XP/2002, UPnP/1.1, J. River Internet Reader/2.0 (compatible; Windows-Media-Player/10)"
|
842
|
+
],
|
843
|
+
"app": "JRiver Media Center",
|
844
|
+
"device": "pc",
|
845
|
+
"info_url": "https://www.jriver.com/",
|
846
|
+
"os": "windows"
|
847
|
+
},
|
848
|
+
{
|
849
|
+
"user_agents": [
|
850
|
+
"^Laughable.+iOS"
|
851
|
+
],
|
852
|
+
"app": "Laughable",
|
853
|
+
"device": "phone",
|
854
|
+
"os": "ios"
|
855
|
+
},
|
856
|
+
{
|
857
|
+
"user_agents": [
|
858
|
+
"LG Player"
|
859
|
+
],
|
860
|
+
"device": "phone",
|
861
|
+
"os": "android"
|
862
|
+
},
|
863
|
+
{
|
864
|
+
"user_agents": [
|
865
|
+
"^libwww-perl"
|
866
|
+
],
|
867
|
+
"bot": true
|
868
|
+
},
|
869
|
+
{
|
870
|
+
"user_agents": [
|
871
|
+
"Listen5"
|
872
|
+
],
|
873
|
+
"app": "Listen5",
|
874
|
+
"device": "phone",
|
875
|
+
"os": "ios"
|
876
|
+
},
|
877
|
+
{
|
878
|
+
"user_agents": [
|
879
|
+
"LivelapBot"
|
880
|
+
],
|
881
|
+
"bot": true
|
882
|
+
},
|
883
|
+
{
|
884
|
+
"user_agents": [
|
885
|
+
"^Luminary/.+Android"
|
886
|
+
],
|
887
|
+
"app": "Luminary",
|
888
|
+
"device": "phone",
|
889
|
+
"os": "android"
|
890
|
+
},
|
891
|
+
{
|
892
|
+
"user_agents": [
|
893
|
+
"^Luminary/.+iOS"
|
894
|
+
],
|
895
|
+
"app": "Luminary",
|
896
|
+
"device": "phone",
|
897
|
+
"os": "ios"
|
898
|
+
},
|
899
|
+
{
|
900
|
+
"user_agents": [
|
901
|
+
"^MajelanApp"
|
902
|
+
],
|
903
|
+
"app": "Majelan"
|
904
|
+
},
|
905
|
+
{
|
906
|
+
"user_agents": [
|
907
|
+
"^Mechanize"
|
908
|
+
],
|
909
|
+
"bot": true
|
910
|
+
},
|
911
|
+
{
|
912
|
+
"user_agents": [
|
913
|
+
"^MediaMonkey"
|
914
|
+
],
|
915
|
+
"app": "MediaMonkey",
|
916
|
+
"device": "pc",
|
917
|
+
"os": "windows"
|
918
|
+
},
|
919
|
+
{
|
920
|
+
"user_agents": [
|
921
|
+
"^Miro/.+Windows"
|
922
|
+
],
|
923
|
+
"app": "Miro",
|
924
|
+
"device": "pc",
|
925
|
+
"examples": [
|
926
|
+
"Miro/6.0 (http://www.getmiro.com/; Windows post2008Server x86)"
|
927
|
+
],
|
928
|
+
"info_url": "http://www.getmiro.com/",
|
929
|
+
"os": "windows"
|
930
|
+
},
|
931
|
+
{
|
932
|
+
"user_agents": [
|
933
|
+
"MJ12bot"
|
934
|
+
],
|
935
|
+
"bot": true
|
936
|
+
},
|
937
|
+
{
|
938
|
+
"user_agents": [
|
939
|
+
"^mpv 0\\."
|
940
|
+
],
|
941
|
+
"app": "mpv",
|
942
|
+
"info_url": "https://mpv.io/"
|
943
|
+
},
|
944
|
+
{
|
945
|
+
"user_agents": [
|
946
|
+
"^MusicBee"
|
947
|
+
],
|
948
|
+
"app": "MusicBee",
|
949
|
+
"device": "pc",
|
950
|
+
"examples": [
|
951
|
+
"MusicBee"
|
952
|
+
],
|
953
|
+
"info_url": "https://getmusicbee.com/",
|
954
|
+
"os": "windows"
|
955
|
+
},
|
956
|
+
{
|
957
|
+
"user_agents": [
|
958
|
+
"^OkDownload/"
|
959
|
+
]
|
960
|
+
},
|
961
|
+
{
|
962
|
+
"user_agents": [
|
963
|
+
"okhttp"
|
964
|
+
],
|
965
|
+
"examples": [
|
966
|
+
"okhttp/3.11.0"
|
967
|
+
]
|
968
|
+
},
|
969
|
+
{
|
970
|
+
"user_agents": [
|
971
|
+
"Opera/.*Android;"
|
972
|
+
],
|
973
|
+
"app": "Opera",
|
974
|
+
"os": "android"
|
975
|
+
},
|
976
|
+
{
|
977
|
+
"user_agents": [
|
978
|
+
"Opera/.*\\(Linux"
|
979
|
+
],
|
980
|
+
"app": "Opera",
|
981
|
+
"device": "pc",
|
982
|
+
"os": "linux"
|
983
|
+
},
|
984
|
+
{
|
985
|
+
"user_agents": [
|
986
|
+
"Opera/.*\\(Macintosh"
|
987
|
+
],
|
988
|
+
"app": "Opera",
|
989
|
+
"device": "pc",
|
990
|
+
"os": "macos"
|
991
|
+
},
|
992
|
+
{
|
993
|
+
"user_agents": [
|
994
|
+
"Opera/.*\\(Windows"
|
995
|
+
],
|
996
|
+
"app": "Opera",
|
997
|
+
"device": "pc",
|
998
|
+
"os": "windows"
|
999
|
+
},
|
1000
|
+
{
|
1001
|
+
"user_agents": [
|
1002
|
+
"Opera[/ ]"
|
1003
|
+
],
|
1004
|
+
"app": "Opera"
|
1005
|
+
},
|
1006
|
+
{
|
1007
|
+
"user_agents": [
|
1008
|
+
"^Overcast/"
|
1009
|
+
],
|
1010
|
+
"app": "Overcast",
|
1011
|
+
"examples": [
|
1012
|
+
"Overcast/3.0 (+http://overcast.fm/; iOS podcast app)"
|
1013
|
+
],
|
1014
|
+
"os": "ios"
|
1015
|
+
},
|
1016
|
+
{
|
1017
|
+
"user_agents": [
|
1018
|
+
"^PandoraRSSCrawler"
|
1019
|
+
],
|
1020
|
+
"bot": true
|
1021
|
+
},
|
1022
|
+
{
|
1023
|
+
"user_agents": [
|
1024
|
+
"^Pandora.+Android"
|
1025
|
+
],
|
1026
|
+
"app": "Pandora",
|
1027
|
+
"device": "phone",
|
1028
|
+
"os": "android"
|
1029
|
+
},
|
1030
|
+
{
|
1031
|
+
"user_agents": [
|
1032
|
+
"^Player FM"
|
1033
|
+
],
|
1034
|
+
"app": "Player FM"
|
1035
|
+
},
|
1036
|
+
{
|
1037
|
+
"user_agents": [
|
1038
|
+
"^Pingdom"
|
1039
|
+
],
|
1040
|
+
"bot": true
|
1041
|
+
},
|
1042
|
+
{
|
1043
|
+
"user_agents": [
|
1044
|
+
"^Pocket Casts",
|
1045
|
+
"^PocketCasts/"
|
1046
|
+
],
|
1047
|
+
"app": "Pocket Casts",
|
1048
|
+
"device": "phone",
|
1049
|
+
"examples": [
|
1050
|
+
"Pocket Casts"
|
1051
|
+
],
|
1052
|
+
"info_url": "https://www.pocketcasts.com/",
|
1053
|
+
"description": "A podcast app and web player",
|
1054
|
+
"developer_notes": "'PocketCasts' is a feed parser; 'Pocket Casts' is the app. There is also a web player.",
|
1055
|
+
"svg": "pocketcasts.svg"
|
1056
|
+
},
|
1057
|
+
{
|
1058
|
+
"user_agents": [
|
1059
|
+
"^Podcast.*Addict/"
|
1060
|
+
],
|
1061
|
+
"app": "PodcastAddict",
|
1062
|
+
"device": "phone",
|
1063
|
+
"examples": [
|
1064
|
+
"PodcastAddict/v2 - Dalvik/2.1.0 (Linux; U; Android 9; SM-N950U Build/PPR1.180610.011)"
|
1065
|
+
],
|
1066
|
+
"os": "android"
|
1067
|
+
},
|
1068
|
+
{
|
1069
|
+
"user_agents": [
|
1070
|
+
"iOS.*The Podcast App/"
|
1071
|
+
],
|
1072
|
+
"app": "The Podcast App",
|
1073
|
+
"os": "ios"
|
1074
|
+
},
|
1075
|
+
{
|
1076
|
+
"user_agents": [
|
1077
|
+
"^PodcastRepublic.+Android"
|
1078
|
+
],
|
1079
|
+
"app": "PodcastRepublic",
|
1080
|
+
"device": "phone",
|
1081
|
+
"examples": [
|
1082
|
+
"PodcastRepublic/18.0 (Linux; U; Android 10;blueline/QP1A.190711.020.C3)"
|
1083
|
+
],
|
1084
|
+
"os": "android"
|
1085
|
+
},
|
1086
|
+
{
|
1087
|
+
"user_agents": [
|
1088
|
+
"podCloud"
|
1089
|
+
],
|
1090
|
+
"app": "PodCloud",
|
1091
|
+
"description": "Le podcast, simplement. A French-language web-based podcast player.",
|
1092
|
+
"bot": true,
|
1093
|
+
"developer_notes": "This useragent is a bot, doing feed updates and downloading media files. It was observed every six hours. User plays will have a standard browser useragent with a referer of https://podcloud.fr/ ",
|
1094
|
+
"info_url": "https://podcloud.fr"
|
1095
|
+
},
|
1096
|
+
{
|
1097
|
+
"user_agents": [
|
1098
|
+
"^Podcoin"
|
1099
|
+
],
|
1100
|
+
"app": "Podcoin"
|
1101
|
+
},
|
1102
|
+
{
|
1103
|
+
"user_agents": [
|
1104
|
+
"^PodCruncher/"
|
1105
|
+
],
|
1106
|
+
"app": "PodCruncher"
|
1107
|
+
},
|
1108
|
+
{
|
1109
|
+
"user_agents": [
|
1110
|
+
"^Podbean/"
|
1111
|
+
],
|
1112
|
+
"app": "Podbean"
|
1113
|
+
},
|
1114
|
+
{
|
1115
|
+
"user_agents": [
|
1116
|
+
"^Podkicker"
|
1117
|
+
],
|
1118
|
+
"app": "Podkicker Pro",
|
1119
|
+
"os": "android"
|
1120
|
+
},
|
1121
|
+
{
|
1122
|
+
"user_agents": [
|
1123
|
+
"PodnewsBot"
|
1124
|
+
],
|
1125
|
+
"app": "Podnews",
|
1126
|
+
"bot": true,
|
1127
|
+
"description": "Podnews runs a number of bots to read and test RSS and audio files",
|
1128
|
+
"info_url": "http://podnews.net"
|
1129
|
+
},
|
1130
|
+
{
|
1131
|
+
"user_agents": [
|
1132
|
+
"python-requests"
|
1133
|
+
],
|
1134
|
+
"bot": true
|
1135
|
+
},
|
1136
|
+
{
|
1137
|
+
"user_agents": [
|
1138
|
+
"^Radioplayer Android app"
|
1139
|
+
],
|
1140
|
+
"app": "RadioPlayer",
|
1141
|
+
"os": "android",
|
1142
|
+
"description": "Radioplayer is a radio and podcast app, with country-specific versions available in selected countries.",
|
1143
|
+
"info_url": "http://radioplayer.org"
|
1144
|
+
},
|
1145
|
+
{
|
1146
|
+
"user_agents": [
|
1147
|
+
"^Radioplayer iOS app"
|
1148
|
+
],
|
1149
|
+
"app": "RadioPlayer",
|
1150
|
+
"os": "ios",
|
1151
|
+
"description": "Radioplayer is a radio and podcast app, with country-specific versions available in selected countries.",
|
1152
|
+
"info_url": "http://radioplayer.org"
|
1153
|
+
},
|
1154
|
+
{
|
1155
|
+
"user_agents": [
|
1156
|
+
"^RadioPublic/android-",
|
1157
|
+
"^RadioPublic Android"
|
1158
|
+
],
|
1159
|
+
"app": "RadioPublic",
|
1160
|
+
"description": "RadioPublic’s free, easy to use podcast player makes listening to podcasts simple, enjoyable, and fun.",
|
1161
|
+
"examples": [
|
1162
|
+
"RadioPublic/android-2.2"
|
1163
|
+
],
|
1164
|
+
"info_url": "https://radiopublic.com/",
|
1165
|
+
"svg": "radiopublic.svg",
|
1166
|
+
"os": "android"
|
1167
|
+
},
|
1168
|
+
{
|
1169
|
+
"user_agents": [
|
1170
|
+
"RadioPublic iOS",
|
1171
|
+
"RadioPublic.+CFNetwork"
|
1172
|
+
],
|
1173
|
+
"app": "RadioPublic",
|
1174
|
+
"description": "RadioPublic’s free, easy to use podcast player makes listening to podcasts simple, enjoyable, and fun.",
|
1175
|
+
"info_url": "https://radiopublic.com/",
|
1176
|
+
"svg": "radiopublic.svg",
|
1177
|
+
"os": "ios"
|
1178
|
+
},
|
1179
|
+
{
|
1180
|
+
"user_agents": [
|
1181
|
+
"request\\.js"
|
1182
|
+
],
|
1183
|
+
"bot": true
|
1184
|
+
},
|
1185
|
+
{
|
1186
|
+
"user_agents": [
|
1187
|
+
"^Roku/DVP-8.*\\(04"
|
1188
|
+
],
|
1189
|
+
"device": "tv",
|
1190
|
+
"os": "roku"
|
1191
|
+
},
|
1192
|
+
{
|
1193
|
+
"user_agents": [
|
1194
|
+
"^RSSRadio \\("
|
1195
|
+
],
|
1196
|
+
"bot": true
|
1197
|
+
},
|
1198
|
+
{
|
1199
|
+
"user_agents": [
|
1200
|
+
"^RSSRadio7?/"
|
1201
|
+
],
|
1202
|
+
"app": "RSS Radio",
|
1203
|
+
"device": "phone",
|
1204
|
+
"examples": [
|
1205
|
+
"RSSRadio7/9252 CFNetwork/1107.1 Darwin/19.0.0"
|
1206
|
+
],
|
1207
|
+
"info_url": "http://rssrad.io",
|
1208
|
+
"os": "ios"
|
1209
|
+
},
|
1210
|
+
{
|
1211
|
+
"user_agents": [
|
1212
|
+
"^Ruby"
|
1213
|
+
],
|
1214
|
+
"bot": true
|
1215
|
+
},
|
1216
|
+
{
|
1217
|
+
"user_agents": [
|
1218
|
+
"^SEMrushBot"
|
1219
|
+
],
|
1220
|
+
"bot": true
|
1221
|
+
},
|
1222
|
+
{
|
1223
|
+
"user_agents": [
|
1224
|
+
"^Spotify/.+Linux"
|
1225
|
+
],
|
1226
|
+
"app": "Spotify",
|
1227
|
+
"device": "pc",
|
1228
|
+
"os": "linux"
|
1229
|
+
},
|
1230
|
+
{
|
1231
|
+
"user_agents": [
|
1232
|
+
"Macintosh.+Spotify/",
|
1233
|
+
"^Spotify/.+OSX"
|
1234
|
+
],
|
1235
|
+
"app": "Spotify",
|
1236
|
+
"device": "pc",
|
1237
|
+
"os": "macos"
|
1238
|
+
},
|
1239
|
+
{
|
1240
|
+
"user_agents": [
|
1241
|
+
"Windows.+Spotify/",
|
1242
|
+
"^Spotify/.+Win32"
|
1243
|
+
],
|
1244
|
+
"app": "Spotify",
|
1245
|
+
"device": "pc",
|
1246
|
+
"os": "windows"
|
1247
|
+
},
|
1248
|
+
{
|
1249
|
+
"user_agents": [
|
1250
|
+
"^Spotify/.+Android"
|
1251
|
+
],
|
1252
|
+
"app": "Spotify",
|
1253
|
+
"device": "phone",
|
1254
|
+
"os": "android"
|
1255
|
+
},
|
1256
|
+
{
|
1257
|
+
"user_agents": [
|
1258
|
+
"^Spotify/.*iOS"
|
1259
|
+
],
|
1260
|
+
"app": "Spotify",
|
1261
|
+
"device": "phone",
|
1262
|
+
"os": "ios"
|
1263
|
+
},
|
1264
|
+
{
|
1265
|
+
"user_agents": [
|
1266
|
+
"^Spotify/\\d+"
|
1267
|
+
],
|
1268
|
+
"bot": true
|
1269
|
+
},
|
1270
|
+
{
|
1271
|
+
"user_agents": [
|
1272
|
+
"Macintosh.*AppleWebKit.*Safari/"
|
1273
|
+
],
|
1274
|
+
"app": "Safari",
|
1275
|
+
"device": "pc",
|
1276
|
+
"os": "macos"
|
1277
|
+
},
|
1278
|
+
{
|
1279
|
+
"user_agents": [
|
1280
|
+
"Windows.*AppleWebKit.*Safari/"
|
1281
|
+
],
|
1282
|
+
"app": "Safari",
|
1283
|
+
"device": "pc",
|
1284
|
+
"os": "windows"
|
1285
|
+
},
|
1286
|
+
{
|
1287
|
+
"user_agents": [
|
1288
|
+
"iPhone.*AppleWebKit.*Safari/"
|
1289
|
+
],
|
1290
|
+
"app": "Safari",
|
1291
|
+
"device": "phone",
|
1292
|
+
"os": "ios"
|
1293
|
+
},
|
1294
|
+
{
|
1295
|
+
"user_agents": [
|
1296
|
+
"iPad.*AppleWebKit.*Safari/"
|
1297
|
+
],
|
1298
|
+
"app": "Safari",
|
1299
|
+
"device": "tablet",
|
1300
|
+
"os": "ios"
|
1301
|
+
},
|
1302
|
+
{
|
1303
|
+
"user_agents": [
|
1304
|
+
"^Subcast"
|
1305
|
+
],
|
1306
|
+
"app": "Subcast"
|
1307
|
+
},
|
1308
|
+
{
|
1309
|
+
"user_agents": [
|
1310
|
+
"Sonos"
|
1311
|
+
],
|
1312
|
+
"app": "Sonos",
|
1313
|
+
"device": "speaker",
|
1314
|
+
"os": "sonos"
|
1315
|
+
},
|
1316
|
+
{
|
1317
|
+
"user_agents": [
|
1318
|
+
"^Spreaker"
|
1319
|
+
],
|
1320
|
+
"app": "Spreaker"
|
1321
|
+
},
|
1322
|
+
{
|
1323
|
+
"user_agents": [
|
1324
|
+
"support@dorada.co.uk"
|
1325
|
+
],
|
1326
|
+
"bot": true
|
1327
|
+
},
|
1328
|
+
{
|
1329
|
+
"user_agents": [
|
1330
|
+
"^Stitcher/Android"
|
1331
|
+
],
|
1332
|
+
"app": "Stitcher",
|
1333
|
+
"os": "android"
|
1334
|
+
},
|
1335
|
+
{
|
1336
|
+
"user_agents": [
|
1337
|
+
"^AlexaMediaPlayer/Stitcher"
|
1338
|
+
],
|
1339
|
+
"app": "Stitcher",
|
1340
|
+
"device": "speaker",
|
1341
|
+
"os": "alexa"
|
1342
|
+
},
|
1343
|
+
{
|
1344
|
+
"user_agents": [
|
1345
|
+
"^Stitcher/iOS"
|
1346
|
+
],
|
1347
|
+
"app": "Stitcher",
|
1348
|
+
"os": "ios"
|
1349
|
+
},
|
1350
|
+
{
|
1351
|
+
"user_agents": [
|
1352
|
+
"StitcherBot"
|
1353
|
+
],
|
1354
|
+
"bot": true
|
1355
|
+
},
|
1356
|
+
{
|
1357
|
+
"user_agents": [
|
1358
|
+
"^Storiyoh/"
|
1359
|
+
],
|
1360
|
+
"app": "Storiyoh"
|
1361
|
+
},
|
1362
|
+
{
|
1363
|
+
"user_agents": [
|
1364
|
+
"^Swinsian/"
|
1365
|
+
],
|
1366
|
+
"app": "Swinsian",
|
1367
|
+
"device": "pc",
|
1368
|
+
"examples": [
|
1369
|
+
"Swinsian/472 CFNetwork/978.0.7 Darwin/18.7.0 (x86_64)"
|
1370
|
+
],
|
1371
|
+
"info_url": "https://swinsian.com/",
|
1372
|
+
"os": "macos"
|
1373
|
+
},
|
1374
|
+
{
|
1375
|
+
"user_agents": [
|
1376
|
+
"^Swoot/"
|
1377
|
+
],
|
1378
|
+
"app": "Swoot"
|
1379
|
+
},
|
1380
|
+
{
|
1381
|
+
"user_agents": [
|
1382
|
+
"^Trackable/"
|
1383
|
+
],
|
1384
|
+
"bot": true
|
1385
|
+
},
|
1386
|
+
{
|
1387
|
+
"user_agents": [
|
1388
|
+
"^TuneIn"
|
1389
|
+
],
|
1390
|
+
"app": "TuneIn"
|
1391
|
+
},
|
1392
|
+
{
|
1393
|
+
"user_agents": [
|
1394
|
+
"^Twitterbot"
|
1395
|
+
],
|
1396
|
+
"bot": true
|
1397
|
+
},
|
1398
|
+
{
|
1399
|
+
"user_agents": [
|
1400
|
+
"^Typhoeus"
|
1401
|
+
],
|
1402
|
+
"bot": true
|
1403
|
+
},
|
1404
|
+
{
|
1405
|
+
"user_agents": [
|
1406
|
+
"^VictorReader Stream"
|
1407
|
+
],
|
1408
|
+
"app": "VictorReader",
|
1409
|
+
"device": "speaker",
|
1410
|
+
"os": "victorreader"
|
1411
|
+
},
|
1412
|
+
{
|
1413
|
+
"user_agents": [
|
1414
|
+
"^VLC/\\d"
|
1415
|
+
],
|
1416
|
+
"app": "VLC media player",
|
1417
|
+
"device": "pc",
|
1418
|
+
"examples": [
|
1419
|
+
"VLC/3.0.8 LibVLC/3.0.8"
|
1420
|
+
],
|
1421
|
+
"info_url": "https://www.videolan.org/vlc/"
|
1422
|
+
},
|
1423
|
+
{
|
1424
|
+
"user_agents": [
|
1425
|
+
"Wget"
|
1426
|
+
],
|
1427
|
+
"bot": true
|
1428
|
+
},
|
1429
|
+
{
|
1430
|
+
"user_agents": [
|
1431
|
+
"^Winamp"
|
1432
|
+
],
|
1433
|
+
"app": "Winamp",
|
1434
|
+
"device": "pc",
|
1435
|
+
"examples": [
|
1436
|
+
"WinampMPEG/2.7"
|
1437
|
+
],
|
1438
|
+
"os": "windows"
|
1439
|
+
},
|
1440
|
+
{
|
1441
|
+
"user_agents": [
|
1442
|
+
"^NSPlayer",
|
1443
|
+
"^WMPlayer/"
|
1444
|
+
],
|
1445
|
+
"app": "Windows Media Player",
|
1446
|
+
"device": "pc",
|
1447
|
+
"examples": [
|
1448
|
+
"NSPlayer/12.00.18362.0418 WMFSDK/12.00.18362.0418"
|
1449
|
+
],
|
1450
|
+
"os": "windows"
|
1451
|
+
},
|
1452
|
+
{
|
1453
|
+
"user_agents": [
|
1454
|
+
"^WordPress"
|
1455
|
+
],
|
1456
|
+
"bot": true
|
1457
|
+
},
|
1458
|
+
{
|
1459
|
+
"user_agents": [
|
1460
|
+
"YandexBot"
|
1461
|
+
],
|
1462
|
+
"bot": true
|
1463
|
+
},
|
1464
|
+
{
|
1465
|
+
"user_agents": [
|
1466
|
+
"^yapa/"
|
1467
|
+
],
|
1468
|
+
"app": "Yapa"
|
1469
|
+
},
|
1470
|
+
{
|
1471
|
+
"user_agents": [
|
1472
|
+
"stagefright/"
|
1473
|
+
],
|
1474
|
+
"os": "android"
|
1475
|
+
}
|
1476
|
+
]
|