podcast-agent 0.0.2
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/.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
|