podcast-agent 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +6 -0
- data/Gemfile +7 -0
- data/README.md +45 -0
- data/Rakefile +11 -0
- data/lib/data/podcast_agents.yml +461 -0
- data/lib/podcast_agent.rb +27 -0
- data/podcast-agent.gemspec +20 -0
- data/test/data/sample_user_agents.yml +573 -0
- data/test/integrity_test.rb +20 -0
- data/test/podcast_agent_test.rb +23 -0
- data/test/test_helper.rb +16 -0
- metadata +85 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 9c122d467688095b1b8e97dd3ed0c103a4a87212d8b3b9a99da13c8345ed50b3
|
4
|
+
data.tar.gz: 4da0078fe2eb72e6617bbd5fdbaa67be7cf1219ee25b4b6d7bb27f2233849108
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3ae36ab2372ba29bd738cf27a52b9449a265c917f2be922d94fbdad510126370996b1baa041006c5de3d4809a5ddc44839d683958a476ef730c8b3ea47925fe5
|
7
|
+
data.tar.gz: e3d5449855f192b9548eb0a52db76991431974d130244d5ce3e326ff7f64e349026f2a8c984161bc8a94e99697c6c9c4eb09d93bd514bb13e2874bb45eb4d157
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
Podcast Agents
|
4
|
+
=========
|
5
|
+
|
6
|
+
This is library is for identifying entities that download or stream podcast episodes. For lack of a better term, these will be referred to as **Podcast Agents**. Podcast Agents include apps, bots, and browsers.
|
7
|
+
|
8
|
+
## Identification
|
9
|
+
|
10
|
+
In order to identify a Podcast Agent, we will be just the **user-agent**. I intend to add the referring URL in the future to better improve the detection. This information will be compared to a database of Podcast Agents and will result in one and only one match.
|
11
|
+
|
12
|
+
**Name**: Name of the Podcast Agent that matches the database
|
13
|
+
**Browser**: Browser as parsed by [UserAgent GEM](https://github.com/gshutler/useragent)
|
14
|
+
**Platform**: Platform as parsed by [UserAgent GEM](https://github.com/gshutler/useragent)
|
15
|
+
|
16
|
+
## Installation
|
17
|
+
|
18
|
+
gem install podcast-agent
|
19
|
+
|
20
|
+
### Examples
|
21
|
+
|
22
|
+
#### Pandora on Safari
|
23
|
+
|
24
|
+
```ruby
|
25
|
+
user_agent_string = 'Mozilla/5.0 (iPad; CPU OS 12_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Pandora/1908.1'
|
26
|
+
podcast_agent = PodcastAgent.find_by(user_agent_string: user_agent_string)
|
27
|
+
podcast_agent.app
|
28
|
+
# => 'Pandora'
|
29
|
+
podcast_agent.browser
|
30
|
+
# => 'Safari'
|
31
|
+
podcast_agent.platform
|
32
|
+
# => 'iPad'
|
33
|
+
```
|
34
|
+
#### Apple Home Pod
|
35
|
+
|
36
|
+
```ruby
|
37
|
+
user_agent_string = 'AppleCoreMedia/1.0.0.15C4092b (HomePod; U; CPU OS 11_2 like Mac OS X; de_de)'
|
38
|
+
podcast_agent = PodcastAgent.find_by(user_agent_string: user_agent_string)
|
39
|
+
podcast_agent.app
|
40
|
+
# => 'Apple HomePod'
|
41
|
+
podcast_agent.browser
|
42
|
+
# => 'AppleCoreMedia'
|
43
|
+
podcast_agent.platform
|
44
|
+
# => 'HomePod'
|
45
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,461 @@
|
|
1
|
+
- name: 'Ahrefs'
|
2
|
+
regex: AhrefsBot
|
3
|
+
type: bot
|
4
|
+
|
5
|
+
- name: 'AhaRadio'
|
6
|
+
regex: ^AhaRadio2\/
|
7
|
+
type: app
|
8
|
+
|
9
|
+
- name: 'Acast'
|
10
|
+
regex: ^Acast
|
11
|
+
type: app
|
12
|
+
|
13
|
+
- name: 'Alexa Enabled Device'
|
14
|
+
regex: ^AlexaMediaPlayer\/\d.*ExoPlayerLib
|
15
|
+
type: app
|
16
|
+
|
17
|
+
- name: 'All You Can Books'
|
18
|
+
regex: AllYouCanBooks
|
19
|
+
type: app
|
20
|
+
|
21
|
+
- name: 'Amazon Alexa Flash Briefing'
|
22
|
+
regex: ^AmazonNewsContentService
|
23
|
+
type: app
|
24
|
+
|
25
|
+
- name: 'Amazon Echo'
|
26
|
+
regex: ^Echo
|
27
|
+
type: app
|
28
|
+
|
29
|
+
- name: 'Android Download Manager'
|
30
|
+
regex: ^AndroidDownloadManager
|
31
|
+
type: app
|
32
|
+
|
33
|
+
- name: 'Antenna Pod'
|
34
|
+
regex: ^AntennaPod|antennapod|antenna\/.*CFNetwork
|
35
|
+
type: app
|
36
|
+
|
37
|
+
- name: 'Apache HTTP Client'
|
38
|
+
regex: ^Apache-HttpClient\/
|
39
|
+
type: bot
|
40
|
+
|
41
|
+
- name: 'APK downloader'
|
42
|
+
regex: ^APKXDL
|
43
|
+
type: bot
|
44
|
+
|
45
|
+
- name: 'Apple Watch'
|
46
|
+
regex: ^AppleCoreMedia\/.*Apple Watch
|
47
|
+
type: app
|
48
|
+
|
49
|
+
- name: 'Apple HomePod'
|
50
|
+
regex: ^AppleCoreMedia\/.*HomePod
|
51
|
+
type: app
|
52
|
+
|
53
|
+
- name: 'Apple TV'
|
54
|
+
regex: ^AppleCoreMedia\/.*Apple TV
|
55
|
+
type: app
|
56
|
+
|
57
|
+
- name: 'Apple Podcasts'
|
58
|
+
regex: ^Podcasts\/|^AppleCoreMedia\/.*(iPad|iPhone|iPod)
|
59
|
+
type: app
|
60
|
+
|
61
|
+
- name: 'Apple Music'
|
62
|
+
regex: ^AppleCoreMedia\/.*Macintosh
|
63
|
+
type: app
|
64
|
+
|
65
|
+
- name: 'Apple News'
|
66
|
+
regex: AppleNews\/
|
67
|
+
type: app
|
68
|
+
|
69
|
+
- name: 'Apple iTMS'
|
70
|
+
regex: ^iTMS
|
71
|
+
type: bot
|
72
|
+
|
73
|
+
- name: 'Apple iTunes'
|
74
|
+
regex: ^iTunes\/
|
75
|
+
type: app
|
76
|
+
|
77
|
+
- name: 'Apple iTunes Store'
|
78
|
+
regex: ^itunesstored
|
79
|
+
type: bot
|
80
|
+
|
81
|
+
- name: 'BeyondPod'
|
82
|
+
regex: ^Mozilla.*BeyondPod
|
83
|
+
type: app
|
84
|
+
|
85
|
+
- name: 'Breaker'
|
86
|
+
regex: ^Breaker\/
|
87
|
+
type: app
|
88
|
+
|
89
|
+
- name: 'Bose'
|
90
|
+
regex: ^Bose\/
|
91
|
+
type: app
|
92
|
+
|
93
|
+
- name: 'Bullhorn'
|
94
|
+
regex: ^Bullhorn
|
95
|
+
type: app
|
96
|
+
|
97
|
+
- name: 'Castaway'
|
98
|
+
regex: ^Castaway\/
|
99
|
+
type: app
|
100
|
+
|
101
|
+
- name: 'Castro'
|
102
|
+
regex: ^Castro[\/|\s]
|
103
|
+
type: app
|
104
|
+
|
105
|
+
- name: 'CastBox'
|
106
|
+
regex: ^Cast[B|b]ox
|
107
|
+
type: app
|
108
|
+
|
109
|
+
- name: 'Chromecast'
|
110
|
+
regex: ^Mozilla.*CrKey
|
111
|
+
type: app
|
112
|
+
|
113
|
+
- name: 'Clementine'
|
114
|
+
regex: ^Clementine
|
115
|
+
type: app
|
116
|
+
|
117
|
+
- name: 'CloudPlayer'
|
118
|
+
regex: ^doubleTwist CloudPlayer
|
119
|
+
type: app
|
120
|
+
|
121
|
+
- name: 'Curl'
|
122
|
+
regex: curl|cURL
|
123
|
+
type: app
|
124
|
+
|
125
|
+
- name: 'Dalvik'
|
126
|
+
regex: ^Dalvik
|
127
|
+
type: app
|
128
|
+
|
129
|
+
- name: 'Deezer'
|
130
|
+
regex: ^Deezer\/
|
131
|
+
type: app
|
132
|
+
|
133
|
+
- name: 'DoggCatcher'
|
134
|
+
regex: DoggCatcher
|
135
|
+
type: app
|
136
|
+
|
137
|
+
- name: 'DotBot'
|
138
|
+
regex: DotBot\/
|
139
|
+
type: bot
|
140
|
+
|
141
|
+
- name: 'Downcast'
|
142
|
+
regex: Downcast[\/|\s]
|
143
|
+
type: app
|
144
|
+
|
145
|
+
- name: FacebookBot
|
146
|
+
regex: facebookexternalhit|Facebot
|
147
|
+
type: bot
|
148
|
+
|
149
|
+
- name: Facebook
|
150
|
+
regex: \[FBAN
|
151
|
+
type: app
|
152
|
+
|
153
|
+
|
154
|
+
- name: Fire OS
|
155
|
+
regex: ^Fire OS.+stagefright
|
156
|
+
type: app
|
157
|
+
|
158
|
+
- name: GNOME
|
159
|
+
regex: ^gvfs
|
160
|
+
type: bot
|
161
|
+
|
162
|
+
- name: GoldenPod
|
163
|
+
regex: ^GoldenPod\/
|
164
|
+
type: app
|
165
|
+
|
166
|
+
- name: Google Ads Bot
|
167
|
+
regex: AdsBot-Google
|
168
|
+
type: bot
|
169
|
+
|
170
|
+
- name: Google Bot
|
171
|
+
regex: Googlebot
|
172
|
+
type: bot
|
173
|
+
|
174
|
+
- name: Google Home
|
175
|
+
regex: ^Google-Speech-Action|GoogleChirp\/
|
176
|
+
type: app
|
177
|
+
|
178
|
+
- name: Google Podcasts Bot
|
179
|
+
regex: Google-Podcast\)
|
180
|
+
type: bot
|
181
|
+
|
182
|
+
- name: Google Search Appliance
|
183
|
+
regex: GSA\/
|
184
|
+
type: app
|
185
|
+
|
186
|
+
- name: gPodder
|
187
|
+
regex: ^gPodder\/|gpodder
|
188
|
+
type: app
|
189
|
+
|
190
|
+
- name: GStreamer
|
191
|
+
regex: GStreamer
|
192
|
+
type: app
|
193
|
+
|
194
|
+
- name: Himalaya
|
195
|
+
regex: Himalaya(\/|_test)
|
196
|
+
type: app
|
197
|
+
|
198
|
+
- name: HardCast
|
199
|
+
regex: ^HardCast
|
200
|
+
type: app
|
201
|
+
|
202
|
+
- name: HermesPod
|
203
|
+
regex: ^\+hermespod\.com
|
204
|
+
type: app
|
205
|
+
|
206
|
+
- name: iCatcher
|
207
|
+
regex: i[c|C]atcher[\!|\/]
|
208
|
+
type: app
|
209
|
+
|
210
|
+
- name: iHeartRadio
|
211
|
+
regex: ^iHeartRadio\/
|
212
|
+
type: app
|
213
|
+
|
214
|
+
- name: Juice Receiver
|
215
|
+
regex: ^Juice\/
|
216
|
+
type: app
|
217
|
+
|
218
|
+
- name: 'Laughable'
|
219
|
+
regex: ^Laughable
|
220
|
+
type: app
|
221
|
+
|
222
|
+
- name: 'LG Player'
|
223
|
+
regex: ^(LG-|LM-|Player).+LG Player.+Android.*\(stagefright alternative\)($|.Dynamo.*)
|
224
|
+
type: app
|
225
|
+
|
226
|
+
- name: Listen5
|
227
|
+
regex: ^Listen5
|
228
|
+
type: app
|
229
|
+
|
230
|
+
- name: Livelap Bot
|
231
|
+
regex: LivelapBot
|
232
|
+
type: bot
|
233
|
+
|
234
|
+
- name: Luminary
|
235
|
+
regex: ^Luminary\/
|
236
|
+
type: app
|
237
|
+
|
238
|
+
- name: Majestic-12 Bot
|
239
|
+
regex: MJ12bot\/
|
240
|
+
type: bot
|
241
|
+
|
242
|
+
- name: Majelan
|
243
|
+
regex: MajelanApp
|
244
|
+
type: app
|
245
|
+
|
246
|
+
- name: Mechanize
|
247
|
+
regex: Mechanize\/
|
248
|
+
type: bot
|
249
|
+
|
250
|
+
- name: MediaMonkey
|
251
|
+
regex: ^MediaMonkey
|
252
|
+
type: app
|
253
|
+
|
254
|
+
- name: MyTuner
|
255
|
+
regex: ^my[T|t]uner
|
256
|
+
type: app
|
257
|
+
|
258
|
+
- name: OkDownload
|
259
|
+
regex: OkDownload\/
|
260
|
+
type: app
|
261
|
+
|
262
|
+
- name: OkHTTP
|
263
|
+
regex: okhttp\/
|
264
|
+
type: app
|
265
|
+
|
266
|
+
- name: Overcast
|
267
|
+
regex: Overcast\/
|
268
|
+
type: app
|
269
|
+
|
270
|
+
- name: Pandora
|
271
|
+
regex: Pandora\/
|
272
|
+
type: app
|
273
|
+
|
274
|
+
- name: Pandora RSS Crawler
|
275
|
+
regex: PandoraRSSCrawler\/
|
276
|
+
type: bot
|
277
|
+
|
278
|
+
- name: Perl Script
|
279
|
+
regex: libwww-perl
|
280
|
+
type: bot
|
281
|
+
|
282
|
+
- name: Player FM
|
283
|
+
regex: ^Player FM|Player FM$
|
284
|
+
type: app
|
285
|
+
|
286
|
+
- name: Podbean
|
287
|
+
regex: ^Podbean
|
288
|
+
type: app
|
289
|
+
|
290
|
+
- name: Podcoin
|
291
|
+
regex: ^Podcoin
|
292
|
+
type: app
|
293
|
+
|
294
|
+
- name: Podkicker
|
295
|
+
regex: ^Podkicker( Pro)?\/
|
296
|
+
type: app
|
297
|
+
|
298
|
+
- name: PodCruncher
|
299
|
+
regex: PodCruncher
|
300
|
+
type: app
|
301
|
+
|
302
|
+
- name: Podcast Addict
|
303
|
+
regex: Podcast Addict|PodcastAddict
|
304
|
+
type: app
|
305
|
+
|
306
|
+
- name: Podcast Republic
|
307
|
+
regex: PodcastRepublic
|
308
|
+
type: app
|
309
|
+
|
310
|
+
- name: Podtrapper
|
311
|
+
regex: ^PodTrapper
|
312
|
+
type: app
|
313
|
+
|
314
|
+
- name: 'podCloud'
|
315
|
+
regex: ^MediaAnalyzer[\/| ]podCloud[\/| ]
|
316
|
+
type: bot
|
317
|
+
|
318
|
+
- name: Pocket Casts
|
319
|
+
regex: Pocket Casts|PocketCasts
|
320
|
+
type: app
|
321
|
+
|
322
|
+
- name: ProCast
|
323
|
+
regex: ^Pro[C|c]ast
|
324
|
+
type: app
|
325
|
+
|
326
|
+
- name: Python Requests
|
327
|
+
regex: ^python-requests
|
328
|
+
type: bot
|
329
|
+
|
330
|
+
- name: RadioPublic
|
331
|
+
regex: ^RadioPublic(Draper)?
|
332
|
+
type: app
|
333
|
+
|
334
|
+
- name: Request.js
|
335
|
+
regex: request.js
|
336
|
+
type: app
|
337
|
+
|
338
|
+
- name: Roku
|
339
|
+
regex: ^Roku\/DVP
|
340
|
+
type: app
|
341
|
+
|
342
|
+
- name: RSSRadio
|
343
|
+
regex: ^RSSRadio
|
344
|
+
type: app
|
345
|
+
|
346
|
+
- name: Ruby
|
347
|
+
regex: ^Ruby
|
348
|
+
type: bot
|
349
|
+
|
350
|
+
- name: ServeStream
|
351
|
+
regex: ^ServeStream
|
352
|
+
type: app
|
353
|
+
|
354
|
+
- name: Sodes
|
355
|
+
regex: ^Sodes
|
356
|
+
type: app
|
357
|
+
|
358
|
+
- name: Sonos
|
359
|
+
regex: ^Sonos|Linux.*Sonos\/
|
360
|
+
type: app
|
361
|
+
|
362
|
+
- name: Spotify
|
363
|
+
regex: ^Spotify\/
|
364
|
+
type: app
|
365
|
+
|
366
|
+
- name: Spreaker
|
367
|
+
regex: ^Spreaker|Spreaker\/\d*.\d*$
|
368
|
+
type: app
|
369
|
+
|
370
|
+
- name: Stitcher
|
371
|
+
regex: ^Stitcher\/|\/Stitcher
|
372
|
+
type: app
|
373
|
+
|
374
|
+
- name: StitcherBot
|
375
|
+
regex: ^StitcherBot
|
376
|
+
type: bot
|
377
|
+
|
378
|
+
- name: Subcast
|
379
|
+
regex: ^Subcast
|
380
|
+
type: app
|
381
|
+
|
382
|
+
- name: Swoot
|
383
|
+
regex: ^Swoot(\/| A)
|
384
|
+
type: app
|
385
|
+
|
386
|
+
- name: Storiyoh
|
387
|
+
regex: ^Storiyoh\/
|
388
|
+
type: app
|
389
|
+
|
390
|
+
- name: TED
|
391
|
+
regex: ^TED
|
392
|
+
type: app
|
393
|
+
|
394
|
+
- name: Trackable
|
395
|
+
regex: ^Trackable\/
|
396
|
+
type: bot
|
397
|
+
|
398
|
+
- name: TuneIn Radio
|
399
|
+
regex: ^TuneIn|TuneIn\/\d
|
400
|
+
type: app
|
401
|
+
|
402
|
+
- name: Twitter
|
403
|
+
regex: Twitter(\/|Android| for)
|
404
|
+
type: app
|
405
|
+
|
406
|
+
- name: Twitter Bot
|
407
|
+
regex: ^Twitterbot
|
408
|
+
type: bot
|
409
|
+
|
410
|
+
- name: Typhoeus
|
411
|
+
regex: ^Typhoeus
|
412
|
+
type: bot
|
413
|
+
|
414
|
+
- name: uTorrent
|
415
|
+
regex: ^uTorrent|BTWebClient
|
416
|
+
type: app
|
417
|
+
|
418
|
+
- name: Victor Reader Stream
|
419
|
+
regex: ^VictorReader
|
420
|
+
type: app
|
421
|
+
|
422
|
+
- name: Wget
|
423
|
+
regex: ^Wget
|
424
|
+
type: bot
|
425
|
+
|
426
|
+
- name: Winamp
|
427
|
+
regex: Winamp
|
428
|
+
type: bot
|
429
|
+
|
430
|
+
- name: Windows Media Player
|
431
|
+
regex: ^(Windows\-Media\-Player\/|NSPlayer|WMPlayer)
|
432
|
+
type: app
|
433
|
+
|
434
|
+
- name: Zune
|
435
|
+
regex: ^Zune
|
436
|
+
type: app
|
437
|
+
|
438
|
+
- name: WordPress
|
439
|
+
regex: WordPress
|
440
|
+
type: bot
|
441
|
+
|
442
|
+
- name: Yapa
|
443
|
+
regex: ^yapa\/
|
444
|
+
type: app
|
445
|
+
|
446
|
+
- name: Yandex Bot
|
447
|
+
regex: YandexBot
|
448
|
+
type: bot
|
449
|
+
|
450
|
+
- name: Datagnion Bot
|
451
|
+
regex: datagnionbot
|
452
|
+
type: bot
|
453
|
+
|
454
|
+
- name: SEMrush Bot
|
455
|
+
regex: SemrushBot
|
456
|
+
type: bot
|
457
|
+
|
458
|
+
- name: Go
|
459
|
+
regex: ^Go-http-client
|
460
|
+
type: bot
|
461
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'YAML'
|
2
|
+
require 'user_agent'
|
3
|
+
|
4
|
+
class PodcastAgent
|
5
|
+
attr_reader :name, :type, :browser, :platform
|
6
|
+
|
7
|
+
def initialize(name:, type:, user_agent:)
|
8
|
+
@name = name
|
9
|
+
@type = type
|
10
|
+
@user_agent = user_agent
|
11
|
+
@browser = user_agent.browser
|
12
|
+
@platform = user_agent.platform
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.find_by(user_agent_string:)
|
16
|
+
entry = database.find do |attrs|
|
17
|
+
user_agent_string =~ Regexp.new(attrs['regex'])
|
18
|
+
end
|
19
|
+
new(name: entry['name'], type: entry['type'], user_agent: UserAgent.parse(user_agent_string)) if entry
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.database
|
23
|
+
@database ||= YAML.load_file('lib/data/podcast_agents.yml')
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'podcast-agent'
|
3
|
+
s.version = '0.0.2'
|
4
|
+
s.date = '2019-08-21'
|
5
|
+
s.summary = "A GEM to identify podcast agent information"
|
6
|
+
s.description = "A GEM to identify podcast agent information"
|
7
|
+
s.authors = ["Tom Rossi"]
|
8
|
+
s.email = 'tom@higherpixels.com'
|
9
|
+
s.homepage = 'https://github.com/buzzsprout/podcast-agent'
|
10
|
+
s.license = 'MIT'
|
11
|
+
|
12
|
+
s.required_ruby_version = '>= 2.4.0'
|
13
|
+
|
14
|
+
s.add_dependency 'activesupport', '>= 5.2.0'
|
15
|
+
|
16
|
+
s.add_development_dependency 'bundler', '~> 1.15'
|
17
|
+
|
18
|
+
s.files = `git ls-files`.split("\n")
|
19
|
+
s.test_files = `git ls-files -- test/*`.split("\n")
|
20
|
+
end
|
@@ -0,0 +1,573 @@
|
|
1
|
+
'Acast':
|
2
|
+
- Acast/2.0.1 (phone; android 9; samsung SM-G390F)
|
3
|
+
- Acast/2.0.0 (Phone; iOS 12.4.1; iPhone10,4)
|
4
|
+
|
5
|
+
'Alexa Enabled Device':
|
6
|
+
- AlexaMediaPlayer/5.5.5-9010 (Linux;Android 5.1.1) ExoPlayerLib/1.5.0
|
7
|
+
- AlexaMediaPlayer/1.0.2253.0_1665410 (Linux;Android 5.1.1) ExoPlayerLib/1.5.9
|
8
|
+
- AlexaMediaPlayer/2.1.1878.0 (Linux;Android 5.1.1) ExoPlayerLib/1.5.9
|
9
|
+
|
10
|
+
'All You Can Books':
|
11
|
+
- AllYouCanBooks/510 CFNetwork/811.5.4 Darwin/16.7.0
|
12
|
+
- Mozilla/5.0 (Linux; Android 9; CLT-L29 Build/HUAWEICLT-L29; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/75.0.3770.101 Mobile Safari/537.36 AllYouCanBooksAppAndroid
|
13
|
+
- Mozilla/5.0 (Linux; Android 9; SM-G950U Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/75.0.3770.89 Mobile Safari/537.36 AllYouCanBooksAppAndroid
|
14
|
+
- Mozilla/5.0 (iPhone; CPU iPhone OS 10_1_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Mobile/14B100 AllYouCanBooksApp
|
15
|
+
|
16
|
+
'Ahrefs':
|
17
|
+
- Mozilla/5.0 (compatible; AhrefsBot/6.1; +http://ahrefs.com/robot/)
|
18
|
+
|
19
|
+
'AhaRadio':
|
20
|
+
- AhaRadio2/8.12.3 CFNetwork/976 Darwin/18.2.0
|
21
|
+
- AhaRadio2/5.4 CFNetwork/758.0.2 Darwin/15.0.0
|
22
|
+
|
23
|
+
'Amazon Alexa Flash Briefing':
|
24
|
+
- AmazonNewsContentService
|
25
|
+
|
26
|
+
'Amazon Echo':
|
27
|
+
- Echo/1.0(MRM)
|
28
|
+
- Echo/1.0(APNG)
|
29
|
+
|
30
|
+
'Android Download Manager':
|
31
|
+
- AndroidDownloadManager/4.3 (Linux; U; Android 4.3; SGH-M919 Build/JSS15J)
|
32
|
+
- AndroidDownloadManager/6.0 (Linux; U; Android 6.0; Nexus 5 Build/MRA58K)
|
33
|
+
|
34
|
+
'Antenna Pod':
|
35
|
+
- AntennaPod/1.7.2b Dynamo/1.0
|
36
|
+
- AntennaPod/1.6.6-RC2
|
37
|
+
- de.danoeh.antennapod/1.7.2b (Linux;Android 8.1.0) ExoPlayerLib/2.9.3
|
38
|
+
- antenna/19 CFNetwork/711.1.16 Darwin/14.0.0
|
39
|
+
|
40
|
+
'Apache HTTP Client':
|
41
|
+
- Apache-HttpClient/4.5.3-SNAPSHOT (Java/1.8.0_73)
|
42
|
+
- Apache-HttpClient/4.5.6 (Java/1.8.0_222)
|
43
|
+
|
44
|
+
'APK downloader':
|
45
|
+
- APKXDL (Linux; U; Android 4.4.4;nb_no; trlte/KTU84P) Downloader
|
46
|
+
- APKXDL (Linux; U; Android 4.4.4;en_au; C6903/14.4.A.0.108) Downloader
|
47
|
+
|
48
|
+
'Apple Watch':
|
49
|
+
- AppleCoreMedia/1.0.0.16U113 (Apple Watch; U; CPU OS 5_2_1 like Mac OS X; pl_pl)
|
50
|
+
- AppleCoreMedia/1.0.0.17R5556d (Apple Watch; U; CPU OS 6_0 like Mac OS X; de_at)
|
51
|
+
|
52
|
+
'Apple HomePod':
|
53
|
+
- AppleCoreMedia/1.0.0.15C4092b (HomePod; U; CPU OS 11_2 like Mac OS X; de_de)
|
54
|
+
- AppleCoreMedia/1.0.0.16G100 (HomePod; U; CPU OS 12_4_1 like Mac OS X; en_us)
|
55
|
+
|
56
|
+
'Apple Podcasts':
|
57
|
+
- Podcasts/1410.25 CFNetwork/1107 Darwin/19.0.0
|
58
|
+
- Podcasts/1400.227 CFNetwork/1098.7 Darwin/19.0.0 Dynamo/1.0
|
59
|
+
- Podcasts/1.0.0 iPhone/12.4 hw/iPhone11_2
|
60
|
+
- Podcasts/1.2.3
|
61
|
+
- AppleCoreMedia/1.0.0.17A5821e (iPhone; U; CPU OS 13_1 like Mac OS X; tr_tr)
|
62
|
+
- AppleCoreMedia/1.0.0.16G102 (iPad; U; CPU OS 12_4_1 like Mac OS X; sk_sk)
|
63
|
+
- AppleCoreMedia/1.0.0.16G102 (iPod touch; U; CPU OS 12_4_1 like Mac OS X; en_ca)
|
64
|
+
|
65
|
+
'Apple Music':
|
66
|
+
- AppleCoreMedia/1.0.0.16A323 (Macintosh; U; Intel Mac OS X 10_12; en_au)
|
67
|
+
- AppleCoreMedia/1.0.0.19A536g (Macintosh; U; Intel Mac OS X 10_15; fr_fr)
|
68
|
+
- AppleCoreMedia/1.0.0.18F132 (Macintosh; U; Intel Mac OS X 10_14_5; en_gb) Dynamo/1.0
|
69
|
+
|
70
|
+
'Apple News':
|
71
|
+
- Mozilla/5.0 (iPad; CPU OS 12_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) AppleNews/2166 Version/4.4
|
72
|
+
- AppleNews/1470 Version/3.3
|
73
|
+
- Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) AppleNews/2132 Version/4.3
|
74
|
+
|
75
|
+
'Apple iTunes':
|
76
|
+
- iTunes/12.9.5 (Windows; Microsoft Windows 8 x64 (Build 9200); x64) AppleWebKit/7607.2006.2001.1
|
77
|
+
- iTunes/4.7.1 (Linux; N; Debian; armv7l-linux; FR; utf8) SqueezeCenter, Squeezebox Server, Logitech Media Server/7.9.1/1512734075
|
78
|
+
- iTunes/10.4 (Macintosh; Intel Mac OS X 10.6.8) AppleWebKit/534.58.2
|
79
|
+
|
80
|
+
'Apple TV':
|
81
|
+
- AppleCoreMedia/1.0.0.15L576 (Apple TV; U; CPU OS 11_4 like Mac OS X; en_us)
|
82
|
+
- AppleCoreMedia/1.0.0.15M73 (Apple TV; U; CPU OS 11_4_1 like Mac OS X; id)
|
83
|
+
|
84
|
+
'Apple iTMS':
|
85
|
+
- iTMS
|
86
|
+
- iTMS Dynamo/1.0
|
87
|
+
|
88
|
+
'Apple iTunes Store':
|
89
|
+
- itunesstored (unknown version) CFNetwork/548.1.4 Darwin/11.0.0
|
90
|
+
- itunesstored/1.0 iOS/7.1.1 model/iPhone5,3 build/11D201 (dt:97)
|
91
|
+
|
92
|
+
'BeyondPod':
|
93
|
+
- Mozilla/5.0 (Linux; U; en-us; BeyondPod)
|
94
|
+
- 'Mozilla/5.0 (Linux; U; en-us; BeyondPod) AppEngine-Google; (+http://code.google.com/appengine; appid: s~turbulencesywir24)'
|
95
|
+
- Mozilla/5.0 (Linux; U; en-us; BeyondPod 4) Dynamo/1.0
|
96
|
+
|
97
|
+
'Bose':
|
98
|
+
- Bose/7.22.0 Dynamo/1.0
|
99
|
+
|
100
|
+
'Bullhorn':
|
101
|
+
- Bullhorn
|
102
|
+
- Bullhorn/4 CFNetwork/978.0.7 Darwin/18.6.0
|
103
|
+
- Bullhorn/1.0 (+http://bullhorn.fm/) Dynamo/1.0
|
104
|
+
- Bullhorn (https://bullhorn.fm)
|
105
|
+
|
106
|
+
'Breaker':
|
107
|
+
- Breaker/840 CFNetwork/948.2.1 Darwin/18.0.0
|
108
|
+
- Breaker/0.7.2 (907)
|
109
|
+
- Breaker/Android/0.1.0 PRIVATE BETA (16)
|
110
|
+
- Breaker/iOS/0.8.1 (1076)
|
111
|
+
|
112
|
+
'Castaway':
|
113
|
+
- Castaway/8 CFNetwork/1098.7 Darwin/19.0.0
|
114
|
+
- Castaway/8 CFNetwork/1085.4 Darwin/19.0.0
|
115
|
+
|
116
|
+
'Castro':
|
117
|
+
- Castro/1024 CFNetwork/955.1.2 Darwin/18.0.0
|
118
|
+
- Castro Episode Download (http://supertop.co/castro)
|
119
|
+
- Castro 2 Episode Download
|
120
|
+
|
121
|
+
'CastBox':
|
122
|
+
- CastBox/0.2.0 python-requests/2.20.1
|
123
|
+
- CastBox/7.69.20-190815047 (Linux;Android 4.2.2) ExoPlayerLib/2.9.1
|
124
|
+
- CastBox/7.69.20-190815047 (Linux;Android 4.4.4) ExoPlayerLib/2.9.1/7.69.20-190815047 (Linux;Android 4.4.4) ExoPlayerLib/2.9.1
|
125
|
+
- CastBox/8.4.1 (fm.castbox.audiobook.radio.podcast; build:1; iOS 10.0.1)
|
126
|
+
- CastBox/8.4.1 (fm.castbox.audiobook.radio.podcast; build:1; iOS 11.4.0) Dynamo/1.0
|
127
|
+
- Castbox/4.10.1 (fm.castbox.audiobook.radio.podcast; build:1; iOS 12.2.0) Alamofire/4.7.1
|
128
|
+
- Castbox/4.17 (fm.castbox.audiobook.radio.podcast; build:3; iOS 12.3.1) Alamofire/4.7.3
|
129
|
+
|
130
|
+
'Chromecast':
|
131
|
+
- Mozilla/5.0 (Linux; Android 5.0; Build/LRX21V) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.90 Safari/537.36 CrKey/1.15.38401
|
132
|
+
- Mozilla/5.0 (CrKey armv7l 1.8.17977) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.0 Safari/537.36
|
133
|
+
- Mozilla/5.0 (X11; Linux aarch64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.15 Safari/537.36 CrKey/1.39.147275
|
134
|
+
- Mozilla/5.0 (Unknown; Linux armv7l) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.0 Safari/537.36 CrKey
|
135
|
+
|
136
|
+
'Clementine':
|
137
|
+
- Clementine 1.3.1-702-g3b76fa627 Clementine 1.3.1-702-g3b76fa627 Clementine 1.3.1-702-g3b76fa627
|
138
|
+
- Clementine 1.3.1 Clementine 1.3.1 Clementine 1.3.1 Clementine 1.3.1
|
139
|
+
- Clementine 1.3.1-702-g3b76fa627
|
140
|
+
- Clementine 1.2.1
|
141
|
+
|
142
|
+
'CloudPlayer':
|
143
|
+
- doubleTwist CloudPlayer Dynamo/1.0
|
144
|
+
- doubleTwist CloudPlayer BMID/E678F730EA
|
145
|
+
- doubleTwist CloudPlayer
|
146
|
+
|
147
|
+
'Curl':
|
148
|
+
- curl/7.39.0
|
149
|
+
- libcurl/7.65.1
|
150
|
+
- PycURL/7.43.0 libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3
|
151
|
+
- GuzzleHttp/6.1.0 curl/7.50.1 PHP/7.0.13-0ubuntu0.16.10.1
|
152
|
+
|
153
|
+
'Dalvik':
|
154
|
+
- Dalvik/2.1.0 (Linux; U; Android 8.0.0; G8341 Build/47.1.A.2.281)
|
155
|
+
- Dalvik (Linux; U; Android 4.1.1;aries/JRO03L)
|
156
|
+
- Dalvik/1.6.0 (Linux; U; Android 4.3; Galaxy Nexus Build/JWR66Y)
|
157
|
+
|
158
|
+
'Deezer':
|
159
|
+
- Deezer/5.7.0.7 CFNetwork/758.1.6 Darwin/15.0.0
|
160
|
+
- Deezer/7.15.0.4 CFNetwork/1098.7 Darwin/19.0.0
|
161
|
+
- Deezer/5.4.18.30 (Android; 7.0; Mobile; br) samsung SM-G950F
|
162
|
+
- Deezer/5.4.18.30 (Android; 7.0; Mobile; us) samsung SM-G950F
|
163
|
+
- Deezer/6.1.8.54 (Android; 8.0.0; Mobile; br) motorola moto g(6)
|
164
|
+
|
165
|
+
'DoggCatcher':
|
166
|
+
- Mozilla/5.0 (Linux; U; Windows NT 6.1; en-us; dream) DoggCatcher Dynamo/1.0
|
167
|
+
- Mozilla/5.0 (Linux; U; Windows NT 6.1; en-us; dream) DoggCatcher
|
168
|
+
|
169
|
+
'DotBot':
|
170
|
+
- Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)
|
171
|
+
- Mozilla/5.0 (compatible; DotBot/1.1; http://www.dotnetdotcom.org/, crawler@dotnetdotcom.org)
|
172
|
+
|
173
|
+
'Downcast':
|
174
|
+
- Downcast/2.9.12 (Mac OS X Version 10.12.6 (Build 16G1036))
|
175
|
+
|
176
|
+
'Facebook':
|
177
|
+
- Mozilla/5.0 (iPad; CPU OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 [FBAN/FBIOS;FBDV/iPad6,12;FBMD/iPad;FBSN/iOS;FBSV/12.3.1;FBSS/2;FBID/tablet;FBLC/en_GB;FBOP/5;FBCR/EE]
|
178
|
+
- Mozilla/5.0 (iPhone; CPU iPhone OS 11_0_1 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Mobile/15A402 [FBAN/FBIOS;FBAV/188.0.0.44.85;FBBV/123253203;FBDV/iPhone7,2;FBMD/iPhone;FBSN/iOS;FBSV/11.0.1;FBSS/2;FBCR/3DK;FBID/phone;FBLC/da_DK;FBOP/5;FBRV
|
179
|
+
|
180
|
+
'FacebookBot':
|
181
|
+
- facebookexternalhit
|
182
|
+
- facebookexternalhit/1.1;line-poker/1.0
|
183
|
+
- facebookexternalhit/1.1 (compatible; Blueno/1.0; +http://naver.me/scrap)
|
184
|
+
- Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/601.2.4 (KHTML, like Gecko) Version/9.0.1 Safari/601.2.4 facebookexternalhit/1.1 Facebot Twitterbot/1.0
|
185
|
+
- Facebot
|
186
|
+
|
187
|
+
'Fire OS':
|
188
|
+
- Fire OS/5.2.7.1 stagefright/1.2 (Linux;Android 5.1.1)
|
189
|
+
- Fire OS/5.3.6.8 stagefright/1.2 (Linux;Android 5.1.1) Dynamo/1.0
|
190
|
+
- Fire OS/6.0 stagefright/1.2 (Linux;Android 7.1.2)
|
191
|
+
|
192
|
+
'GNOME':
|
193
|
+
- gvfs/1.38.3
|
194
|
+
- gvfs/1.40.1
|
195
|
+
- gvfs/1.6.1
|
196
|
+
|
197
|
+
'GoldenPod':
|
198
|
+
- GoldenPod/0.8.4 (GNU/Linux; podcatcher; Using LWP) libwwwperl
|
199
|
+
|
200
|
+
'Google Ads Bot':
|
201
|
+
- AdsBot-Google (+http://www.google.com/adsbot.html) Dynamo/1.0
|
202
|
+
- Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 (compatible; AdsBot-Google-Mobile; +http://www.google.com/mobile/adsbot.html) Dynamo/1.0
|
203
|
+
- Mozilla/5.0 (Linux; Android 5.0; SM-G920A) AppleWebKit (KHTML, like Gecko) Chrome Mobile Safari (compatible; AdsBot-Google-Mobile; +http://www.google.com/mobile/adsbot.html)
|
204
|
+
|
205
|
+
'Google Bot':
|
206
|
+
- Googlebot-Video/1.0
|
207
|
+
- Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
|
208
|
+
- Googlebot-Image/1.0
|
209
|
+
- Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; Googlebot/2.1; +http://www.google.com/bot.html)
|
210
|
+
- Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
|
211
|
+
|
212
|
+
'Google Home':
|
213
|
+
- Libassistant/1.0 GoogleChirp/1.0.1 (Linux; Android/5.0) GOOG/7 AppleWebKit/534.30 (KHTML, like Gecko)
|
214
|
+
- Google-Speech-Actions
|
215
|
+
|
216
|
+
'Google Podcasts Bot':
|
217
|
+
- Mozilla/5.0 (compatible; Google-Podcast)
|
218
|
+
- Mozilla/5.0 (compatible; Google-Podcast) Dynamo/1.0
|
219
|
+
|
220
|
+
'Google Search Appliance':
|
221
|
+
- Mozilla/5.0 (iPad; CPU OS 7_0_4 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) GSA/3.2.1.25875 Mobile/11B554a Safari/8536.25
|
222
|
+
- Mozilla/5.0 (Linux; Android 6.0.1; Nexus 6P Build/MTC19T; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/50.0.2661.86 Mobile Safari/537.36 GSA/5.13.31.21.arm64
|
223
|
+
|
224
|
+
'gPodder':
|
225
|
+
- mygpo-feedservice +http://feeds.gpodder.net/
|
226
|
+
- gPodder/3.5.2 (+http://gpodder.org/)
|
227
|
+
- Detlef/1 (https://github.com/gpodder/detlef/
|
228
|
+
- gPodder/4.4.0 (+http://gpodder.org/)
|
229
|
+
|
230
|
+
'GStreamer':
|
231
|
+
- GStreamer souphttpsrc libsoup/2.38.1
|
232
|
+
- amarok/2.8.0 (Phonon/4.7.80; Phonon-GStreamer/4.7.80)
|
233
|
+
- GStreamer neonhttpsrc
|
234
|
+
- yarock/1.1.6 (Phonon/4.7.1; Phonon-GStreamer/4.7.2)
|
235
|
+
|
236
|
+
'HardCast':
|
237
|
+
- HardCast/11 CFNetwork/978.0.7 Darwin/18.7.0
|
238
|
+
- HardCast/11 CFNetwork/901.1 Darwin/17.6.0
|
239
|
+
|
240
|
+
'HermesPod':
|
241
|
+
- +hermespod.com/v1.5.x
|
242
|
+
|
243
|
+
'Himalaya':
|
244
|
+
- Himalaya/2.2.7 Android/25 (A577VL)
|
245
|
+
- Himalaya/1558 CFNetwork/974.2.1 Darwin/18.0.0
|
246
|
+
- Himalaya/1460 CFNetwork/976 Darwin/18.2.0
|
247
|
+
- Himalaya/2.2.10 (iPhone; iOS 12.0; Scale/2.00; CFNetwork; iPhone7,2)
|
248
|
+
- Himalaya_test/55 CFNetwork/894 Darwin/17.4.0
|
249
|
+
|
250
|
+
'iCatcher':
|
251
|
+
- icatcher/4506 CFNetwork/609.1.4 Darwin/13.0.0
|
252
|
+
- iCatcher! 1.7.2 (iPad; iPhone OS 5.1.1; en_GB)
|
253
|
+
- iCatcher! podcast app/2.2.4
|
254
|
+
- iCatcher!/4.6.6 (iPhone; iOS 11.2.5; Scale/2.0)
|
255
|
+
- iTunes (iCatcher!/2.6.3)
|
256
|
+
- iTunes (iCatcher!/3.0.6)
|
257
|
+
|
258
|
+
'iHeartRadio':
|
259
|
+
- iHeartRadio/7.3.3 (Android Sdk 21)
|
260
|
+
- iHeartRadio/8.0.0 (Android 7.0; XT1650 Build/NCL25.86-11.5)
|
261
|
+
- iHeartRadio/8.7.0 (iPhone; iOS 11.0.3; iPhone6,1)
|
262
|
+
- iHeartRadio/8.9.1 (iPad; iOS 11.2.6; iPad6,7)
|
263
|
+
|
264
|
+
'Juice Receiver':
|
265
|
+
- Juice/2.2 (Darwin) +http://juicereceiver.sf.net/
|
266
|
+
- Juice/2.2 (Windows) +http://juicereceiver.sf.net/
|
267
|
+
|
268
|
+
'Laughable':
|
269
|
+
- Laughable/2.1.6.1 CFNetwork/808.1.4 Darwin/16.1.0
|
270
|
+
- Laughable iOS/3.0.1 (com.bywayEndeavors.Laughable; build:3.0.1.0; iOS 12.1.3) Alamofire/4.7.3
|
271
|
+
- Laughable/2.1.6.1 CFNetwork/808.3 Darwin/16.3.0
|
272
|
+
- Laughable/2 CFNetwork/811.5.4 Darwin/16.6.0
|
273
|
+
|
274
|
+
'Listen5':
|
275
|
+
- Listen5 1.1 build 36 (iPhone; iOS 12.1.2; en_US)
|
276
|
+
- Listen5 1.2 build 36 (iPhone; iOS 12.3.1; en_US)
|
277
|
+
|
278
|
+
'Livelap Bot':
|
279
|
+
- LivelapBot/0.2 (http://site.livelap.com/crawler)
|
280
|
+
|
281
|
+
'LG Player':
|
282
|
+
- LG-H930/V30b Player/LG Player 1.0 for Android 9 (stagefright alternative)
|
283
|
+
- LM-X410.F/V10o Player/LG Player 1.0 for Android 7.1.2 (stagefright alternative)
|
284
|
+
- Player/LG Player 1.0 for Android 6.0.1 (stagefright alternative) Dynamo/1.0
|
285
|
+
|
286
|
+
'Luminary':
|
287
|
+
- Luminary/0.0.244 build 3915/iOS 13.0
|
288
|
+
- Luminary/1.0.24 build 92/iOS 12.3.1 Dynamo/1.0
|
289
|
+
- Luminary/1.0.10 build 1436/Android SDK 28
|
290
|
+
- Luminary/1.0.10 build 66/Android SDK 28 Dynamo/1.0
|
291
|
+
|
292
|
+
'Majestic-12 Bot':
|
293
|
+
- Mozilla/5.0 (compatible; MJ12bot/v1.4.3; http://www.majestic12.co.uk/bot.php?+)
|
294
|
+
- Mozilla/5.0 (compatible; MJ12bot/v1.4.5; http://www.majestic12.co.uk/bot.php?+)
|
295
|
+
- Mozilla/5.0 (compatible; MJ12bot/v1.4.4; http://www.majestic12.co.uk/bot.php?+)
|
296
|
+
|
297
|
+
'Majelan':
|
298
|
+
- MajelanApp/8 CFNetwork/975.0.3 Darwin/17.7.0
|
299
|
+
- MajelanApp 1.0 build 8 (iPhone; iOS 12.1; en_US)
|
300
|
+
- MajelanApp/70 CFNetwork/978.0.7 Darwin/18.6.0
|
301
|
+
- MajelanApp/914 CFNetwork/978.0.7 Darwin/18.7.0
|
302
|
+
|
303
|
+
'MediaMonkey':
|
304
|
+
- MediaMonkey
|
305
|
+
- MediaMonkey 4.0.1.1461
|
306
|
+
- MediaMonkey5 5.0.0.2191
|
307
|
+
|
308
|
+
'Mechanize':
|
309
|
+
- Mechanize/2.7.6 Ruby/2.6.2p47 (http://github.com/sparklemotion/mechanize/) Dynamo/1.0
|
310
|
+
- Mechanize/2.7.6 Ruby/2.5.3p105 (http://github.com/sparklemotion/mechanize/)
|
311
|
+
- Mozilla/5.0 (compatible; Mechanize/2.7.4)
|
312
|
+
- WWW-Mechanize/1.72
|
313
|
+
|
314
|
+
'MyTuner':
|
315
|
+
- myTuner Radio app/11 CFNetwork/978.0.7 Darwin/18.7.0
|
316
|
+
- myTuner%20Radio%20app/11 CFNetwork/978.0.7 Darwin/18.7.0
|
317
|
+
- mytuner_podcasts_androidplayer/1.0.0 (Linux;Android 6.0) ExoPlayerLib/2.8.4
|
318
|
+
- mytuner_podcasts_androidplayer/1.0.2 (Linux;Android 6.0.1) ExoPlayerLib/2.8.4
|
319
|
+
|
320
|
+
'OkDownload':
|
321
|
+
- OkDownload/1.0.4-SNAPSHOT
|
322
|
+
- OkDownload/1.0.3
|
323
|
+
|
324
|
+
'OkHTTP':
|
325
|
+
- okhttp/2.7.0
|
326
|
+
- Android 9 / Wire 3.30.764 / HttpLibrary okhttp/3.9.0
|
327
|
+
- okhttp/3.6.0 Dynamo/1.0
|
328
|
+
|
329
|
+
'Overcast':
|
330
|
+
- Overcast/792 CFNetwork/1098.7 Darwin/19.0.0
|
331
|
+
- Overcast/1.0 (+http://overcast.fm/; iOS podcast app)
|
332
|
+
|
333
|
+
'Pandora':
|
334
|
+
- Pandora/1908.1 Android/9 ali (ExoPlayerLib1.5.14.1)
|
335
|
+
- Mozilla/5.0 (iPad; CPU OS 12_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Pandora/1908.1
|
336
|
+
- Mozilla/5.0 (iPad; CPU OS 12_1_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16D57 Pandora/1908.1
|
337
|
+
|
338
|
+
'Pandora RSS Crawler':
|
339
|
+
- PandoraRSSCrawler/1.0 (podcastpartnerships@pandora.com)
|
340
|
+
|
341
|
+
'Perl Script':
|
342
|
+
- LWP::Simple/6.34 libwww-perl/6.34
|
343
|
+
- libwww-perl/6.15
|
344
|
+
- libwww-perl/6.04
|
345
|
+
|
346
|
+
'Player FM':
|
347
|
+
- Player FM/349 CFNetwork/894 Darwin/17.4.0
|
348
|
+
- Player FM/348 CFNetwork/978.0.7 Darwin/18.5.0 Dynamo/1.0
|
349
|
+
- Player/LG Player 1.0 for Android(stagefright alternative), Player FM
|
350
|
+
- stagefright/1.2 (Linux;Android NexPlayer LG-L39CV10a), Player FM
|
351
|
+
|
352
|
+
'Podkicker':
|
353
|
+
- Podkicker/2.2.9 Dynamo/1.0
|
354
|
+
- Podkicker Pro/3.0.5
|
355
|
+
- Podkicker Pro/1.9.4
|
356
|
+
- Podkicker/1.1.0 Android/2.3.7
|
357
|
+
|
358
|
+
'Pocket Casts':
|
359
|
+
- Shifty Jelly Pocket Casts, iOS v4.2
|
360
|
+
- Player/LG Player 1.0 for Android 4.4.2 (stagefright alternative), Pocket Casts
|
361
|
+
- 'Pocket Casts AppEngine-Google; (+http://code.google.com/appengine; appid: s~i8964-200-03)'
|
362
|
+
- Shifty Jelly Pocket Casts, Android v4.2.5
|
363
|
+
|
364
|
+
'Podbean':
|
365
|
+
- Podbean/Android App 7.0.3 (http://podbean.com),b1cd4156abce30aab18baddeac90724f
|
366
|
+
- Podbean/iOS (http://podbean.com) 5.0.3 - 153acb4cd1d12fba94416523f7c1f530
|
367
|
+
|
368
|
+
'Podcast Addict':
|
369
|
+
- PodcastAddict/v2 - Dalvik/2.1.0 (Linux; U; Android 9; G8142 Build/47.2.A.10.80)
|
370
|
+
- PodcastAddict/v2 - Mozilla/5.0 (Linux; Android 8.1.0; 5008D_EEA Build/O11019; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/64.0.3282.137 Mobile Safari/537.36
|
371
|
+
- Podcast Addict - Dalvik/2.1.0 (Linux; U; Android 9; SM-G960F Build/PPR1.180610.011)
|
372
|
+
- Podcast Addict - Dalvik/2.1.0 (Linux; U; Android 5.0; RCT6773W22B Build/LRX21M)
|
373
|
+
|
374
|
+
'podCloud':
|
375
|
+
- 'MediaAnalyzer podCloud/3.9.0-f575fbd4 (Podcast app like iTunes/12.0; Reason: media-5d65d68fa9b49765a47065a6)'
|
376
|
+
- 'MediaAnalyzer podCloud/3.9.0-d5c42d86 (Podcast app like iTunes/12.0; Reason: media-5b100cdfa9b4972072000002)'
|
377
|
+
- 'MediaAnalyzer/podCloud 1.1 (like iTunes/10.0)'
|
378
|
+
|
379
|
+
'Podcoin':
|
380
|
+
- Podcoin/60 CFNetwork/978.0.7 Darwin/18.7.0
|
381
|
+
- Podcoin Dynamo/1.0
|
382
|
+
- Podcoin
|
383
|
+
- Podcoin/168 CFNetwork/978.0.7 Darwin/18.5.0 Dynamo/1.0
|
384
|
+
|
385
|
+
'PodCruncher':
|
386
|
+
- PodCruncher/3.3.1 CFNetwork/978.0.7 Darwin/18.7.0
|
387
|
+
- PodCruncher/3.7.1 CFNetwork/978.0.7 Darwin/18.7.0 Dynamo/1.0
|
388
|
+
|
389
|
+
'Podcast Republic':
|
390
|
+
- PodcastRepublic/18.0 (Linux; U; Android 8.0.0;hannah/OCPS27.91-164-1)
|
391
|
+
- PodcastRepublic/18.0 (Linux; U; Android 5.0;A1000/S100)
|
392
|
+
- PodcastRepublic/18.0 (Linux; U; Android 9;HWVTR/HUAWEIVTR-L29)
|
393
|
+
|
394
|
+
'Podtrapper':
|
395
|
+
- PodTrapper
|
396
|
+
|
397
|
+
'ProCast':
|
398
|
+
- ProCast/2 CFNetwork/1098.7 Darwin/19.0.0
|
399
|
+
- Procast (iOS)
|
400
|
+
- ProCast/1 CFNetwork/811.5.4 Darwin/16.7.0
|
401
|
+
- ProCast/3 CFNetwork/894 Darwin/17.4.0
|
402
|
+
|
403
|
+
'Python Requests':
|
404
|
+
- python-requests/2.7.0 CPython/2.7.12 Linux/4.14.123-95.109.amzn2.x86_64
|
405
|
+
- python-requests/2.22.0
|
406
|
+
- python-requests/2.2.1 CPython/2.7.3+ Darwin/17.7.0 QCast/1.81
|
407
|
+
- python-requests/2.7.0 CPython/2.7.12 Linux/4.14.88-72.73.amzn1.x86_64
|
408
|
+
|
409
|
+
'RadioPublic':
|
410
|
+
- RadioPublic/android-2.2 Dynamo/1.0
|
411
|
+
- RadioPublic/android-2.2
|
412
|
+
- RadioPublicDraper/81b12be Faraday/0.15.2 ruby/2.3.8
|
413
|
+
- RadioPublic iOS 1.9.18
|
414
|
+
- RadioPublic/9 CFNetwork/808.3 Darwin/16.3.0
|
415
|
+
|
416
|
+
'Request.js':
|
417
|
+
- request.js
|
418
|
+
|
419
|
+
'Roku':
|
420
|
+
- Roku/DVP-9.10 (499.10E04121A)
|
421
|
+
- Roku/DVP-9.12 (909.12E04066A)
|
422
|
+
- Roku/DVP-9.0 (519.00E04142A) Dynamo/1.0
|
423
|
+
|
424
|
+
'Ruby':
|
425
|
+
- Ruby, Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36
|
426
|
+
- Ruby, linkthumbnailer
|
427
|
+
- Ruby, Twurly v1.1 (http://twurly.org)
|
428
|
+
- Ruby, link_thumbnailer
|
429
|
+
- Ruby
|
430
|
+
|
431
|
+
'RSSRadio':
|
432
|
+
- RSSRadio/9213 (iPhone;iOS;12.0)
|
433
|
+
- RSSRadio7Lite/9216 CFNetwork/974.2.1 Darwin/18.0.0
|
434
|
+
- RSSRadio/9216 (iPhone;iOS;12.0.1)
|
435
|
+
- RSSRadio7Lite/9195 CFNetwork/893.14.2 Darwin/17.3.0
|
436
|
+
|
437
|
+
'ServeStream':
|
438
|
+
- ServeStream Dynamo/1.0
|
439
|
+
- ServeStream
|
440
|
+
|
441
|
+
'Sodes':
|
442
|
+
- Sodes/1657 CFNetwork/1098.6 Darwin/19.0.0
|
443
|
+
- Sodes/1468 CFNetwork/958.1 Darwin/18.0.0
|
444
|
+
|
445
|
+
'Sonos':
|
446
|
+
- Sonos
|
447
|
+
- Linux UPnP/1.0 Sonos/52.13-68180 (ZPS18)
|
448
|
+
- Linux UPnP/1.0 Sonos/53.1-68130-ci-124-Mainline-590142 (ZPS13)
|
449
|
+
- Linux UPnP/1.0 Sonos/49.2-60220-trunk_ext_release (ZPS1)
|
450
|
+
|
451
|
+
'Spotify':
|
452
|
+
- Spotify/8.5.20 Android/27 (Ilium M7)
|
453
|
+
- Spotify/8.5.19 iOS/12.4 (iPad7,6)
|
454
|
+
- Spotify/8.5.20 Android/25 (Samsung Chromebook 3)
|
455
|
+
- Spotify/111200449 OSX/0 (MacBookAir6,2)
|
456
|
+
|
457
|
+
'Spreaker':
|
458
|
+
- Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.6983.89 Safari/537.36 Spreaker/1.0
|
459
|
+
- Spreaker for Android 4.10.8 release:2019-08-05 device:phone (samsung SM-G950U; Android 9; en_US)
|
460
|
+
- Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.1236.89 Safari/537.36 Spreaker/1.0
|
461
|
+
|
462
|
+
'Stitcher':
|
463
|
+
- Stitcher/28420 CFNetwork/609.1.4 Darwin/13.0.0
|
464
|
+
- AlexaMediaPlayer/Stitcher (Linux;Android 8.1.0) ExoPlayerLib/2.2.0 Dynamo/1.0
|
465
|
+
- Stitcher/13874 CFNetwork/485.13.9 Darwin/11.0.0
|
466
|
+
- Stitcher/Android
|
467
|
+
- Stitcher/iOS
|
468
|
+
|
469
|
+
'StitcherBot':
|
470
|
+
- StitcherBot (MP3 Search Bot for Stitcher Personalized Radio Service) Dynamo/1.0
|
471
|
+
- StitcherBot (MP3 Search Bot for Stitcher Personalized Radio Service)
|
472
|
+
|
473
|
+
'Swoot':
|
474
|
+
- Swoot/1.57.0 (Linux;Android 7.0) ExoPlayerLib/2.9.6
|
475
|
+
- Swoot/1.0 (build 9e4f293)
|
476
|
+
- Swoot Agent 1.0
|
477
|
+
- Swoot/2517
|
478
|
+
|
479
|
+
'Storiyoh':
|
480
|
+
- Storiyoh/2.2.3 (Linux;Android 8.1.0) ExoPlayerLib/2.9.0
|
481
|
+
- Storiyoh/5 CFNetwork/902.2 Darwin/17.7.0
|
482
|
+
- Storiyoh/1 CFNetwork/894 Darwin/17.4.0
|
483
|
+
|
484
|
+
'Subcast':
|
485
|
+
- Subcast/1.0 (user=933ffa24-9b4d-4c7d-bb42-843656b56a84)
|
486
|
+
- Subcast/1.0 (user=390d4c85-75a8-495c-9254-2bb53cef34d9)
|
487
|
+
|
488
|
+
'TED':
|
489
|
+
- TED POD-2.0.2
|
490
|
+
- TED/2941 CFNetwork/976 Darwin/18.2.0
|
491
|
+
- TED Android; Version 3.3.3; OPPO R15 9
|
492
|
+
|
493
|
+
'Trackable':
|
494
|
+
- Trackable/0.1 Dynamo/1.0
|
495
|
+
- Trackable/0.1
|
496
|
+
|
497
|
+
'Twitter':
|
498
|
+
- Mozilla/5.0 (Linux; Android 8.1.0; POCOPHONE F1 Build/OPM1.171019.026; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/76.0.3809.111 Mobile Safari/537.36 TwitterAndroid
|
499
|
+
- TwitterAndroid/8.8.0-release.82 (18080082-r-82) SM-T837V/9 (samsung;SM-T837V;Verizon;gts4lltevzw;0;;0;2015)
|
500
|
+
- Twitter/7.51.5 CFNetwork/978.0.7 Darwin/18.6.0
|
501
|
+
- Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16D57 Twitter for iPhone/7.50
|
502
|
+
- Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/16F203 Twitter for iPhone/7.52.5
|
503
|
+
|
504
|
+
'Twitter Bot':
|
505
|
+
- Twitterbot/1.0 Dynamo/1.0
|
506
|
+
- Twitterbot/1.0
|
507
|
+
|
508
|
+
'Typhoeus':
|
509
|
+
- Typhoeus - https://github.com/typhoeus/typhoeus, Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
|
510
|
+
- Typhoeus - https://github.com/typhoeus/typhoeus
|
511
|
+
|
512
|
+
'TuneIn Radio':
|
513
|
+
- TuneIn%20Radio%20Pro/1224 CFNetwork/978.0.7 Darwin/18.7.0
|
514
|
+
- TuneIn Radio/22.7.2 (Linux;Android 8.0.0) ExoPlayerLib/2.9.4
|
515
|
+
- Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) TuneIn/1.12.0 Chrome/69.0.3497.128 Electron/4.2.8 Safari/537.36
|
516
|
+
|
517
|
+
'uTorrent':
|
518
|
+
- BTWebClient/1870(43938)
|
519
|
+
- uTorrent/341(109279400)(30888)
|
520
|
+
|
521
|
+
'Victor Reader Stream':
|
522
|
+
- VictorReader Stream 503 au-en Tyler Lucy 4.7.2
|
523
|
+
- VictorReader Stream 503 uk-en Graham Rachel 4.7.2
|
524
|
+
- VictorReader_4-4-2
|
525
|
+
|
526
|
+
'Wget':
|
527
|
+
- Wget/1.14
|
528
|
+
- Wget/1.20.3 (darwin17.7.0)
|
529
|
+
- Wget
|
530
|
+
|
531
|
+
'Winamp':
|
532
|
+
- WinampMPEG/5.57, Ultravox/2.1
|
533
|
+
- WinampMPEG/2.9
|
534
|
+
- Winamp/5.8
|
535
|
+
- Winamp
|
536
|
+
- WinampMPEG
|
537
|
+
|
538
|
+
'Windows Media Player':
|
539
|
+
- Windows-Media-Player/12.0.15063.1805
|
540
|
+
- Windows-Media-Player/11.0.5721.5145
|
541
|
+
- NSPlayer/12.0.15063.0 (compatible; J. River Internet Reader/2.0; Windows-Media-Player/10)
|
542
|
+
- NSPlayer/12.00.18965.1000 WMFSDK/12.00.18965.1000
|
543
|
+
- WMPlayer/10.0.0.364 guid/3300AD50-2C39-46C0-AE0A-AC7B8159E203 Dynamo/1.0
|
544
|
+
- WMPlayer/10.0.0.364 guid/2F8D1CB4-0A5A-4FD7-986F-FFDBA14156C7
|
545
|
+
|
546
|
+
'Zune':
|
547
|
+
- Zune/4.8 Dynamo/1.0
|
548
|
+
- Zune/4.7
|
549
|
+
|
550
|
+
'WordPress':
|
551
|
+
- WordPress/4.4; http://
|
552
|
+
- WordPress/5.2.2; http://
|
553
|
+
- Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) WordPressDesktop/4.2.0 Chrome/58.0.3029.110 Electron/1.7.16 Safari/537.36
|
554
|
+
- WordPress.com; https://phiquyenchinh.org
|
555
|
+
|
556
|
+
'Yapa':
|
557
|
+
- yapa/1.6.2 (Linux;Android 8.0.0) ExoPlayerLib/2.9.6
|
558
|
+
- yapa/1.4.37 (Linux;Android 8.0.0) ExoPlayerLib/2.9.6
|
559
|
+
|
560
|
+
'Yandex Bot':
|
561
|
+
- Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)
|
562
|
+
|
563
|
+
'Datagnion Bot':
|
564
|
+
- datagnionbot (+http://www.datagnion.com/bot.html)
|
565
|
+
|
566
|
+
'SEMrush Bot':
|
567
|
+
- Mozilla/5.0 (compatible; SemrushBot/6~bl; +http://www.semrush.com/bot.html)
|
568
|
+
- Mozilla/5.0 (compatible; SemrushBot/3~bl; +http://www.semrush.com/bot.html)
|
569
|
+
|
570
|
+
'Go':
|
571
|
+
- Go-http-client/2.0
|
572
|
+
- Go-http-client/1.1 Dynamo/1.0
|
573
|
+
- Go-http-client/1.1
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class IntegrityTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
test 'no multiple matches for name samples' do
|
6
|
+
user_agent_samples.each do |name, samples|
|
7
|
+
samples.each do |sample|
|
8
|
+
matches = PodcastAgent.database.select do |attrs|
|
9
|
+
sample =~ Regexp.new(attrs['regex'])
|
10
|
+
end
|
11
|
+
assert_equal 1, matches.length, "'#{sample}' has multiple matches"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
test 'no duplicate name entries' do
|
17
|
+
assert_equal PodcastAgent.database.map(&:first).length, PodcastAgent.database.map(&:first).uniq.length
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class PocastAgentTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
test 'should match all sample user_agents' do
|
6
|
+
user_agent_samples.each do |name, samples|
|
7
|
+
samples.each do |sample|
|
8
|
+
agent = PodcastAgent.find_by(user_agent_string: sample)
|
9
|
+
assert agent, "'#{sample}' could not be parsed as #{name}'"
|
10
|
+
assert_equal name, agent.name, sample
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
test 'should match the app and the browser' do
|
16
|
+
pandora_user_agent = 'Mozilla/5.0 (iPad; CPU OS 12_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 Pandora/1908.1'
|
17
|
+
agent = PodcastAgent.find_by(user_agent_string: pandora_user_agent)
|
18
|
+
assert_equal 'Pandora', agent.name
|
19
|
+
assert_equal 'Safari', agent.browser
|
20
|
+
assert_equal 'iPad', agent.platform
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
|
2
|
+
require 'active_support'
|
3
|
+
require 'active_support/testing/autorun'
|
4
|
+
|
5
|
+
require 'podcast_agent'
|
6
|
+
require 'byebug'
|
7
|
+
|
8
|
+
class ActiveSupport::TestCase
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def user_agent_samples
|
13
|
+
@user_agent_samples ||=
|
14
|
+
YAML.load_file('test/data/sample_user_agents.yml')
|
15
|
+
end
|
16
|
+
end
|
metadata
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: podcast-agent
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tom Rossi
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-08-21 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 5.2.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 5.2.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.15'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.15'
|
41
|
+
description: A GEM to identify podcast agent information
|
42
|
+
email: tom@higherpixels.com
|
43
|
+
executables: []
|
44
|
+
extensions: []
|
45
|
+
extra_rdoc_files: []
|
46
|
+
files:
|
47
|
+
- ".gitignore"
|
48
|
+
- Gemfile
|
49
|
+
- README.md
|
50
|
+
- Rakefile
|
51
|
+
- lib/data/podcast_agents.yml
|
52
|
+
- lib/podcast_agent.rb
|
53
|
+
- podcast-agent.gemspec
|
54
|
+
- test/data/sample_user_agents.yml
|
55
|
+
- test/integrity_test.rb
|
56
|
+
- test/podcast_agent_test.rb
|
57
|
+
- test/test_helper.rb
|
58
|
+
homepage: https://github.com/buzzsprout/podcast-agent
|
59
|
+
licenses:
|
60
|
+
- MIT
|
61
|
+
metadata: {}
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options: []
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 2.4.0
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
requirements: []
|
77
|
+
rubygems_version: 3.0.3
|
78
|
+
signing_key:
|
79
|
+
specification_version: 4
|
80
|
+
summary: A GEM to identify podcast agent information
|
81
|
+
test_files:
|
82
|
+
- test/data/sample_user_agents.yml
|
83
|
+
- test/integrity_test.rb
|
84
|
+
- test/podcast_agent_test.rb
|
85
|
+
- test/test_helper.rb
|