spotify-apimatic-sdk 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +30 -0
- data/README.md +170 -0
- data/bin/console +15 -0
- data/lib/spotify_web_api/api_helper.rb +10 -0
- data/lib/spotify_web_api/client.rb +165 -0
- data/lib/spotify_web_api/configuration.rb +244 -0
- data/lib/spotify_web_api/controllers/albums_controller.rb +297 -0
- data/lib/spotify_web_api/controllers/artists_controller.rb +188 -0
- data/lib/spotify_web_api/controllers/audiobooks_controller.rb +258 -0
- data/lib/spotify_web_api/controllers/base_controller.rb +60 -0
- data/lib/spotify_web_api/controllers/categories_controller.rb +84 -0
- data/lib/spotify_web_api/controllers/chapters_controller.rb +82 -0
- data/lib/spotify_web_api/controllers/episodes_controller.rb +241 -0
- data/lib/spotify_web_api/controllers/genres_controller.rb +39 -0
- data/lib/spotify_web_api/controllers/markets_controller.rb +38 -0
- data/lib/spotify_web_api/controllers/o_auth_authorization_controller.rb +82 -0
- data/lib/spotify_web_api/controllers/player_controller.rb +525 -0
- data/lib/spotify_web_api/controllers/playlists_controller.rb +538 -0
- data/lib/spotify_web_api/controllers/search_controller.rb +61 -0
- data/lib/spotify_web_api/controllers/shows_controller.rb +263 -0
- data/lib/spotify_web_api/controllers/tracks_controller.rb +534 -0
- data/lib/spotify_web_api/controllers/users_controller.rb +402 -0
- data/lib/spotify_web_api/exceptions/api_exception.rb +21 -0
- data/lib/spotify_web_api/exceptions/bad_request_exception.rb +46 -0
- data/lib/spotify_web_api/exceptions/forbidden_exception.rb +46 -0
- data/lib/spotify_web_api/exceptions/not_found_exception.rb +46 -0
- data/lib/spotify_web_api/exceptions/o_auth_provider_exception.rb +64 -0
- data/lib/spotify_web_api/exceptions/too_many_requests_exception.rb +46 -0
- data/lib/spotify_web_api/exceptions/unauthorized_exception.rb +46 -0
- data/lib/spotify_web_api/http/api_response.rb +19 -0
- data/lib/spotify_web_api/http/auth/o_auth2.rb +164 -0
- data/lib/spotify_web_api/http/http_call_back.rb +10 -0
- data/lib/spotify_web_api/http/http_method_enum.rb +10 -0
- data/lib/spotify_web_api/http/http_request.rb +10 -0
- data/lib/spotify_web_api/http/http_response.rb +10 -0
- data/lib/spotify_web_api/http/proxy_settings.rb +22 -0
- data/lib/spotify_web_api/models/album_base.rb +189 -0
- data/lib/spotify_web_api/models/album_group_enum.rb +44 -0
- data/lib/spotify_web_api/models/album_object.rb +273 -0
- data/lib/spotify_web_api/models/album_restriction_object.rb +75 -0
- data/lib/spotify_web_api/models/album_type_enum.rb +40 -0
- data/lib/spotify_web_api/models/artist_discography_album_object.rb +216 -0
- data/lib/spotify_web_api/models/artist_object.rb +174 -0
- data/lib/spotify_web_api/models/audio_analysis_object.rb +171 -0
- data/lib/spotify_web_api/models/audio_features_object.rb +273 -0
- data/lib/spotify_web_api/models/audiobook_base.rb +270 -0
- data/lib/spotify_web_api/models/audiobook_object.rb +278 -0
- data/lib/spotify_web_api/models/author_object.rb +62 -0
- data/lib/spotify_web_api/models/base_model.rb +110 -0
- data/lib/spotify_web_api/models/categories.rb +125 -0
- data/lib/spotify_web_api/models/category_object.rb +95 -0
- data/lib/spotify_web_api/models/chapter_base.rb +265 -0
- data/lib/spotify_web_api/models/chapter_object.rb +273 -0
- data/lib/spotify_web_api/models/chapter_restriction_object.rb +71 -0
- data/lib/spotify_web_api/models/context_object.rb +102 -0
- data/lib/spotify_web_api/models/copyright_object.rb +82 -0
- data/lib/spotify_web_api/models/currently_playing_context_object.rb +168 -0
- data/lib/spotify_web_api/models/currently_playing_object.rb +138 -0
- data/lib/spotify_web_api/models/cursor_object.rb +71 -0
- data/lib/spotify_web_api/models/cursor_paged_artists.rb +60 -0
- data/lib/spotify_web_api/models/cursor_paging_object.rb +102 -0
- data/lib/spotify_web_api/models/cursor_paging_play_history_object.rb +120 -0
- data/lib/spotify_web_api/models/cursor_paging_simplified_artist_object.rb +120 -0
- data/lib/spotify_web_api/models/device_object.rb +153 -0
- data/lib/spotify_web_api/models/disallows_object.rb +171 -0
- data/lib/spotify_web_api/models/episode_base.rb +263 -0
- data/lib/spotify_web_api/models/episode_object.rb +368 -0
- data/lib/spotify_web_api/models/episode_restriction_object.rb +80 -0
- data/lib/spotify_web_api/models/error_object.rb +71 -0
- data/lib/spotify_web_api/models/explicit_content_settings_object.rb +74 -0
- data/lib/spotify_web_api/models/external_id_object.rb +94 -0
- data/lib/spotify_web_api/models/external_url_object.rb +73 -0
- data/lib/spotify_web_api/models/followers_object.rb +84 -0
- data/lib/spotify_web_api/models/image_object.rb +106 -0
- data/lib/spotify_web_api/models/include_external_enum.rb +29 -0
- data/lib/spotify_web_api/models/item_type1_enum.rb +26 -0
- data/lib/spotify_web_api/models/item_type2_enum.rb +36 -0
- data/lib/spotify_web_api/models/item_type3_enum.rb +36 -0
- data/lib/spotify_web_api/models/item_type_enum.rb +56 -0
- data/lib/spotify_web_api/models/linked_track_object.rb +113 -0
- data/lib/spotify_web_api/models/many_albums.rb +69 -0
- data/lib/spotify_web_api/models/many_artists.rb +69 -0
- data/lib/spotify_web_api/models/many_audio_features.rb +69 -0
- data/lib/spotify_web_api/models/many_audiobooks.rb +69 -0
- data/lib/spotify_web_api/models/many_chapters.rb +69 -0
- data/lib/spotify_web_api/models/many_devices.rb +69 -0
- data/lib/spotify_web_api/models/many_episodes.rb +69 -0
- data/lib/spotify_web_api/models/many_genres.rb +60 -0
- data/lib/spotify_web_api/models/many_simplified_shows.rb +69 -0
- data/lib/spotify_web_api/models/many_tracks.rb +69 -0
- data/lib/spotify_web_api/models/markets.rb +62 -0
- data/lib/spotify_web_api/models/me_albums_request.rb +67 -0
- data/lib/spotify_web_api/models/me_episodes_request.rb +64 -0
- data/lib/spotify_web_api/models/me_episodes_request1.rb +66 -0
- data/lib/spotify_web_api/models/me_following_request.rb +65 -0
- data/lib/spotify_web_api/models/me_following_request1.rb +67 -0
- data/lib/spotify_web_api/models/me_player_play_request.rb +103 -0
- data/lib/spotify_web_api/models/me_player_request.rb +75 -0
- data/lib/spotify_web_api/models/me_shows_request.rb +67 -0
- data/lib/spotify_web_api/models/me_tracks_request.rb +65 -0
- data/lib/spotify_web_api/models/me_tracks_request1.rb +67 -0
- data/lib/spotify_web_api/models/meta.rb +127 -0
- data/lib/spotify_web_api/models/mode_enum.rb +50 -0
- data/lib/spotify_web_api/models/narrator_object.rb +62 -0
- data/lib/spotify_web_api/models/o_auth_provider_error_enum.rb +62 -0
- data/lib/spotify_web_api/models/o_auth_scope_enum.rb +124 -0
- data/lib/spotify_web_api/models/o_auth_token.rb +96 -0
- data/lib/spotify_web_api/models/paged_albums.rb +60 -0
- data/lib/spotify_web_api/models/paged_categories.rb +60 -0
- data/lib/spotify_web_api/models/paging_artist_discography_album_object.rb +125 -0
- data/lib/spotify_web_api/models/paging_artist_object.rb +125 -0
- data/lib/spotify_web_api/models/paging_featured_playlist_object.rb +71 -0
- data/lib/spotify_web_api/models/paging_object.rb +107 -0
- data/lib/spotify_web_api/models/paging_playlist_object.rb +125 -0
- data/lib/spotify_web_api/models/paging_playlist_track_object.rb +125 -0
- data/lib/spotify_web_api/models/paging_saved_album_object.rb +125 -0
- data/lib/spotify_web_api/models/paging_saved_audiobook_object.rb +125 -0
- data/lib/spotify_web_api/models/paging_saved_episode_object.rb +125 -0
- data/lib/spotify_web_api/models/paging_saved_show_object.rb +125 -0
- data/lib/spotify_web_api/models/paging_saved_track_object.rb +125 -0
- data/lib/spotify_web_api/models/paging_simplified_album_object.rb +125 -0
- data/lib/spotify_web_api/models/paging_simplified_audiobook_object.rb +125 -0
- data/lib/spotify_web_api/models/paging_simplified_chapter_object.rb +125 -0
- data/lib/spotify_web_api/models/paging_simplified_episode_object.rb +125 -0
- data/lib/spotify_web_api/models/paging_simplified_show_object.rb +125 -0
- data/lib/spotify_web_api/models/paging_simplified_track_object.rb +125 -0
- data/lib/spotify_web_api/models/paging_track_object.rb +125 -0
- data/lib/spotify_web_api/models/play_history_object.rb +90 -0
- data/lib/spotify_web_api/models/playlist_object.rb +213 -0
- data/lib/spotify_web_api/models/playlist_owner_object.rb +124 -0
- data/lib/spotify_web_api/models/playlist_snapshot_id.rb +62 -0
- data/lib/spotify_web_api/models/playlist_track_object.rb +116 -0
- data/lib/spotify_web_api/models/playlist_tracks_ref_object.rb +72 -0
- data/lib/spotify_web_api/models/playlist_user_object.rb +122 -0
- data/lib/spotify_web_api/models/playlists_followers_request.rb +63 -0
- data/lib/spotify_web_api/models/playlists_request.rb +96 -0
- data/lib/spotify_web_api/models/playlists_tracks_request.rb +84 -0
- data/lib/spotify_web_api/models/playlists_tracks_request1.rb +112 -0
- data/lib/spotify_web_api/models/playlists_tracks_request2.rb +87 -0
- data/lib/spotify_web_api/models/private_user_object.rb +200 -0
- data/lib/spotify_web_api/models/public_user_object.rb +144 -0
- data/lib/spotify_web_api/models/queue_object.rb +86 -0
- data/lib/spotify_web_api/models/reason_enum.rb +43 -0
- data/lib/spotify_web_api/models/recommendation_seed_object.rb +120 -0
- data/lib/spotify_web_api/models/recommendations_object.rb +86 -0
- data/lib/spotify_web_api/models/release_date_precision_enum.rb +40 -0
- data/lib/spotify_web_api/models/resume_point_object.rb +84 -0
- data/lib/spotify_web_api/models/saved_album_object.rb +85 -0
- data/lib/spotify_web_api/models/saved_audiobook_object.rb +85 -0
- data/lib/spotify_web_api/models/saved_episode_object.rb +82 -0
- data/lib/spotify_web_api/models/saved_show_object.rb +85 -0
- data/lib/spotify_web_api/models/saved_track_object.rb +85 -0
- data/lib/spotify_web_api/models/search_items.rb +122 -0
- data/lib/spotify_web_api/models/section_object.rb +201 -0
- data/lib/spotify_web_api/models/segment_object.rb +184 -0
- data/lib/spotify_web_api/models/show_base.rb +327 -0
- data/lib/spotify_web_api/models/show_object.rb +243 -0
- data/lib/spotify_web_api/models/simplified_album_object.rb +284 -0
- data/lib/spotify_web_api/models/simplified_artist_object.rb +122 -0
- data/lib/spotify_web_api/models/simplified_playlist_object.rb +203 -0
- data/lib/spotify_web_api/models/simplified_track_object.rb +251 -0
- data/lib/spotify_web_api/models/time_interval_object.rb +81 -0
- data/lib/spotify_web_api/models/track.rb +367 -0
- data/lib/spotify_web_api/models/track1.rb +62 -0
- data/lib/spotify_web_api/models/track_object.rb +301 -0
- data/lib/spotify_web_api/models/track_restriction_object.rb +80 -0
- data/lib/spotify_web_api/models/type2_enum.rb +26 -0
- data/lib/spotify_web_api/models/type3_enum.rb +26 -0
- data/lib/spotify_web_api/models/type4_enum.rb +26 -0
- data/lib/spotify_web_api/models/type5_enum.rb +26 -0
- data/lib/spotify_web_api/models/type6_enum.rb +26 -0
- data/lib/spotify_web_api/models/type8_enum.rb +26 -0
- data/lib/spotify_web_api/models/type9_enum.rb +26 -0
- data/lib/spotify_web_api/models/type_enum.rb +26 -0
- data/lib/spotify_web_api/models/users_playlists_request.rb +101 -0
- data/lib/spotify_web_api/utilities/date_time_helper.rb +11 -0
- data/lib/spotify_web_api/utilities/file_wrapper.rb +28 -0
- data/lib/spotify_web_api/utilities/union_type_lookup.rb +73 -0
- data/lib/spotify_web_api.rb +200 -0
- metadata +264 -0
|
@@ -0,0 +1,534 @@
|
|
|
1
|
+
# spotify_web_api
|
|
2
|
+
#
|
|
3
|
+
# This file was automatically generated by APIMATIC v3.0 (
|
|
4
|
+
# https://www.apimatic.io ).
|
|
5
|
+
|
|
6
|
+
module SpotifyWebApi
|
|
7
|
+
# TracksController
|
|
8
|
+
class TracksController < BaseController
|
|
9
|
+
# Get Spotify catalog information for a single track identified by its
|
|
10
|
+
# unique Spotify ID.
|
|
11
|
+
# @param [String] id Required parameter: TODO: type description here
|
|
12
|
+
# @param [String] market Optional parameter: TODO: type description here
|
|
13
|
+
# @return [ApiResponse] Complete http response with raw body and status code.
|
|
14
|
+
def get_track(id,
|
|
15
|
+
market: nil)
|
|
16
|
+
@api_call
|
|
17
|
+
.request(new_request_builder(HttpMethodEnum::GET,
|
|
18
|
+
'/tracks/{id}',
|
|
19
|
+
Server::DEFAULT)
|
|
20
|
+
.template_param(new_parameter(id, key: 'id')
|
|
21
|
+
.should_encode(true))
|
|
22
|
+
.query_param(new_parameter(market, key: 'market'))
|
|
23
|
+
.header_param(new_parameter('application/json', key: 'accept'))
|
|
24
|
+
.auth(Single.new('oauth_2_0')))
|
|
25
|
+
.response(new_response_handler
|
|
26
|
+
.deserializer(APIHelper.method(:custom_type_deserializer))
|
|
27
|
+
.deserialize_into(TrackObject.method(:from_hash))
|
|
28
|
+
.is_api_response(true)
|
|
29
|
+
.local_error('401',
|
|
30
|
+
"Bad or expired token. This can happen if the user revoked a'\
|
|
31
|
+
' token or\nthe access token has expired. You should'\
|
|
32
|
+
' re-authenticate the user.\n",
|
|
33
|
+
UnauthorizedException)
|
|
34
|
+
.local_error('403',
|
|
35
|
+
"Bad OAuth request (wrong consumer key, bad nonce, expired'\
|
|
36
|
+
'\ntimestamp...). Unfortunately, re-authenticating the user'\
|
|
37
|
+
' won't help here.\n",
|
|
38
|
+
ForbiddenException)
|
|
39
|
+
.local_error('429',
|
|
40
|
+
"The app has exceeded its rate limits.\n",
|
|
41
|
+
TooManyRequestsException))
|
|
42
|
+
.execute
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
# Get Spotify catalog information for multiple tracks based on their Spotify
|
|
46
|
+
# IDs.
|
|
47
|
+
# @param [String] ids Required parameter: TODO: type description here
|
|
48
|
+
# @param [String] market Optional parameter: TODO: type description here
|
|
49
|
+
# @return [ApiResponse] Complete http response with raw body and status code.
|
|
50
|
+
def get_several_tracks(ids,
|
|
51
|
+
market: nil)
|
|
52
|
+
@api_call
|
|
53
|
+
.request(new_request_builder(HttpMethodEnum::GET,
|
|
54
|
+
'/tracks',
|
|
55
|
+
Server::DEFAULT)
|
|
56
|
+
.query_param(new_parameter(ids, key: 'ids'))
|
|
57
|
+
.query_param(new_parameter(market, key: 'market'))
|
|
58
|
+
.header_param(new_parameter('application/json', key: 'accept'))
|
|
59
|
+
.auth(Single.new('oauth_2_0')))
|
|
60
|
+
.response(new_response_handler
|
|
61
|
+
.deserializer(APIHelper.method(:custom_type_deserializer))
|
|
62
|
+
.deserialize_into(ManyTracks.method(:from_hash))
|
|
63
|
+
.is_api_response(true)
|
|
64
|
+
.local_error('401',
|
|
65
|
+
"Bad or expired token. This can happen if the user revoked a'\
|
|
66
|
+
' token or\nthe access token has expired. You should'\
|
|
67
|
+
' re-authenticate the user.\n",
|
|
68
|
+
UnauthorizedException)
|
|
69
|
+
.local_error('403',
|
|
70
|
+
"Bad OAuth request (wrong consumer key, bad nonce, expired'\
|
|
71
|
+
'\ntimestamp...). Unfortunately, re-authenticating the user'\
|
|
72
|
+
' won't help here.\n",
|
|
73
|
+
ForbiddenException)
|
|
74
|
+
.local_error('429',
|
|
75
|
+
"The app has exceeded its rate limits.\n",
|
|
76
|
+
TooManyRequestsException))
|
|
77
|
+
.execute
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Get a list of the songs saved in the current Spotify user's 'Your Music'
|
|
81
|
+
# library.
|
|
82
|
+
# @param [String] market Optional parameter: TODO: type description here
|
|
83
|
+
# @param [Integer] limit Optional parameter: Example:20
|
|
84
|
+
# @param [Integer] offset Optional parameter: Example:0
|
|
85
|
+
# @return [ApiResponse] Complete http response with raw body and status code.
|
|
86
|
+
def get_users_saved_tracks(market: nil,
|
|
87
|
+
limit: 20,
|
|
88
|
+
offset: 0)
|
|
89
|
+
@api_call
|
|
90
|
+
.request(new_request_builder(HttpMethodEnum::GET,
|
|
91
|
+
'/me/tracks',
|
|
92
|
+
Server::DEFAULT)
|
|
93
|
+
.query_param(new_parameter(market, key: 'market'))
|
|
94
|
+
.query_param(new_parameter(limit, key: 'limit'))
|
|
95
|
+
.query_param(new_parameter(offset, key: 'offset'))
|
|
96
|
+
.header_param(new_parameter('application/json', key: 'accept'))
|
|
97
|
+
.auth(Single.new('oauth_2_0')))
|
|
98
|
+
.response(new_response_handler
|
|
99
|
+
.deserializer(APIHelper.method(:custom_type_deserializer))
|
|
100
|
+
.deserialize_into(PagingSavedTrackObject.method(:from_hash))
|
|
101
|
+
.is_api_response(true)
|
|
102
|
+
.local_error('401',
|
|
103
|
+
"Bad or expired token. This can happen if the user revoked a'\
|
|
104
|
+
' token or\nthe access token has expired. You should'\
|
|
105
|
+
' re-authenticate the user.\n",
|
|
106
|
+
UnauthorizedException)
|
|
107
|
+
.local_error('403',
|
|
108
|
+
"Bad OAuth request (wrong consumer key, bad nonce, expired'\
|
|
109
|
+
'\ntimestamp...). Unfortunately, re-authenticating the user'\
|
|
110
|
+
' won't help here.\n",
|
|
111
|
+
ForbiddenException)
|
|
112
|
+
.local_error('429',
|
|
113
|
+
"The app has exceeded its rate limits.\n",
|
|
114
|
+
TooManyRequestsException))
|
|
115
|
+
.execute
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
# Save one or more tracks to the current user's 'Your Music' library.
|
|
119
|
+
# @param [String] ids Required parameter: TODO: type description here
|
|
120
|
+
# @param [MeTracksRequest] body Optional parameter: TODO: type description
|
|
121
|
+
# here
|
|
122
|
+
# @return [ApiResponse] Complete http response with raw body and status code.
|
|
123
|
+
def save_tracks_user(ids,
|
|
124
|
+
body: nil)
|
|
125
|
+
@api_call
|
|
126
|
+
.request(new_request_builder(HttpMethodEnum::PUT,
|
|
127
|
+
'/me/tracks',
|
|
128
|
+
Server::DEFAULT)
|
|
129
|
+
.query_param(new_parameter(ids, key: 'ids'))
|
|
130
|
+
.header_param(new_parameter('application/json', key: 'Content-Type'))
|
|
131
|
+
.body_param(new_parameter(body))
|
|
132
|
+
.body_serializer(proc do |param| param.to_json unless param.nil? end)
|
|
133
|
+
.auth(Single.new('oauth_2_0')))
|
|
134
|
+
.response(new_response_handler
|
|
135
|
+
.is_response_void(true)
|
|
136
|
+
.is_api_response(true)
|
|
137
|
+
.local_error('401',
|
|
138
|
+
"Bad or expired token. This can happen if the user revoked a'\
|
|
139
|
+
' token or\nthe access token has expired. You should'\
|
|
140
|
+
' re-authenticate the user.\n",
|
|
141
|
+
UnauthorizedException)
|
|
142
|
+
.local_error('403',
|
|
143
|
+
"Bad OAuth request (wrong consumer key, bad nonce, expired'\
|
|
144
|
+
'\ntimestamp...). Unfortunately, re-authenticating the user'\
|
|
145
|
+
' won't help here.\n",
|
|
146
|
+
ForbiddenException)
|
|
147
|
+
.local_error('429',
|
|
148
|
+
"The app has exceeded its rate limits.\n",
|
|
149
|
+
TooManyRequestsException))
|
|
150
|
+
.execute
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
# Remove one or more tracks from the current user's 'Your Music' library.
|
|
154
|
+
# @param [String] ids Required parameter: TODO: type description here
|
|
155
|
+
# @param [MeTracksRequest1] body Optional parameter: TODO: type description
|
|
156
|
+
# here
|
|
157
|
+
# @return [ApiResponse] Complete http response with raw body and status code.
|
|
158
|
+
def remove_tracks_user(ids,
|
|
159
|
+
body: nil)
|
|
160
|
+
@api_call
|
|
161
|
+
.request(new_request_builder(HttpMethodEnum::DELETE,
|
|
162
|
+
'/me/tracks',
|
|
163
|
+
Server::DEFAULT)
|
|
164
|
+
.query_param(new_parameter(ids, key: 'ids'))
|
|
165
|
+
.header_param(new_parameter('application/json', key: 'Content-Type'))
|
|
166
|
+
.body_param(new_parameter(body))
|
|
167
|
+
.body_serializer(proc do |param| param.to_json unless param.nil? end)
|
|
168
|
+
.auth(Single.new('oauth_2_0')))
|
|
169
|
+
.response(new_response_handler
|
|
170
|
+
.is_response_void(true)
|
|
171
|
+
.is_api_response(true)
|
|
172
|
+
.local_error('401',
|
|
173
|
+
"Bad or expired token. This can happen if the user revoked a'\
|
|
174
|
+
' token or\nthe access token has expired. You should'\
|
|
175
|
+
' re-authenticate the user.\n",
|
|
176
|
+
UnauthorizedException)
|
|
177
|
+
.local_error('403',
|
|
178
|
+
"Bad OAuth request (wrong consumer key, bad nonce, expired'\
|
|
179
|
+
'\ntimestamp...). Unfortunately, re-authenticating the user'\
|
|
180
|
+
' won't help here.\n",
|
|
181
|
+
ForbiddenException)
|
|
182
|
+
.local_error('429',
|
|
183
|
+
"The app has exceeded its rate limits.\n",
|
|
184
|
+
TooManyRequestsException))
|
|
185
|
+
.execute
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# Check if one or more tracks is already saved in the current Spotify user's
|
|
189
|
+
# 'Your Music' library.
|
|
190
|
+
# @param [String] ids Required parameter: TODO: type description here
|
|
191
|
+
# @return [ApiResponse] Complete http response with raw body and status code.
|
|
192
|
+
def check_users_saved_tracks(ids)
|
|
193
|
+
@api_call
|
|
194
|
+
.request(new_request_builder(HttpMethodEnum::GET,
|
|
195
|
+
'/me/tracks/contains',
|
|
196
|
+
Server::DEFAULT)
|
|
197
|
+
.query_param(new_parameter(ids, key: 'ids'))
|
|
198
|
+
.header_param(new_parameter('application/json', key: 'accept'))
|
|
199
|
+
.auth(Single.new('oauth_2_0')))
|
|
200
|
+
.response(new_response_handler
|
|
201
|
+
.deserializer(APIHelper.method(:deserialize_primitive_types))
|
|
202
|
+
.is_api_response(true)
|
|
203
|
+
.is_response_array(true)
|
|
204
|
+
.is_primitive_response(true)
|
|
205
|
+
.local_error('401',
|
|
206
|
+
"Bad or expired token. This can happen if the user revoked a'\
|
|
207
|
+
' token or\nthe access token has expired. You should'\
|
|
208
|
+
' re-authenticate the user.\n",
|
|
209
|
+
UnauthorizedException)
|
|
210
|
+
.local_error('403',
|
|
211
|
+
"Bad OAuth request (wrong consumer key, bad nonce, expired'\
|
|
212
|
+
'\ntimestamp...). Unfortunately, re-authenticating the user'\
|
|
213
|
+
' won't help here.\n",
|
|
214
|
+
ForbiddenException)
|
|
215
|
+
.local_error('429',
|
|
216
|
+
"The app has exceeded its rate limits.\n",
|
|
217
|
+
TooManyRequestsException))
|
|
218
|
+
.execute
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
# Get audio features for multiple tracks based on their Spotify IDs.
|
|
222
|
+
# @param [String] ids Required parameter: TODO: type description here
|
|
223
|
+
# @return [ApiResponse] Complete http response with raw body and status code.
|
|
224
|
+
def get_several_audio_features(ids)
|
|
225
|
+
@api_call
|
|
226
|
+
.request(new_request_builder(HttpMethodEnum::GET,
|
|
227
|
+
'/audio-features',
|
|
228
|
+
Server::DEFAULT)
|
|
229
|
+
.query_param(new_parameter(ids, key: 'ids'))
|
|
230
|
+
.header_param(new_parameter('application/json', key: 'accept'))
|
|
231
|
+
.auth(Single.new('oauth_2_0')))
|
|
232
|
+
.response(new_response_handler
|
|
233
|
+
.deserializer(APIHelper.method(:custom_type_deserializer))
|
|
234
|
+
.deserialize_into(ManyAudioFeatures.method(:from_hash))
|
|
235
|
+
.is_api_response(true)
|
|
236
|
+
.local_error('401',
|
|
237
|
+
"Bad or expired token. This can happen if the user revoked a'\
|
|
238
|
+
' token or\nthe access token has expired. You should'\
|
|
239
|
+
' re-authenticate the user.\n",
|
|
240
|
+
UnauthorizedException)
|
|
241
|
+
.local_error('403',
|
|
242
|
+
"Bad OAuth request (wrong consumer key, bad nonce, expired'\
|
|
243
|
+
'\ntimestamp...). Unfortunately, re-authenticating the user'\
|
|
244
|
+
' won't help here.\n",
|
|
245
|
+
ForbiddenException)
|
|
246
|
+
.local_error('429',
|
|
247
|
+
"The app has exceeded its rate limits.\n",
|
|
248
|
+
TooManyRequestsException))
|
|
249
|
+
.execute
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
# Get audio feature information for a single track identified by its unique
|
|
253
|
+
# Spotify ID.
|
|
254
|
+
# @param [String] id Required parameter: TODO: type description here
|
|
255
|
+
# @return [ApiResponse] Complete http response with raw body and status code.
|
|
256
|
+
def get_audio_features(id)
|
|
257
|
+
@api_call
|
|
258
|
+
.request(new_request_builder(HttpMethodEnum::GET,
|
|
259
|
+
'/audio-features/{id}',
|
|
260
|
+
Server::DEFAULT)
|
|
261
|
+
.template_param(new_parameter(id, key: 'id')
|
|
262
|
+
.should_encode(true))
|
|
263
|
+
.header_param(new_parameter('application/json', key: 'accept'))
|
|
264
|
+
.auth(Single.new('oauth_2_0')))
|
|
265
|
+
.response(new_response_handler
|
|
266
|
+
.deserializer(APIHelper.method(:custom_type_deserializer))
|
|
267
|
+
.deserialize_into(AudioFeaturesObject.method(:from_hash))
|
|
268
|
+
.is_api_response(true)
|
|
269
|
+
.local_error('401',
|
|
270
|
+
"Bad or expired token. This can happen if the user revoked a'\
|
|
271
|
+
' token or\nthe access token has expired. You should'\
|
|
272
|
+
' re-authenticate the user.\n",
|
|
273
|
+
UnauthorizedException)
|
|
274
|
+
.local_error('403',
|
|
275
|
+
"Bad OAuth request (wrong consumer key, bad nonce, expired'\
|
|
276
|
+
'\ntimestamp...). Unfortunately, re-authenticating the user'\
|
|
277
|
+
' won't help here.\n",
|
|
278
|
+
ForbiddenException)
|
|
279
|
+
.local_error('429',
|
|
280
|
+
"The app has exceeded its rate limits.\n",
|
|
281
|
+
TooManyRequestsException))
|
|
282
|
+
.execute
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
# Get a low-level audio analysis for a track in the Spotify catalog. The
|
|
286
|
+
# audio analysis describes the track’s structure and musical content,
|
|
287
|
+
# including rhythm, pitch, and timbre.
|
|
288
|
+
# @param [String] id Required parameter: TODO: type description here
|
|
289
|
+
# @return [ApiResponse] Complete http response with raw body and status code.
|
|
290
|
+
def get_audio_analysis(id)
|
|
291
|
+
@api_call
|
|
292
|
+
.request(new_request_builder(HttpMethodEnum::GET,
|
|
293
|
+
'/audio-analysis/{id}',
|
|
294
|
+
Server::DEFAULT)
|
|
295
|
+
.template_param(new_parameter(id, key: 'id')
|
|
296
|
+
.should_encode(true))
|
|
297
|
+
.header_param(new_parameter('application/json', key: 'accept'))
|
|
298
|
+
.auth(Single.new('oauth_2_0')))
|
|
299
|
+
.response(new_response_handler
|
|
300
|
+
.deserializer(APIHelper.method(:custom_type_deserializer))
|
|
301
|
+
.deserialize_into(AudioAnalysisObject.method(:from_hash))
|
|
302
|
+
.is_api_response(true)
|
|
303
|
+
.local_error('401',
|
|
304
|
+
"Bad or expired token. This can happen if the user revoked a'\
|
|
305
|
+
' token or\nthe access token has expired. You should'\
|
|
306
|
+
' re-authenticate the user.\n",
|
|
307
|
+
UnauthorizedException)
|
|
308
|
+
.local_error('403',
|
|
309
|
+
"Bad OAuth request (wrong consumer key, bad nonce, expired'\
|
|
310
|
+
'\ntimestamp...). Unfortunately, re-authenticating the user'\
|
|
311
|
+
' won't help here.\n",
|
|
312
|
+
ForbiddenException)
|
|
313
|
+
.local_error('429',
|
|
314
|
+
"The app has exceeded its rate limits.\n",
|
|
315
|
+
TooManyRequestsException))
|
|
316
|
+
.execute
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
# Recommendations are generated based on the available information for a
|
|
320
|
+
# given seed entity and matched against similar artists and tracks. If there
|
|
321
|
+
# is sufficient information about the provided seeds, a list of tracks will
|
|
322
|
+
# be returned together with pool size details.
|
|
323
|
+
# For artists and tracks that are very new or obscure there might not be
|
|
324
|
+
# enough data to generate a list of tracks.
|
|
325
|
+
# @param [Integer] limit Optional parameter: Example:20
|
|
326
|
+
# @param [String] market Optional parameter: TODO: type description here
|
|
327
|
+
# @param [String] seed_artists Optional parameter: TODO: type description
|
|
328
|
+
# here
|
|
329
|
+
# @param [String] seed_genres Optional parameter: TODO: type description
|
|
330
|
+
# here
|
|
331
|
+
# @param [String] seed_tracks Optional parameter: TODO: type description
|
|
332
|
+
# here
|
|
333
|
+
# @param [Float] min_acousticness Optional parameter: TODO: type description
|
|
334
|
+
# here
|
|
335
|
+
# @param [Float] max_acousticness Optional parameter: TODO: type description
|
|
336
|
+
# here
|
|
337
|
+
# @param [Float] target_acousticness Optional parameter: TODO: type
|
|
338
|
+
# description here
|
|
339
|
+
# @param [Float] min_danceability Optional parameter: TODO: type description
|
|
340
|
+
# here
|
|
341
|
+
# @param [Float] max_danceability Optional parameter: TODO: type description
|
|
342
|
+
# here
|
|
343
|
+
# @param [Float] target_danceability Optional parameter: TODO: type
|
|
344
|
+
# description here
|
|
345
|
+
# @param [Integer] min_duration_ms Optional parameter: TODO: type
|
|
346
|
+
# description here
|
|
347
|
+
# @param [Integer] max_duration_ms Optional parameter: TODO: type
|
|
348
|
+
# description here
|
|
349
|
+
# @param [Integer] target_duration_ms Optional parameter: TODO: type
|
|
350
|
+
# description here
|
|
351
|
+
# @param [Float] min_energy Optional parameter: TODO: type description
|
|
352
|
+
# here
|
|
353
|
+
# @param [Float] max_energy Optional parameter: TODO: type description
|
|
354
|
+
# here
|
|
355
|
+
# @param [Float] target_energy Optional parameter: TODO: type description
|
|
356
|
+
# here
|
|
357
|
+
# @param [Float] min_instrumentalness Optional parameter: TODO: type
|
|
358
|
+
# description here
|
|
359
|
+
# @param [Float] max_instrumentalness Optional parameter: TODO: type
|
|
360
|
+
# description here
|
|
361
|
+
# @param [Float] target_instrumentalness Optional parameter: TODO: type
|
|
362
|
+
# description here
|
|
363
|
+
# @param [Integer] min_key Optional parameter: TODO: type description here
|
|
364
|
+
# @param [Integer] max_key Optional parameter: TODO: type description here
|
|
365
|
+
# @param [Integer] target_key Optional parameter: TODO: type description
|
|
366
|
+
# here
|
|
367
|
+
# @param [Float] min_liveness Optional parameter: TODO: type description
|
|
368
|
+
# here
|
|
369
|
+
# @param [Float] max_liveness Optional parameter: TODO: type description
|
|
370
|
+
# here
|
|
371
|
+
# @param [Float] target_liveness Optional parameter: TODO: type description
|
|
372
|
+
# here
|
|
373
|
+
# @param [Float] min_loudness Optional parameter: TODO: type description
|
|
374
|
+
# here
|
|
375
|
+
# @param [Float] max_loudness Optional parameter: TODO: type description
|
|
376
|
+
# here
|
|
377
|
+
# @param [Float] target_loudness Optional parameter: TODO: type description
|
|
378
|
+
# here
|
|
379
|
+
# @param [Integer] min_mode Optional parameter: TODO: type description
|
|
380
|
+
# here
|
|
381
|
+
# @param [Integer] max_mode Optional parameter: TODO: type description
|
|
382
|
+
# here
|
|
383
|
+
# @param [Integer] target_mode Optional parameter: TODO: type description
|
|
384
|
+
# here
|
|
385
|
+
# @param [Integer] min_popularity Optional parameter: TODO: type description
|
|
386
|
+
# here
|
|
387
|
+
# @param [Integer] max_popularity Optional parameter: TODO: type description
|
|
388
|
+
# here
|
|
389
|
+
# @param [Integer] target_popularity Optional parameter: TODO: type
|
|
390
|
+
# description here
|
|
391
|
+
# @param [Float] min_speechiness Optional parameter: TODO: type description
|
|
392
|
+
# here
|
|
393
|
+
# @param [Float] max_speechiness Optional parameter: TODO: type description
|
|
394
|
+
# here
|
|
395
|
+
# @param [Float] target_speechiness Optional parameter: TODO: type
|
|
396
|
+
# description here
|
|
397
|
+
# @param [Float] min_tempo Optional parameter: TODO: type description here
|
|
398
|
+
# @param [Float] max_tempo Optional parameter: TODO: type description here
|
|
399
|
+
# @param [Float] target_tempo Optional parameter: TODO: type description
|
|
400
|
+
# here
|
|
401
|
+
# @param [Integer] min_time_signature Optional parameter: TODO: type
|
|
402
|
+
# description here
|
|
403
|
+
# @param [Integer] max_time_signature Optional parameter: TODO: type
|
|
404
|
+
# description here
|
|
405
|
+
# @param [Integer] target_time_signature Optional parameter: TODO: type
|
|
406
|
+
# description here
|
|
407
|
+
# @param [Float] min_valence Optional parameter: TODO: type description
|
|
408
|
+
# here
|
|
409
|
+
# @param [Float] max_valence Optional parameter: TODO: type description
|
|
410
|
+
# here
|
|
411
|
+
# @param [Float] target_valence Optional parameter: TODO: type description
|
|
412
|
+
# here
|
|
413
|
+
# @return [ApiResponse] Complete http response with raw body and status code.
|
|
414
|
+
def get_recommendations(limit: 20,
|
|
415
|
+
market: nil,
|
|
416
|
+
seed_artists: nil,
|
|
417
|
+
seed_genres: nil,
|
|
418
|
+
seed_tracks: nil,
|
|
419
|
+
min_acousticness: nil,
|
|
420
|
+
max_acousticness: nil,
|
|
421
|
+
target_acousticness: nil,
|
|
422
|
+
min_danceability: nil,
|
|
423
|
+
max_danceability: nil,
|
|
424
|
+
target_danceability: nil,
|
|
425
|
+
min_duration_ms: nil,
|
|
426
|
+
max_duration_ms: nil,
|
|
427
|
+
target_duration_ms: nil,
|
|
428
|
+
min_energy: nil,
|
|
429
|
+
max_energy: nil,
|
|
430
|
+
target_energy: nil,
|
|
431
|
+
min_instrumentalness: nil,
|
|
432
|
+
max_instrumentalness: nil,
|
|
433
|
+
target_instrumentalness: nil,
|
|
434
|
+
min_key: nil,
|
|
435
|
+
max_key: nil,
|
|
436
|
+
target_key: nil,
|
|
437
|
+
min_liveness: nil,
|
|
438
|
+
max_liveness: nil,
|
|
439
|
+
target_liveness: nil,
|
|
440
|
+
min_loudness: nil,
|
|
441
|
+
max_loudness: nil,
|
|
442
|
+
target_loudness: nil,
|
|
443
|
+
min_mode: nil,
|
|
444
|
+
max_mode: nil,
|
|
445
|
+
target_mode: nil,
|
|
446
|
+
min_popularity: nil,
|
|
447
|
+
max_popularity: nil,
|
|
448
|
+
target_popularity: nil,
|
|
449
|
+
min_speechiness: nil,
|
|
450
|
+
max_speechiness: nil,
|
|
451
|
+
target_speechiness: nil,
|
|
452
|
+
min_tempo: nil,
|
|
453
|
+
max_tempo: nil,
|
|
454
|
+
target_tempo: nil,
|
|
455
|
+
min_time_signature: nil,
|
|
456
|
+
max_time_signature: nil,
|
|
457
|
+
target_time_signature: nil,
|
|
458
|
+
min_valence: nil,
|
|
459
|
+
max_valence: nil,
|
|
460
|
+
target_valence: nil)
|
|
461
|
+
@api_call
|
|
462
|
+
.request(new_request_builder(HttpMethodEnum::GET,
|
|
463
|
+
'/recommendations',
|
|
464
|
+
Server::DEFAULT)
|
|
465
|
+
.query_param(new_parameter(limit, key: 'limit'))
|
|
466
|
+
.query_param(new_parameter(market, key: 'market'))
|
|
467
|
+
.query_param(new_parameter(seed_artists, key: 'seed_artists'))
|
|
468
|
+
.query_param(new_parameter(seed_genres, key: 'seed_genres'))
|
|
469
|
+
.query_param(new_parameter(seed_tracks, key: 'seed_tracks'))
|
|
470
|
+
.query_param(new_parameter(min_acousticness, key: 'min_acousticness'))
|
|
471
|
+
.query_param(new_parameter(max_acousticness, key: 'max_acousticness'))
|
|
472
|
+
.query_param(new_parameter(target_acousticness, key: 'target_acousticness'))
|
|
473
|
+
.query_param(new_parameter(min_danceability, key: 'min_danceability'))
|
|
474
|
+
.query_param(new_parameter(max_danceability, key: 'max_danceability'))
|
|
475
|
+
.query_param(new_parameter(target_danceability, key: 'target_danceability'))
|
|
476
|
+
.query_param(new_parameter(min_duration_ms, key: 'min_duration_ms'))
|
|
477
|
+
.query_param(new_parameter(max_duration_ms, key: 'max_duration_ms'))
|
|
478
|
+
.query_param(new_parameter(target_duration_ms, key: 'target_duration_ms'))
|
|
479
|
+
.query_param(new_parameter(min_energy, key: 'min_energy'))
|
|
480
|
+
.query_param(new_parameter(max_energy, key: 'max_energy'))
|
|
481
|
+
.query_param(new_parameter(target_energy, key: 'target_energy'))
|
|
482
|
+
.query_param(new_parameter(min_instrumentalness, key: 'min_instrumentalness'))
|
|
483
|
+
.query_param(new_parameter(max_instrumentalness, key: 'max_instrumentalness'))
|
|
484
|
+
.query_param(new_parameter(target_instrumentalness, key: 'target_instrumentalness'))
|
|
485
|
+
.query_param(new_parameter(min_key, key: 'min_key'))
|
|
486
|
+
.query_param(new_parameter(max_key, key: 'max_key'))
|
|
487
|
+
.query_param(new_parameter(target_key, key: 'target_key'))
|
|
488
|
+
.query_param(new_parameter(min_liveness, key: 'min_liveness'))
|
|
489
|
+
.query_param(new_parameter(max_liveness, key: 'max_liveness'))
|
|
490
|
+
.query_param(new_parameter(target_liveness, key: 'target_liveness'))
|
|
491
|
+
.query_param(new_parameter(min_loudness, key: 'min_loudness'))
|
|
492
|
+
.query_param(new_parameter(max_loudness, key: 'max_loudness'))
|
|
493
|
+
.query_param(new_parameter(target_loudness, key: 'target_loudness'))
|
|
494
|
+
.query_param(new_parameter(min_mode, key: 'min_mode'))
|
|
495
|
+
.query_param(new_parameter(max_mode, key: 'max_mode'))
|
|
496
|
+
.query_param(new_parameter(target_mode, key: 'target_mode'))
|
|
497
|
+
.query_param(new_parameter(min_popularity, key: 'min_popularity'))
|
|
498
|
+
.query_param(new_parameter(max_popularity, key: 'max_popularity'))
|
|
499
|
+
.query_param(new_parameter(target_popularity, key: 'target_popularity'))
|
|
500
|
+
.query_param(new_parameter(min_speechiness, key: 'min_speechiness'))
|
|
501
|
+
.query_param(new_parameter(max_speechiness, key: 'max_speechiness'))
|
|
502
|
+
.query_param(new_parameter(target_speechiness, key: 'target_speechiness'))
|
|
503
|
+
.query_param(new_parameter(min_tempo, key: 'min_tempo'))
|
|
504
|
+
.query_param(new_parameter(max_tempo, key: 'max_tempo'))
|
|
505
|
+
.query_param(new_parameter(target_tempo, key: 'target_tempo'))
|
|
506
|
+
.query_param(new_parameter(min_time_signature, key: 'min_time_signature'))
|
|
507
|
+
.query_param(new_parameter(max_time_signature, key: 'max_time_signature'))
|
|
508
|
+
.query_param(new_parameter(target_time_signature, key: 'target_time_signature'))
|
|
509
|
+
.query_param(new_parameter(min_valence, key: 'min_valence'))
|
|
510
|
+
.query_param(new_parameter(max_valence, key: 'max_valence'))
|
|
511
|
+
.query_param(new_parameter(target_valence, key: 'target_valence'))
|
|
512
|
+
.header_param(new_parameter('application/json', key: 'accept'))
|
|
513
|
+
.auth(Single.new('oauth_2_0')))
|
|
514
|
+
.response(new_response_handler
|
|
515
|
+
.deserializer(APIHelper.method(:custom_type_deserializer))
|
|
516
|
+
.deserialize_into(RecommendationsObject.method(:from_hash))
|
|
517
|
+
.is_api_response(true)
|
|
518
|
+
.local_error('401',
|
|
519
|
+
"Bad or expired token. This can happen if the user revoked a'\
|
|
520
|
+
' token or\nthe access token has expired. You should'\
|
|
521
|
+
' re-authenticate the user.\n",
|
|
522
|
+
UnauthorizedException)
|
|
523
|
+
.local_error('403',
|
|
524
|
+
"Bad OAuth request (wrong consumer key, bad nonce, expired'\
|
|
525
|
+
'\ntimestamp...). Unfortunately, re-authenticating the user'\
|
|
526
|
+
' won't help here.\n",
|
|
527
|
+
ForbiddenException)
|
|
528
|
+
.local_error('429',
|
|
529
|
+
"The app has exceeded its rate limits.\n",
|
|
530
|
+
TooManyRequestsException))
|
|
531
|
+
.execute
|
|
532
|
+
end
|
|
533
|
+
end
|
|
534
|
+
end
|