This repository has been archived by the owner on Apr 16, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
swagger.yml
442 lines (442 loc) · 10.3 KB
/
swagger.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
swagger: "2.0"
info:
title: ACRCloud Webhooks Receiver
description: |
Hooks to receive ACRCloud events on and a simple API to query the received data.
Stores all data in a PostgreSQL database for later querying.
version: 0.1.0
license:
name: "AGPLv3"
url: "https://www.gnu.org/licenses/agpl-3.0.en.html"
schemes:
- "https"
- "http"
consumes:
- "application/json"
produces:
- "application/json"
tags:
- name: webhook
description: Webhooks called by ACRCloud.
- name: api
description: API to interact with the stored data.
- name: compat
description: Compatibility endpoints that match the ACRCloud API.
paths:
/v1/_webhooks/results:
post:
summary: "ACRCloud results callback"
description: "This hook is called by the ACRCloud service when it knows what song we weere playing."
operationId: "addResult"
tags:
- "webhook"
security:
- api_key: []
parameters:
- $ref: '#/parameters/requestID'
- in: "body"
name: "body"
description: "ACRCloud results entry"
required: true
schema:
$ref: "#/definitions/Webhook"
responses:
"201":
description: "Created"
"400":
description: "Bad Request"
"500":
description: "Server Error"
/v1/results:
get:
summary: "Get ACRCloud Results"
description: "This is endpoint is useful for looking into and exporting the dataset."
operationId: "getResults"
tags:
- "api"
parameters:
- $ref: '#/parameters/requestID'
- $ref: '#/parameters/offsetParam'
- $ref: '#/parameters/limitParam'
- in: query
name: from
required: false
type: string
format: date-time
- in: query
name: to
required: false
type: string
format: date-time
responses:
"200":
description: "Returns array of results"
schema:
type: array
items:
$ref: '#/definitions/Result'
"500":
description: "Server Error"
/v1/results/{resultId}:
get:
summary: "ACRCloud result"
description: "Use this endpoint to fetch information on an exact entry."
operationId: "getResult"
tags:
- "api"
parameters:
- $ref: '#/parameters/requestID'
- in: path
name: resultId
required: true
type: integer
responses:
"200":
description: "Returns single result"
schema:
$ref: '#/definitions/Result'
"500":
description: "Server Error"
/v1/monitor-streams/{streamId}/results:
get:
summary: "ACRCloud Custom Streams Full Day Endpoint"
description: "This endpoint implements the same API as upstream ACRCloud does."
operationId: "getCustomStream"
tags:
- "compat"
parameters:
- $ref: '#/parameters/requestID'
- in: path
name: streamId
description: Stream ID, default is the non-realtime RaBe program.
required: true
type: string
default: s-qXuJARB
- in: query
name: access_key
description: Ignored but available for compatibility with upstream.
required: false
type: string
- in: query
name: date
description: The UTC date in the format 'YYYYMMDD'
required: true
type: string
responses:
"200":
description: "Results without local ID"
schema:
type: array
items:
$ref: '#/definitions/Data'
"400":
description: "Bad Request"
"500":
description: "Server Error"
securityDefinitions:
api_key:
type: "apiKey"
name: "api_key"
description: Used to secure the Webhook endpoints.
in: query
parameters:
offsetParam:
in: query
name: offset
required: false
type: integer
minimum: 0
default: 0
description: The number of items to skip before starting to collect the result set.
limitParam:
in: query
name: limit
required: false
type: integer
minimum: 1
default: 20
description: The numbers of items to return.
requestID:
in: header
name: X-Request-ID
type: string
definitions:
Result:
type: "object"
properties:
ID:
type: "integer"
x-go-custom-tag: gorm:"primaryKey;"
result:
$ref: '#/definitions/Webhook'
x-go-custom-tag: gorm:"type:jsonb;"
timestamp:
type: "string"
format: "date-time"
x-go-custom-tag: gorm:"type:time;index;"
Webhook:
type: "object"
properties:
stream_id:
type: "string"
stream_url:
type: "string"
status:
type: "integer"
format: "int32"
data:
$ref: '#/definitions/Data'
required:
- stream_id
- stream_url
- status
- data
Data:
type: "object"
properties:
status:
$ref: '#/definitions/Status'
x-go-custom-tag: gorm:"type:jsonb;"
result_type:
type: integer
format: int32
metadata:
$ref: '#/definitions/Metadata'
x-go-custom-tag: gorm:"type:jsonb;"
required:
- status
- metadata
Status:
type: object
properties:
msg:
type: string
version:
type: string
code:
type: integer
format: int32
required:
- msg
- version
- code
Metadata:
type: object
properties:
music:
type: array
items:
$ref: '#/definitions/Music'
timestamp_utc:
type: string
played_duration:
type: integer
format: int64
required:
- timestamp_utc
- played_duration
Music:
type: object
properties:
acrid:
type: string
result_from:
type: integer
format: int32
score:
type: integer
minimum: 0
maximum: 100
title:
type: string
artists:
type: array
items:
$ref: '#/definitions/Artist'
album:
$ref: '#/definitions/Album'
genres:
type: array
items:
$ref: '#/definitions/Genre'
contributors:
$ref: '#/definitions/Contributors'
label:
type: string
release_date:
type: string
release_by_territories:
type: array
items:
$ref: '#/definitions/Territory'
rights_claim:
type: array
items:
$ref: '#/definitions/RightsClaim'
lyrics:
$ref: '#/definitions/Lyrics'
play_offset_ms:
type: integer
format: int64
duration_ms:
type: integer
format: int64
sample_begin_time_offset_ms:
type: integer
format: int64
sample_end_time_offset_ms:
type: integer
format: int64
db_begin_time_offset_ms:
type: integer
format: int64
external_ids:
$ref: '#/definitions/ExternalIds'
external_metadata:
$ref: '#/definitions/ExternalMetadata'
required:
- acrid
- result_from
- score
- title
- play_offset_ms
- duration_ms
- sample_begin_time_offset_ms
- sample_end_time_offset_ms
- db_begin_time_offset_ms
- external_ids
- external_metadata
Album:
type: object
properties:
name:
type: string
required:
- name
Artist:
type: object
properties:
name:
type: string
roles:
type: array
items:
type: string
required:
- name
Contributors:
type: object
properties:
composers:
type: array
items:
type: string
lyricists:
type: array
items:
type: string
Genre:
type: object
properties:
name:
type: string
Lyrics:
type: object
properties:
copyrights:
type: array
items:
type: string
Territory:
type: object
properties:
territories:
type: array
items:
type: string
release_date:
type: string
RightsClaim:
type: object
properties:
distributor:
$ref: '#/definitions/Distributor'
territories:
type: array
items:
type: string
start_date:
type: string
rights_claim_policy:
type: string
rights_owners:
type: array
items:
$ref: '#/definitions/RightsOwner'
Distributor:
type: object
properties:
name:
type: string
id:
type: string
RightsOwner:
type: object
properties:
share_percentage:
type: integer
name:
type: string
ExternalIds:
type: object
properties:
deezer:
type: string
isrc: {}
# ISRC can be either a string or an array of string because they
# are just weird like that. In swagger 3.0 we would configure
# this so it allows both. With swagger 2.0 all can do is ignore
# validation on the property completely.
# type: string
itunes:
type: string
lyricfind:
type: string
musicstory:
type: string
spotify:
type: string
upc: {}
# Depending on how a thing was released it can also have more
# than one UPC assigned. This seems to only affect cases where
# a recording has been assigned multiple ISRC numbers. Given
# this chaos stems from the collection societies it really
# doesn't look like have that much interest in receiving
# complete reports. This kind of adds up with the fact that
# broadcasters get a rebate for complete listings.
# Fuck capitalism!
# type: string
youtube:
type: string
ExternalMetadata:
type: object
properties:
deezer:
type: object
isrc:
type: object
itunes:
type: object
lyricfind:
type: object
musicstory:
type: object
spotify:
type: object
upc:
type: object
youtube:
type: object
externalDocs:
description: "Find out more about Radio Bern RaBe"
url: "https://rabe.ch"