diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1404ea4..91355ae 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog #
+## v0.13 ##
+- Added: preliminary scaffolding for web API (playlists, starring, all of it is coming)
+- Added: new settings menu.
+- Added: you can now *disable* track notifications
+- Fixed: track notifications say the right thing in Spotify 1.0
+
## v0.12 ##
- Added: compatiblity with Alfred Remote
diff --git a/README.md b/README.md
index c4c6b59..52a17c0 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@ Spotifious uses Packal to make sure you always have the latest version. It gives
## Download & Install ##
-Latest version: [v0.11.2](https://github.com/citelao/Spotify-for-Alfred/archive/master.zip) | Latest dev build: [v0.11.2](https://github.com/citelao/Spotify-for-Alfred/archive/dev.zip)
+Latest version: [v0.13](https://github.com/citelao/Spotify-for-Alfred/archive/master.zip) | Latest dev build: [v0.13](https://github.com/citelao/Spotify-for-Alfred/archive/dev.zip)
1. [Download](https://github.com/citelao/Spotify-for-Alfred/archive/master.zip)
this repository.
@@ -90,6 +90,7 @@ A lot of people helped out on this:
- **vdesabou** and I trade ideas a ton
- **PHPfunk** and his PHP Alfred workflow inspired much of `OhAlfred`
- **David Ferguson** helped with some iffy Alfred glitches
+- **jwilsson**'s [Spotify PHP web API](http://jwilsson.github.io/spotify-web-api-php/).
- a slightly modified version of [Entypo](http://www.entypo.com/) icon font face for icons.
- and many other people mentioned in the code.
@@ -106,6 +107,7 @@ Oh, and thanks for reading this whole README. I hope you enjoy Spotifious!
See `CHANGELOG.md` for more detailed information.
+- v0.13: Preliminary Web API; toggle track notifications
- v0.12: Compatible with Alfred Remote
- v0.11.2: Location opt-out and tutorial
- v0.11.1: Fixed response freezing
diff --git a/Spotifious.alfredworkflow b/Spotifious.alfredworkflow
deleted file mode 100644
index 61a9ee7..0000000
Binary files a/Spotifious.alfredworkflow and /dev/null differ
diff --git a/callback.php b/callback.php
new file mode 100644
index 0000000..f79d66c
--- /dev/null
+++ b/callback.php
@@ -0,0 +1,40 @@
+options('spotify_client_id'), $alfred->options('spotify_secret'), 'http://localhost:11114/callback.php');
+
+// Request a access token using the code from Spotify
+$session->requestToken($_GET['code']);
+
+// Save the tokens
+$alfred->options("spotify_access_token", $session->getAccessToken());
+$alfred->options("spotify_refresh_token", $session->getRefreshToken());
+$alfred->options("spotify_access_token_expires", time() + $session->getExpires());
+
+?>
+
+
+ Spotifious Setup
+
+
+
+
+
+
+
+
+ Spotifious should be setup :)
+
+ You should be able to start using Spotifious now!
+
+
+ (enjoy)
+
+
+
\ No newline at end of file
diff --git a/composer.json b/composer.json
index 5a0d8a4..ce9f558 100644
--- a/composer.json
+++ b/composer.json
@@ -4,5 +4,8 @@
"OhAlfred\\": "src/citelao/OhAlfred/",
"Spotifious\\": "src/citelao/Spotifious/"
}
+ },
+ "require": {
+ "jwilsson/spotify-web-api-php": "0.6.*"
}
}
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 0000000..af3408c
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,62 @@
+{
+ "_readme": [
+ "This file locks the dependencies of your project to a known state",
+ "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
+ "This file is @generated automatically"
+ ],
+ "hash": "45586bdb80f81335b8366a45bdf833f6",
+ "packages": [
+ {
+ "name": "jwilsson/spotify-web-api-php",
+ "version": "0.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/jwilsson/spotify-web-api-php.git",
+ "reference": "0d9ea746aa942d215301fe463611ef1a3d4b9b93"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/jwilsson/spotify-web-api-php/zipball/0d9ea746aa942d215301fe463611ef1a3d4b9b93",
+ "reference": "0d9ea746aa942d215301fe463611ef1a3d4b9b93",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*",
+ "satooshi/php-coveralls": "dev-master",
+ "vlucas/phpdotenv": "1.*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "SpotifyWebAPI\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jonathan Wilsson",
+ "email": "jonathan.wilsson@gmail.com"
+ }
+ ],
+ "description": "PHP implementation of Spotify's Web API.",
+ "homepage": "https://github.com/jwilsson/spotify-web-api-php",
+ "keywords": [
+ "spotify"
+ ],
+ "time": "2014-10-26 16:23:57"
+ }
+ ],
+ "packages-dev": [],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": [],
+ "prefer-stable": false,
+ "platform": [],
+ "platform-dev": []
+}
diff --git a/include/images/dash.png b/include/images/dash.png
new file mode 100644
index 0000000..ced246d
Binary files /dev/null and b/include/images/dash.png differ
diff --git a/include/images/disabled.png b/include/images/disabled.png
new file mode 100644
index 0000000..52cf6d8
Binary files /dev/null and b/include/images/disabled.png differ
diff --git a/include/images/psd/dash.psd b/include/images/psd/dash.psd
new file mode 100644
index 0000000..97cf0ad
Binary files /dev/null and b/include/images/psd/dash.psd differ
diff --git a/include/images/psd/disabled.psd b/include/images/psd/disabled.psd
new file mode 100644
index 0000000..e72116e
Binary files /dev/null and b/include/images/psd/disabled.psd differ
diff --git a/include/setup/client_submit.php b/include/setup/client_submit.php
new file mode 100644
index 0000000..4335964
--- /dev/null
+++ b/include/setup/client_submit.php
@@ -0,0 +1,87 @@
+
+
+
+ Spotifious Setup
+
+
+
+
+
+
+
+
+ Setup complete!
+ You've successfully opted out of using a Spotify app.
+
+ You can always opt back in using the settings menu in
+ Spotifious. Just type s in Spotifious.
+
+ You can now reopen Spotifious to continue setup.
+
+
+
+
+
+ requestCredentialsToken($scopes);
+} catch(SpotifyWebAPI\SpotifyWebAPIException $e) {
+ $response["status"] = "error";
+
+ $response["message"] = "Invalid data - ";
+ if ($e->getMessage() == "Invalid client") {
+ $response["message"] .= "invalid ID";
+ } elseif($e->getMessage() == "Invalid client secret") {
+ $response["message"] .= "incorrect secret";
+ } else {
+ $response["message"] .= $e->getMessage();
+ }
+
+ echo json_encode($response);
+ exit();
+}
+
+// Save data
+$alfred->options('spotify_client_id', $_GET["id"]);
+$alfred->options('spotify_secret', $_GET["secret"]);
+$alfred->options('spotify_access_token', '');
+$alfred->options('spotify_access_token_expires', '');
+$alfred->options('spotify_refresh_token', '');
+
+$response["status"] = "success";
+$response["message"] = "Saved your information! Make sure to do step 8 :)";
+echo json_encode($response);
+exit();
\ No newline at end of file
diff --git a/include/setup/img/client_info.png b/include/setup/img/client_info.png
new file mode 100644
index 0000000..47b4b51
Binary files /dev/null and b/include/setup/img/client_info.png differ
diff --git a/include/setup/img/create_an_app_button.png b/include/setup/img/create_an_app_button.png
new file mode 100644
index 0000000..8805826
Binary files /dev/null and b/include/setup/img/create_an_app_button.png differ
diff --git a/include/setup/img/create_an_app_name.png b/include/setup/img/create_an_app_name.png
new file mode 100644
index 0000000..c4a9a4f
Binary files /dev/null and b/include/setup/img/create_an_app_name.png differ
diff --git a/include/setup/img/redirect.png b/include/setup/img/redirect.png
new file mode 100644
index 0000000..f93cc2b
Binary files /dev/null and b/include/setup/img/redirect.png differ
diff --git a/include/setup/img/save.png b/include/setup/img/save.png
new file mode 100644
index 0000000..77aeb2f
Binary files /dev/null and b/include/setup/img/save.png differ
diff --git a/include/setup/index.php b/include/setup/index.php
new file mode 100644
index 0000000..16d72f9
--- /dev/null
+++ b/include/setup/index.php
@@ -0,0 +1,180 @@
+
+
+ Spotifious Setup
+
+
+
+
+
+
+
+
+ Spotifious Setup
+
+ Hi! In order to fully use Spotifious (search playlists, star
+ tracks, etc.), you need to generate a Spotify API key by
+ creating a Spotify app.
+
+
+ NOTE : this server will automatically close in 5
+ minutes. If you get errors like "page not found," just reopen
+ Spotifious.
+
+
+
+
+ Instructions
+
+ Setting up the app is not very hard, but it has a couple
+ specific steps. Just follow these instructions, and you'll be
+ fine!
+
+
+ If you're worried about privacy,
+ here’s what I have to say.
+
+
+ If you already know how to make a Spotify app, you can enter the
+ ID and secret here . Please set the callback
+ URL correctly, though (step 8).
+
+
+
+ Open up the Spotify application manager page .
+ Login, if prompted.
+
+ Click "Create an app."
+
+
+ The 'Create an app' button
+
+
+
+ Enter an application name and description. They can be anything you want.
+
+
+ This data will do nicely.
+
+
+ Click "Create"!
+
+ Note the "Client ID" and "Client Secret." You'll enter them
+ later.
+
+ Click the "Add URI" button to add a new Redirect URI.
+
+ Type http://localhost:11114/callback.php
and click "Add"
+
+
+ Just type it in!
+
+
+
+ Save those changes!
+
+
+ The green one, please.
+
+
+ Copy and paste your Client ID and Client Secret below:
+
+
+
+
+ This will not be a blur on your screen.
+
+
+ Go back to Spotifious and finish your setup!
+
+
+
+
+ Privacy
+
+ Spotifious merely reads and writes your keys from and to your
+ hard drive. They are never used in a way that could compromise
+ their integrity other than in the Spotify query, as required by
+ the API. Spotifious itself never sends the data
+ anywhere else, for any reason, at any time.
+
+
+ You do not need to set up a Spotify app to use
+ Spotifious, but you lose a lot of functionality. If you would
+ prefer not to use this part of Spotify,
+ click here .
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/include/setup/link.php b/include/setup/link.php
new file mode 100644
index 0000000..fcf31eb
--- /dev/null
+++ b/include/setup/link.php
@@ -0,0 +1,22 @@
+options('spotify_client_id'), $alfred->options('spotify_secret'), 'http://localhost:11114/callback.php');
+
+$scopes = array(
+ 'playlist-read-private',
+ 'user-read-private'
+);
+
+$authorizeUrl = $session->getAuthorizeUrl(array(
+ 'scope' => $scopes
+));
+
+header('Location: ' . $authorizeUrl);
+die();
\ No newline at end of file
diff --git a/include/setup/style/normalize.css b/include/setup/style/normalize.css
new file mode 100644
index 0000000..81c6f31
--- /dev/null
+++ b/include/setup/style/normalize.css
@@ -0,0 +1,427 @@
+/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
+
+/**
+ * 1. Set default font family to sans-serif.
+ * 2. Prevent iOS text size adjust after orientation change, without disabling
+ * user zoom.
+ */
+
+html {
+ font-family: sans-serif; /* 1 */
+ -ms-text-size-adjust: 100%; /* 2 */
+ -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/**
+ * Remove default margin.
+ */
+
+body {
+ margin: 0;
+}
+
+/* HTML5 display definitions
+ ========================================================================== */
+
+/**
+ * Correct `block` display not defined for any HTML5 element in IE 8/9.
+ * Correct `block` display not defined for `details` or `summary` in IE 10/11
+ * and Firefox.
+ * Correct `block` display not defined for `main` in IE 11.
+ */
+
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+main,
+menu,
+nav,
+section,
+summary {
+ display: block;
+}
+
+/**
+ * 1. Correct `inline-block` display not defined in IE 8/9.
+ * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
+ */
+
+audio,
+canvas,
+progress,
+video {
+ display: inline-block; /* 1 */
+ vertical-align: baseline; /* 2 */
+}
+
+/**
+ * Prevent modern browsers from displaying `audio` without controls.
+ * Remove excess height in iOS 5 devices.
+ */
+
+audio:not([controls]) {
+ display: none;
+ height: 0;
+}
+
+/**
+ * Address `[hidden]` styling not present in IE 8/9/10.
+ * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
+ */
+
+[hidden],
+template {
+ display: none;
+}
+
+/* Links
+ ========================================================================== */
+
+/**
+ * Remove the gray background color from active links in IE 10.
+ */
+
+a {
+ background-color: transparent;
+}
+
+/**
+ * Improve readability when focused and also mouse hovered in all browsers.
+ */
+
+a:active,
+a:hover {
+ outline: 0;
+}
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
+ */
+
+abbr[title] {
+ border-bottom: 1px dotted;
+}
+
+/**
+ * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
+ */
+
+b,
+strong {
+ font-weight: bold;
+}
+
+/**
+ * Address styling not present in Safari and Chrome.
+ */
+
+dfn {
+ font-style: italic;
+}
+
+/**
+ * Address variable `h1` font-size and margin within `section` and `article`
+ * contexts in Firefox 4+, Safari, and Chrome.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0.67em 0;
+}
+
+/**
+ * Address styling not present in IE 8/9.
+ */
+
+mark {
+ background: #ff0;
+ color: #000;
+}
+
+/**
+ * Address inconsistent and variable font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` affecting `line-height` in all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sup {
+ top: -0.5em;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Remove border when inside `a` element in IE 8/9/10.
+ */
+
+img {
+ border: 0;
+}
+
+/**
+ * Correct overflow not hidden in IE 9/10/11.
+ */
+
+svg:not(:root) {
+ overflow: hidden;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * Address margin not present in IE 8/9 and Safari.
+ */
+
+figure {
+ margin: 1em 40px;
+}
+
+/**
+ * Address differences between Firefox and other browsers.
+ */
+
+hr {
+ -moz-box-sizing: content-box;
+ box-sizing: content-box;
+ height: 0;
+}
+
+/**
+ * Contain overflow in all browsers.
+ */
+
+pre {
+ overflow: auto;
+}
+
+/**
+ * Address odd `em`-unit font size rendering in all browsers.
+ */
+
+code,
+kbd,
+pre,
+samp {
+ font-family: monospace, monospace;
+ font-size: 1em;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * Known limitation: by default, Chrome and Safari on OS X allow very limited
+ * styling of `select`, unless a `border` property is set.
+ */
+
+/**
+ * 1. Correct color not being inherited.
+ * Known issue: affects color of disabled elements.
+ * 2. Correct font properties not being inherited.
+ * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ color: inherit; /* 1 */
+ font: inherit; /* 2 */
+ margin: 0; /* 3 */
+}
+
+/**
+ * Address `overflow` set to `hidden` in IE 8/9/10/11.
+ */
+
+button {
+ overflow: visible;
+}
+
+/**
+ * Address inconsistent `text-transform` inheritance for `button` and `select`.
+ * All other form control elements do not inherit `text-transform` values.
+ * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
+ * Correct `select` style inheritance in Firefox.
+ */
+
+button,
+select {
+ text-transform: none;
+}
+
+/**
+ * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
+ * and `video` controls.
+ * 2. Correct inability to style clickable `input` types in iOS.
+ * 3. Improve usability and consistency of cursor style between image-type
+ * `input` and others.
+ */
+
+button,
+html input[type="button"], /* 1 */
+input[type="reset"],
+input[type="submit"] {
+ -webkit-appearance: button; /* 2 */
+ cursor: pointer; /* 3 */
+}
+
+/**
+ * Re-set default cursor for disabled elements.
+ */
+
+button[disabled],
+html input[disabled] {
+ cursor: default;
+}
+
+/**
+ * Remove inner padding and border in Firefox 4+.
+ */
+
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+ border: 0;
+ padding: 0;
+}
+
+/**
+ * Address Firefox 4+ setting `line-height` on `input` using `!important` in
+ * the UA stylesheet.
+ */
+
+input {
+ line-height: normal;
+}
+
+/**
+ * It's recommended that you don't attempt to style these elements.
+ * Firefox's implementation doesn't respect box-sizing, padding, or width.
+ *
+ * 1. Address box sizing set to `content-box` in IE 8/9/10.
+ * 2. Remove excess padding in IE 8/9/10.
+ */
+
+input[type="checkbox"],
+input[type="radio"] {
+ box-sizing: border-box; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Fix the cursor style for Chrome's increment/decrement buttons. For certain
+ * `font-size` values of the `input`, it causes the cursor style of the
+ * decrement button to change from `default` to `text`.
+ */
+
+input[type="number"]::-webkit-inner-spin-button,
+input[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/**
+ * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
+ * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
+ * (include `-moz` to future-proof).
+ */
+
+input[type="search"] {
+ -webkit-appearance: textfield; /* 1 */
+ -moz-box-sizing: content-box;
+ -webkit-box-sizing: content-box; /* 2 */
+ box-sizing: content-box;
+}
+
+/**
+ * Remove inner padding and search cancel button in Safari and Chrome on OS X.
+ * Safari (but not Chrome) clips the cancel button when the search input has
+ * padding (and `textfield` appearance).
+ */
+
+input[type="search"]::-webkit-search-cancel-button,
+input[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * Define consistent border, margin, and padding.
+ */
+
+fieldset {
+ border: 1px solid #c0c0c0;
+ margin: 0 2px;
+ padding: 0.35em 0.625em 0.75em;
+}
+
+/**
+ * 1. Correct `color` not being inherited in IE 8/9/10/11.
+ * 2. Remove padding so people aren't caught out if they zero out fieldsets.
+ */
+
+legend {
+ border: 0; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Remove default vertical scrollbar in IE 8/9/10/11.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * Don't inherit the `font-weight` (applied by a rule above).
+ * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
+ */
+
+optgroup {
+ font-weight: bold;
+}
+
+/* Tables
+ ========================================================================== */
+
+/**
+ * Remove most spacing between table cells.
+ */
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+td,
+th {
+ padding: 0;
+}
\ No newline at end of file
diff --git a/include/setup/style/style.css b/include/setup/style/style.css
new file mode 100644
index 0000000..d49c8d8
--- /dev/null
+++ b/include/setup/style/style.css
@@ -0,0 +1,168 @@
+* {
+ box-sizing: border-box;
+}
+
+*:focus {
+ -webkit-animation: bounce 0.25s 0s;
+ -moz-animation: bounce 0.25s 0s;
+ -o-animation: bounce 0.25s 0s;
+ animation: bounce 0.25s 0s;
+}
+
+*:target {
+ background: #93FF74;
+ -webkit-animation: bounce 0.25s 0s;
+ -moz-animation: bounce 0.25s 0s;
+ -o-animation: bounce 0.25s 0s;
+ animation: bounce 0.25s 0s;
+}
+
+a,
+input[type=submit] {
+ position: relative;
+ bottom: 0;
+ -webkit-transition: all 0.1s ease-in;
+}
+
+a:hover,
+input[type=submit]:hover {
+ position: relative;
+ bottom: .1em;
+ -webkit-transition: none;
+}
+
+body {
+ color: #333;
+ line-height: 1.5;
+}
+
+.clear {
+ clear: both;
+}
+
+.wrapper {
+ width: 40em;
+ margin: 0 auto;
+}
+
+code, kbd {
+ background: #ddd;
+ padding: .5em;
+
+ border: .1em solid #999;
+ border-radius: .5em;
+}
+
+figure {
+ margin: 1em 0;
+ padding: 0;
+}
+
+figcaption {
+ text-align: center;
+ padding: .5em;
+
+ background: #333;
+ color: #fff;
+}
+
+img {
+ max-width: 100%;
+ border: .5em solid #333;
+}
+
+table {
+ width: 100%;
+}
+
+td + td {
+ padding-left: .5em;
+}
+
+label {
+ color: #999;
+}
+
+input {
+ padding: .5em;
+ width: 100%;
+ border: .1em solid #999;
+}
+
+ input[type=submit] {
+ width: auto;
+ float: right;
+ margin: .5em 0;
+ padding: .5em 2em;
+
+ background: rgb(81, 37, 132);
+ color: #fff;
+ border: 0;
+ border-radius: 1em;
+ }
+
+ input[disabled] {
+ color: #999;
+ }
+
+.cancel {
+ float: right;
+ display: inline-block;
+ margin: .5rem 2rem;
+
+ color: #627699;
+ font-size: 0.75em;
+}
+
+.response, .info {
+ text-align: center;
+ padding: 1em 0;
+}
+ .response {
+ display: none;
+ }
+
+ .error {
+ background: #E52C48;
+ color: #fff;
+ }
+
+ .success {
+ background: #6CD19B;
+ }
+
+ .note {
+ background: #80A0FF;
+ }
+
+ .warning {
+ background: #93FF74;
+ }
+
+@-webkit-keyframes bounce {
+ 0% { -webkit-transform: scale(1); transform: scale(1);}
+ 60% { -webkit-transform: scale(1.4); transform: scale(1.4); }
+ 90% { -webkit-transform: scale(0.95); transform: scale(0.95); }
+ 100% { -webkit-transform: scale(1); transform: scale(1); }
+}
+
+@-moz-keyframes bounce {
+ 0% { -moz-transform: scale(1); transform: scale(1);}
+ 60% { -moz-transform: scale(1.4); transform: scale(1.4); }
+ 90% { -moz-transform: scale(0.95); transform: scale(0.95); }
+ 100% { -moz-transform: scale(1); transform: scale(1); }
+}
+
+@-o-keyframes bounce {
+ 0% { -o-transform: scale(1); transform: scale(1);}
+ 60% { -o-transform: scale(1.4); transform: scale(1.4); }
+ 90% { -o-transform: scale(0.95); transform: scale(0.95); }
+ 100% { -o-transform: scale(1); transform: scale(1); }
+}
+
+@keyframes bounce {
+ 0% { transform: scale(1); }
+ 60% { transform: scale(1.4); }
+ 90% { transform: scale(0.95); }
+ 100% { transform: scale(1); }
+}
\ No newline at end of file
diff --git a/info.plist b/info.plist
index f514632..ec168a4 100644
--- a/info.plist
+++ b/info.plist
@@ -161,6 +161,17 @@
+ F4A2A879-4C5A-4532-BF35-02BAAD863581
+
+
+ destinationuid
+ 18496AC4-EA42-444C-A906-642E38259C96
+ modifiers
+ 0
+ modifiersubtext
+
+
+
createdby
Ben Stolovitz
@@ -182,13 +193,13 @@
keyword
spotifious
queuedelaycustom
- 1
+ 3
queuedelayimmediatelyinitially
-
+
queuedelaymode
- 0
- queuemode
1
+ queuemode
+ 2
runningsubtext
Getting Spotifious data...
script
@@ -273,6 +284,8 @@
config
+ concurrently
+
escaping
4
script
@@ -292,6 +305,19 @@
version
0
+
+ config
+
+ triggerid
+ search
+
+ type
+ alfred.workflow.trigger.external
+ uid
+ F4A2A879-4C5A-4532-BF35-02BAAD863581
+ version
+ 0
+
config
@@ -321,7 +347,7 @@
argument
3
argumenttext
- playpause⟩output
+ playpause⟩
hotkey
49
hotmod
@@ -371,7 +397,7 @@
argument
3
argumenttext
- next⟩output
+ next⟩
hotkey
124
hotmod
@@ -421,7 +447,7 @@
argument
3
argumenttext
- previous⟩output
+ previous⟩
hotkey
123
hotmod
@@ -545,7 +571,7 @@
readme
# Spotifious
-# v0.11.2
+# v0.13
I’ve worked a long time on it to make it as good as it can be, and if you have any ideas to make it better or if you need to complain, leave me a note on my GitHub page or on the forum threads, linked below.
@@ -571,17 +597,17 @@ This code is MIT Licensed.
30E2AA18-937F-4B5D-B685-7852B9717F34
ypos
- 830
+ 990
4BB22960-369A-4674-AF29-00CCE1603B53
ypos
- 490
+ 620
5610E60C-68BF-4445-BAE3-CB55DEA70D99
ypos
- 600
+ 730
6B1397DB-E737-4607-8181-27D9DFE70E2C
@@ -591,17 +617,17 @@ This code is MIT Licensed.
73FAFE96-4B16-4AB5-B181-229B4BB79E25
ypos
- 1310
+ 1470
7858554D-2173-462A-B03D-1078EC7059D6
ypos
- 360
+ 490
8020A500-17C9-43BA-B17A-00D35E460EB6
ypos
- 250
+ 380
86EAA0E6-6086-4BC4-8CE7-0673F392C77F
@@ -616,17 +642,17 @@ This code is MIT Licensed.
B02E0659-E11A-4746-ADB7-2C2C0A8BD8BB
ypos
- 960
+ 1120
BFFC58C1-626F-4091-A0A4-61034DDD10D0
ypos
- 1070
+ 1230
C5E43F66-AD1D-4D8D-9E4A-D7855C8F5AE2
ypos
- 720
+ 880
C8A768AF-C5D9-47A1-B499-8B0D3C844A99
@@ -636,7 +662,12 @@ This code is MIT Licensed.
F1B61D14-D686-468D-9373-AB4FC3EEE3C8
ypos
- 1200
+ 1360
+
+ F4A2A879-4C5A-4532-BF35-02BAAD863581
+
+ ypos
+ 230
webaddress
diff --git a/spotifious.sublime-project b/spotifious.sublime-project
index 24db303..7cc9479 100644
--- a/spotifious.sublime-project
+++ b/spotifious.sublime-project
@@ -2,7 +2,7 @@
"folders":
[
{
- "path": "."
+ "path": "/Users/citelao/Dropbox/Alfred/Alfred.alfredpreferences/workflows/spotifious"
}
]
}
diff --git a/spotifious.sublime-workspace b/spotifious.sublime-workspace
new file mode 100644
index 0000000..7ab0892
--- /dev/null
+++ b/spotifious.sublime-workspace
@@ -0,0 +1,1552 @@
+{
+ "auto_complete":
+ {
+ "selected_items":
+ [
+ [
+ "content",
+ "content_scripts"
+ ],
+ [
+ "outpu",
+ "outputId"
+ ],
+ [
+ "output",
+ "outputElement"
+ ],
+ [
+ "curre",
+ "currentPotential"
+ ],
+ [
+ "conte",
+ "contextPotentials"
+ ],
+ [
+ "getIn",
+ "getInheritedRules"
+ ],
+ [
+ "cont",
+ "contentBefore"
+ ],
+ [
+ "contentAnce",
+ "contentAncestorBefore"
+ ],
+ [
+ "buildCon",
+ "buildContentBefore"
+ ],
+ [
+ "contentAnces",
+ "contentAncestorAfter"
+ ],
+ [
+ "buildConte",
+ "buildContentAfter"
+ ],
+ [
+ "getInher",
+ "getInheritedBeforeParents"
+ ],
+ [
+ "context",
+ "contextPotentials"
+ ],
+ [
+ "for",
+ "for for (…) {…} (Improved Native For-Loop)"
+ ],
+ [
+ "after",
+ "aftersElement"
+ ],
+ [
+ "old",
+ "oldParents"
+ ],
+ [
+ "getInhe",
+ "getInheritedBeforeRules"
+ ],
+ [
+ "before",
+ "beforeRules"
+ ],
+ [
+ "befor",
+ "beforesString"
+ ],
+ [
+ "afters",
+ "aftersString"
+ ],
+ [
+ "bef",
+ "beforesString"
+ ],
+ [
+ "inher",
+ "inheriteds"
+ ],
+ [
+ "chil",
+ "children"
+ ],
+ [
+ "parent",
+ "parentLocations"
+ ],
+ [
+ "pare",
+ "parentRules"
+ ],
+ [
+ "inh",
+ "inheriteds"
+ ],
+ [
+ "error",
+ "errorElement"
+ ],
+ [
+ "erro",
+ "errorElement"
+ ],
+ [
+ "audio",
+ "audioElement"
+ ],
+ [
+ "focus",
+ "focussed_parent"
+ ],
+ [
+ "paren",
+ "parentNode"
+ ],
+ [
+ "matched",
+ "matchedContext"
+ ],
+ [
+ "matc",
+ "matchedContext"
+ ],
+ [
+ "getma",
+ "getMatchedContextNumber"
+ ],
+ [
+ "getm",
+ "getMatchedContext"
+ ],
+ [
+ "matche",
+ "matchedRule"
+ ],
+ [
+ "getCell",
+ "getCellRow"
+ ],
+ [
+ "col",
+ "column"
+ ],
+ [
+ "getce",
+ "getCellColumn"
+ ],
+ [
+ "header",
+ "headerRow"
+ ],
+ [
+ "conten",
+ "content_before"
+ ],
+ [
+ "rule",
+ "ruleSet"
+ ],
+ [
+ "rul",
+ "ruleSet"
+ ],
+ [
+ "split",
+ "splitRule"
+ ],
+ [
+ "prefix",
+ "_prefix_usable"
+ ],
+ [
+ "inhe",
+ "inheritedRule"
+ ],
+ [
+ "getCe",
+ "getCells"
+ ],
+ [
+ "match",
+ "matchedLocation"
+ ],
+ [
+ "last",
+ "lastChild"
+ ],
+ [
+ "add",
+ "addClasses"
+ ],
+ [
+ "is",
+ "isPositional"
+ ],
+ [
+ "tab",
+ "tabbable2"
+ ],
+ [
+ "forced",
+ "forcedTabbable"
+ ],
+ [
+ "tabbable",
+ "tabbable"
+ ],
+ [
+ "tabba",
+ "tabbable"
+ ],
+ [
+ "matchedRu",
+ "matchedRuleNumber"
+ ],
+ [
+ "injec",
+ "injectClasses"
+ ],
+ [
+ "ele",
+ "element"
+ ],
+ [
+ "inje",
+ "injectClasses"
+ ],
+ [
+ "matchedR",
+ "matchedRuleNumber"
+ ],
+ [
+ "getElem",
+ "getElementTable"
+ ],
+ [
+ "sibl",
+ "siblingTable"
+ ],
+ [
+ "elem",
+ "elementTable"
+ ],
+ [
+ "sib",
+ "siblingCell"
+ ],
+ [
+ "find",
+ "findHierarchicNeighbor"
+ ],
+ [
+ "getTabl",
+ "getTableWidth"
+ ],
+ [
+ "eleme",
+ "elementCell"
+ ],
+ [
+ "siblin",
+ "siblingCell"
+ ],
+ [
+ "nei",
+ "neighborParent"
+ ],
+ [
+ "newn",
+ "newNeighbor"
+ ],
+ [
+ "neig",
+ "neighbor"
+ ],
+ [
+ "neigh",
+ "neighborParent"
+ ],
+ [
+ "n",
+ "newNeighbor"
+ ],
+ [
+ "newne",
+ "newNeighborParent"
+ ],
+ [
+ "en",
+ "entabler"
+ ],
+ [
+ "ista",
+ "isTableCell"
+ ],
+ [
+ "getp",
+ "getParent"
+ ],
+ [
+ "getR",
+ "getRule"
+ ],
+ [
+ "get",
+ "getMatchedRuleNumber"
+ ],
+ [
+ "stop",
+ "stopCallback"
+ ],
+ [
+ "mat",
+ "matches"
+ ],
+ [
+ "app",
+ "appendChild"
+ ],
+ [
+ "lagger",
+ "laggerNode"
+ ],
+ [
+ "la",
+ "laggerNode"
+ ],
+ [
+ "current",
+ "currentNode"
+ ],
+ [
+ "curren",
+ "currentNode"
+ ],
+ [
+ "childn",
+ "childNodes"
+ ],
+ [
+ "end",
+ "endNode"
+ ],
+ [
+ "p",
+ "p Tag"
+ ],
+ [
+ "bac",
+ "background"
+ ],
+ [
+ "forc",
+ "forcedTabbable"
+ ],
+ [
+ "selec",
+ "selector"
+ ],
+ [
+ "child",
+ "childNodesLength"
+ ],
+ [
+ "fore",
+ "forcedTabbable"
+ ],
+ [
+ "class",
+ "classList"
+ ],
+ [
+ "children",
+ "childrenLength"
+ ],
+ [
+ "inject",
+ "injectTabbableClasses"
+ ],
+ [
+ "ta",
+ "tabbable"
+ ],
+ [
+ "spe",
+ "specificity"
+ ],
+ [
+ "rules",
+ "rulesFile"
+ ],
+ [
+ "loca",
+ "localRules"
+ ],
+ [
+ "lo",
+ "log"
+ ],
+ [
+ "fin",
+ "findNeighbor"
+ ],
+ [
+ "fu",
+ "function"
+ ],
+ [
+ "node",
+ "nodeType"
+ ],
+ [
+ "con",
+ "console"
+ ],
+ [
+ "chilren",
+ "childrenLength"
+ ],
+ [
+ "inj",
+ "injectClassesAtLevel"
+ ],
+ [
+ "isTab",
+ "isTableCell"
+ ],
+ [
+ "isTa",
+ "isTableRow"
+ ],
+ [
+ "getC",
+ "getCell"
+ ],
+ [
+ "getCel",
+ "getCellX"
+ ],
+ [
+ "quni",
+ "QUnit"
+ ],
+ [
+ "regi",
+ "registerFocusChangeListener"
+ ],
+ [
+ "gete",
+ "getElementsByClassName"
+ ],
+ [
+ "input",
+ "inputMessage"
+ ],
+ [
+ "price",
+ "priceForCrate"
+ ],
+ [
+ "Input",
+ "inputMessage"
+ ],
+ [
+ "pric",
+ "priceForKey"
+ ],
+ [
+ "rep",
+ "respond"
+ ],
+ [
+ "el",
+ "element"
+ ],
+ [
+ "pre",
+ "previousSibling"
+ ],
+ [
+ "Ta",
+ "TabbableElementList"
+ ],
+ [
+ "entabl",
+ "entablerUtil"
+ ],
+ [
+ "text",
+ "textContent"
+ ],
+ [
+ "clas",
+ "classList"
+ ],
+ [
+ "ne",
+ "newNeighbor"
+ ],
+ [
+ "cla",
+ "classList"
+ ]
+ ]
+ },
+ "buffers":
+ [
+ {
+ "file": "composer.json",
+ "settings":
+ {
+ "buffer_size": 193,
+ "line_ending": "Unix"
+ }
+ }
+ ],
+ "build_system": "",
+ "command_palette":
+ {
+ "height": 400.0,
+ "selected_items":
+ [
+ [
+ "rein",
+ "Indentation: Reindent Lines"
+ ],
+ [
+ "rei",
+ "Indentation: Reindent Lines"
+ ],
+ [
+ "re",
+ "Indentation: Reindent Lines"
+ ],
+ [
+ "reinde",
+ "Indentation: Reindent Lines"
+ ],
+ [
+ "set sy: js",
+ "Set Syntax: JavaScript"
+ ],
+ [
+ "p",
+ "Package Control: List Packages"
+ ],
+ [
+ "syntax co",
+ "Set Syntax: CoffeeScript"
+ ],
+ [
+ "instal",
+ "Package Control: Install Package"
+ ],
+ [
+ "package",
+ "Package Control: Remove Package"
+ ],
+ [
+ "coffee",
+ "Format: CoffeeScript"
+ ],
+ [
+ "ssht",
+ "Set Syntax: HTML"
+ ],
+ [
+ "jshi",
+ "JSHint: Set Plugin Options"
+ ],
+ [
+ "jsh",
+ "JSHint: Set Linting Preferences"
+ ],
+ [
+ "js",
+ "JSHint"
+ ],
+ [
+ "packa",
+ "Package Control: Install Package"
+ ],
+ [
+ "save",
+ "Project: Save As"
+ ],
+ [
+ "indent",
+ "Indentation: Reindent Lines"
+ ],
+ [
+ "tab",
+ "Indentation: Convert to Tabs"
+ ],
+ [
+ "tabs",
+ "Indentation: Convert to Tabs"
+ ],
+ [
+ "status",
+ "View: Toggle Status Bar"
+ ],
+ [
+ "view",
+ "View: Toggle Status Bar"
+ ],
+ [
+ "install",
+ "Package Control: Install Package"
+ ],
+ [
+ "lint",
+ "SublimeLinter: Background Linting"
+ ],
+ [
+ "ruby",
+ "Set Syntax: Ruby"
+ ]
+ ],
+ "width": 610.0
+ },
+ "console":
+ {
+ "height": 0.0
+ },
+ "distraction_free":
+ {
+ "menu_visible": true,
+ "show_minimap": false,
+ "show_open_files": false,
+ "show_tabs": false,
+ "side_bar_visible": false,
+ "status_bar_visible": false
+ },
+ "file_history":
+ [
+ "/Users/citelao/Projects/Accessible Tables/speaker/content_script.js",
+ "/Users/citelao/Projects/Accessible Tables/content_script.js",
+ "/Users/citelao/Projects/Accessible Tables/js/phenidate/rules/rules.json",
+ "/Users/citelao/Projects/Accessible Tables/js/phenidate/phenidate.dom.js",
+ "/Users/citelao/Projects/Accessible Tables/js/phenidate/phenidate.builder.js",
+ "/Users/citelao/Projects/Accessible Tables/table.htm",
+ "/Users/citelao/Projects/Accessible Tables/example.htm",
+ "/Users/citelao/Projects/Accessible Tables/largeTest.htm",
+ "/Users/citelao/Projects/Accessible Tables/largeTable.htm",
+ "/Users/citelao/Projects/Accessible Tables/js/phenidate/phenidate.focus.js",
+ "/Users/citelao/Projects/Accessible Tables/js/entabler/entabler.js",
+ "/Users/citelao/Projects/Accessible Tables/speaker/manifest.json",
+ "/Users/citelao/Projects/Accessible Tables/manifest.json",
+ "/Users/citelao/Projects/Accessible Tables/index.htm",
+ "/Users/citelao/Projects/Accessible Tables/js/phenidate/phenidate.js",
+ "/Users/citelao/Projects/Accessible Tables/manyElements.htm",
+ "/Users/citelao/Projects/Accessible Tables/pcgamer.htm",
+ "/Users/citelao/Projects/Accessible Tables/whitehouse.htm",
+ "/Users/citelao/Projects/Accessible Tables/test.htm",
+ "/Users/citelao/Projects/Accessible Tables/zen.htm",
+ "/Users/citelao/Projects/Accessible Tables/js/phenidate/phenidate.rules.js",
+ "/Users/citelao/Projects/Accessible Tables/doc/RULES",
+ "/Users/citelao/Projects/Accessible Tables/speaker/background.js",
+ "/Users/citelao/Projects/Accessible Tables/js/phenidate/test/phenidate.test.focus.js",
+ "/Users/citelao/Projects/Accessible Tables/js/phenidate/phenidate.navigator.js",
+ "/Users/citelao/Projects/Accessible Tables/doc/spec.md",
+ "/Users/citelao/Documents/School/441 Algorithms/HW4.md",
+ "/Users/citelao/Dropbox/Resume/style.css",
+ "/Users/citelao/Dropbox/Resume/work_resume.htm",
+ "/Users/citelao/Dropbox/Interim Note-Changes",
+ "/Users/citelao/Projects/Accessible Tables/# 441 — HW4",
+ "/Users/citelao/Projects/- Wash U/Arduino/README.md",
+ "/Users/citelao/Projects/Accessible Tables/math.htm",
+ "/Users/citelao/Projects/Accessible Tables/js/entabler/util.js",
+ "/Users/citelao/Projects/Accessible Tables/js/app.js",
+ "/Users/citelao/Projects/yum-lemonade/settings.csv",
+ "/Users/citelao/Projects/Accessible Tables/js/phenidate/rules/rules.min.json",
+ "/Users/citelao/Projects/Accessible Tables/js/phenidate/test/phenidate.test.js",
+ "/Users/citelao/Projects/Accessible Tables/speaker/options.html",
+ "/Users/citelao/Projects/Accessible Tables/README.md",
+ "/Users/citelao/Dropbox/Alfred/Alfred.alfredpreferences/workflows/spotifious/composer.json",
+ "/Users/citelao/Downloads/DC_MasterFile_912110.mvl",
+ "/Users/citelao/Documents/School/Animation/another head.mud",
+ "/Users/citelao/Projects/Accessible Tables/lib/mousetrap.min.js",
+ "/Users/citelao/Projects/133/Papers/why no threading.md",
+ "/Users/citelao/Projects/133/Papers/why no gui.md",
+ "/Users/citelao/Downloads/mace-code-v1_11_2/Mace/Code/Make/Buildings.cs",
+ "/Users/citelao/Projects/Accessible Tables/js/phenidate/build.sh",
+ "/Users/citelao/Projects/Accessible Tables/js/phenidate/phenidate.nav.js",
+ "/Users/citelao/Projects/Accessible Tables/css/style.css",
+ "/Users/citelao/Projects/Accessible Tables/test/customCSS.htm",
+ "/Users/citelao/Projects/Accessible Tables/css/high-contrast.css",
+ "/Users/citelao/Library/Application Support/Sublime Text 2/Packages/User/Preferences.sublime-settings",
+ "/Users/citelao/Library/Application Support/Übersicht/widgets/clock.coffee",
+ "/Users/citelao/Library/Application Support/Übersicht/widgets/getting-started.coffee",
+ "/Users/citelao/Projects/Accessible Tables/doc/TODO",
+ "/Users/citelao/Projects/Accessible Tables/html/pcgamer.htm",
+ "/Users/citelao/Projects/Accessible Tables/htmls/pcgamer.htm",
+ "/Users/citelao/Projects/Accessible Tables/css/debug.css",
+ "/Users/citelao/Projects/Accessible Tables/js/phenidate/rules/main.json",
+ "/Users/citelao/Projects/Accessible Tables/build.sh",
+ "/Users/citelao/Projects/yum-lemonade/export.xml",
+ "/Users/citelao/Projects/yum-lemonade/lib/shell/run.command",
+ "/Users/citelao/Projects/Accessible Tables/js/phenidate/rules/table.json",
+ "/Users/citelao/Projects/Accessible Tables/js/test.js",
+ "/Users/citelao/Projects/Accessible Tables/js/phenidate/test/phenidate.test.nav.js",
+ "/Users/citelao/Projects/Accessible Tables/lib/qunit.js",
+ "/Users/citelao/Library/Application Support/Sublime Text 2/Packages/JSHint Gutter/JSHint.sublime-settings",
+ "/Users/citelao/Library/Application Support/Sublime Text 2/Packages/JSHint Gutter/.jshintrc",
+ "/Users/citelao/Projects/Accessible Tables/accessible-tables.sublime-project",
+ "/Users/citelao/Projects/Accessible Tables/accessible-tables.sublime-workspace",
+ "/Users/citelao/Projects/- GT/Fantasy_Football/trunk/speak_tables/content_script.js",
+ "/Users/citelao/Projects/Accessible Tables/speaker/tabs.js",
+ "/Users/citelao/Projects/Emergent/engine.rb",
+ "/Users/citelao/Projects/Emergent/engine_spec.rb",
+ "/Users/citelao/Projects/Emergent/main.rb",
+ "/Users/citelao/Projects/Emergent/Gemfile",
+ "/Users/citelao/Desktop/marytts-master/download/marytts-components.xml",
+ "/Users/citelao/Projects/yum-lemonade/pom.xml",
+ "/Users/citelao/Projects/Accessible Tables/js/entabler.main.js",
+ "/Users/citelao/Projects/Accessible Tables/package.json",
+ "/Users/citelao/Projects/Accessible Tables/test/buster.js",
+ "/Users/citelao/Projects/Accessible Tables/test/entabler.navigation.test.js",
+ "/Users/citelao/Projects/Accessible Tables/spec/EntablerNavigationSpec.js",
+ "/Users/citelao/Projects/Accessible Tables/karma.conf.js",
+ "/Users/citelao/Projects/- GT/Fantasy_Football/trunk/Webpage/team.php",
+ "/Users/citelao/Projects/Accessible Tables/js/entabler.navigation.js",
+ "/Users/citelao/Projects/- scratch/simple-server/Server.java",
+ "/private/var/run/resolv.conf",
+ "/private/etc/hosts",
+ "/Applications/XAMPP/xamppfiles/etc/httpd.conf",
+ "/Applications/XAMPP/xamppfiles/logs/error_log",
+ "/Users/citelao/Downloads/marytts-master/marytts-client/pom.xml",
+ "/Users/citelao/.Trash/yum-lemonade-fat/META-INF/MANIFEST.MF",
+ "/Users/citelao/Desktop/yum-v0.7/META-INF/MANIFEST.MF",
+ "/Users/citelao/Downloads/Jtok/jtok/release_1.9.2/target/jtok-core-1.9.2.redux.jar/log4j.properties",
+ "/Users/citelao/Downloads/Jtok/jtok/release_1.9.2/target/jtok-core-1.9.2.redux.jar/jtok/jtok.cfg",
+ "/Users/citelao/Projects/133/threading/out.txt",
+ "/Users/citelao/Documents/My Games/Fallout3/FALLOUT.INI",
+ "/Users/citelao/Desktop/Fallout_3/Fallout_3.app/Contents/Resources/drive_c/Program Files/Bethesda Softworks/Fallout 3/Data/Data/FOSE/Plugins/sr_Fallout_Stutter_Remover.ini",
+ "/Users/citelao/Downloads/ppt-f317-1/prophet.nfo",
+ "/Users/citelao/Projects/yum-lemonade/src/yum/sound/player/OrderedSoundPlayer.java",
+ "/Users/citelao/Projects/SFML/lib/unix/ResourcePath.cpp",
+ "/Users/citelao/Projects/SFML/lib/mac/ResourcePath.mm",
+ "/Users/citelao/Projects/SFML/src/main.cpp",
+ "/Users/citelao/Projects/SFML/lib/win/ResourcePath.cpp",
+ "/Users/citelao/Projects/SFML/cmake/modules/FindSFML.cmake",
+ "/Users/citelao/Projects/SFML/cmake/build_files/mac/ResourcePath.hpp",
+ "/Users/citelao/Projects/SFML/cmake/build_files/unix/ResourcePath.cpp",
+ "/Users/citelao/Projects/SFML/cmake/build_files/unix/ResourcePath.h",
+ "/Users/citelao/Projects/SFML/.gitignore",
+ "/Users/citelao/Projects/SFML/test.txt",
+ "/Users/citelao/Projects/SFML/build.sh",
+ "/Users/citelao/Projects/SFML/cmake/build_files/unix/run.sh",
+ "/Users/citelao/Projects/SFML/run.sh",
+ "/Users/citelao/Desktop/segments.csv",
+ "/Users/citelao/Projects/yum-lemonade/resource/text/segments.csv",
+ "/Users/citelao/Projects/yum-lemonade/resource/text/hooks.csv",
+ "/Users/citelao/Projects/yum-lemonade/src/yum/helper/InputHelper.java",
+ "/Users/citelao/Projects/yum-lemonade/resource/sfx/speech/autogen/README",
+ "/Users/citelao/Projects/yum-lemonade/resource/text/headlines.csv",
+ "/Users/citelao/Library/Application Support/KeyRemap4MacBook/private.xml",
+ "/Users/citelao/Projects/yum-lemonade/resource/text/headlines.txt",
+ "/Users/citelao/Dropbox/Alfred/Alfred.alfredpreferences/workflows/spotifious/src/citelao/Spotifious/Menus/Search.php",
+ "/Users/citelao/Projects/test/CardLayoutDemo2.java",
+ "/Users/citelao/Projects/241/lab3/src/PriorityQueue.java",
+ "/Users/citelao/Projects/241/lab3/src/PQNode.java",
+ "/Users/citelao/Projects/241/lab3/src/Handle.java"
+ ],
+ "find":
+ {
+ "height": 35.0
+ },
+ "find_in_files":
+ {
+ "height": 0.0,
+ "where_history":
+ [
+ "/Users/citelao/Projects/Accessible Tables/js/phenidate"
+ ]
+ },
+ "find_state":
+ {
+ "case_sensitive": false,
+ "find_history":
+ [
+ "requirejs",
+ "ouptut",
+ "before",
+ "parentString",
+ "undefined",
+ "content_before",
+ "contentBefore",
+ "befores",
+ "active",
+ "Active",
+ "active",
+ "element",
+ "Element",
+ "element",
+ "content_After",
+ "before",
+ "Before",
+ "before",
+ "Before",
+ "before",
+ "Before",
+ "active",
+ "element",
+ "oldParents",
+ "element",
+ "_contexts",
+ "Befores",
+ "after",
+ "After",
+ "after",
+ "After",
+ "befores",
+ "-1",
+ "_contexts",
+ "Before",
+ "before",
+ "matchedParent",
+ "context",
+ "getInheritedRule",
+ "getInheritedRules",
+ "getinheri",
+ "getInher",
+ "dom",
+ "get",
+ "getInheritedRule",
+ "getInheritedRuleState",
+ "getInheritedRule",
+ "stopElement",
+ "audioElement",
+ "stopElement",
+ "audioElement",
+ "context",
+ "parent",
+ "console.log",
+ "math",
+ "child",
+ "entabler",
+ " \n",
+ "old",
+ "console.",
+ "rulecompare",
+ "onkey",
+ "onup",
+ "focused",
+ "table",
+ "header",
+ "context",
+ "j",
+ "i",
+ "rule",
+ "before",
+ "getmatched",
+ "p",
+ "text",
+ "p",
+ "img",
+ "tabbable",
+ "getrule",
+ "compare",
+ "phenidatefocuscha",
+ "phenidatefocusch",
+ "phenidate",
+ "onfocuschange",
+ "getcellrow",
+ "getcelll",
+ "row",
+ "column",
+ "row",
+ "column",
+ "_dom",
+ "i",
+ "Things",
+ "split",
+ "rules",
+ "column",
+ "doc",
+ "documentdoc",
+ "doc",
+ "output",
+ "args",
+ "css",
+ "speaksel",
+ "pill19",
+ "SpeakSel",
+ "tabbableRegex",
+ "rule",
+ "args",
+ "dom",
+ "_dom",
+ "dom",
+ "DOM",
+ "dom",
+ "tabbable",
+ "rules",
+ "nav",
+ "never",
+ "buildspan",
+ "builder",
+ "DomBuilder",
+ "Dom",
+ "defaults",
+ "table",
+ "content",
+ "neighbor",
+ "input",
+ " {text}",
+ "matchedRule",
+ "content"
+ ],
+ "highlight": true,
+ "in_selection": false,
+ "preserve_case": false,
+ "regex": false,
+ "replace_history":
+ [
+ "\"http://whitehouse.gov/"
+ ],
+ "reverse": false,
+ "show_context": true,
+ "use_buffer2": true,
+ "whole_word": false,
+ "wrap": true
+ },
+ "groups":
+ [
+ {
+ "selected": 0,
+ "sheets":
+ [
+ {
+ "buffer": 0,
+ "file": "composer.json",
+ "settings":
+ {
+ "buffer_size": 193,
+ "regions":
+ {
+ },
+ "selection":
+ [
+ [
+ 187,
+ 187
+ ]
+ ],
+ "settings":
+ {
+ "annotations":
+ [
+ "TODO",
+ "README",
+ "FIXME"
+ ],
+ "codeintel": true,
+ "codeintel_config":
+ {
+ "JavaScript":
+ {
+ "codeintel_max_recursive_dir_depth": 2.0,
+ "codeintel_scan_files_in_project": false,
+ "javascriptExtraPaths":
+ [
+ ]
+ },
+ "PHP":
+ {
+ "codeintel_max_recursive_dir_depth": 5.0,
+ "codeintel_scan_files_in_project": false,
+ "phpExtraPaths":
+ [
+ ]
+ },
+ "Python":
+ {
+ "env":
+ {
+ }
+ }
+ },
+ "codeintel_database_dir": "~/.codeintel",
+ "codeintel_enabled_languages":
+ [
+ "JavaScript",
+ "SCSS",
+ "Python",
+ "HTML",
+ "Ruby",
+ "Python3",
+ "XML",
+ "Sass",
+ "HTML5",
+ "Perl",
+ "CSS",
+ "Twig",
+ "Less",
+ "Node.js",
+ "TemplateToolkit",
+ "PHP"
+ ],
+ "codeintel_exclude_scopes_from_complete_triggers":
+ [
+ "comment"
+ ],
+ "codeintel_language_settings":
+ {
+ "JavaScript":
+ {
+ "codeintel_max_recursive_dir_depth": 2.0,
+ "codeintel_scan_exclude_dir":
+ [
+ "/build/",
+ "/min/"
+ ],
+ "codeintel_scan_extra_dir":
+ [
+ ],
+ "codeintel_scan_files_in_project": false,
+ "codeintel_selected_catalogs":
+ [
+ "jQuery"
+ ]
+ },
+ "PHP":
+ {
+ "codeintel_max_recursive_dir_depth": 15.0,
+ "codeintel_scan_exclude_dir":
+ [
+ "/Applications/MAMP/bin/php/php5.5.3/"
+ ],
+ "codeintel_scan_extra_dir":
+ [
+ ],
+ "codeintel_scan_files_in_project": true,
+ "php": "/Applications/MAMP/bin/php/php5.5.3/bin/php"
+ },
+ "Python3":
+ {
+ "codeintel_scan_extra_dir":
+ [
+ "/Applications/Sublime Text.app/Contents/MacOS",
+ "~/Library/Application Support/Sublime Text 3/Packages/SublimeCodeIntel/arch",
+ "~/Library/Application Support/Sublime Text 3/Packages/SublimeCodeIntel/libs"
+ ],
+ "codeintel_scan_files_in_project": true,
+ "codeintel_selected_catalogs":
+ [
+ ],
+ "python3": "/usr/local/bin/python3.3"
+ }
+ },
+ "codeintel_live": true,
+ "codeintel_live_enabled_languages":
+ [
+ "JavaScript",
+ "Mason",
+ "XBL",
+ "XUL",
+ "RHTML",
+ "SCSS",
+ "Python",
+ "HTML",
+ "Ruby",
+ "Python3",
+ "XML",
+ "Sass",
+ "XSLT",
+ "Django",
+ "HTML5",
+ "Perl",
+ "CSS",
+ "Twig",
+ "Less",
+ "Smarty",
+ "Node.js",
+ "Tcl",
+ "TemplateToolkit",
+ "PHP"
+ ],
+ "codeintel_max_recursive_dir_depth": 10.0,
+ "codeintel_scan_exclude_dir":
+ [
+ ],
+ "codeintel_scan_files_in_project": true,
+ "codeintel_selected_catalogs":
+ [
+ ],
+ "codeintel_snippets": false,
+ "codeintel_syntax_map":
+ {
+ "Python Django": "Python"
+ },
+ "codeintel_tooltips": "popup",
+ "codeintel_word_completions": "buffer",
+ "color_scheme": "Packages/User/Color Highlighter/themes/base16-eighties.dark.tmTheme",
+ "csslint_options":
+ {
+ "adjoining-classes": "warning",
+ "box-model": true,
+ "box-sizing": "warning",
+ "compatible-vendor-prefixes": "warning",
+ "display-property-grouping": true,
+ "duplicate-background-images": "warning",
+ "duplicate-properties": true,
+ "empty-rules": true,
+ "errors": true,
+ "fallback-colors": "warning",
+ "floats": "warning",
+ "font-faces": "warning",
+ "font-sizes": "warning",
+ "gradients": "warning",
+ "ids": "warning",
+ "import": "warning",
+ "important": "warning",
+ "known-properties": true,
+ "outline-none": "warning",
+ "overqualified-elements": "warning",
+ "qualified-headings": "warning",
+ "regex-selectors": "warning",
+ "rules-count": "warning",
+ "shorthand": "warning",
+ "star-property-hack": "warning",
+ "text-indent": "warning",
+ "underscore-property-hack": "warning",
+ "unique-headings": "warning",
+ "universal-selector": "warning",
+ "vendor-prefix": true,
+ "zero-units": "warning"
+ },
+ "gjslint_ignore":
+ [
+ 110.0
+ ],
+ "gjslint_options":
+ [
+ ],
+ "javascript_linter": "jshint",
+ "jshint_options":
+ {
+ "browser": true,
+ "evil": true,
+ "regexdash": true,
+ "sub": true,
+ "trailing": true,
+ "wsh": true
+ },
+ "pep8": true,
+ "pep8_ignore":
+ [
+ "E501"
+ ],
+ "perl_linter": "perlcritic",
+ "pyflakes_ignore":
+ [
+ ],
+ "pyflakes_ignore_import_*": true,
+ "sublime_auto_complete": true,
+ "sublimelinter": true,
+ "sublimelinter_delay": 2.0,
+ "sublimelinter_disable":
+ [
+ ],
+ "sublimelinter_executable_map":
+ {
+ },
+ "sublimelinter_fill_outlines": false,
+ "sublimelinter_gutter_marks": true,
+ "sublimelinter_gutter_marks_theme": "simple",
+ "sublimelinter_mark_style": "none",
+ "sublimelinter_notes": false,
+ "sublimelinter_objj_check_ascii": false,
+ "sublimelinter_popup_errors_on_save": false,
+ "sublimelinter_syntax_map":
+ {
+ "C++": "c",
+ "Python Django": "python",
+ "Ruby on Rails": "ruby"
+ },
+ "sublimelinter_wrap_find": true,
+ "syntax": "Packages/JavaScript/JSON.tmLanguage"
+ },
+ "translation.x": 0.0,
+ "translation.y": 0.0,
+ "zoom_level": 1.0
+ },
+ "type": "text"
+ }
+ ]
+ }
+ ],
+ "incremental_find":
+ {
+ "height": 45.0
+ },
+ "input":
+ {
+ "height": 45.0
+ },
+ "layout":
+ {
+ "cells":
+ [
+ [
+ 0,
+ 0,
+ 1,
+ 1
+ ]
+ ],
+ "cols":
+ [
+ 0.0,
+ 1.0
+ ],
+ "rows":
+ [
+ 0.0,
+ 1.0
+ ]
+ },
+ "menu_visible": true,
+ "output.exec":
+ {
+ "height": 170.0
+ },
+ "replace":
+ {
+ "height": 86.0
+ },
+ "save_all_on_build": true,
+ "select_file":
+ {
+ "height": 0.0,
+ "selected_items":
+ [
+ [
+ "rules.j",
+ "js/phenidate/phenidate.rules.js"
+ ],
+ [
+ "cs.",
+ "lib/require-cs.js"
+ ],
+ [
+ "mani",
+ "speaker/manifest.json"
+ ],
+ [
+ "app.",
+ "js/app.js"
+ ],
+ [
+ "conte",
+ "speaker/content_script.js"
+ ],
+ [
+ "index",
+ "index.htm"
+ ],
+ [
+ "manif",
+ "speaker/manifest.json"
+ ],
+ [
+ "entable",
+ "js/entabler/entabler.js"
+ ],
+ [
+ ".htm",
+ "manyElements.htm"
+ ],
+ [
+ ".ht",
+ "pcgamer.htm"
+ ],
+ [
+ "inde",
+ "index.htm"
+ ],
+ [
+ "rules",
+ "js/phenidate/phenidate.rules.js"
+ ],
+ [
+ "rule",
+ "js/phenidate/rules/rules.json"
+ ],
+ [
+ "dom",
+ "js/phenidate/phenidate.dom.js"
+ ],
+ [
+ "buil",
+ "js/phenidate/phenidate.builder.js"
+ ],
+ [
+ "bac",
+ "speaker/background.js"
+ ],
+ [
+ "con",
+ "speaker/content_script.js"
+ ],
+ [
+ "foc",
+ "js/phenidate/phenidate.focus.js"
+ ],
+ [
+ "hf",
+ "js/phenidate/test/phenidate.test.focus.js"
+ ],
+ [
+ "henid",
+ "js/phenidate/phenidate.js"
+ ],
+ [
+ "spec",
+ "doc/spec.md"
+ ],
+ [
+ "builde",
+ "js/phenidate/phenidate.builder.js"
+ ],
+ [
+ "phe",
+ "js/phenidate/phenidate.navigator.js"
+ ],
+ [
+ "phenidate.",
+ "js/phenidate/phenidate.focus.js"
+ ],
+ [
+ "builder",
+ "js/phenidate/phenidate.builder.js"
+ ],
+ [
+ "ruels",
+ "js/phenidate/rules/rules.json"
+ ],
+ [
+ "enta",
+ "js/entabler/util.js"
+ ],
+ [
+ "focus",
+ "js/phenidate/phenidate.focus.js"
+ ],
+ [
+ "pj",
+ "js/phenidate/phenidate.js"
+ ],
+ [
+ "app",
+ "js/app.js"
+ ],
+ [
+ "navi",
+ "js/phenidate/phenidate.navigator.js"
+ ],
+ [
+ "lart",
+ "largeTable.htm"
+ ],
+ [
+ "r",
+ "js/phenidate/rules/rules.min.json"
+ ],
+ [
+ "ind",
+ "index.htm"
+ ],
+ [
+ "ex",
+ "example.htm"
+ ],
+ [
+ "rul",
+ "js/phenidate/rules/rules.json"
+ ],
+ [
+ "phenidate",
+ "js/phenidate/test/phenidate.test.js"
+ ],
+ [
+ "opt",
+ "speaker/options.html"
+ ],
+ [
+ "cont",
+ "speaker/content_script.js"
+ ],
+ [
+ "manife",
+ "speaker/manifest.json"
+ ],
+ [
+ "mou",
+ "lib/mousetrap.min.js"
+ ],
+ [
+ "i",
+ "index.htm"
+ ],
+ [
+ "largetes",
+ "largeTest.htm"
+ ],
+ [
+ "util",
+ "js/entabler/util.js"
+ ],
+ [
+ "focu",
+ "js/phenidate/phenidate.focus.js"
+ ],
+ [
+ "build",
+ "js/phenidate/build.sh"
+ ],
+ [
+ "ent",
+ "js/entabler/entabler.js"
+ ],
+ [
+ "entab",
+ "js/entabler/entabler.js"
+ ],
+ [
+ "enet",
+ "js/entabler/entabler.js"
+ ],
+ [
+ "exa",
+ "example.htm"
+ ],
+ [
+ "large",
+ "largeTest.htm"
+ ],
+ [
+ "sty",
+ "css/style.css"
+ ],
+ [
+ "",
+ "js/phenidate/phenidate.dom.js"
+ ],
+ [
+ "rules.js",
+ "js/phenidate/phenidate.rules.js"
+ ],
+ [
+ "nav",
+ "js/phenidate/phenidate.nav.js"
+ ],
+ [
+ "phen",
+ "js/phenidate/phenidate.js"
+ ],
+ [
+ ".css",
+ "css/style.css"
+ ],
+ [
+ "lar",
+ "largeTable.htm"
+ ],
+ [
+ "css",
+ "css/style.css"
+ ],
+ [
+ "speaker.js",
+ "speaker/background.js"
+ ],
+ [
+ "content",
+ "speaker/content_script.js"
+ ],
+ [
+ "bi",
+ "js/phenidate/build.sh"
+ ],
+ [
+ "htm",
+ "manyElements.htm"
+ ],
+ [
+ "pheni",
+ "js/phenidate/phenidate.dom.js"
+ ],
+ [
+ "read",
+ "README.md"
+ ],
+ [
+ "change",
+ "CHANGELOG.md"
+ ],
+ [
+ "se",
+ "src/citelao/Spotifious/Menus/Search.php"
+ ],
+ [
+ "oh",
+ "src/citelao/OhAlfred/OhAlfred.php"
+ ],
+ [
+ "search",
+ "src/citelao/Spotifious/Menus/Search.php"
+ ],
+ [
+ "helper",
+ "src/citelao/Spotifious/Helper.php"
+ ],
+ [
+ ".js",
+ "include/spotifious-helper/js/response.js"
+ ]
+ ],
+ "width": 0.0
+ },
+ "select_project":
+ {
+ "height": 0.0,
+ "selected_items":
+ [
+ ],
+ "width": 0.0
+ },
+ "show_minimap": true,
+ "show_open_files": false,
+ "show_tabs": true,
+ "side_bar_visible": true,
+ "side_bar_width": 177.0,
+ "status_bar_visible": true
+}
diff --git a/src/citelao/OhAlfred/Command/Command.php b/src/citelao/OhAlfred/Command/Command.php
new file mode 100644
index 0000000..e8011ee
--- /dev/null
+++ b/src/citelao/OhAlfred/Command/Command.php
@@ -0,0 +1,14 @@
+script = $command;
+ }
+
+ public function run() {
+ return exec($this->script);
+ }
+}
\ No newline at end of file
diff --git a/src/citelao/OhAlfred/Command/Timeout.php b/src/citelao/OhAlfred/Command/Timeout.php
new file mode 100644
index 0000000..6967f67
--- /dev/null
+++ b/src/citelao/OhAlfred/Command/Timeout.php
@@ -0,0 +1,25 @@
+ /dev/null 2>/dev/null &";
+
+ echo($script);
+
+ $this->script = $script;
+ }
+
+ public function run() {
+ return exec($this->script);
+ }
+}
\ No newline at end of file
diff --git a/src/citelao/OhAlfred/OhAlfred.php b/src/citelao/OhAlfred/OhAlfred.php
index d509c13..1948f81 100644
--- a/src/citelao/OhAlfred/OhAlfred.php
+++ b/src/citelao/OhAlfred/OhAlfred.php
@@ -23,7 +23,7 @@ public function name()
if($this->name == null)
$this->name = $this->defaults('bundleid');
- return $this->name;
+ return $this->name;
}
// Get the user's home directory.
@@ -74,8 +74,8 @@ public function storage() {
**/
// Read an arbitrary plist setting.
- public function plist($plist, $setting, $value = '') {
- if ($value == '') {
+ public function plist($plist, $setting, $value = -1) {
+ if ($value === -1) {
return exec("defaults read '$plist' '$setting'");
}
@@ -83,12 +83,12 @@ public function plist($plist, $setting, $value = '') {
}
// Read the workflow .plist file.
- public function defaults($setting, $value = '') {
+ public function defaults($setting, $value = -1) {
return $this->plist($this->workflow() . "/info", $setting, $value);
}
// Read a custom workflow options .plist file.
- public function options($setting, $value = '') {
+ public function options($setting, $value = -1) {
$options = $this->storage() . "/settings";
$optionsFile = $options . ".plist";
@@ -222,6 +222,10 @@ protected function loggifyError($number, $message, $file, $line, $context) {
}
public function notify($message, $title = '', $subtitle = '', $appIcon = '', $contentImage = '', $open = '') {
+ if($this->options('track_notifications') != 'true') {
+ return;
+ }
+
$command = "include/terminal-notifier.app/Contents/MacOS/terminal-notifier ";
$command .= "-message " . $this->escapeNotify($message) . " ";
diff --git a/src/citelao/Spotifious/Menus/Control.php b/src/citelao/Spotifious/Menus/Control.php
index 7d1e91f..e73b690 100644
--- a/src/citelao/Spotifious/Menus/Control.php
+++ b/src/citelao/Spotifious/Menus/Control.php
@@ -13,14 +13,14 @@ class Control implements Menu {
'name' => 'Next track',
'keys' => 'skip',
'icon' => 'include/images/commands/next.png',
- 'action' => 'next⟩output'
+ 'action' => 'next⟩returnControls'
),
array(
'name' => 'Previous track',
'keys' => 'back',
'icon' => 'include/images/commands/previous.png',
- 'action' => 'previous⟩output'
+ 'action' => 'previous⟩returnControls'
)
);
diff --git a/src/citelao/Spotifious/Menus/Settings.php b/src/citelao/Spotifious/Menus/Settings.php
new file mode 100644
index 0000000..ba3d520
--- /dev/null
+++ b/src/citelao/Spotifious/Menus/Settings.php
@@ -0,0 +1,67 @@
+alfred = new OhAlfred();
+
+ $this->trackNotificationsEnabled = ($this->alfred->options('track_notifications') == 'true');
+ $this->countryCode = $this->alfred->options('country');
+ }
+
+ public function output() {
+ $results[] = array(
+ 'title' => 'Settings',
+ 'subtitle' => 'Here you can configure any options you want.',
+ 'icon' => 'include/images/configuration.png',
+ 'valid' => 'no'
+ );
+
+ $results[] = array(
+ 'title' => 'Track Notifications',
+ 'subtitle' => "Check this if you'd like to enable track change notifications.",
+ 'icon' => $this->trackNotificationsEnabled ? 'include/images/checked.png' : 'include/images/unchecked.png',
+ 'arg' => 'togglenotifications⟩'
+ );
+
+ $results[] = array(
+ 'title' => 'Configure country code',
+ 'subtitle' => 'Currently set to "' . $this->countryCode . '."',
+ 'autocomplete' => 'Country Code ⟩',
+ 'valid' => 'no',
+ 'icon' => 'include/images/dash.png'
+ );
+
+ $results[] = array(
+ 'title' => 'Change my linked Spotify application',
+ 'subtitle' => 'If you want to link a new Spotify app or update key information. You will need to login again.',
+ 'arg' => 'appsetup⟩',
+ 'icon' => 'include/images/dash.png'
+ );
+
+ $results[] = array(
+ 'title' => 'Login again to my Spotify application',
+ 'subtitle' => 'If you want to login again, do it!',
+ 'arg' => 'applink⟩',
+ 'icon' => 'include/images/dash.png'
+ );
+
+ $results[] = array(
+ 'title' => 'You can access settings easily.',
+ 'subtitle' => 'Type `s` from the main menu.',
+ 'icon' => 'include/images/info.png',
+ 'valid' => 'no'
+ );
+
+ return $results;
+ }
+}
\ No newline at end of file
diff --git a/src/citelao/Spotifious/Menus/Setup.php b/src/citelao/Spotifious/Menus/Setup.php
index 6449cf8..ce3c043 100644
--- a/src/citelao/Spotifious/Menus/Setup.php
+++ b/src/citelao/Spotifious/Menus/Setup.php
@@ -7,33 +7,23 @@
class Setup implements Menu {
protected $alfred;
- protected $userTriggered;
protected $countryCodeConfigured;
public function __construct($query) {
$this->alfred = new OhAlfred();
- $this->userTriggered = ($query == "s" || $query == "S");
-
$this->countryCodeConfigured = !($this->alfred->options('country') == '');
+ $this->applicationCreated = !($this->alfred->options('spotify_client_id') == '' || $this->alfred->options('spotify_secret') == '');
+ $this->applicationLinked = !($this->alfred->options('spotify_access_token') == '' || $this->alfred->options('spotify_refresh_token') == '' || $this->alfred->options('spotify_access_token_expires') == '');
}
public function output() {
- if($this->userTriggered) {
- $results[] = array(
- 'title' => 'Settings',
- 'subtitle' => 'Here you can configure any options you want.',
- 'icon' => 'include/images/configuration.png',
- 'valid' => 'no'
- );
- } else {
- $results[] = array(
- 'title' => 'Welcome to Spotifious!',
- 'subtitle' => 'You need to configure a few more things before you can use Spotifious.',
- 'icon' => 'include/images/configuration.png',
- 'valid' => 'no'
- );
- }
+ $results[] = array(
+ 'title' => 'Welcome to Spotifious!',
+ 'subtitle' => 'You need to configure a few more things before you can use Spotifious.',
+ 'icon' => 'include/images/configuration.png',
+ 'valid' => 'no'
+ );
$results[] = array(
'title' => '1. Set your country code',
@@ -43,6 +33,21 @@ public function output() {
'valid' => 'no'
);
+ $results[] = array(
+ 'title' => '2. Create a Spotify application',
+ 'subtitle' => 'Set up a Spotify application so you can search playlists!',
+ 'icon' => $this->applicationCreated ? 'include/images/checked.png' : 'include/images/unchecked.png',
+ 'arg' => 'appsetup⟩'
+ );
+
+ $results[] = array(
+ 'title' => '3. Link your Spotify application',
+ 'subtitle' => 'Connect your Spotify application to Spotifious to search your playlists.',
+ 'icon' => $this->applicationCreated ? $this->applicationLinked ? 'include/images/checked.png' : 'include/images/unchecked.png' : 'include/images/disabled.png',
+ 'arg' => 'applink⟩',
+ 'valid' => $this->applicationCreated ? 'yes' : 'no'
+ );
+
$results[] = array(
'title' => 'You can access settings easily.',
'subtitle' => 'Type `s` from the main menu.',
diff --git a/src/citelao/Spotifious/Menus/SetupCountryCode.php b/src/citelao/Spotifious/Menus/SetupCountryCode.php
index 55c4964..dd2243e 100644
--- a/src/citelao/Spotifious/Menus/SetupCountryCode.php
+++ b/src/citelao/Spotifious/Menus/SetupCountryCode.php
@@ -44,7 +44,8 @@ public function output() {
'title' => $country['name'],
'subtitle' => "Set your country to “{$country['code']}.”",
'arg' => 'country⟩' . $country['code'],
- 'autocomplete' => 'Country Code ⟩' . $country['name']
+ 'autocomplete' => 'Country Code ⟩' . $country['name'],
+ 'icon' => 'include/images/dash.png'
);
$results[] = $currentResult;
diff --git a/src/citelao/Spotifious/Spotifious.php b/src/citelao/Spotifious/Spotifious.php
index 2d9a6cd..4549b3a 100644
--- a/src/citelao/Spotifious/Spotifious.php
+++ b/src/citelao/Spotifious/Spotifious.php
@@ -1,14 +1,20 @@
alfred->options('track_notifications') == '') {
+ $this->alfred->options('track_notifications', 'true');
+ }
+
// Display the setup menu if the app isn't setup.
+ // Or the "options" menu if the S key is pressed
if($this->alfred->options('country') == '' ||
- $query == "s" || $query == "S" ||
+ $this->alfred->options('spotify_client_id') == '' ||
+ $this->alfred->options('spotify_secret') == '' ||
+ $this->alfred->options('spotify_access_token') == '' ||
+ $this->alfred->options('spotify_access_token_expires') == '' ||
+ $this->alfred->options('spotify_refresh_token') == '' ||
$this->contains($query, "Country Code ⟩")) {
// If we are trying to configure country code
@@ -36,10 +52,18 @@ public function run($query) {
return $menu->output();
}
+ $api = $this->getSpotifyApi();
+ // if expired
+ // attempt refresh
+ // if failed, prompt for relogin
+
if (mb_strlen($query) <= 3) {
if(mb_strlen($query) > 0 && ($query[0] == "c" || $query[0] == "C")) {
$menu = new Control($query);
return $menu->output();
+ } elseif(mb_strlen($query) > 0 && ($query[0] == "s" || $query[0] == "S")) {
+ $menu = new Settings($query);
+ return $menu->output();
} else {
$menu = new Main($query);
return $menu->output();
@@ -102,33 +126,58 @@ public function run($query) {
}
public function process($action) {
+ // TODO refresh token
+ // this is identical code to run()
+ // if expired
+ // attempt refresh
+ // if failed, prompt for relogin
+
+
if($this->contains($action, '⟩')) {
$splitAction = explode('⟩', $action);
$command = array_shift($splitAction);
if($command == 'country') {
$this->alfred->options('country', $splitAction[0]);
- } else if($command == 'next') {
- $song = $this->respondingSpotifyQuery('next track');
- if($splitAction[0] && $splitAction[0] == 'output') {
+ $as = new ApplicationApplescript("Alfred 2", 'run trigger "search" in workflow "com.citelao.spotifious"');
+ $as->run();
- $this->alfred->notify(
- $song['album'] . " — " . $song['artist'],
- $song['title'],
- // $song['url'],
- "",
- "",
- "",
- $song['url']);
+ } else if($command == 'appsetup') {
+ // Autokill server in 10 minutes
+ $server = new Timeout(10 * 60, "php -S localhost:11114 & open 'http://localhost:11114/include/setup/index.php'");
+ $server->run();
+
+ } else if($command == 'applink') {
+ // Autokill server in 10 minutes
+ $server = new Timeout(10 * 60, "php -S localhost:11114 & open 'http://localhost:11114/include/setup/link.php'");
+ $server->run();
+
+ } else if($command == 'togglenotifications') {
+ $current = $this->alfred->options('track_notifications');
+
+ if($current == 'true') {
+ $this->alfred->options('track_notifications', 'false');
+ } else {
+ $this->alfred->options('track_notifications', 'true');
}
+ } else if($command == 'next') {
+ $song = $this->respondingSpotifyQuery('next track');
+
+ $this->alfred->notify(
+ $song['album'] . " — " . $song['artist'],
+ $song['title'],
+ // $song['url'],
+ "",
+ "",
+ "",
+ $song['url']);
+
} else if($command == 'previous') {
$song = $this->respondingSpotifyQuery('previous track');
- if($splitAction[0] && $splitAction[0] == 'output') {
-
- $this->alfred->notify(
+ $this->alfred->notify(
$song['album'] . " — " . $song['artist'],
$song['title'],
// $song['url'],
@@ -136,23 +185,19 @@ public function process($action) {
"",
"",
$song['url']);
- }
} else if($command == 'playpause') {
$song = $this->respondingSpotifyQuery('playpause');
- if($splitAction[0] && $splitAction[0] == 'output') {
- $icon = ($song['state'] == "playing") ? "▶" : "‖";
-
- $this->alfred->notify(
- $song['album'] . " — " . $song['artist'],
- $icon . " " . $song['title'],
- // $song['url'],
- "",
- "",
- "",
- $song['url']);
- }
+ $icon = ($song['state'] == "playing") ? "▶" : "‖";
+ $this->alfred->notify(
+ $song['album'] . " — " . $song['artist'],
+ $icon . " " . $song['title'],
+ // $song['url'],
+ "",
+ "",
+ "",
+ $song['url']);
} else if($command == 'volup') {
$as = new ApplicationApplescript("Spotify", "set sound volume to sound volume + 10");
@@ -166,6 +211,16 @@ public function process($action) {
$as = new ApplicationApplescript("Spotify", $splitAction[0]);
$as->run();
}
+
+
+ if($splitAction[0] && $splitAction[0] == 'return') {
+ $as = new ApplicationApplescript("Alfred 2", 'run trigger "search" in workflow "com.citelao.spotifious"');
+ $as->run();
+ } elseif($splitAction[0] && $splitAction[0] == 'returnControls') {
+ $as = new ApplicationApplescript("Alfred 2", 'run trigger "search" in workflow "com.citelao.spotifious" with argument "c"');
+ $as->run();
+
+ }
} else {
return "Could not process command!";
}
@@ -209,4 +264,21 @@ protected function respondingSpotifyQuery($query) {
return $data;
}
+
+ protected function getSpotifyApi() {
+ $api = new SpotifyWebAPI();
+
+ // If the access token has expired :(
+ if ($this->alfred->options('spotify_access_token_expires') < time()) {
+ $session = new Session($this->alfred->options('spotify_client_id'), $this->alfred->options('spotify_secret'), 'http://localhost:11114/callback.php');
+ $session->refreshAccessToken();
+
+ $this->alfred->options('spotify_access_token_expires', time() + $session->getExpires());
+ $this->alfred->options('spotify_access_token', $session->getAccessToken());
+ }
+
+ $api->setAccessToken($this->alfred->options('spotify_access_token'));
+
+ return $api;
+ }
}
\ No newline at end of file
diff --git a/testoauth.php b/testoauth.php
new file mode 100644
index 0000000..0ddfe13
--- /dev/null
+++ b/testoauth.php
@@ -0,0 +1,29 @@
+requestCredentialsToken($scopes);
+} catch(SpotifyWebAPI\SpotifyWebAPIException $e) {
+ print 'hi' . $e->getMessage();
+}
+
+$authorizeUrl = $session->getAuthorizeUrl(array(
+ 'scope' => $scopes
+));
+
+$ch = curl_init();
+curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+curl_setopt($ch, CURLOPT_URL, $authorizeUrl);
+$contents = curl_exec ($ch);
+
+
+echo 'here ';
+die();
\ No newline at end of file
diff --git a/testresponse.php b/testresponse.php
new file mode 100644
index 0000000..e69de29
diff --git a/vendor/autoload.php b/vendor/autoload.php
index 6c35dd2..17ca895 100644
--- a/vendor/autoload.php
+++ b/vendor/autoload.php
@@ -4,4 +4,4 @@
require_once __DIR__ . '/composer' . '/autoload_real.php';
-return ComposerAutoloaderInitd31d8dd13b7849ffc0c1be9abe3d270d::getLoader();
+return ComposerAutoloaderInit76049c9ae64eb3029e1fc6a281e88caf::getLoader();
diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php
index f438e31..70d78bc 100644
--- a/vendor/composer/ClassLoader.php
+++ b/vendor/composer/ClassLoader.php
@@ -56,7 +56,11 @@ class ClassLoader
public function getPrefixes()
{
- return call_user_func_array('array_merge', $this->prefixesPsr0);
+ if (!empty($this->prefixesPsr0)) {
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
+ }
+
+ return array();
}
public function getPrefixesPsr4()
@@ -143,6 +147,8 @@ public function add($prefix, $paths, $prepend = false)
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param array|string $paths The PSR-0 base directories
* @param bool $prepend Whether to prepend the directories
+ *
+ * @throws \InvalidArgumentException
*/
public function addPsr4($prefix, $paths, $prepend = false)
{
@@ -202,10 +208,13 @@ public function set($prefix, $paths)
* Registers a set of PSR-4 directories for a given namespace,
* replacing any others previously set for this namespace.
*
- * @param string $prefix The prefix/namespace, with trailing '\\'
- * @param array|string $paths The PSR-4 base directories
+ * @param string $prefix The prefix/namespace, with trailing '\\'
+ * @param array|string $paths The PSR-4 base directories
+ *
+ * @throws \InvalidArgumentException
*/
- public function setPsr4($prefix, $paths) {
+ public function setPsr4($prefix, $paths)
+ {
if (!$prefix) {
$this->fallbackDirsPsr4 = (array) $paths;
} else {
@@ -266,7 +275,7 @@ public function unregister()
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
- include $file;
+ includeFile($file);
return true;
}
@@ -291,8 +300,25 @@ public function findFile($class)
return $this->classMap[$class];
}
+ $file = $this->findFileWithExtension($class, '.php');
+
+ // Search for Hack files if we are running on HHVM
+ if ($file === null && defined('HHVM_VERSION')) {
+ $file = $this->findFileWithExtension($class, '.hh');
+ }
+
+ if ($file === null) {
+ // Remember that this class does not exist.
+ return $this->classMap[$class] = false;
+ }
+
+ return $file;
+ }
+
+ private function findFileWithExtension($class, $ext)
+ {
// PSR-4 lookup
- $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . '.php';
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
$first = $class[0];
if (isset($this->prefixLengthsPsr4[$first])) {
@@ -321,7 +347,7 @@ public function findFile($class)
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
} else {
// PEAR-like class name
- $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . '.php';
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
}
if (isset($this->prefixesPsr0[$first])) {
@@ -347,8 +373,15 @@ public function findFile($class)
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
return $file;
}
-
- // Remember that this class does not exist.
- return $this->classMap[$class] = false;
}
}
+
+/**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ */
+function includeFile($file)
+{
+ include $file;
+}
diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php
index 3f11dd4..368046a 100644
--- a/vendor/composer/autoload_psr4.php
+++ b/vendor/composer/autoload_psr4.php
@@ -6,6 +6,7 @@
$baseDir = dirname($vendorDir);
return array(
+ 'SpotifyWebAPI\\' => array($vendorDir . '/jwilsson/spotify-web-api-php/src'),
'Spotifious\\' => array($baseDir . '/src/citelao/Spotifious'),
'OhAlfred\\' => array($baseDir . '/src/citelao/OhAlfred'),
);
diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php
index a9fbc91..fad1aef 100644
--- a/vendor/composer/autoload_real.php
+++ b/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
// autoload_real.php @generated by Composer
-class ComposerAutoloaderInitd31d8dd13b7849ffc0c1be9abe3d270d
+class ComposerAutoloaderInit76049c9ae64eb3029e1fc6a281e88caf
{
private static $loader;
@@ -19,12 +19,9 @@ public static function getLoader()
return self::$loader;
}
- spl_autoload_register(array('ComposerAutoloaderInitd31d8dd13b7849ffc0c1be9abe3d270d', 'loadClassLoader'), true, true);
+ spl_autoload_register(array('ComposerAutoloaderInit76049c9ae64eb3029e1fc6a281e88caf', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
- spl_autoload_unregister(array('ComposerAutoloaderInitd31d8dd13b7849ffc0c1be9abe3d270d', 'loadClassLoader'));
-
- $vendorDir = dirname(__DIR__);
- $baseDir = dirname($vendorDir);
+ spl_autoload_unregister(array('ComposerAutoloaderInit76049c9ae64eb3029e1fc6a281e88caf', 'loadClassLoader'));
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
@@ -46,3 +43,8 @@ public static function getLoader()
return $loader;
}
}
+
+function composerRequire76049c9ae64eb3029e1fc6a281e88caf($file)
+{
+ require $file;
+}
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
new file mode 100644
index 0000000..3979ec4
--- /dev/null
+++ b/vendor/composer/installed.json
@@ -0,0 +1,49 @@
+[
+ {
+ "name": "jwilsson/spotify-web-api-php",
+ "version": "0.6.0",
+ "version_normalized": "0.6.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/jwilsson/spotify-web-api-php.git",
+ "reference": "0d9ea746aa942d215301fe463611ef1a3d4b9b93"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/jwilsson/spotify-web-api-php/zipball/0d9ea746aa942d215301fe463611ef1a3d4b9b93",
+ "reference": "0d9ea746aa942d215301fe463611ef1a3d4b9b93",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*",
+ "satooshi/php-coveralls": "dev-master",
+ "vlucas/phpdotenv": "1.*"
+ },
+ "time": "2014-10-26 16:23:57",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "SpotifyWebAPI\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jonathan Wilsson",
+ "email": "jonathan.wilsson@gmail.com"
+ }
+ ],
+ "description": "PHP implementation of Spotify's Web API.",
+ "homepage": "https://github.com/jwilsson/spotify-web-api-php",
+ "keywords": [
+ "spotify"
+ ]
+ }
+]
diff --git a/vendor/jwilsson/spotify-web-api-php/.editorconfig b/vendor/jwilsson/spotify-web-api-php/.editorconfig
new file mode 100644
index 0000000..7eeada8
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/.editorconfig
@@ -0,0 +1,19 @@
+# This file is for unifying the coding style for different editors and IDEs
+# More info at http://editorconfig.org
+
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+indent_style = space
+indent_size = 4
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+trim_trailing_whitespace = false
+
+[*.yml]
+indent_style = space
+indent_size = 2
diff --git a/vendor/jwilsson/spotify-web-api-php/.env.dist b/vendor/jwilsson/spotify-web-api-php/.env.dist
new file mode 100644
index 0000000..82b2478
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/.env.dist
@@ -0,0 +1,4 @@
+SPOTIFY_CLIENT_ID=
+SPOTIFY_CLIENT_SECRET=
+SPOTIFY_REDIRECT_URI=
+SPOTIFY_REFRESH_TOKEN=
diff --git a/vendor/jwilsson/spotify-web-api-php/.env.enc b/vendor/jwilsson/spotify-web-api-php/.env.enc
new file mode 100644
index 0000000..65d7cd3
Binary files /dev/null and b/vendor/jwilsson/spotify-web-api-php/.env.enc differ
diff --git a/vendor/jwilsson/spotify-web-api-php/.gitattributes b/vendor/jwilsson/spotify-web-api-php/.gitattributes
new file mode 100644
index 0000000..176a458
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/.gitattributes
@@ -0,0 +1 @@
+* text=auto
diff --git a/vendor/jwilsson/spotify-web-api-php/.gitignore b/vendor/jwilsson/spotify-web-api-php/.gitignore
new file mode 100644
index 0000000..13c60bb
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/.gitignore
@@ -0,0 +1,5 @@
+/vendor
+.DS_Store
+composer.lock
+Thumbs.db
+.env
diff --git a/vendor/jwilsson/spotify-web-api-php/.travis.yml b/vendor/jwilsson/spotify-web-api-php/.travis.yml
new file mode 100644
index 0000000..78b3243
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/.travis.yml
@@ -0,0 +1,25 @@
+language: php
+
+php:
+ - 5.3
+ - 5.4
+ - 5.5
+ - 5.6
+ - hhvm
+
+matrix:
+ fast_finish: true
+
+before_install:
+ - openssl aes-256-cbc -K $encrypted_02ebdc0031ce_key -iv $encrypted_02ebdc0031ce_iv -in .env.enc -out .env -d
+
+before_script:
+ - travis_retry composer self-update
+ - travis_retry composer install --prefer-dist --no-interaction
+
+script:
+ - mkdir -p build/logs
+ - vendor/bin/phpunit --verbose --coverage-clover build/logs/clover.xml
+
+after_script:
+ - php vendor/bin/coveralls -v
diff --git a/vendor/jwilsson/spotify-web-api-php/CHANGELOG.md b/vendor/jwilsson/spotify-web-api-php/CHANGELOG.md
new file mode 100644
index 0000000..28d29af
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/CHANGELOG.md
@@ -0,0 +1,55 @@
+# Changelog
+## 0.6.0
+* **This release contains breaking changes, read through this list before updating.**
+* All static methods on `Request` have been removed. `Request` now needs to be instantiated before using.
+* All methods that accepted the `limit` option now uses the correct Spotify default value if nothing has been specified.
+* It's now possible to specify your own `Request` object in `SpotifyWebAPI` and `Session` constructors.
+* `SpotifyWebAPI::getArtistAlbums()` now supports the `album_type` option.
+* `Request::send()` will only modify URLs when needed.
+
+## 0.5.0
+* The following methods has been added
+ * `Session::getExpires()`
+ * `Session::getRefreshToken()`
+ * `Session::setRefreshToken()`
+ * `SpotifyWebAPI::getFeaturedPlaylists()`
+ * `SpotifyWebAPI::getNewReleases()`
+* The following options has been added
+ * `offset` and `limit` to `SpotifyWebAPI::getUserPlaylists()`
+ * `offset` and `limit` to `SpotifyWebAPI::getUserPlaylistTracks()`
+ * `fields` to `SpotifyWebAPI::getUserPlaylistTracks()`
+ * `market` to `SpotifyWebAPI::getArtistAlbums()`
+ * `market` to `SpotifyWebAPI::search()`
+* Better handling of HTTP response codes in `Request::send()`.
+* Fixed a bug where `SpotifyWebAPIException` messages weren't correctly set.
+* Fixed various issues related to user playlists.
+
+## 0.4.0
+* **This release contains lots of breaking changes, read through this list before updating.**
+* All methods which previously required a Spotify URI now just needs an ID.
+* `deletePlaylistTrack()` has been renamed to `deletePlaylistTracks()`.
+* When something goes wrong, a `SpotifyWebAPIException` is thrown.
+* The `SpotifyWebAPI` methods are no longer static, you'll need to instantiate the class now.
+
+## 0.3.0
+* Added new methods to
+ * Get Current User’s Saved Tracks.
+ * Check Current User’s Saved Tracks.
+ * Save Tracks for Current User.
+ * Remove Tracks for Current User.
+ * Change a Playlist’s Details.
+ * Remove Tracks from a Playlist.
+ * Replace a Playlist’s Tracks.
+* Added support for the Client Credentials Authorization Flow.
+* Added support for more HTTP methods in `Request::send()`.
+
+## 0.2.0
+* Added Artist’s Related Artists endpoint.
+* Added `offset` and `limit` options for `SpotifyWebAPI::getAlbumTracks()` and `SpotifyWebAPI::getArtistAlbums()`.
+* Replaced PSR-0 autoloading with PSR-4 autoloading.
+* Changed method signature of `Session::getAuthorizeUrl()` and added `show_dialog` option.
+* Added missing returns for `SpotifyWebAPI::getUserPlaylist()` and `SpotifyWebAPI::getUserPlaylistTracks()`.
+* Fixed a bug where search terms were double encoded.
+
+## 0.1.0
+* Initial release
diff --git a/vendor/jwilsson/spotify-web-api-php/CONTRIBUTING.md b/vendor/jwilsson/spotify-web-api-php/CONTRIBUTING.md
new file mode 100644
index 0000000..3c2cb13
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/CONTRIBUTING.md
@@ -0,0 +1,17 @@
+# Contribution Guide
+
+## Issues
+Please submit all your bug reports, feature requests and pull requests here but note that this isn't the place for support requests. Please use [Stack Overflow](http://stackoverflow.com/) for this.
+
+## Bug reports
+1. Search the issues, have it already been reported?
+2. Download the latest source, did this solve the problem?
+4. If the answer to all of the above questions are "No" then open a bug report and include the following:
+ * A short, descriptive title.
+ * A summary of the problem.
+ * The steps to reproduce the problem.
+ * Possible solutions or other relevant information/suggestions.
+
+## Coding Guidelines
+We follow the coding standards outlined in [PSR-1](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md) and [PSR-2](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md). Please follow these guidelines when commiting new code.
+Fixes for existing code which doesn't follow these standards are highly appreciated!
diff --git a/vendor/jwilsson/spotify-web-api-php/LICENSE.md b/vendor/jwilsson/spotify-web-api-php/LICENSE.md
new file mode 100644
index 0000000..acee26b
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/LICENSE.md
@@ -0,0 +1,19 @@
+Copyright (c) Jonathan Wilsson
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/vendor/jwilsson/spotify-web-api-php/README.md b/vendor/jwilsson/spotify-web-api-php/README.md
new file mode 100644
index 0000000..6f5ed0c
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/README.md
@@ -0,0 +1,323 @@
+# Spotify Web API PHP
+
+[![Build Status](https://travis-ci.org/jwilsson/spotify-web-api-php.svg?branch=master)](https://travis-ci.org/jwilsson/spotify-web-api-php)
+[![Coverage Status](https://img.shields.io/coveralls/jwilsson/spotify-web-api-php.svg)](https://coveralls.io/r/jwilsson/spotify-web-api-php?branch=master)
+[![Latest Stable Version](https://poser.pugx.org/jwilsson/spotify-web-api-php/v/stable.svg)](https://packagist.org/packages/jwilsson/spotify-web-api-php)
+
+This is a PHP implementation of the [Spotify Web API](https://developer.spotify.com/web-api/). It includes the following:
+
+* Helper methods for all API methods (Information about artists, albums and tracks).
+* Search the Spotify catalog.
+* Get information about users and their music library.
+* Manage playlists for users.
+* Authorization flow helpers.
+* PSR-4 autoloading support.
+
+## Requirements
+PHP 5.3 or greater.
+
+## Installation
+1. If you're already using [Composer](https://getcomposer.org/) then you'll just need to include `jwilsson/spotify-web-api-php` as a dependency. Otherwise, download the library and include the files.
+2. Create a new app at https://developer.spotify.com/
+3. Enter your app credentials.
+4. Call the API!
+
+## Usage
+Depending on the API methods you're planning on using you can choose between authenticating the user or just go.
+
+### Authenticating a user
+
+#### Using Authorization Code Flow
+
+```php
+require 'vendor/autoload.php';
+
+$session = new SpotifyWebAPI\Session('CLIENT_ID', 'CLIENT_SECRET', 'REDIRECT_URI');
+
+// Get the authorization URL and send the user there
+header('Location: ' . $session->getAuthorizeUrl(array('scope' => array('scope-1', 'scope-2'))));
+```
+
+When receiving a request back to your redirect URI:
+
+```php
+require 'vendor/autoload.php';
+
+$session = new SpotifyWebAPI\Session('CLIENT_ID', 'CLIENT_SECRET', 'REDIRECT_URI');
+$api = new SpotifyWebAPI\SpotifyWebAPI();
+
+// Request a access token using the code from Spotify
+$session->requestToken($_GET['code']);
+$accessToken = $session->getAccessToken(); // We're good to go!
+
+// Set the code on the API wrapper
+$api->setAccessToken($accessToken);
+```
+
+#### Using Client Credentials Flow
+```php
+require 'vendor/autoload.php';
+
+$session = new SpotifyWebAPI\Session('CLIENT_ID', 'CLIENT_SECRET', 'REDIRECT_URI');
+
+// Request a access token with optional scopes
+$session->requestCredentialsToken(array('scope-1', 'scope-2'));
+$accessToken = $session->getAccessToken(); // We're good to go!
+
+// Set the code on the API wrapper
+$api->setAccessToken($accessToken);
+```
+
+### Making API calls
+
+```php
+$track = $api->getTrack('7EjyzZcbLxW7PaaLua9Ksb');
+
+print_r($track);
+```
+
+## More examples
+
+Add tracks to a user's library
+
+```php
+$api->addMyTracks(array('1oR3KrPIp4CbagPa3PhtPp', '6lPb7Eoon6QPbscWbMsk6a'));
+```
+
+Add tracks to a user's playlist
+
+```php
+$api->addUserPlaylistTracks('username', 'playlist_id', array('1oR3KrPIp4CbagPa3PhtPp', '6lPb7Eoon6QPbscWbMsk6a'));
+```
+
+Create a new playlist for a user
+
+```php
+$api->createUserPlaylist('username', array('name' => 'My shiny playlist'));
+```
+
+Delete tracks from a user's library
+
+```php
+$api->deleteMyTracks(array('1oR3KrPIp4CbagPa3PhtPp', '6lPb7Eoon6QPbscWbMsk6a'));
+```
+
+Delete tracks from a user's playlist
+
+```php
+$tracks = array(
+ array('id' => '1oR3KrPIp4CbagPa3PhtPp'),
+ array('id' => '6lPb7Eoon6QPbscWbMsk6a')
+);
+
+$api->deletePlaylistTracks('username', 'playlist_id', $tracks, 'snapshot_id');
+```
+
+Get a album
+
+```php
+$album = $api->getAlbum('7u6zL7kqpgLPISZYXNTgYk');
+
+print_r($album);
+```
+
+Get multiple albums
+
+```php
+$albums = $api->getAlbums(array('1oR3KrPIp4CbagPa3PhtPp', '6lPb7Eoon6QPbscWbMsk6a'));
+
+print_r($albums);
+```
+
+Get all tracks from an album
+
+```php
+$tracks = $api->getAlbumTracks('1oR3KrPIp4CbagPa3PhtPp');
+
+print_r($tracks);
+```
+
+Get an artist
+
+```php
+$artist = $api->getArtist('36QJpDe2go2KgaRleHCDTp');
+
+print_r($artist);
+```
+
+Get an artist's related artists
+
+```php
+$artists = $api->getArtistRelatedArtists('36QJpDe2go2KgaRleHCDTp');
+
+print_r($artists);
+```
+
+Get multiple artists
+
+```php
+$artists = $api->getArtists(array('6v8FB84lnmJs434UJf2Mrm', '6olE6TJLqED3rqDCT0FyPh'));
+
+print_r($artists);
+```
+
+Get all albums by an artist
+
+```php
+$albums = $api->getArtistAlbums('6v8FB84lnmJs434UJf2Mrm');
+
+print_r($albums);
+```
+
+Get an artist's top tracks in a country
+
+```php
+$tracks = $api->getArtistTopTracks('6v8FB84lnmJs434UJf2Mrm', 'se');
+
+print_r($tracks);
+```
+
+Get Spotify featured playlists
+```php
+$playlists = $api->getFeaturedPlaylists();
+
+print_r($playlists);
+```
+
+Get new releases
+```php
+$items = $api->getNewReleases(array(
+ 'country' => 'se'
+));
+
+print_r($items);
+```
+
+Get a user's saved tracks
+```php
+$tracks = $api->getMySavedTracks();
+
+print_r($tracks);
+```
+
+Get a track
+
+```php
+$track = $api->getTrack('7EjyzZcbLxW7PaaLua9Ksb');
+
+print_r($track);
+```
+
+Get multiple tracks
+
+```php
+$tracks = $api->getTracks(array('0eGsygTp906u18L0Oimnem', '1lDWb6b6ieDQ2xT7ewTC3G'));
+
+print_r($tracks);
+```
+
+Get a user
+
+```php
+$user = $api->getUser('username');
+
+print_r($user);
+```
+
+Get a user's playlists
+
+```php
+$playlists = $api->getUserPlaylists('username');
+
+print_r($playlists);
+```
+
+Get a specific playlist
+
+```php
+$playlist = $api->getUserPlaylist('username', '606nLQuR41ZaA2vEZ4Ofb8');
+
+print_r($playlist);
+```
+
+Get all tracks in a user's playlist
+
+```php
+$tracks = $api->getUserPlaylistTracks('username', '606nLQuR41ZaA2vEZ4Ofb8');
+
+print_r($tracks);
+```
+
+Get the currently authenticated user
+
+```php
+$user = $api->me();
+
+print_r($user);
+```
+
+See if a user's tracks contains the specified tracks
+
+```php
+$contains = $api->myTracksContains(array('0eGsygTp906u18L0Oimnem', '1lDWb6b6ieDQ2xT7ewTC3G'));
+
+var_dump($contains);
+```
+
+Replace all tracks in a user's playlist with new ones
+
+```php
+$api->replacePlaylistTracks('username', 'playlist_id', array('0eGsygTp906u18L0Oimnem', '1lDWb6b6ieDQ2xT7ewTC3G'));
+```
+
+Search for an album
+
+```php
+$albums = $api->search('blur', 'album');
+
+print_r($albums);
+```
+
+Search for an artist
+
+```php
+$artists = $api->search('blur', 'artist');
+
+print_r($artists);
+```
+
+Search for a track
+
+```php
+$tracks = $api->search('song 2', 'track');
+
+print_r($tracks);
+```
+
+Search with a limit
+
+```php
+$tracks = $api->search('song 2', 'track', array(
+ 'limit' => 5
+));
+
+print_r($tracks);
+```
+
+Search for tracks in a specific market
+
+```php
+$tracks = $api->search('song 2', 'track', array(
+ 'market' => 'se'
+));
+
+print_r($tracks);
+```
+
+Update a user's playlist
+
+```php
+$api->updateUserPlaylist('username', 'playlist_id', array('name' => 'New name'));
+```
+
+Browse through `src/spotifywebapi.php` and look at the tests for more methods and examples.
diff --git a/vendor/jwilsson/spotify-web-api-php/composer.json b/vendor/jwilsson/spotify-web-api-php/composer.json
new file mode 100644
index 0000000..96a3a18
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "jwilsson/spotify-web-api-php",
+ "description": "PHP implementation of Spotify's Web API.",
+ "type": "library",
+ "license": "MIT",
+ "keywords": ["spotify"],
+ "homepage": "https://github.com/jwilsson/spotify-web-api-php",
+ "authors": [
+ {
+ "name": "Jonathan Wilsson",
+ "email": "jonathan.wilsson@gmail.com"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.*",
+ "satooshi/php-coveralls": "dev-master",
+ "vlucas/phpdotenv": "1.*"
+ },
+ "autoload": {
+ "psr-4": {
+ "SpotifyWebAPI\\": "src/"
+ }
+ }
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/demo.php b/vendor/jwilsson/spotify-web-api-php/demo.php
new file mode 100644
index 0000000..a87da48
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/demo.php
@@ -0,0 +1,21 @@
+requestToken($_GET['code']);
+ $api->setAccessToken($session->getAccessToken());
+
+ print_r($api->me());
+} else {
+ header('Location: ' . $session->getAuthorizeUrl(array(
+ 'scope' => array('user-read-email')
+ )));
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/phpunit.php b/vendor/jwilsson/spotify-web-api-php/phpunit.php
new file mode 100644
index 0000000..a09cd45
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/phpunit.php
@@ -0,0 +1,9 @@
+
+
+
+
+
+ ./tests/
+
+
+
+
diff --git a/vendor/jwilsson/spotify-web-api-php/src/Request.php b/vendor/jwilsson/spotify-web-api-php/src/Request.php
new file mode 100644
index 0000000..64eded3
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/src/Request.php
@@ -0,0 +1,133 @@
+send($method, self::ACCOUNT_URL . $uri, $parameters, $headers);
+ }
+
+ /**
+ * Make a request to the "api" endpoint.
+ *
+ * @param string $method The HTTP method to use.
+ * @param string $uri The URI to request.
+ * @param array $parameters Optional. Query parameters.
+ * @param array $headers Optional. HTTP headers.
+ *
+ * @return array
+ */
+ public function api($method, $uri, $parameters = array(), $headers = array())
+ {
+ return $this->send($method, self::API_URL . $uri, $parameters, $headers);
+ }
+
+ /**
+ * Make a request to Spotify.
+ * You'll probably want to use one of the convenience methods instead.
+ *
+ * @param string $method The HTTP method to use.
+ * @param string $url The URL to request.
+ * @param array $parameters Optional. Query parameters.
+ * @param array $headers Optional. HTTP headers.
+ *
+ * @return array
+ */
+ public function send($method, $url, $parameters = array(), $headers = array())
+ {
+ // Sometimes a JSON object is passed
+ if (is_array($parameters) || is_object($parameters)) {
+ $parameters = http_build_query($parameters);
+ }
+
+ $mergedHeaders = array();
+ foreach ($headers as $key => $val) {
+ $mergedHeaders[] = "$key: $val";
+ }
+
+ $options = array(
+ CURLOPT_HEADER => true,
+ CURLOPT_HTTPHEADER => $mergedHeaders,
+ CURLOPT_RETURNTRANSFER => true
+ );
+
+ $url = rtrim($url, '/');
+ $method = strtoupper($method);
+
+ switch ($method) {
+ case 'DELETE':
+ $options[CURLOPT_CUSTOMREQUEST] = $method;
+ $options[CURLOPT_POSTFIELDS] = $parameters;
+
+ break;
+ case 'POST':
+ $options[CURLOPT_POST] = true;
+ $options[CURLOPT_POSTFIELDS] = $parameters;
+
+ break;
+ case 'PUT':
+ $options[CURLOPT_CUSTOMREQUEST] = 'PUT';
+ $options[CURLOPT_POSTFIELDS] = $parameters;
+
+ break;
+ default:
+ $options[CURLOPT_CUSTOMREQUEST] = $method;
+
+ if ($parameters) {
+ $url .= '/?' . $parameters;
+ }
+
+ break;
+ }
+
+ $options[CURLOPT_URL] = $url;
+
+ $ch = curl_init();
+ curl_setopt_array($ch, $options);
+
+ $response = curl_exec($ch);
+ $status = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
+ curl_close($ch);
+
+ list($headers, $body) = explode("\r\n\r\n", $response, 2);
+
+ $body = json_decode($body);
+
+ if ($status < 200 || $status > 299) {
+ if (isset($body->error)) {
+ $error = $body->error;
+
+ // These properties only exist on API calls, not auth calls
+ if (isset($error->message) && isset($error->status)) {
+ throw new SpotifyWebAPIException($error->message, $error->status);
+ } elseif (isset($body->error_description)) {
+ throw new SpotifyWebAPIException($body->error_description, $status);
+ } else {
+ throw new SpotifyWebAPIException($error, $status);
+ }
+ } else {
+ throw new SpotifyWebAPIException('No \'error\' provided in response body', $status);
+ }
+ }
+
+ return array(
+ 'body' => $body,
+ 'headers' => $headers,
+ 'status' => $status
+ );
+ }
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/src/Session.php b/vendor/jwilsson/spotify-web-api-php/src/Session.php
new file mode 100644
index 0000000..ec15d3d
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/src/Session.php
@@ -0,0 +1,272 @@
+setClientId($clientId);
+ $this->setClientSecret($clientSecret);
+ $this->setRedirectUri($redirectUri);
+
+ if (is_null($request)) {
+ $request = new Request();
+ }
+
+ $this->request = $request;
+ }
+
+ /**
+ * Get the authorization URL.
+ *
+ * @param array|object $options Optional. Options for the authorization URL.
+ * - array scope Optional. Scope(s) to request from the user.
+ * - boolean show_dialog Optional. Whether or not to force the user to always approve the app. Default is false.
+ * - string state Optional. A CSRF token.
+ *
+ * @return string
+ */
+ public function getAuthorizeUrl($options = array())
+ {
+ $defaults = array(
+ 'scope' => array(),
+ 'show_dialog' => false,
+ 'state' => ''
+ );
+
+ $options = array_merge($defaults, (array) $options);
+ $parameters = array(
+ 'client_id' => $this->getClientId(),
+ 'redirect_uri' => $this->getRedirectUri(),
+ 'response_type' => 'code',
+ 'scope' => implode(' ', $options['scope']),
+ 'show_dialog' => $options['show_dialog'] ? 'true' : 'false',
+ 'state' => $options['state']
+ );
+
+ return Request::ACCOUNT_URL . '/authorize/?' . http_build_query($parameters);
+ }
+
+ /**
+ * Get the access token.
+ *
+ * @return string
+ */
+ public function getAccessToken()
+ {
+ return $this->accessToken;
+ }
+
+ /**
+ * Get the client ID.
+ *
+ * @return string
+ */
+ public function getClientId()
+ {
+ return $this->clientId;
+ }
+
+ /**
+ * Get the client secret.
+ *
+ * @return string
+ */
+ public function getClientSecret()
+ {
+ return $this->clientSecret;
+ }
+
+ /**
+ * Get the number of seconds before the access token expires.
+ *
+ * @return int
+ */
+ public function getExpires()
+ {
+ return $this->expires;
+ }
+
+ /**
+ * Get the client's redirect URI.
+ *
+ * @return string
+ */
+ public function getRedirectUri()
+ {
+ return $this->redirectUri;
+ }
+
+ /**
+ * Get the refresh token.
+ *
+ * @return string
+ */
+ public function getRefreshToken()
+ {
+ return $this->refreshToken;
+ }
+
+ /**
+ * Refresh a access token.
+ *
+ * @return bool
+ */
+ public function refreshToken()
+ {
+ $payload = base64_encode($this->getClientId() . ':' . $this->getClientSecret());
+
+ $parameters = array(
+ 'grant_type' => 'refresh_token',
+ 'refresh_token' => $this->refreshToken
+ );
+
+ $headers = array(
+ 'Authorization' => 'Basic ' . $payload
+ );
+
+ $response = $this->request->account('POST', '/api/token', $parameters, $headers);
+ $response = $response['body'];
+
+ if (isset($response->access_token)) {
+ $this->accessToken = $response->access_token;
+ $this->expires = $response->expires_in;
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Request a access token using the Client Credentials Flow.
+ *
+ * @param array $scope Optional. Scope(s) to request from the user.
+ *
+ * @return bool
+ */
+ public function requestCredentialsToken($scope = array())
+ {
+ $payload = base64_encode($this->getClientId() . ':' . $this->getClientSecret());
+
+ $parameters = array(
+ 'grant_type' => 'client_credentials',
+ 'scope' => implode(' ', $scope)
+ );
+
+ $headers = array(
+ 'Authorization' => 'Basic ' . $payload
+ );
+
+ $response = $this->request->account('POST', '/api/token', $parameters, $headers);
+ $response = $response['body'];
+
+ if (isset($response->access_token)) {
+ $this->accessToken = $response->access_token;
+ $this->expires = $response->expires_in;
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Request a access token.
+ *
+ * @param string $code The authorization code from Spotify.
+ *
+ * @return bool
+ */
+ public function requestToken($code)
+ {
+ $parameters = array(
+ 'client_id' => $this->getClientId(),
+ 'client_secret' => $this->getClientSecret(),
+ 'code' => $code,
+ 'grant_type' => 'authorization_code',
+ 'redirect_uri' => $this->getRedirectUri()
+ );
+
+ $response = $this->request->account('POST', '/api/token', $parameters);
+ $response = $response['body'];
+
+ if (isset($response->access_token)) {
+ $this->accessToken = $response->access_token;
+ $this->expires = $response->expires_in;
+ $this->refreshToken = $response->refresh_token;
+
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Set the client ID.
+ *
+ * @param string $clientId The client ID.
+ *
+ * @return void
+ */
+ public function setClientId($clientId)
+ {
+ $this->clientId = $clientId;
+ }
+
+ /**
+ * Set the client secret.
+ *
+ * @param string $clientSecret The client secret.
+ *
+ * @return void
+ */
+ public function setClientSecret($clientSecret)
+ {
+ $this->clientSecret = $clientSecret;
+ }
+
+ /**
+ * Set the client's redirect URI.
+ *
+ * @param string $redirectUri The redirect URI.
+ *
+ * @return void
+ */
+ public function setRedirectUri($redirectUri)
+ {
+ $this->redirectUri = $redirectUri;
+ }
+
+ /**
+ * Set the refresh token.
+ *
+ * @param string $refreshToken The refresh token.
+ *
+ * @return void
+ */
+ public function setRefreshToken($refreshToken)
+ {
+ $this->refreshToken = $refreshToken;
+ }
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/src/SpotifyWebAPI.php b/vendor/jwilsson/spotify-web-api-php/src/SpotifyWebAPI.php
new file mode 100755
index 0000000..0dfec31
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/src/SpotifyWebAPI.php
@@ -0,0 +1,707 @@
+request = $request;
+ }
+
+ /**
+ * Convert Spotify object IDs to Spotify URIs.
+ *
+ * @param array|string $ids ID(s) to convert.
+ *
+ * @return array|string
+ */
+ protected function idToUri($ids)
+ {
+ $ids = (array) $ids;
+
+ for ($i = 0; $i < count($ids); $i++) {
+ if (strpos($ids[$i], 'spotify:track:') !== false) {
+ continue;
+ }
+
+ $ids[$i] = 'spotify:track:' . $ids[$i];
+ }
+
+ return (count($ids) == 1) ? $ids[0] : $ids;
+ }
+
+ /**
+ * Add track(s) to the current user's Spotify library.
+ * Requires a valid access token.
+ * https://developer.spotify.com/web-api/save-tracks-user/
+ *
+ * @param string|array ID of the track(s) to add.
+ *
+ * @return bool
+ */
+ public function addMyTracks($tracks)
+ {
+ $tracks = json_encode((array) $tracks);
+
+ $response = $this->request->api('PUT', '/v1/me/tracks', $tracks, array(
+ 'Authorization' => 'Bearer ' . $this->accessToken,
+ 'Content-Type' => 'application/json'
+ ));
+
+ return $response['status'] == 200;
+ }
+
+ /**
+ * Add track(s) to a user's playlist.
+ * Requires a valid access token.
+ * https://developer.spotify.com/web-api/add-tracks-to-playlist/
+ *
+ * @param string $userId ID of the user who owns the playlist.
+ * @param string $playlistId ID of the playlist to add tracks to.
+ * @param string|array $tracks ID of the track(s) to add.
+ * @param array|object $options Optional. Options for the new tracks.
+ * - int position Optional. Zero-based position of where in the playlist to add the tracks. Tracks will be appened if omitted or false.
+ *
+ * @return bool
+ */
+ public function addUserPlaylistTracks($userId, $playlistId, $tracks, $options = array())
+ {
+ $defaults = array(
+ 'position' => false
+ );
+
+ $options = array_merge($defaults, (array) $options);
+ $options = array_filter($options, function ($value) {
+ return $value !== false;
+ });
+
+ $options = http_build_query($options);
+ $tracks = $this->idToUri($tracks);
+ $tracks = json_encode((array) $tracks);
+
+ // We need to manually append data to the URI since it's a POST request
+ $response = $this->request->api('POST', '/v1/users/' . $userId . '/playlists/' . $playlistId . '/tracks?' . $options, $tracks, array(
+ 'Authorization' => 'Bearer ' . $this->accessToken,
+ 'Content-Type' => 'application/json'
+ ));
+
+ return $response['status'] == 201;
+ }
+
+ /**
+ * Create a new playlist for a user.
+ * Requires a valid access token.
+ * https://developer.spotify.com/web-api/create-playlist/
+ *
+ * @param string $userId ID of the user to create the playlist for.
+ * @param array|object $data Data for the new playlist.
+ * - name string Required. Name of the playlist.
+ * - public bool Optional. Whether the playlist should be public or not.
+ *
+ * @return object
+ */
+ public function createUserPlaylist($userId, $data)
+ {
+ $defaults = array(
+ 'name' => '',
+ 'public' => true
+ );
+
+ $data = array_merge($defaults, (array) $data);
+ $data = json_encode($data);
+
+ $response = $this->request->api('POST', '/v1/users/' . $userId . '/playlists', $data, array(
+ 'Authorization' => 'Bearer ' . $this->accessToken,
+ 'Content-Type' => 'application/json'
+ ));
+
+ return $response['body'];
+ }
+
+ /**
+ * Delete track(s) from current user's Spotify library.
+ * Requires a valid access token.
+ * https://developer.spotify.com/web-api/remove-tracks-user/
+ *
+ * @param string|array ID of the track(s) to delete.
+ *
+ * @return bool
+ */
+ public function deleteMyTracks($tracks)
+ {
+ $tracks = implode(',', (array) $tracks);
+ $tracks = urlencode($tracks);
+
+ $response = $this->request->api('DELETE', '/v1/me/tracks?ids=' . $tracks, array(), array(
+ 'Authorization' => 'Bearer ' . $this->accessToken
+ ));
+
+ return $response['status'] == 200;
+ }
+
+ /**
+ * Delete tracks from a playlist and retrieve a new snapshot ID.
+ * Requires a valid access token.
+ * https://developer.spotify.com/web-api/remove-tracks-playlist/
+ *
+ * @param string $userId ID of the user who owns the playlist.
+ * @param string $playlistId ID of the playlist to delete tracks from.
+ * @param array $tracks Tracks to delete and optional position in the playlist where the track is located.
+ * - id string Required. Spotify track ID.
+ * - position array Optional. Position of the track in the playlist.
+ * @param string $snapshotId Optional. The playlist's snapshot ID.
+ *
+ * @return string|bool
+ */
+ public function deletePlaylistTracks($userId, $playlistId, $tracks, $snapshotId = '')
+ {
+ $data = array();
+ if ($snapshotId) {
+ $data['snapshot_id'] = $snapshotId;
+ }
+
+ for ($i = 0; $i < count($tracks); $i++) {
+ $tracks[$i] = (array) $tracks[$i];
+ $tracks[$i]['uri'] = $this->idToUri($tracks[$i]['id']);
+ }
+
+ $data['tracks'] = $tracks;
+ $data = json_encode($data);
+
+ $response = $this->request->api('DELETE', '/v1/users/' . $userId . '/playlists/' . $playlistId . '/tracks', $data, array(
+ 'Authorization' => 'Bearer ' . $this->accessToken
+ ));
+ $response = $response['body'];
+
+ if (isset($response->snapshot_id)) {
+ return $response->snapshot_id;
+ }
+
+ return false;
+ }
+
+ /**
+ * Get a album.
+ * https://developer.spotify.com/web-api/get-album/
+ *
+ * @param string $albumId ID of the album.
+ *
+ * @return object
+ */
+ public function getAlbum($albumId)
+ {
+ $response = $this->request->api('GET', '/v1/albums/' . $albumId);
+
+ return $response['body'];
+ }
+
+ /**
+ * Get multiple albums.
+ *
+ * @param array $albumIds ID of the albums.
+ *
+ * @return object
+ */
+ public function getAlbums($albumIds)
+ {
+ $albumIds = implode(',', $albumIds);
+ $response = $this->request->api('GET', '/v1/albums/', array('ids' => $albumIds));
+
+ return $response['body'];
+ }
+
+ /**
+ * Get a album's tracks.
+ * https://developer.spotify.com/web-api/get-several-albums/
+ *
+ * @param string $albumId ID of the album.
+ * @param array|object $options Optional. Options for the tracks.
+ * - int limit Optional. Limit the number of tracks.
+ * - int offset Optional. Number of tracks to skip.
+ *
+ * @return object
+ */
+ public function getAlbumTracks($albumId, $options = array())
+ {
+ $defaults = array(
+ 'limit' => 0,
+ 'offset' => 0
+ );
+
+ $options = array_merge($defaults, (array) $options);
+ $options = array_filter($options);
+
+ $response = $this->request->api('GET', '/v1/albums/' . $albumId . '/tracks', $options);
+
+ return $response['body'];
+ }
+
+ /**
+ * Get a artist.
+ * https://developer.spotify.com/web-api/get-artist/
+ *
+ * @param string $artistId ID of the artist.
+ *
+ * @return object
+ */
+ public function getArtist($artistId)
+ {
+ $response = $this->request->api('GET', '/v1/artists/' . $artistId);
+
+ return $response['body'];
+ }
+
+ /**
+ * Get multiple artists.
+ * https://developer.spotify.com/web-api/get-several-artists/
+ *
+ * @param array $artistIds ID of the artists.
+ *
+ * @return object
+ */
+ public function getArtists($artistIds)
+ {
+ $artistIds = implode(',', $artistIds);
+ $response = $this->request->api('GET', '/v1/artists/', array('ids' => $artistIds));
+
+ return $response['body'];
+ }
+
+ /**
+ * Get an artist's related artists.
+ * https://developer.spotify.com/web-api/get-related-artists/
+ *
+ * @param string $artistId ID of the artist.
+ *
+ * @return object
+ */
+ public function getArtistRelatedArtists($artistId)
+ {
+ $response = $this->request->api('GET', '/v1/artists/' . $artistId . '/related-artists');
+
+ return $response['body'];
+ }
+
+ /**
+ * Get a artist's albums.
+ * https://developer.spotify.com/web-api/get-artists-albums/
+ *
+ * @param string $artistId ID of the artist.
+ * @param array|object $options Optional. Options for the albums.
+ * - array album_type Optional. Album types to return. If omitted, all album types will be returned.
+ * - string market Optional. A ISO 3166-1 alpha-2 country code. Limit the results to tracks that are playable in this market.
+ * - int limit Optional. Limit the number of albums.
+ * - int offset Optional. Number of albums to skip.
+ *
+ * @return object
+ */
+ public function getArtistAlbums($artistId, $options = array())
+ {
+ $defaults = array(
+ 'album_type' => array(),
+ 'market' => '',
+ 'limit' => 0,
+ 'offset' => 0
+ );
+
+ $options = array_merge($defaults, (array) $options);
+ $options['album_type'] = implode(',', $options['album_type']);
+ $options = array_filter($options);
+
+ $response = $this->request->api('GET', '/v1/artists/' . $artistId . '/albums', $options);
+
+ return $response['body'];
+ }
+
+ /**
+ * Get a artist's top tracks in a country.
+ * https://developer.spotify.com/web-api/get-artists-top-tracks/
+ *
+ * @param string $artistId ID of the artist.
+ * @param string $country An ISO 3166-1 alpha-2 country code specifying the country to get the top tracks for.
+ *
+ * @return object
+ */
+ public function getArtistTopTracks($artistId, $country)
+ {
+ $response = $this->request->api('GET', '/v1/artists/' . $artistId . '/top-tracks', array('country' => $country));
+
+ return $response['body'];
+ }
+
+ /**
+ * Get Spotify featured playlists.
+ * Requires a valid access token.
+ * https://developer.spotify.com/web-api/get-list-featured-playlists/
+ *
+ * @param array|object $options Optional. Options for the playlists.
+ * - string locale Optional. An lowercase ISO 639 language code and an uppercase ISO 3166-1 alpha-2 country code. Show playlists in this language.
+ * - string country Optional. An ISO 3166-1 alpha-2 country code. Show playlists from this country.
+ * - string timestamp Optional. A ISO 8601 timestamp. Show playlists relevant to this date and time.
+ * - int limit Optional. Limit the number of playlists.
+ * - int offset Optional. Number of playlists to skip.
+ *
+ * @return object
+ */
+ public function getFeaturedPlaylists($options = array())
+ {
+ $defaults = array(
+ 'country' => '',
+ 'limit' => 0,
+ 'locale' => '',
+ 'offset' => 0,
+ 'timestamp' => ''
+ );
+
+ $options = array_merge($defaults, (array) $options);
+ $options = array_filter($options);
+
+ $response = $this->request->api('GET', '/v1/browse/featured-playlists', $options, array(
+ 'Authorization' => 'Bearer ' . $this->accessToken
+ ));
+
+ return $response['body'];
+ }
+
+ /**
+ * Get new releases.
+ * Requires a valid access token.
+ * https://developer.spotify.com/web-api/get-list-new-releases/
+ *
+ * @param array|object $options Optional. Options for the items.
+ * - string country Optional. An ISO 3166-1 alpha-2 country code. Show items relevant to this country.
+ * - int limit Optional. Limit the number of items.
+ * - int offset Optional. Number of items to skip.
+ *
+ * @return object
+ */
+ public function getNewReleases($options = array())
+ {
+ $defaults = array(
+ 'country' => '',
+ 'limit' => 0,
+ 'offset' => 0
+ );
+
+ $options = array_merge($defaults, (array) $options);
+ $options = array_filter($options);
+
+ $response = $this->request->api('GET', '/v1/browse/new-releases', $options, array(
+ 'Authorization' => 'Bearer ' . $this->accessToken
+ ));
+
+ return $response['body'];
+ }
+
+ /**
+ * Get the current user’s saved tracks.
+ * Requires a valid access token.
+ * https://developer.spotify.com/web-api/get-users-saved-tracks/
+ *
+ * @param array|object $options Optional. Options for the tracks.
+ * - int limit Optional. Limit the number of tracks.
+ * - int offset Optional. Number of tracks to skip.
+ *
+ * @return array
+ */
+ public function getMySavedTracks($options = array())
+ {
+ $defaults = array(
+ 'limit' => 0,
+ 'offset' => 0
+ );
+
+ $options = array_merge($defaults, (array) $options);
+ $options = array_filter($options);
+
+ $response = $this->request->api('GET', '/v1/me/tracks', $options, array(
+ 'Authorization' => 'Bearer ' . $this->accessToken
+ ));
+
+ return $response['body'];
+ }
+
+ /**
+ * Get a track.
+ * https://developer.spotify.com/web-api/get-track/
+ *
+ * @param string $trackId ID of the track.
+ *
+ * @return object
+ */
+ public function getTrack($trackId)
+ {
+ $response = $this->request->api('GET', '/v1/tracks/' . $trackId);
+
+ return $response['body'];
+ }
+
+ /**
+ * Get multiple tracks.
+ * https://developer.spotify.com/web-api/get-several-tracks/
+ *
+ * @param array $trackIds ID of the tracks.
+ *
+ * @return object
+ */
+ public function getTracks($trackIds)
+ {
+ $trackIds = implode(',', $trackIds);
+ $response = $this->request->api('GET', '/v1/tracks/', array('ids' => $trackIds));
+
+ return $response['body'];
+ }
+
+ /**
+ * Get a user.
+ * https://developer.spotify.com/web-api/get-users-profile/
+ *
+ * @param string $userId ID of the user.
+ *
+ * @return object
+ */
+ public function getUser($userId)
+ {
+ $response = $this->request->api('GET', '/v1/users/' . $userId);
+
+ return $response['body'];
+ }
+
+ /**
+ * Get a user's playlists.
+ * Requires a valid access token.
+ * https://developer.spotify.com/web-api/get-list-users-playlists/
+ *
+ * @param string $userId ID of the user.
+ * @param array|object $options Optional. Options for the tracks.
+ * - int limit Optional. Limit the number of tracks.
+ * - int offset Optional. Number of tracks to skip.
+ *
+ * @return object
+ */
+ public function getUserPlaylists($userId, $options = array())
+ {
+ $defaults = array(
+ 'limit' => 0,
+ 'offset' => 0
+ );
+
+ $options = array_merge($defaults, (array) $options);
+ $options = array_filter($options);
+
+ $response = $this->request->api('GET', '/v1/users/' . $userId . '/playlists', $options, array(
+ 'Authorization' => 'Bearer ' . $this->accessToken
+ ));
+
+ return $response['body'];
+ }
+
+ /**
+ * Get a user's specific playlist.
+ * Requires a valid access token.
+ * https://developer.spotify.com/web-api/get-playlist/
+ *
+ * @param string $userId ID of the user.
+ * @param string $playlistId ID of the playlist.
+ *
+ * @return object
+ */
+ public function getUserPlaylist($userId, $playlistId)
+ {
+ $response = $this->request->api('GET', '/v1/users/' . $userId . '/playlists/' . $playlistId, array(), array(
+ 'Authorization' => 'Bearer ' . $this->accessToken
+ ));
+
+ return $response['body'];
+ }
+
+ /**
+ * Get the tracks in a user's playlist.
+ * Requires a valid access token.
+ * https://developer.spotify.com/web-api/get-playlists-tracks/
+ *
+ * @param string $userId ID of the user.
+ * @param string $playlistId ID of the playlist.
+ * @param array|object $options Optional. Options for the tracks.
+ * - array fields Optional. A list of fields to return. See Spotify docs for more info.
+ * - int limit Optional. Limit the number of tracks.
+ * - int offset Optional. Number of tracks to skip.
+ *
+ * @return object
+ */
+ public function getUserPlaylistTracks($userId, $playlistId, $options = array())
+ {
+ $defaults = array(
+ 'fields' => array(),
+ 'limit' => 0,
+ 'offset' => 0
+ );
+
+ $options = array_merge($defaults, (array) $options);
+ $options['fields'] = implode(',', $options['fields']);
+ $options = array_filter($options);
+
+ $response = $this->request->api('GET', '/v1/users/' . $userId . '/playlists/' . $playlistId . '/tracks', $options, array(
+ 'Authorization' => 'Bearer ' . $this->accessToken
+ ));
+
+ return $response['body'];
+ }
+
+ /**
+ * Get the currently authenticated user.
+ * Requires a valid access token.
+ * https://developer.spotify.com/web-api/get-current-users-profile/
+ *
+ * @return object
+ */
+ public function me()
+ {
+ $response = $this->request->api('GET', '/v1/me', array(), array(
+ 'Authorization' => 'Bearer ' . $this->accessToken
+ ));
+
+ return $response['body'];
+ }
+
+ /**
+ * Check if the track(s) is saved in the current user's Spotify library.
+ * Requires a valid access token.
+ * https://developer.spotify.com/web-api/check-users-saved-tracks/
+ *
+ * @param string|array $tracks ID of the track(s) to check for.
+ *
+ * @return array
+ */
+ public function myTracksContains($tracks)
+ {
+ $tracks = implode(',', (array) $tracks);
+
+ $response = $this->request->api('GET', '/v1/me/tracks/contains', array('ids' => $tracks), array(
+ 'Authorization' => 'Bearer ' . $this->accessToken
+ ));
+
+ return $response['body'];
+ }
+
+ /**
+ * Replace all tracks in a user's playlist with new ones.
+ * Requires a valid access token.
+ * https://developer.spotify.com/web-api/replace-playlists-tracks/
+ *
+ * @param string $userId ID of the user.
+ * @param string $playlistId ID of the playlist.
+ * @param string|array $tracks ID of the track(s) to add.
+ *
+ * @return bool
+ */
+ public function replacePlaylistTracks($userId, $playlistId, $tracks)
+ {
+ $tracks = $this->idToUri($tracks);
+ $tracks = array('uris' => (array) $tracks);
+ $tracks = json_encode($tracks);
+
+ $response = $this->request->api('PUT', '/v1/users/' . $userId . '/playlists/' . $playlistId . '/tracks', $tracks, array(
+ 'Authorization' => 'Bearer ' . $this->accessToken
+ ));
+
+ return $response['status'] == 201;
+ }
+
+ /**
+ * Search for an item.
+ * Requires a valid access token if market=from_token is used.
+ * https://developer.spotify.com/web-api/search-item/
+ *
+ * @param string $query The term to search for.
+ * @param string|array $type The type of item to search for; "album", "artist", or "track".
+ * @param array|object $options Optional. Options for the search.
+ * - string market Optional. A ISO 3166-1 alpha-2 country code. Limit the results to items that are playable in this market.
+ * - int limit Optional. Limit the number of items.
+ * - int offset Optional. Number of items to skip.
+ *
+ * @return array
+ */
+ public function search($query, $type, $options = array())
+ {
+ $defaults = array(
+ 'market' => '',
+ 'limit' => 0,
+ 'offset' => 0
+ );
+
+ $type = implode(',', (array) $type);
+
+ $options = array_merge($defaults, (array) $options);
+ $options = array_filter($options);
+ $options = array_merge($options, array(
+ 'query' => $query,
+ 'type' => $type
+ ));
+
+ $headers = array();
+ if (isset($options['market']) && $options['market'] == 'from_token') {
+ $headers['Authorization'] = 'Bearer ' . $this->accessToken;
+ }
+
+ $response = $this->request->api('GET', '/v1/search', $options, $headers);
+
+ return $response['body'];
+ }
+
+ /**
+ * Set the access token to use.
+ *
+ * @param string $accessToken The access token.
+ *
+ * @return void
+ */
+ public function setAccessToken($accessToken)
+ {
+ $this->accessToken = $accessToken;
+ }
+
+ /**
+ * Update the details of a user's playlist.
+ * Requires a valid access token.
+ * https://developer.spotify.com/web-api/change-playlist-details/
+ *
+ * @param array|object $data Data for the new playlist.
+ * - name string Required. Name of the playlist.
+ * - public bool Optional. Whether the playlist should be public or not.
+ *
+ * @return bool
+ */
+ public function updateUserPlaylist($userId, $playlistId, $data)
+ {
+ $defaults = array(
+ 'name' => '',
+ 'public' => true
+ );
+
+ $data = array_merge($defaults, (array) $data);
+ $data = json_encode($data);
+
+ $response = $this->request->api('PUT', '/v1/users/' . $userId . '/playlists/' . $playlistId, $data, array(
+ 'Authorization' => 'Bearer ' . $this->accessToken,
+ 'Content-Type' => 'application/json'
+ ));
+
+ return $response['status'] == 200;
+ }
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/src/SpotifyWebAPIException.php b/vendor/jwilsson/spotify-web-api-php/src/SpotifyWebAPIException.php
new file mode 100644
index 0000000..78510a3
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/src/SpotifyWebAPIException.php
@@ -0,0 +1,7 @@
+request = new SpotifyWebAPI\Request();
+ }
+
+ public function testApi()
+ {
+ $response = $this->request->api('GET', '/v1/albums/7u6zL7kqpgLPISZYXNTgYk');
+
+ $this->assertObjectHasAttribute('id', $response['body']);
+ }
+
+ public function testApiParameters()
+ {
+ $response = $this->request->api('GET', '/v1/albums', array(
+ 'ids' => '1oR3KrPIp4CbagPa3PhtPp,6lPb7Eoon6QPbscWbMsk6a'
+ ));
+
+ $this->assertObjectHasAttribute('id', $response['body']->albums[0]);
+ $this->assertObjectHasAttribute('id', $response['body']->albums[1]);
+ }
+
+ public function testSend()
+ {
+ $response = $this->request->send('GET', 'https://api.spotify.com/v1/albums/7u6zL7kqpgLPISZYXNTgYk');
+
+ $this->assertObjectHasAttribute('id', $response['body']);
+ }
+
+ public function testSendParameters()
+ {
+ $response = $this->request->send('GET', 'https://api.spotify.com/v1/albums', array(
+ 'ids' => '1oR3KrPIp4CbagPa3PhtPp,6lPb7Eoon6QPbscWbMsk6a'
+ ));
+
+ $this->assertObjectHasAttribute('id', $response['body']->albums[0]);
+ $this->assertObjectHasAttribute('id', $response['body']->albums[1]);
+ }
+
+ public function testSendHeaders()
+ {
+ $response = $this->request->send('GET', 'https://api.spotify.com/v1/albums/7u6zL7kqpgLPISZYXNTgYk');
+
+ $this->assertInternalType('string', $response['headers']);
+ }
+
+ public function testSendStatus()
+ {
+ $response = $this->request->send('GET', 'https://api.spotify.com/v1/albums/7u6zL7kqpgLPISZYXNTgYk');
+
+ $this->assertEquals(200, $response['status']);
+ }
+
+ public function testSendMalformed()
+ {
+ $this->setExpectedException('SpotifyWebAPI\SpotifyWebAPIException');
+
+ $response = $this->request->send('GET', 'https://api.spotify.com/v1/albums/NON_EXISTING_ALBUM');
+ }
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/SessionTest.php b/vendor/jwilsson/spotify-web-api-php/tests/SessionTest.php
new file mode 100644
index 0000000..d019077
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/SessionTest.php
@@ -0,0 +1,183 @@
+session = new SpotifyWebAPI\Session(getenv('SPOTIFY_CLIENT_ID'), getenv('SPOTIFY_CLIENT_SECRET'), getenv('SPOTIFY_REDIRECT_URI'));
+ }
+
+ public function testGetAuthorizeUrl()
+ {
+ $clientID = getenv('SPOTIFY_CLIENT_ID');
+ $redirectUri = urlencode(getenv('SPOTIFY_REDIRECT_URI'));
+
+ $expected = "https://accounts.spotify.com/authorize/?client_id=$clientID&redirect_uri=$redirectUri&response_type=code&scope=&show_dialog=false&state=";
+ $url = $this->session->getAuthorizeUrl();
+
+ $this->assertEquals($expected, $url);
+ }
+
+ public function testGetAuthorizeUrlScope()
+ {
+ $clientID = getenv('SPOTIFY_CLIENT_ID');
+ $redirectUri = urlencode(getenv('SPOTIFY_REDIRECT_URI'));
+ $scope = array('user-read-email');
+ $scopeOut = urlencode(implode(' ', $scope));
+
+ $expected = "https://accounts.spotify.com/authorize/?client_id=$clientID&redirect_uri=$redirectUri&response_type=code&scope=$scopeOut&show_dialog=false&state=";
+ $url = $this->session->getAuthorizeUrl(array(
+ 'scope' => $scope
+ ));
+
+ $this->assertEquals($expected, $url);
+ }
+
+ public function testGetAuthorizeUrlMultipleScope()
+ {
+ $clientID = getenv('SPOTIFY_CLIENT_ID');
+ $redirectUri = urlencode(getenv('SPOTIFY_REDIRECT_URI'));
+ $scope = array('user-read-email', 'playlist-modify-public');
+ $scopeOut = urlencode(implode(' ', $scope));
+
+ $expected = "https://accounts.spotify.com/authorize/?client_id=$clientID&redirect_uri=$redirectUri&response_type=code&scope=$scopeOut&show_dialog=false&state=";
+ $url = $this->session->getAuthorizeUrl(array(
+ 'scope' => $scope
+ ));
+
+ $this->assertEquals($expected, $url);
+ }
+
+ public function testGetAuthorizeUrlDefaultShowDialog()
+ {
+ $clientID = getenv('SPOTIFY_CLIENT_ID');
+ $redirectUri = urlencode(getenv('SPOTIFY_REDIRECT_URI'));
+
+ $expected = "https://accounts.spotify.com/authorize/?client_id=$clientID&redirect_uri=$redirectUri&response_type=code&scope=&show_dialog=false&state=";
+ $url = $this->session->getAuthorizeUrl();
+
+ $this->assertEquals($expected, $url);
+ }
+
+ public function testGetAuthorizeUrlShowDialog()
+ {
+ $clientID = getenv('SPOTIFY_CLIENT_ID');
+ $redirectUri = urlencode(getenv('SPOTIFY_REDIRECT_URI'));
+
+ $expected = "https://accounts.spotify.com/authorize/?client_id=$clientID&redirect_uri=$redirectUri&response_type=code&scope=&show_dialog=true&state=";
+ $url = $this->session->getAuthorizeUrl(array(
+ 'show_dialog' => true
+ ));
+
+ $this->assertEquals($expected, $url);
+ }
+
+ public function testGetAuthorizeUrlState()
+ {
+ $clientID = getenv('SPOTIFY_CLIENT_ID');
+ $redirectUri = urlencode(getenv('SPOTIFY_REDIRECT_URI'));
+ $state = 'foobar';
+
+ $expected = "https://accounts.spotify.com/authorize/?client_id=$clientID&redirect_uri=$redirectUri&response_type=code&scope=&show_dialog=false&state=$state";
+ $url = $this->session->getAuthorizeUrl(array(
+ 'state' => $state
+ ));
+
+ $this->assertEquals($expected, $url);
+ }
+
+ public function testGetAuthorizeUrlScopeAndState()
+ {
+ $clientID = getenv('SPOTIFY_CLIENT_ID');
+ $redirectUri = urlencode(getenv('SPOTIFY_REDIRECT_URI'));
+ $scope = array('user-read-email');
+ $scopeOut = urlencode(implode(' ', $scope));
+ $state = 'foobar';
+
+ $expected = "https://accounts.spotify.com/authorize/?client_id=$clientID&redirect_uri=$redirectUri&response_type=code&scope=$scopeOut&show_dialog=false&state=$state";
+ $url = $this->session->getAuthorizeUrl(array(
+ 'scope' => $scope,
+ 'state' => $state
+ ));
+
+ $this->assertEquals($expected, $url);
+ }
+
+ public function testGetAuthorizeUrlOptions()
+ {
+ $clientID = getenv('SPOTIFY_CLIENT_ID');
+ $redirectUri = urlencode(getenv('SPOTIFY_REDIRECT_URI'));
+ $scope = array('user-read-email');
+ $scopeOut = urlencode(implode(' ', $scope));
+ $state = 'foobar';
+
+ $expected = "https://accounts.spotify.com/authorize/?client_id=$clientID&redirect_uri=$redirectUri&response_type=code&scope=$scopeOut&show_dialog=true&state=$state";
+ $url = $this->session->getAuthorizeUrl(array(
+ 'scope' => $scope,
+ 'show_dialog' => true,
+ 'state' => $state
+ ));
+
+ $this->assertEquals($expected, $url);
+ }
+
+ public function testGetAuthorizeUrlMultipleScopeAndState()
+ {
+ $clientID = getenv('SPOTIFY_CLIENT_ID');
+ $redirectUri = urlencode(getenv('SPOTIFY_REDIRECT_URI'));
+ $scope = array('user-read-email', 'playlist-modify-public');
+ $scopeOut = urlencode(implode(' ', $scope));
+ $state = 'foobar';
+
+ $expected = "https://accounts.spotify.com/authorize/?client_id=$clientID&redirect_uri=$redirectUri&response_type=code&scope=$scopeOut&show_dialog=false&state=$state";
+ $url = $this->session->getAuthorizeUrl(array(
+ 'scope' => $scope,
+ 'state' => $state
+ ));
+
+ $this->assertEquals($expected, $url);
+ }
+
+ public function testGetClientId()
+ {
+ $expected = getenv('SPOTIFY_CLIENT_ID');
+ $clientID = $this->session->getClientId();
+
+ $this->assertEquals($expected, $clientID);
+ }
+
+ public function testGetClientSecret()
+ {
+ $expected = getenv('SPOTIFY_CLIENT_SECRET');
+ $clientSecret = $this->session->getClientSecret();
+
+ $this->assertEquals($expected, $clientSecret);
+ }
+
+ public function testGetRedirectUri()
+ {
+ $expected = getenv('SPOTIFY_REDIRECT_URI');
+ $redirectUri = $this->session->getRedirectUri();
+
+ $this->assertEquals($expected, $redirectUri);
+ }
+
+ public function testRequestCredentialsToken()
+ {
+ $this->session = new SpotifyWebAPI\Session(getenv('SPOTIFY_CLIENT_ID'), getenv('SPOTIFY_CLIENT_SECRET'), getenv('SPOTIFY_REDIRECT_URI'));
+ $this->session->requestCredentialsToken();
+
+ $this->assertNotEmpty($this->session->getAccessToken());
+ }
+
+ public function testRequestCredentialsTokenScope()
+ {
+ $this->session = new SpotifyWebAPI\Session(getenv('SPOTIFY_CLIENT_ID'), getenv('SPOTIFY_CLIENT_SECRET'), getenv('SPOTIFY_REDIRECT_URI'));
+ $this->session->requestCredentialsToken(array('user-read-email'));
+
+ $this->assertNotEmpty($this->session->getAccessToken());
+ }
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/SpotifyWebAPITest.php b/vendor/jwilsson/spotify-web-api-php/tests/SpotifyWebAPITest.php
new file mode 100644
index 0000000..039f96f
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/SpotifyWebAPITest.php
@@ -0,0 +1,370 @@
+ $fixture
+ );
+ } else {
+ $fixture = __DIR__ . '/fixtures/' . $fixture . '.json';
+ $fixture = file_get_contents($fixture);
+
+ $response = json_decode($fixture);
+ $return = array(
+ 'body' => $response
+ );
+ }
+
+ $request = $this->getMock('SpotifyWebAPI\Request');
+ $request->method('api')
+ ->willReturn($return);
+
+ $api = new SpotifyWebAPI\SpotifyWebAPI($request);
+ return $api;
+ }
+
+ public function testAddMyTracksSingle()
+ {
+ $api = $this->setupMock();
+ $response = $api->addMyTracks('7EjyzZcbLxW7PaaLua9Ksb');
+
+ $this->assertTrue($response);
+ }
+
+ public function testAddMyTracksMultiple()
+ {
+ $api = $this->setupMock();
+ $response = $api->addMyTracks(array(
+ '1id6H6vcwSB9GGv9NXh5cl',
+ '3mqRLlD9j92BBv1ueFhJ1l'
+ ));
+
+ $this->assertTrue($response);
+ }
+
+ public function testAddUserPlaylistTracksSingle()
+ {
+ $api = $this->setupMock(201);
+ $response = $api->addUserPlaylistTracks('mcgurk', $this->playlistID, '7EjyzZcbLxW7PaaLua9Ksb');
+
+ $this->assertTrue($response);
+ }
+
+ public function testAddUserPlaylistTracksMultiple()
+ {
+ $api = $this->setupMock(201);
+ $response = $api->addUserPlaylistTracks('mcgurk', $this->playlistID, array(
+ '1id6H6vcwSB9GGv9NXh5cl',
+ '3mqRLlD9j92BBv1ueFhJ1l'
+ ));
+
+ $this->assertTrue($response);
+ }
+
+ public function testCreateUserPlaylist()
+ {
+ $api = $this->setupMock('user-playlist');
+ $response = $api->createUserPlaylist('mcgurk', array(
+ 'name' => 'Test playlist',
+ 'public' => false
+ ));
+
+ $this->assertObjectHasAttribute('id', $response);
+ }
+
+ public function testCreateUserPlaylistPublic()
+ {
+ $api = $this->setupMock('user-playlist-public');
+ $response = $api->createUserPlaylist('mcgurk', array(
+ 'name' => 'Test playlist'
+ ));
+
+ $this->assertTrue($response->public);
+ }
+
+ public function testDeleteMyTracksSingle()
+ {
+ $api = $this->setupMock();
+ $response = $api->deleteMyTracks('7EjyzZcbLxW7PaaLua9Ksb');
+
+ $this->assertTrue($response);
+ }
+
+ public function testDeleteMyTracksMultiple()
+ {
+ $api = $this->setupMock();
+ $response = $api->deleteMyTracks(array(
+ '1id6H6vcwSB9GGv9NXh5cl',
+ '3mqRLlD9j92BBv1ueFhJ1l'
+ ));
+
+ $this->assertTrue($response);
+ }
+
+ public function testDeletePlaylistTracksSingle()
+ {
+ $api = $this->setupMock('user-playlist-snapshot-id');
+ $response = $api->deletePlaylistTracks('mcgurk', $this->playlistID, array(
+ array(
+ 'id' => '7EjyzZcbLxW7PaaLua9Ksb'
+ )
+ ));
+
+ $this->assertNotFalse($response);
+ }
+
+ public function testDeletePlaylistTracksMultiple()
+ {
+ $api = $this->setupMock('user-playlist-snapshot-id');
+ $response = $api->deletePlaylistTracks('mcgurk', $this->playlistID, array(
+ array(
+ 'id' => '1id6H6vcwSB9GGv9NXh5cl'
+ ),
+ array(
+ 'id' => '3mqRLlD9j92BBv1ueFhJ1l'
+ )
+ ));
+
+ $this->assertNotFalse($response);
+ }
+
+ public function testGetAlbum()
+ {
+ $api = $this->setupMock('album');
+ $response = $api->getAlbum('7u6zL7kqpgLPISZYXNTgYk');
+
+ $this->assertObjectHasAttribute('id', $response);
+ }
+
+ public function testGetAlbums()
+ {
+ $api = $this->setupMock('albums');
+ $response = $api->getAlbums(array(
+ '1oR3KrPIp4CbagPa3PhtPp',
+ '6lPb7Eoon6QPbscWbMsk6a'
+ ));
+
+ $this->assertObjectHasAttribute('id', $response->albums[0]);
+ $this->assertObjectHasAttribute('id', $response->albums[1]);
+ }
+
+ public function testGetAlbumTracks()
+ {
+ $api = $this->setupMock('album-tracks');
+ $response = $api->getAlbumTracks('1oR3KrPIp4CbagPa3PhtPp');
+
+ $this->assertObjectHasAttribute('items', $response);
+ }
+
+ public function testGetArtist()
+ {
+ $api = $this->setupMock('artist');
+ $response = $api->getArtist('36QJpDe2go2KgaRleHCDTp');
+
+ $this->assertObjectHasAttribute('id', $response);
+ }
+
+ public function testGetArtistRelatedArtists()
+ {
+ $api = $this->setupMock('artist-related-artists');
+ $response = $api->getArtistRelatedArtists('36QJpDe2go2KgaRleHCDTp');
+
+ $this->assertNotEmpty($response->artists);
+ }
+
+ public function testGetArtists()
+ {
+ $api = $this->setupMock('artists');
+ $response = $api->getArtists(array(
+ '6v8FB84lnmJs434UJf2Mrm',
+ '6olE6TJLqED3rqDCT0FyPh'
+ ));
+
+ $this->assertObjectHasAttribute('id', $response->artists[0]);
+ $this->assertObjectHasAttribute('id', $response->artists[1]);
+ }
+
+ public function testGetArtistAlbums()
+ {
+ $api = $this->setupMock('artist-albums');
+ $response = $api->getArtistAlbums('6v8FB84lnmJs434UJf2Mrm');
+
+ $this->assertObjectHasAttribute('items', $response);
+ }
+
+ public function testGetArtistTopTracks()
+ {
+ $api = $this->setupMock('artist-top-tracks');
+ $response = $api->getArtistTopTracks('6v8FB84lnmJs434UJf2Mrm', 'se');
+
+ $this->assertObjectHasAttribute('tracks', $response);
+ }
+
+ public function testGetFeaturedPlaylists()
+ {
+ $api = $this->setupMock('featured-playlists');
+ $response = $api->getFeaturedPlaylists(array(
+ 'timestamp' => '2014-10-25T21:00:00' // Saturday night
+ ));
+
+ $this->assertObjectHasAttribute('playlists', $response);
+ }
+
+ public function testGetNewReleases()
+ {
+ $api = $this->setupMock('albums');
+ $response = $api->getNewReleases(array(
+ 'country' => 'se',
+ ));
+
+ $this->assertObjectHasAttribute('albums', $response);
+ }
+
+ public function testGetMySavedTracks()
+ {
+ $api = $this->setupMock('user-tracks');
+ $response = $api->getMySavedTracks();
+
+ $this->assertNotEmpty($response->items);
+ }
+
+ public function testGetTrack()
+ {
+ $api = $this->setupMock('track');
+ $response = $api->getTrack('7EjyzZcbLxW7PaaLua9Ksb');
+
+ $this->assertObjectHasAttribute('id', $response);
+ }
+
+ public function testGetTracks()
+ {
+ $api = $this->setupMock('tracks');
+ $response = $api->getTracks(array(
+ '0eGsygTp906u18L0Oimnem',
+ '1lDWb6b6ieDQ2xT7ewTC3G'
+ ));
+
+ $this->assertObjectHasAttribute('id', $response->tracks[0]);
+ $this->assertObjectHasAttribute('id', $response->tracks[1]);
+ }
+
+ public function testGetUser()
+ {
+ $api = $this->setupMock('user');
+ $response = $api->getUser('mcgurk');
+
+ $this->assertObjectHasAttribute('id', $response);
+ }
+
+ public function testGetUserPlaylists()
+ {
+ $api = $this->setupMock('user-playlists');
+ $response = $api->getUserPlaylists('mcgurk');
+
+ $this->assertNotEmpty($response->items);
+ }
+
+ public function testGetUserPlaylist()
+ {
+ $api = $this->setupMock('user-playlist');
+ $response = $api->getUserPlaylist('mcgurk', $this->playlistID);
+
+ $this->assertObjectHasAttribute('id', $response);
+ }
+
+ public function testGetUserPlaylistTracks()
+ {
+ $api = $this->setupMock('user-playlist-tracks');
+ $response = $api->getUserPlaylistTracks('mcgurk', $this->playlistID);
+
+ $this->assertObjectHasAttribute('track', $response->items[0]);
+ $this->assertObjectHasAttribute('track', $response->items[1]);
+ }
+
+ public function testMe()
+ {
+ $api = $this->setupMock('user');
+ $response = $api->me();
+
+ $this->assertObjectHasAttribute('id', $response);
+ }
+
+ public function testMyTracksContainsSingle()
+ {
+ $api = $this->setupMock('user-tracks-contain');
+ $response = $api->myTracksContains('0oks4FnzhNp5QPTZtoet7c');
+
+ $this->assertTrue($response[0]);
+ }
+
+ public function testMyTracksContainsMultiple()
+ {
+ $api = $this->setupMock('user-tracks-contains');
+ $response = $api->myTracksContains(array(
+ '0oks4FnzhNp5QPTZtoet7c',
+ '69kOkLUCkxIZYexIgSG8rq'
+ ));
+
+ $this->assertTrue($response[0]);
+ $this->assertTrue($response[1]);
+ }
+
+ public function testReplacePlaylistTracksSingle()
+ {
+ $api = $this->setupMock(201);
+ $response = $api->replacePlaylistTracks('mcgurk', $this->playlistID, '7eEfbAG7wgV4AgkdTakVFT');
+
+ $this->assertTrue($response);
+ }
+
+ public function testReplacePlaylistTracksMultiple()
+ {
+ $api = $this->setupMock(201);
+ $response = $api->replacePlaylistTracks('mcgurk', $this->playlistID, array(
+ '7kz6GbFr2MCI7PgXJOdq8c',
+ '6HM9UgDB38hLDFm7e1RF6W'
+ ));
+
+ $this->assertTrue($response);
+ }
+
+ public function testSearchAlbum()
+ {
+ $api = $this->setupMock('search-album');
+ $response = $api->search('blur', 'album');
+
+ $this->assertNotEmpty($response->albums->items);
+ }
+
+ public function testSearchArtist()
+ {
+ $api = $this->setupMock('search-artist');
+ $response = $api->search('blur', 'artist');
+
+ $this->assertNotEmpty($response->artists->items);
+ }
+
+ public function testSearchTrack()
+ {
+ $api = $this->setupMock('search-track');
+ $response = $api->search('song 2', 'track');
+
+ $this->assertNotEmpty($response->tracks->items);
+ }
+
+ public function testUpdateUserPlaylist()
+ {
+ $api = $this->setupMock();
+ $response = $api->updateUserPlaylist('mcgurk', $this->playlistID, array(
+ 'public' => false
+ ));
+
+ $this->assertTrue($response);
+ }
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/album-tracks.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/album-tracks.json
new file mode 100644
index 0000000..169412e
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/album-tracks.json
@@ -0,0 +1,134 @@
+{
+ "href" : "https://api.spotify.com/v1/albums/1oR3KrPIp4CbagPa3PhtPp/tracks?offset=0&limit=5",
+ "items" : [ {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3qm84nBOXUEQ2vnTfUTTFC"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3qm84nBOXUEQ2vnTfUTTFC",
+ "id" : "3qm84nBOXUEQ2vnTfUTTFC",
+ "name" : "Guns N' Roses",
+ "type" : "artist",
+ "uri" : "spotify:artist:3qm84nBOXUEQ2vnTfUTTFC"
+ } ],
+ "available_markets" : [ "CR", "DO", "GT", "HN", "NI", "PA", "SV" ],
+ "disc_number" : 1,
+ "duration_ms" : 273600,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0oWHLtxWeMJhmwxtrxhNK0"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0oWHLtxWeMJhmwxtrxhNK0",
+ "id" : "0oWHLtxWeMJhmwxtrxhNK0",
+ "name" : "Welcome To The Jungle",
+ "preview_url" : "https://p.scdn.co/mp3-preview/6ac585f7791a2ec0a60c17e04846345ed7671d0b",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:0oWHLtxWeMJhmwxtrxhNK0"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3qm84nBOXUEQ2vnTfUTTFC"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3qm84nBOXUEQ2vnTfUTTFC",
+ "id" : "3qm84nBOXUEQ2vnTfUTTFC",
+ "name" : "Guns N' Roses",
+ "type" : "artist",
+ "uri" : "spotify:artist:3qm84nBOXUEQ2vnTfUTTFC"
+ } ],
+ "available_markets" : [ "CR", "DO", "GT", "HN", "NI", "PA", "SV" ],
+ "disc_number" : 1,
+ "duration_ms" : 202893,
+ "explicit" : true,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0fu0HHl1yVC2iCUuyBT144"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0fu0HHl1yVC2iCUuyBT144",
+ "id" : "0fu0HHl1yVC2iCUuyBT144",
+ "name" : "It's So Easy",
+ "preview_url" : "https://p.scdn.co/mp3-preview/ee696163ab8f41d9bee0b44f6d2c49ab8b28e490",
+ "track_number" : 2,
+ "type" : "track",
+ "uri" : "spotify:track:0fu0HHl1yVC2iCUuyBT144"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3qm84nBOXUEQ2vnTfUTTFC"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3qm84nBOXUEQ2vnTfUTTFC",
+ "id" : "3qm84nBOXUEQ2vnTfUTTFC",
+ "name" : "Guns N' Roses",
+ "type" : "artist",
+ "uri" : "spotify:artist:3qm84nBOXUEQ2vnTfUTTFC"
+ } ],
+ "available_markets" : [ "CR", "DO", "GT", "HN", "NI", "PA", "SV" ],
+ "disc_number" : 1,
+ "duration_ms" : 268506,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/23ZdycsvnFHK9NF1X2V7bc"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/23ZdycsvnFHK9NF1X2V7bc",
+ "id" : "23ZdycsvnFHK9NF1X2V7bc",
+ "name" : "Nightrain",
+ "preview_url" : "https://p.scdn.co/mp3-preview/30e5ca88cae78b02dea6a718b73b7db5e8ddcac6",
+ "track_number" : 3,
+ "type" : "track",
+ "uri" : "spotify:track:23ZdycsvnFHK9NF1X2V7bc"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3qm84nBOXUEQ2vnTfUTTFC"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3qm84nBOXUEQ2vnTfUTTFC",
+ "id" : "3qm84nBOXUEQ2vnTfUTTFC",
+ "name" : "Guns N' Roses",
+ "type" : "artist",
+ "uri" : "spotify:artist:3qm84nBOXUEQ2vnTfUTTFC"
+ } ],
+ "available_markets" : [ "CR", "DO", "GT", "HN", "NI", "PA", "SV" ],
+ "disc_number" : 1,
+ "duration_ms" : 263866,
+ "explicit" : true,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0DEGMFohkJUQprEG1wU4SN"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0DEGMFohkJUQprEG1wU4SN",
+ "id" : "0DEGMFohkJUQprEG1wU4SN",
+ "name" : "Out Ta Get Me",
+ "preview_url" : "https://p.scdn.co/mp3-preview/dc59755154bb63036390eba86ce774db660e1740",
+ "track_number" : 4,
+ "type" : "track",
+ "uri" : "spotify:track:0DEGMFohkJUQprEG1wU4SN"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3qm84nBOXUEQ2vnTfUTTFC"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3qm84nBOXUEQ2vnTfUTTFC",
+ "id" : "3qm84nBOXUEQ2vnTfUTTFC",
+ "name" : "Guns N' Roses",
+ "type" : "artist",
+ "uri" : "spotify:artist:3qm84nBOXUEQ2vnTfUTTFC"
+ } ],
+ "available_markets" : [ "CR", "DO", "GT", "HN", "NI", "PA", "SV" ],
+ "disc_number" : 1,
+ "duration_ms" : 228893,
+ "explicit" : true,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0waeZEK1KpCuUvXkXCTOM2"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0waeZEK1KpCuUvXkXCTOM2",
+ "id" : "0waeZEK1KpCuUvXkXCTOM2",
+ "name" : "Mr. Brownstone",
+ "preview_url" : "https://p.scdn.co/mp3-preview/7ef4ea55e9a9183f9ca504ee532b23ad90b944b3",
+ "track_number" : 5,
+ "type" : "track",
+ "uri" : "spotify:track:0waeZEK1KpCuUvXkXCTOM2"
+ } ],
+ "limit" : 5,
+ "next" : "https://api.spotify.com/v1/albums/1oR3KrPIp4CbagPa3PhtPp/tracks?offset=5&limit=5",
+ "offset" : 0,
+ "previous" : null,
+ "total" : 12
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/album.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/album.json
new file mode 100644
index 0000000..802e8c8
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/album.json
@@ -0,0 +1,376 @@
+{
+ "album_type" : "album",
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/4tZwfgrHOc3mvqYlEYSvVi"
+ },
+ "href" : "https://api.spotify.com/v1/artists/4tZwfgrHOc3mvqYlEYSvVi",
+ "id" : "4tZwfgrHOc3mvqYlEYSvVi",
+ "name" : "Daft Punk",
+ "type" : "artist",
+ "uri" : "spotify:artist:4tZwfgrHOc3mvqYlEYSvVi"
+ } ],
+ "available_markets" : [ "AD", "AR", "AU", "BE", "BG", "BO", "BR", "CA", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_ids" : {
+ "upc" : "5099951165857"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/7u6zL7kqpgLPISZYXNTgYk"
+ },
+ "genres" : [ ],
+ "href" : "https://api.spotify.com/v1/albums/7u6zL7kqpgLPISZYXNTgYk",
+ "id" : "7u6zL7kqpgLPISZYXNTgYk",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/caede1fa7bfa10efabdfbb35bd826803751330a2",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/cb29ff884a77f2d6b91455f52776e4f31691d872",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/151b6ea0f60d613b0cf4c74b6ced40adbd49a771",
+ "width" : 64
+ } ],
+ "name" : "Alive 2007",
+ "popularity" : 66,
+ "release_date" : "2007-11-16",
+ "release_date_precision" : "day",
+ "tracks" : {
+ "href" : "https://api.spotify.com/v1/albums/7u6zL7kqpgLPISZYXNTgYk/tracks?offset=0&limit=50",
+ "items" : [ {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/4tZwfgrHOc3mvqYlEYSvVi"
+ },
+ "href" : "https://api.spotify.com/v1/artists/4tZwfgrHOc3mvqYlEYSvVi",
+ "id" : "4tZwfgrHOc3mvqYlEYSvVi",
+ "name" : "Daft Punk",
+ "type" : "artist",
+ "uri" : "spotify:artist:4tZwfgrHOc3mvqYlEYSvVi"
+ } ],
+ "available_markets" : [ "AD", "AR", "AU", "BE", "BG", "BO", "BR", "CA", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 387506,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/5eS6pTvDNOvh2kyxeZtK3r"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/5eS6pTvDNOvh2kyxeZtK3r",
+ "id" : "5eS6pTvDNOvh2kyxeZtK3r",
+ "name" : "Robot Rock / Oh Yeah",
+ "preview_url" : "https://p.scdn.co/mp3-preview/a3e3771fb66277739d1e5d931daf63fe49d5f904",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:5eS6pTvDNOvh2kyxeZtK3r"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/4tZwfgrHOc3mvqYlEYSvVi"
+ },
+ "href" : "https://api.spotify.com/v1/artists/4tZwfgrHOc3mvqYlEYSvVi",
+ "id" : "4tZwfgrHOc3mvqYlEYSvVi",
+ "name" : "Daft Punk",
+ "type" : "artist",
+ "uri" : "spotify:artist:4tZwfgrHOc3mvqYlEYSvVi"
+ } ],
+ "available_markets" : [ "AD", "AR", "AU", "BE", "BG", "BO", "BR", "CA", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 329653,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/4IdiGMOzEYXOh2897XOV8i"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/4IdiGMOzEYXOh2897XOV8i",
+ "id" : "4IdiGMOzEYXOh2897XOV8i",
+ "name" : "Touch It / Technologic",
+ "preview_url" : "https://p.scdn.co/mp3-preview/30bfcdca7501304bf2ad2d896407fe4e43bcba22",
+ "track_number" : 2,
+ "type" : "track",
+ "uri" : "spotify:track:4IdiGMOzEYXOh2897XOV8i"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/4tZwfgrHOc3mvqYlEYSvVi"
+ },
+ "href" : "https://api.spotify.com/v1/artists/4tZwfgrHOc3mvqYlEYSvVi",
+ "id" : "4tZwfgrHOc3mvqYlEYSvVi",
+ "name" : "Daft Punk",
+ "type" : "artist",
+ "uri" : "spotify:artist:4tZwfgrHOc3mvqYlEYSvVi"
+ } ],
+ "available_markets" : [ "AD", "AR", "AU", "BE", "BG", "BO", "BR", "CA", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 290840,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/1E8S3CSv20KrKT0C1yAjkO"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/1E8S3CSv20KrKT0C1yAjkO",
+ "id" : "1E8S3CSv20KrKT0C1yAjkO",
+ "name" : "Television Rules The Nation / Crescendolls",
+ "preview_url" : "https://p.scdn.co/mp3-preview/035dd1ef6d29dbbd3388852f76e52024c6f8d417",
+ "track_number" : 3,
+ "type" : "track",
+ "uri" : "spotify:track:1E8S3CSv20KrKT0C1yAjkO"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/4tZwfgrHOc3mvqYlEYSvVi"
+ },
+ "href" : "https://api.spotify.com/v1/artists/4tZwfgrHOc3mvqYlEYSvVi",
+ "id" : "4tZwfgrHOc3mvqYlEYSvVi",
+ "name" : "Daft Punk",
+ "type" : "artist",
+ "uri" : "spotify:artist:4tZwfgrHOc3mvqYlEYSvVi"
+ } ],
+ "available_markets" : [ "AD", "AR", "AU", "BE", "BG", "BO", "BR", "CA", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 421600,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/3n4ow4XGzwSIPxA3JHLF9p"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/3n4ow4XGzwSIPxA3JHLF9p",
+ "id" : "3n4ow4XGzwSIPxA3JHLF9p",
+ "name" : "Too Long / Steam Machine",
+ "preview_url" : "https://p.scdn.co/mp3-preview/33820c3932a69292ec77de62417f60cc4f4da79e",
+ "track_number" : 4,
+ "type" : "track",
+ "uri" : "spotify:track:3n4ow4XGzwSIPxA3JHLF9p"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/4tZwfgrHOc3mvqYlEYSvVi"
+ },
+ "href" : "https://api.spotify.com/v1/artists/4tZwfgrHOc3mvqYlEYSvVi",
+ "id" : "4tZwfgrHOc3mvqYlEYSvVi",
+ "name" : "Daft Punk",
+ "type" : "artist",
+ "uri" : "spotify:artist:4tZwfgrHOc3mvqYlEYSvVi"
+ } ],
+ "available_markets" : [ "AD", "AR", "AU", "BE", "BG", "BO", "BR", "CA", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 342626,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/5RByQFt9Mlo8hDYJ921tCv"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/5RByQFt9Mlo8hDYJ921tCv",
+ "id" : "5RByQFt9Mlo8hDYJ921tCv",
+ "name" : "Around The World / Harder Better Faster Stronger",
+ "preview_url" : "https://p.scdn.co/mp3-preview/45a4603cb95901c3fc7aa5b9073f1187f0dc62e9",
+ "track_number" : 5,
+ "type" : "track",
+ "uri" : "spotify:track:5RByQFt9Mlo8hDYJ921tCv"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/4tZwfgrHOc3mvqYlEYSvVi"
+ },
+ "href" : "https://api.spotify.com/v1/artists/4tZwfgrHOc3mvqYlEYSvVi",
+ "id" : "4tZwfgrHOc3mvqYlEYSvVi",
+ "name" : "Daft Punk",
+ "type" : "artist",
+ "uri" : "spotify:artist:4tZwfgrHOc3mvqYlEYSvVi"
+ } ],
+ "available_markets" : [ "AD", "AR", "AU", "BE", "BG", "BO", "BR", "CA", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 431506,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/3Ons6C3wXBMi8nYpLBMlVe"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/3Ons6C3wXBMi8nYpLBMlVe",
+ "id" : "3Ons6C3wXBMi8nYpLBMlVe",
+ "name" : "Burnin' / Too Long",
+ "preview_url" : "https://p.scdn.co/mp3-preview/636c0ed471ad077b6a665b21fcc8f1fbb35c5d1e",
+ "track_number" : 6,
+ "type" : "track",
+ "uri" : "spotify:track:3Ons6C3wXBMi8nYpLBMlVe"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/4tZwfgrHOc3mvqYlEYSvVi"
+ },
+ "href" : "https://api.spotify.com/v1/artists/4tZwfgrHOc3mvqYlEYSvVi",
+ "id" : "4tZwfgrHOc3mvqYlEYSvVi",
+ "name" : "Daft Punk",
+ "type" : "artist",
+ "uri" : "spotify:artist:4tZwfgrHOc3mvqYlEYSvVi"
+ } ],
+ "available_markets" : [ "AD", "AR", "AU", "BE", "BG", "BO", "BR", "CA", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 295226,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/5XzGyYZemDuCG3OdbhVFvh"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/5XzGyYZemDuCG3OdbhVFvh",
+ "id" : "5XzGyYZemDuCG3OdbhVFvh",
+ "name" : "Face To Face / Short Circuit",
+ "preview_url" : "https://p.scdn.co/mp3-preview/424ce948a9063b5d7a20eb1d60e3be1f7e6e60bd",
+ "track_number" : 7,
+ "type" : "track",
+ "uri" : "spotify:track:5XzGyYZemDuCG3OdbhVFvh"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/4tZwfgrHOc3mvqYlEYSvVi"
+ },
+ "href" : "https://api.spotify.com/v1/artists/4tZwfgrHOc3mvqYlEYSvVi",
+ "id" : "4tZwfgrHOc3mvqYlEYSvVi",
+ "name" : "Daft Punk",
+ "type" : "artist",
+ "uri" : "spotify:artist:4tZwfgrHOc3mvqYlEYSvVi"
+ } ],
+ "available_markets" : [ "AD", "AR", "AU", "BE", "BG", "BO", "BR", "CA", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 370533,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/1H1d4dr7Hk5Rrd8Tb5y5yr"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/1H1d4dr7Hk5Rrd8Tb5y5yr",
+ "id" : "1H1d4dr7Hk5Rrd8Tb5y5yr",
+ "name" : "One More Time / Aerodynamic",
+ "preview_url" : "https://p.scdn.co/mp3-preview/5e17eb92e1d0f88345dfbe6f2eb23241277df156",
+ "track_number" : 8,
+ "type" : "track",
+ "uri" : "spotify:track:1H1d4dr7Hk5Rrd8Tb5y5yr"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/4tZwfgrHOc3mvqYlEYSvVi"
+ },
+ "href" : "https://api.spotify.com/v1/artists/4tZwfgrHOc3mvqYlEYSvVi",
+ "id" : "4tZwfgrHOc3mvqYlEYSvVi",
+ "name" : "Daft Punk",
+ "type" : "artist",
+ "uri" : "spotify:artist:4tZwfgrHOc3mvqYlEYSvVi"
+ } ],
+ "available_markets" : [ "AD", "AR", "AU", "BE", "BG", "BO", "BR", "CA", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 211760,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0rFTPTXuVFIOYGnqXbWm3X"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0rFTPTXuVFIOYGnqXbWm3X",
+ "id" : "0rFTPTXuVFIOYGnqXbWm3X",
+ "name" : "Aerodynamic Beats / Gabrielle , Forget About The World",
+ "preview_url" : "https://p.scdn.co/mp3-preview/9925ccb0764bc6b0aca8282c3abd17fe1dc5c8d0",
+ "track_number" : 9,
+ "type" : "track",
+ "uri" : "spotify:track:0rFTPTXuVFIOYGnqXbWm3X"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/4tZwfgrHOc3mvqYlEYSvVi"
+ },
+ "href" : "https://api.spotify.com/v1/artists/4tZwfgrHOc3mvqYlEYSvVi",
+ "id" : "4tZwfgrHOc3mvqYlEYSvVi",
+ "name" : "Daft Punk",
+ "type" : "artist",
+ "uri" : "spotify:artist:4tZwfgrHOc3mvqYlEYSvVi"
+ } ],
+ "available_markets" : [ "AD", "AR", "AU", "BE", "BG", "BO", "BR", "CA", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 622480,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/3qVD67mL0JxgU0VQVKR52G"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/3qVD67mL0JxgU0VQVKR52G",
+ "id" : "3qVD67mL0JxgU0VQVKR52G",
+ "name" : "Prime Time Of Your Life / Brainwasher /Rollin 'and Scratchin' / Alive",
+ "preview_url" : "https://p.scdn.co/mp3-preview/8243dd4c8dfd01886c6ec3698c1e8d61bc4d6690",
+ "track_number" : 10,
+ "type" : "track",
+ "uri" : "spotify:track:3qVD67mL0JxgU0VQVKR52G"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/4tZwfgrHOc3mvqYlEYSvVi"
+ },
+ "href" : "https://api.spotify.com/v1/artists/4tZwfgrHOc3mvqYlEYSvVi",
+ "id" : "4tZwfgrHOc3mvqYlEYSvVi",
+ "name" : "Daft Punk",
+ "type" : "artist",
+ "uri" : "spotify:artist:4tZwfgrHOc3mvqYlEYSvVi"
+ } ],
+ "available_markets" : [ "AD", "AR", "AU", "BE", "BG", "BO", "BR", "CA", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 396973,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/5OWhFeNXZ2RGbsGpl3rIc3"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/5OWhFeNXZ2RGbsGpl3rIc3",
+ "id" : "5OWhFeNXZ2RGbsGpl3rIc3",
+ "name" : "Da Funk / Dadftendirekt",
+ "preview_url" : "https://p.scdn.co/mp3-preview/f6593f9c5b6365004b8ec182bf26c4baabffe358",
+ "track_number" : 11,
+ "type" : "track",
+ "uri" : "spotify:track:5OWhFeNXZ2RGbsGpl3rIc3"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/4tZwfgrHOc3mvqYlEYSvVi"
+ },
+ "href" : "https://api.spotify.com/v1/artists/4tZwfgrHOc3mvqYlEYSvVi",
+ "id" : "4tZwfgrHOc3mvqYlEYSvVi",
+ "name" : "Daft Punk",
+ "type" : "artist",
+ "uri" : "spotify:artist:4tZwfgrHOc3mvqYlEYSvVi"
+ } ],
+ "available_markets" : [ "AD", "AR", "AU", "BE", "BG", "BO", "BR", "CA", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 341106,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/029O4HWI1pVXLfFdfQd1Jb"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/029O4HWI1pVXLfFdfQd1Jb",
+ "id" : "029O4HWI1pVXLfFdfQd1Jb",
+ "name" : "Superheroes / Human After All / Rock'n Roll",
+ "preview_url" : "https://p.scdn.co/mp3-preview/533dc9813b1ea762b1a2d1df1c69a29f75b3202a",
+ "track_number" : 12,
+ "type" : "track",
+ "uri" : "spotify:track:029O4HWI1pVXLfFdfQd1Jb"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2KSssk4CH6yZFWMBqzfC8k"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2KSssk4CH6yZFWMBqzfC8k",
+ "id" : "2KSssk4CH6yZFWMBqzfC8k",
+ "name" : "Daft Punk - Stardust",
+ "type" : "artist",
+ "uri" : "spotify:artist:2KSssk4CH6yZFWMBqzfC8k"
+ } ],
+ "available_markets" : [ "AD", "AR", "AU", "BE", "BG", "BO", "BR", "CA", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 598666,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/5q2KGgJV5l4MAnnGIrvKSK"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/5q2KGgJV5l4MAnnGIrvKSK",
+ "id" : "5q2KGgJV5l4MAnnGIrvKSK",
+ "name" : "Human After All/Together/One More Time/Music Sounds Better With You",
+ "preview_url" : "https://p.scdn.co/mp3-preview/d2844ad5f21012d2f56f5cbf0caee51600e07baf",
+ "track_number" : 13,
+ "type" : "track",
+ "uri" : "spotify:track:5q2KGgJV5l4MAnnGIrvKSK"
+ } ],
+ "limit" : 50,
+ "next" : null,
+ "offset" : 0,
+ "previous" : null,
+ "total" : 13
+ },
+ "type" : "album",
+ "uri" : "spotify:album:7u6zL7kqpgLPISZYXNTgYk"
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/albums.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/albums.json
new file mode 100644
index 0000000..2dae20b
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/albums.json
@@ -0,0 +1,828 @@
+{
+ "albums" : [ {
+ "album_type" : "album",
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3qm84nBOXUEQ2vnTfUTTFC"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3qm84nBOXUEQ2vnTfUTTFC",
+ "id" : "3qm84nBOXUEQ2vnTfUTTFC",
+ "name" : "Guns N' Roses",
+ "type" : "artist",
+ "uri" : "spotify:artist:3qm84nBOXUEQ2vnTfUTTFC"
+ } ],
+ "available_markets" : [ "CR", "DO", "GT", "HN", "NI", "PA", "SV" ],
+ "external_ids" : {
+ "upc" : "00720642414828"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/1oR3KrPIp4CbagPa3PhtPp"
+ },
+ "genres" : [ ],
+ "href" : "https://api.spotify.com/v1/albums/1oR3KrPIp4CbagPa3PhtPp",
+ "id" : "1oR3KrPIp4CbagPa3PhtPp",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/69cd6069536547d074727886fc33fb3b77dabbea",
+ "width" : 639
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/d2fdd37fa854fce9e14744ca41c8e149dc612564",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/04f56ac62c83ad6e596062be61c1a334808f2b8b",
+ "width" : 64
+ } ],
+ "name" : "Appetite For Destruction",
+ "popularity" : 28,
+ "release_date" : "1987",
+ "release_date_precision" : "year",
+ "tracks" : {
+ "href" : "https://api.spotify.com/v1/albums/1oR3KrPIp4CbagPa3PhtPp/tracks?offset=0&limit=50",
+ "items" : [ {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3qm84nBOXUEQ2vnTfUTTFC"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3qm84nBOXUEQ2vnTfUTTFC",
+ "id" : "3qm84nBOXUEQ2vnTfUTTFC",
+ "name" : "Guns N' Roses",
+ "type" : "artist",
+ "uri" : "spotify:artist:3qm84nBOXUEQ2vnTfUTTFC"
+ } ],
+ "available_markets" : [ "CR", "DO", "GT", "HN", "NI", "PA", "SV" ],
+ "disc_number" : 1,
+ "duration_ms" : 273600,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0oWHLtxWeMJhmwxtrxhNK0"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0oWHLtxWeMJhmwxtrxhNK0",
+ "id" : "0oWHLtxWeMJhmwxtrxhNK0",
+ "name" : "Welcome To The Jungle",
+ "preview_url" : "https://p.scdn.co/mp3-preview/6ac585f7791a2ec0a60c17e04846345ed7671d0b",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:0oWHLtxWeMJhmwxtrxhNK0"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3qm84nBOXUEQ2vnTfUTTFC"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3qm84nBOXUEQ2vnTfUTTFC",
+ "id" : "3qm84nBOXUEQ2vnTfUTTFC",
+ "name" : "Guns N' Roses",
+ "type" : "artist",
+ "uri" : "spotify:artist:3qm84nBOXUEQ2vnTfUTTFC"
+ } ],
+ "available_markets" : [ "CR", "DO", "GT", "HN", "NI", "PA", "SV" ],
+ "disc_number" : 1,
+ "duration_ms" : 202893,
+ "explicit" : true,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0fu0HHl1yVC2iCUuyBT144"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0fu0HHl1yVC2iCUuyBT144",
+ "id" : "0fu0HHl1yVC2iCUuyBT144",
+ "name" : "It's So Easy",
+ "preview_url" : "https://p.scdn.co/mp3-preview/ee696163ab8f41d9bee0b44f6d2c49ab8b28e490",
+ "track_number" : 2,
+ "type" : "track",
+ "uri" : "spotify:track:0fu0HHl1yVC2iCUuyBT144"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3qm84nBOXUEQ2vnTfUTTFC"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3qm84nBOXUEQ2vnTfUTTFC",
+ "id" : "3qm84nBOXUEQ2vnTfUTTFC",
+ "name" : "Guns N' Roses",
+ "type" : "artist",
+ "uri" : "spotify:artist:3qm84nBOXUEQ2vnTfUTTFC"
+ } ],
+ "available_markets" : [ "CR", "DO", "GT", "HN", "NI", "PA", "SV" ],
+ "disc_number" : 1,
+ "duration_ms" : 268506,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/23ZdycsvnFHK9NF1X2V7bc"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/23ZdycsvnFHK9NF1X2V7bc",
+ "id" : "23ZdycsvnFHK9NF1X2V7bc",
+ "name" : "Nightrain",
+ "preview_url" : "https://p.scdn.co/mp3-preview/30e5ca88cae78b02dea6a718b73b7db5e8ddcac6",
+ "track_number" : 3,
+ "type" : "track",
+ "uri" : "spotify:track:23ZdycsvnFHK9NF1X2V7bc"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3qm84nBOXUEQ2vnTfUTTFC"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3qm84nBOXUEQ2vnTfUTTFC",
+ "id" : "3qm84nBOXUEQ2vnTfUTTFC",
+ "name" : "Guns N' Roses",
+ "type" : "artist",
+ "uri" : "spotify:artist:3qm84nBOXUEQ2vnTfUTTFC"
+ } ],
+ "available_markets" : [ "CR", "DO", "GT", "HN", "NI", "PA", "SV" ],
+ "disc_number" : 1,
+ "duration_ms" : 263866,
+ "explicit" : true,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0DEGMFohkJUQprEG1wU4SN"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0DEGMFohkJUQprEG1wU4SN",
+ "id" : "0DEGMFohkJUQprEG1wU4SN",
+ "name" : "Out Ta Get Me",
+ "preview_url" : "https://p.scdn.co/mp3-preview/dc59755154bb63036390eba86ce774db660e1740",
+ "track_number" : 4,
+ "type" : "track",
+ "uri" : "spotify:track:0DEGMFohkJUQprEG1wU4SN"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3qm84nBOXUEQ2vnTfUTTFC"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3qm84nBOXUEQ2vnTfUTTFC",
+ "id" : "3qm84nBOXUEQ2vnTfUTTFC",
+ "name" : "Guns N' Roses",
+ "type" : "artist",
+ "uri" : "spotify:artist:3qm84nBOXUEQ2vnTfUTTFC"
+ } ],
+ "available_markets" : [ "CR", "DO", "GT", "HN", "NI", "PA", "SV" ],
+ "disc_number" : 1,
+ "duration_ms" : 228893,
+ "explicit" : true,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0waeZEK1KpCuUvXkXCTOM2"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0waeZEK1KpCuUvXkXCTOM2",
+ "id" : "0waeZEK1KpCuUvXkXCTOM2",
+ "name" : "Mr. Brownstone",
+ "preview_url" : "https://p.scdn.co/mp3-preview/7ef4ea55e9a9183f9ca504ee532b23ad90b944b3",
+ "track_number" : 5,
+ "type" : "track",
+ "uri" : "spotify:track:0waeZEK1KpCuUvXkXCTOM2"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3qm84nBOXUEQ2vnTfUTTFC"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3qm84nBOXUEQ2vnTfUTTFC",
+ "id" : "3qm84nBOXUEQ2vnTfUTTFC",
+ "name" : "Guns N' Roses",
+ "type" : "artist",
+ "uri" : "spotify:artist:3qm84nBOXUEQ2vnTfUTTFC"
+ } ],
+ "available_markets" : [ "CR", "DO", "GT", "HN", "NI", "PA", "SV" ],
+ "disc_number" : 1,
+ "duration_ms" : 406306,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/2pDPnlF496mf3EBwrTCHN2"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/2pDPnlF496mf3EBwrTCHN2",
+ "id" : "2pDPnlF496mf3EBwrTCHN2",
+ "name" : "Paradise City",
+ "preview_url" : "https://p.scdn.co/mp3-preview/8f2880010d7b8205ee0272bef424ccee6cb0e15e",
+ "track_number" : 6,
+ "type" : "track",
+ "uri" : "spotify:track:2pDPnlF496mf3EBwrTCHN2"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3qm84nBOXUEQ2vnTfUTTFC"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3qm84nBOXUEQ2vnTfUTTFC",
+ "id" : "3qm84nBOXUEQ2vnTfUTTFC",
+ "name" : "Guns N' Roses",
+ "type" : "artist",
+ "uri" : "spotify:artist:3qm84nBOXUEQ2vnTfUTTFC"
+ } ],
+ "available_markets" : [ "CR", "DO", "GT", "HN", "NI", "PA", "SV" ],
+ "disc_number" : 1,
+ "duration_ms" : 219933,
+ "explicit" : true,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/2ybmxruJ8jlFtlb9Ui3kju"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/2ybmxruJ8jlFtlb9Ui3kju",
+ "id" : "2ybmxruJ8jlFtlb9Ui3kju",
+ "name" : "My Michelle",
+ "preview_url" : "https://p.scdn.co/mp3-preview/afc8032449ed88c7bf06f6182e8300a985a5f691",
+ "track_number" : 7,
+ "type" : "track",
+ "uri" : "spotify:track:2ybmxruJ8jlFtlb9Ui3kju"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3qm84nBOXUEQ2vnTfUTTFC"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3qm84nBOXUEQ2vnTfUTTFC",
+ "id" : "3qm84nBOXUEQ2vnTfUTTFC",
+ "name" : "Guns N' Roses",
+ "type" : "artist",
+ "uri" : "spotify:artist:3qm84nBOXUEQ2vnTfUTTFC"
+ } ],
+ "available_markets" : [ "CR", "DO", "GT", "HN", "NI", "PA", "SV" ],
+ "disc_number" : 1,
+ "duration_ms" : 229041,
+ "explicit" : true,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/2DshFvtiZTTuuLPWi2m2am"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/2DshFvtiZTTuuLPWi2m2am",
+ "id" : "2DshFvtiZTTuuLPWi2m2am",
+ "name" : "Think About You",
+ "preview_url" : "https://p.scdn.co/mp3-preview/d8a34af92c695c6e6a56b0a792913c5e49e36392",
+ "track_number" : 8,
+ "type" : "track",
+ "uri" : "spotify:track:2DshFvtiZTTuuLPWi2m2am"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3qm84nBOXUEQ2vnTfUTTFC"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3qm84nBOXUEQ2vnTfUTTFC",
+ "id" : "3qm84nBOXUEQ2vnTfUTTFC",
+ "name" : "Guns N' Roses",
+ "type" : "artist",
+ "uri" : "spotify:artist:3qm84nBOXUEQ2vnTfUTTFC"
+ } ],
+ "available_markets" : [ "CR", "DO", "GT", "HN", "NI", "PA", "SV" ],
+ "disc_number" : 1,
+ "duration_ms" : 356400,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/1kDYCn9VIDmOIbLZ2Xc7OO"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/1kDYCn9VIDmOIbLZ2Xc7OO",
+ "id" : "1kDYCn9VIDmOIbLZ2Xc7OO",
+ "name" : "Sweet Child O' Mine",
+ "preview_url" : "https://p.scdn.co/mp3-preview/6af5e89d4007d378eab8322d10c38de1b8264a92",
+ "track_number" : 9,
+ "type" : "track",
+ "uri" : "spotify:track:1kDYCn9VIDmOIbLZ2Xc7OO"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3qm84nBOXUEQ2vnTfUTTFC"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3qm84nBOXUEQ2vnTfUTTFC",
+ "id" : "3qm84nBOXUEQ2vnTfUTTFC",
+ "name" : "Guns N' Roses",
+ "type" : "artist",
+ "uri" : "spotify:artist:3qm84nBOXUEQ2vnTfUTTFC"
+ } ],
+ "available_markets" : [ "CR", "DO", "GT", "HN", "NI", "PA", "SV" ],
+ "disc_number" : 1,
+ "duration_ms" : 197200,
+ "explicit" : true,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/2xVRxDQUXxWwpfyCg0fGTB"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/2xVRxDQUXxWwpfyCg0fGTB",
+ "id" : "2xVRxDQUXxWwpfyCg0fGTB",
+ "name" : "You're Crazy",
+ "preview_url" : "https://p.scdn.co/mp3-preview/5ba00454804e8c20e49856c75d97e02b252f3dd7",
+ "track_number" : 10,
+ "type" : "track",
+ "uri" : "spotify:track:2xVRxDQUXxWwpfyCg0fGTB"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3qm84nBOXUEQ2vnTfUTTFC"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3qm84nBOXUEQ2vnTfUTTFC",
+ "id" : "3qm84nBOXUEQ2vnTfUTTFC",
+ "name" : "Guns N' Roses",
+ "type" : "artist",
+ "uri" : "spotify:artist:3qm84nBOXUEQ2vnTfUTTFC"
+ } ],
+ "available_markets" : [ "CR", "DO", "GT", "HN", "NI", "PA", "SV" ],
+ "disc_number" : 1,
+ "duration_ms" : 206360,
+ "explicit" : true,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/1vcOLpfd7yeBpD5Fo2ouAJ"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/1vcOLpfd7yeBpD5Fo2ouAJ",
+ "id" : "1vcOLpfd7yeBpD5Fo2ouAJ",
+ "name" : "Anything Goes",
+ "preview_url" : "https://p.scdn.co/mp3-preview/40e5f1572e5e04f969457aeb9aa4878132765a26",
+ "track_number" : 11,
+ "type" : "track",
+ "uri" : "spotify:track:1vcOLpfd7yeBpD5Fo2ouAJ"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3qm84nBOXUEQ2vnTfUTTFC"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3qm84nBOXUEQ2vnTfUTTFC",
+ "id" : "3qm84nBOXUEQ2vnTfUTTFC",
+ "name" : "Guns N' Roses",
+ "type" : "artist",
+ "uri" : "spotify:artist:3qm84nBOXUEQ2vnTfUTTFC"
+ } ],
+ "available_markets" : [ "CR", "DO", "GT", "HN", "NI", "PA", "SV" ],
+ "disc_number" : 1,
+ "duration_ms" : 375306,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0PdQL1PzkOA3SUqhedZ0KL"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0PdQL1PzkOA3SUqhedZ0KL",
+ "id" : "0PdQL1PzkOA3SUqhedZ0KL",
+ "name" : "Rocket Queen",
+ "preview_url" : "https://p.scdn.co/mp3-preview/668753daeda148ef310f00f979f68fcb27874760",
+ "track_number" : 12,
+ "type" : "track",
+ "uri" : "spotify:track:0PdQL1PzkOA3SUqhedZ0KL"
+ } ],
+ "limit" : 50,
+ "next" : null,
+ "offset" : 0,
+ "previous" : null,
+ "total" : 12
+ },
+ "type" : "album",
+ "uri" : "spotify:album:1oR3KrPIp4CbagPa3PhtPp"
+ }, {
+ "album_type" : "album",
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2qFr8w5sWUITRlzZ9kZotF"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2qFr8w5sWUITRlzZ9kZotF",
+ "id" : "2qFr8w5sWUITRlzZ9kZotF",
+ "name" : "Jefferson Airplane",
+ "type" : "artist",
+ "uri" : "spotify:artist:2qFr8w5sWUITRlzZ9kZotF"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TW", "US", "UY" ],
+ "external_ids" : {
+ "upc" : "828765035125"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/6lPb7Eoon6QPbscWbMsk6a"
+ },
+ "genres" : [ ],
+ "href" : "https://api.spotify.com/v1/albums/6lPb7Eoon6QPbscWbMsk6a",
+ "id" : "6lPb7Eoon6QPbscWbMsk6a",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/cca72254d6884450ac4dd999ed9bf42aad7220b7",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/5dd256412a8fc02cdfd8f7bcc014d6ca0a4ed75d",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/cc4b7add5be5bfa66559aed0f7a02c72cf881f81",
+ "width" : 64
+ } ],
+ "name" : "Surrealistic Pillow",
+ "popularity" : 57,
+ "release_date" : "1967",
+ "release_date_precision" : "year",
+ "tracks" : {
+ "href" : "https://api.spotify.com/v1/albums/6lPb7Eoon6QPbscWbMsk6a/tracks?offset=0&limit=50",
+ "items" : [ {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2qFr8w5sWUITRlzZ9kZotF"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2qFr8w5sWUITRlzZ9kZotF",
+ "id" : "2qFr8w5sWUITRlzZ9kZotF",
+ "name" : "Jefferson Airplane",
+ "type" : "artist",
+ "uri" : "spotify:artist:2qFr8w5sWUITRlzZ9kZotF"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 188080,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/7GeQk8PqG5NAENxCRLcw0B"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/7GeQk8PqG5NAENxCRLcw0B",
+ "id" : "7GeQk8PqG5NAENxCRLcw0B",
+ "name" : "She Has Funny Cars",
+ "preview_url" : "https://p.scdn.co/mp3-preview/87e9cc26016df6ab9647bece02051ba78e52ee23",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:7GeQk8PqG5NAENxCRLcw0B"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2qFr8w5sWUITRlzZ9kZotF"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2qFr8w5sWUITRlzZ9kZotF",
+ "id" : "2qFr8w5sWUITRlzZ9kZotF",
+ "name" : "Jefferson Airplane",
+ "type" : "artist",
+ "uri" : "spotify:artist:2qFr8w5sWUITRlzZ9kZotF"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 174840,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/4uGIJG1jYFonGc4LGp5uQL"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/4uGIJG1jYFonGc4LGp5uQL",
+ "id" : "4uGIJG1jYFonGc4LGp5uQL",
+ "name" : "Somebody to Love - Pop #5/chart debut: 4/1/67",
+ "preview_url" : "https://p.scdn.co/mp3-preview/fa1211bd72d399d5c19724a623cd5e59c4bd7339",
+ "track_number" : 2,
+ "type" : "track",
+ "uri" : "spotify:track:4uGIJG1jYFonGc4LGp5uQL"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2qFr8w5sWUITRlzZ9kZotF"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2qFr8w5sWUITRlzZ9kZotF",
+ "id" : "2qFr8w5sWUITRlzZ9kZotF",
+ "name" : "Jefferson Airplane",
+ "type" : "artist",
+ "uri" : "spotify:artist:2qFr8w5sWUITRlzZ9kZotF"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 179720,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/6V1f1eJ6MPNfLQXPmzqXja"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/6V1f1eJ6MPNfLQXPmzqXja",
+ "id" : "6V1f1eJ6MPNfLQXPmzqXja",
+ "name" : "My Best Friend",
+ "preview_url" : "https://p.scdn.co/mp3-preview/a6bcedd49f87ec32eec5a2eb69c62bf3c73c36e1",
+ "track_number" : 3,
+ "type" : "track",
+ "uri" : "spotify:track:6V1f1eJ6MPNfLQXPmzqXja"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2qFr8w5sWUITRlzZ9kZotF"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2qFr8w5sWUITRlzZ9kZotF",
+ "id" : "2qFr8w5sWUITRlzZ9kZotF",
+ "name" : "Jefferson Airplane",
+ "type" : "artist",
+ "uri" : "spotify:artist:2qFr8w5sWUITRlzZ9kZotF"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 177546,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0yLfXULLuRtVj2L4DIrwO7"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0yLfXULLuRtVj2L4DIrwO7",
+ "id" : "0yLfXULLuRtVj2L4DIrwO7",
+ "name" : "Today",
+ "preview_url" : "https://p.scdn.co/mp3-preview/42f77400609ccdf9acf893da3df8328f919e894b",
+ "track_number" : 4,
+ "type" : "track",
+ "uri" : "spotify:track:0yLfXULLuRtVj2L4DIrwO7"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2qFr8w5sWUITRlzZ9kZotF"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2qFr8w5sWUITRlzZ9kZotF",
+ "id" : "2qFr8w5sWUITRlzZ9kZotF",
+ "name" : "Jefferson Airplane",
+ "type" : "artist",
+ "uri" : "spotify:artist:2qFr8w5sWUITRlzZ9kZotF"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 315040,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0TBntp6t4oS6UXjxikO5n7"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0TBntp6t4oS6UXjxikO5n7",
+ "id" : "0TBntp6t4oS6UXjxikO5n7",
+ "name" : "Comin' Back To Me",
+ "preview_url" : "https://p.scdn.co/mp3-preview/46878b59f747755f85edbfce9e20b695f407a79e",
+ "track_number" : 5,
+ "type" : "track",
+ "uri" : "spotify:track:0TBntp6t4oS6UXjxikO5n7"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2qFr8w5sWUITRlzZ9kZotF"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2qFr8w5sWUITRlzZ9kZotF",
+ "id" : "2qFr8w5sWUITRlzZ9kZotF",
+ "name" : "Jefferson Airplane",
+ "type" : "artist",
+ "uri" : "spotify:artist:2qFr8w5sWUITRlzZ9kZotF"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 220186,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/5uZD2015uZBis6B2VwRYUZ"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/5uZD2015uZBis6B2VwRYUZ",
+ "id" : "5uZD2015uZBis6B2VwRYUZ",
+ "name" : "3/5 of a Mile in 10 Seconds",
+ "preview_url" : "https://p.scdn.co/mp3-preview/cb6a731353b8a8185d43922b6a0525f8fd97111a",
+ "track_number" : 6,
+ "type" : "track",
+ "uri" : "spotify:track:5uZD2015uZBis6B2VwRYUZ"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2qFr8w5sWUITRlzZ9kZotF"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2qFr8w5sWUITRlzZ9kZotF",
+ "id" : "2qFr8w5sWUITRlzZ9kZotF",
+ "name" : "Jefferson Airplane",
+ "type" : "artist",
+ "uri" : "spotify:artist:2qFr8w5sWUITRlzZ9kZotF"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 155586,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/2tjzfZvZjWbnmEqdzY8VTe"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/2tjzfZvZjWbnmEqdzY8VTe",
+ "id" : "2tjzfZvZjWbnmEqdzY8VTe",
+ "name" : "D. C. B. A.-25",
+ "preview_url" : "https://p.scdn.co/mp3-preview/67425b0cc835cc9c04a086b652920d8332f6aab8",
+ "track_number" : 7,
+ "type" : "track",
+ "uri" : "spotify:track:2tjzfZvZjWbnmEqdzY8VTe"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2qFr8w5sWUITRlzZ9kZotF"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2qFr8w5sWUITRlzZ9kZotF",
+ "id" : "2qFr8w5sWUITRlzZ9kZotF",
+ "name" : "Jefferson Airplane",
+ "type" : "artist",
+ "uri" : "spotify:artist:2qFr8w5sWUITRlzZ9kZotF"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 208520,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0diWyRPKZD0nswFui9KTIf"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0diWyRPKZD0nswFui9KTIf",
+ "id" : "0diWyRPKZD0nswFui9KTIf",
+ "name" : "How Do You Feel",
+ "preview_url" : "https://p.scdn.co/mp3-preview/f3eb36322aea0b6326948040cf0bd80e87e96c01",
+ "track_number" : 8,
+ "type" : "track",
+ "uri" : "spotify:track:0diWyRPKZD0nswFui9KTIf"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2qFr8w5sWUITRlzZ9kZotF"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2qFr8w5sWUITRlzZ9kZotF",
+ "id" : "2qFr8w5sWUITRlzZ9kZotF",
+ "name" : "Jefferson Airplane",
+ "type" : "artist",
+ "uri" : "spotify:artist:2qFr8w5sWUITRlzZ9kZotF"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 112093,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/2zbGXr2XCcRR40R7ymEENc"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/2zbGXr2XCcRR40R7ymEENc",
+ "id" : "2zbGXr2XCcRR40R7ymEENc",
+ "name" : "Embryonic Journey",
+ "preview_url" : "https://p.scdn.co/mp3-preview/8232954035c08ee357078c264ab51e735aad82ac",
+ "track_number" : 9,
+ "type" : "track",
+ "uri" : "spotify:track:2zbGXr2XCcRR40R7ymEENc"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2qFr8w5sWUITRlzZ9kZotF"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2qFr8w5sWUITRlzZ9kZotF",
+ "id" : "2qFr8w5sWUITRlzZ9kZotF",
+ "name" : "Jefferson Airplane",
+ "type" : "artist",
+ "uri" : "spotify:artist:2qFr8w5sWUITRlzZ9kZotF"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 150640,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/4vpeKl0vMGdAXpZiQB2Dtd"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/4vpeKl0vMGdAXpZiQB2Dtd",
+ "id" : "4vpeKl0vMGdAXpZiQB2Dtd",
+ "name" : "White Rabbit",
+ "preview_url" : "https://p.scdn.co/mp3-preview/edb9c04ef6ea5d6cd6d8efc06fc8fbf63f16fd95",
+ "track_number" : 10,
+ "type" : "track",
+ "uri" : "spotify:track:4vpeKl0vMGdAXpZiQB2Dtd"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2qFr8w5sWUITRlzZ9kZotF"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2qFr8w5sWUITRlzZ9kZotF",
+ "id" : "2qFr8w5sWUITRlzZ9kZotF",
+ "name" : "Jefferson Airplane",
+ "type" : "artist",
+ "uri" : "spotify:artist:2qFr8w5sWUITRlzZ9kZotF"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 153400,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/3fNvTmIR68qzusVAUhSwk3"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/3fNvTmIR68qzusVAUhSwk3",
+ "id" : "3fNvTmIR68qzusVAUhSwk3",
+ "name" : "Plastic Fantastic Lover",
+ "preview_url" : "https://p.scdn.co/mp3-preview/51d3d2f617c9ef97bc9e719d9490ab7655acb1ab",
+ "track_number" : 11,
+ "type" : "track",
+ "uri" : "spotify:track:3fNvTmIR68qzusVAUhSwk3"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2qFr8w5sWUITRlzZ9kZotF"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2qFr8w5sWUITRlzZ9kZotF",
+ "id" : "2qFr8w5sWUITRlzZ9kZotF",
+ "name" : "Jefferson Airplane",
+ "type" : "artist",
+ "uri" : "spotify:artist:2qFr8w5sWUITRlzZ9kZotF"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 380213,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/1FCzqMyUdl2YW1JGU2ungx"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/1FCzqMyUdl2YW1JGU2ungx",
+ "id" : "1FCzqMyUdl2YW1JGU2ungx",
+ "name" : "In The Morning",
+ "preview_url" : "https://p.scdn.co/mp3-preview/e47b8eea4f796cfbd044e0bbcbec46f6c6dd7eb9",
+ "track_number" : 12,
+ "type" : "track",
+ "uri" : "spotify:track:1FCzqMyUdl2YW1JGU2ungx"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2qFr8w5sWUITRlzZ9kZotF"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2qFr8w5sWUITRlzZ9kZotF",
+ "id" : "2qFr8w5sWUITRlzZ9kZotF",
+ "name" : "Jefferson Airplane",
+ "type" : "artist",
+ "uri" : "spotify:artist:2qFr8w5sWUITRlzZ9kZotF"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 156213,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0zxQ5lejOpU0P1gcX44jVS"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0zxQ5lejOpU0P1gcX44jVS",
+ "id" : "0zxQ5lejOpU0P1gcX44jVS",
+ "name" : "J. P. P. Mc Step B. Blues",
+ "preview_url" : "https://p.scdn.co/mp3-preview/8cd6733471c114ce0a1374c921a0308890f2a08c",
+ "track_number" : 13,
+ "type" : "track",
+ "uri" : "spotify:track:0zxQ5lejOpU0P1gcX44jVS"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2qFr8w5sWUITRlzZ9kZotF"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2qFr8w5sWUITRlzZ9kZotF",
+ "id" : "2qFr8w5sWUITRlzZ9kZotF",
+ "name" : "Jefferson Airplane",
+ "type" : "artist",
+ "uri" : "spotify:artist:2qFr8w5sWUITRlzZ9kZotF"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 241666,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/3tOeWyjnn2iACoR8NQHwmx"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/3tOeWyjnn2iACoR8NQHwmx",
+ "id" : "3tOeWyjnn2iACoR8NQHwmx",
+ "name" : "Go To Her",
+ "preview_url" : "https://p.scdn.co/mp3-preview/ee1b0fd3475734f01b06b6e5e0a50fedd3eaf841",
+ "track_number" : 14,
+ "type" : "track",
+ "uri" : "spotify:track:3tOeWyjnn2iACoR8NQHwmx"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2qFr8w5sWUITRlzZ9kZotF"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2qFr8w5sWUITRlzZ9kZotF",
+ "id" : "2qFr8w5sWUITRlzZ9kZotF",
+ "name" : "Jefferson Airplane",
+ "type" : "artist",
+ "uri" : "spotify:artist:2qFr8w5sWUITRlzZ9kZotF"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 175506,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/6cKd2jJKrDLxhy7s3o4QKY"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/6cKd2jJKrDLxhy7s3o4QKY",
+ "id" : "6cKd2jJKrDLxhy7s3o4QKY",
+ "name" : "Come Back Baby",
+ "preview_url" : "https://p.scdn.co/mp3-preview/f8b557c323f6e46046b87f102f0038152122e03e",
+ "track_number" : 15,
+ "type" : "track",
+ "uri" : "spotify:track:6cKd2jJKrDLxhy7s3o4QKY"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2qFr8w5sWUITRlzZ9kZotF"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2qFr8w5sWUITRlzZ9kZotF",
+ "id" : "2qFr8w5sWUITRlzZ9kZotF",
+ "name" : "Jefferson Airplane",
+ "type" : "artist",
+ "uri" : "spotify:artist:2qFr8w5sWUITRlzZ9kZotF"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 178520,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/45QH00VIZ4NMOYu6GkUMNt"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/45QH00VIZ4NMOYu6GkUMNt",
+ "id" : "45QH00VIZ4NMOYu6GkUMNt",
+ "name" : "Somebody To Love - mono single version",
+ "preview_url" : "https://p.scdn.co/mp3-preview/e6f3175724959bd7e3647fd804eea93aaef206c2",
+ "track_number" : 16,
+ "type" : "track",
+ "uri" : "spotify:track:45QH00VIZ4NMOYu6GkUMNt"
+ }, {
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2qFr8w5sWUITRlzZ9kZotF"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2qFr8w5sWUITRlzZ9kZotF",
+ "id" : "2qFr8w5sWUITRlzZ9kZotF",
+ "name" : "Jefferson Airplane",
+ "type" : "artist",
+ "uri" : "spotify:artist:2qFr8w5sWUITRlzZ9kZotF"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 320813,
+ "explicit" : false,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0B06qo77UwovqxOY3Mwcw4"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0B06qo77UwovqxOY3Mwcw4",
+ "id" : "0B06qo77UwovqxOY3Mwcw4",
+ "name" : "White Rabbit - mono single version",
+ "preview_url" : "https://p.scdn.co/mp3-preview/818c2357ede0ad3dab75914e7b8dc8695c0c3812",
+ "track_number" : 17,
+ "type" : "track",
+ "uri" : "spotify:track:0B06qo77UwovqxOY3Mwcw4"
+ } ],
+ "limit" : 50,
+ "next" : null,
+ "offset" : 0,
+ "previous" : null,
+ "total" : 17
+ },
+ "type" : "album",
+ "uri" : "spotify:album:6lPb7Eoon6QPbscWbMsk6a"
+ } ]
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/artist-albums.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/artist-albums.json
new file mode 100644
index 0000000..9c1c4b1
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/artist-albums.json
@@ -0,0 +1,129 @@
+{
+ "href" : "https://api.spotify.com/v1/artists/6v8FB84lnmJs434UJf2Mrm/albums?offset=0&limit=5&album_type=single,album,compilation,appears_on",
+ "items" : [ {
+ "album_type" : "album",
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IT", "LT", "LU", "LV", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/361dgrFRURo9gwWnSQG6Uu"
+ },
+ "href" : "https://api.spotify.com/v1/albums/361dgrFRURo9gwWnSQG6Uu",
+ "id" : "361dgrFRURo9gwWnSQG6Uu",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/e052cc9842df2738bf2c3368bafa49c43fad83a4",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/4996a3b2db84b5d121b54e457d8b173d7162f917",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/db0c983e1171f03186b61213ce9fe1f718b56ed1",
+ "width" : 64
+ } ],
+ "name" : "Storytone",
+ "type" : "album",
+ "uri" : "spotify:album:361dgrFRURo9gwWnSQG6Uu"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IT", "LT", "LU", "LV", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/1HhdHx1asrL4Uf6rlQxCx1"
+ },
+ "href" : "https://api.spotify.com/v1/albums/1HhdHx1asrL4Uf6rlQxCx1",
+ "id" : "1HhdHx1asrL4Uf6rlQxCx1",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/709702b800b5239e4bf345dbeb4fe78cd8e068b1",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/637262e8c1c45457ec8773ecd08eef81f9cdb41d",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/976b30553009b1866368a2afd01b336a2a36f180",
+ "width" : 64
+ } ],
+ "name" : "Storytone (Deluxe Version)",
+ "type" : "album",
+ "uri" : "spotify:album:1HhdHx1asrL4Uf6rlQxCx1"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/0qeBoQjqVd5L0T93Pf7Vwm"
+ },
+ "href" : "https://api.spotify.com/v1/albums/0qeBoQjqVd5L0T93Pf7Vwm",
+ "id" : "0qeBoQjqVd5L0T93Pf7Vwm",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/aef94edcf57574157875dd9b7d496656b25d4aec",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/6bac516642b884fb5661fa0c109bd3a5933d2b51",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/2cc77e54f4519bfa72566fa293fbbd912c33d0bc",
+ "width" : 64
+ } ],
+ "name" : "A Letter Home",
+ "type" : "album",
+ "uri" : "spotify:album:0qeBoQjqVd5L0T93Pf7Vwm"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/2h2zv7tulv5460Ijs1tpxs"
+ },
+ "href" : "https://api.spotify.com/v1/albums/2h2zv7tulv5460Ijs1tpxs",
+ "id" : "2h2zv7tulv5460Ijs1tpxs",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/a042e0e50696368635ba9df8c598f79d856e4b92",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/adf120673a98a0dec42bb9cde4b8a437ec60ec97",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/e2ee2d191ca0b30e417a1ae0d8889a0f365b8d37",
+ "width" : 64
+ } ],
+ "name" : "Live At The Cellar Door",
+ "type" : "album",
+ "uri" : "spotify:album:2h2zv7tulv5460Ijs1tpxs"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/4j9JVeEgEEiwYyYMiueTvG"
+ },
+ "href" : "https://api.spotify.com/v1/albums/4j9JVeEgEEiwYyYMiueTvG",
+ "id" : "4j9JVeEgEEiwYyYMiueTvG",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/65d3f76280a7dd0344e26529792711c42c182d01",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/48faa882bceddcf24bc9c867ec600ccb3a6f250f",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/94f0b553fd359907deb913aa4ffdeaad9cf09148",
+ "width" : 64
+ } ],
+ "name" : "Le Noise",
+ "type" : "album",
+ "uri" : "spotify:album:4j9JVeEgEEiwYyYMiueTvG"
+ } ],
+ "limit" : 5,
+ "next" : "https://api.spotify.com/v1/artists/6v8FB84lnmJs434UJf2Mrm/albums?offset=5&limit=5&album_type=single,album,compilation,appears_on",
+ "offset" : 0,
+ "previous" : null,
+ "total" : 113
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/artist-related-artists.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/artist-related-artists.json
new file mode 100644
index 0000000..c8bfc59
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/artist-related-artists.json
@@ -0,0 +1,631 @@
+{
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1dfeR4HaWDbWqFHLkxsg1d"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 1315842
+ },
+ "genres" : [ "album rock", "glam rock", "rock" ],
+ "href" : "https://api.spotify.com/v1/artists/1dfeR4HaWDbWqFHLkxsg1d",
+ "id" : "1dfeR4HaWDbWqFHLkxsg1d",
+ "images" : [ {
+ "height" : 806,
+ "url" : "https://i.scdn.co/image/f439465a43dd0e4d1aed1df5b0e3243eda49a403",
+ "width" : 999
+ }, {
+ "height" : 516,
+ "url" : "https://i.scdn.co/image/d654d928182fd66c75fb3b9a74b427317f5584c7",
+ "width" : 640
+ }, {
+ "height" : 161,
+ "url" : "https://i.scdn.co/image/19d06fdae9eeeef540a6e1b2f5cf43815512398b",
+ "width" : 200
+ }, {
+ "height" : 52,
+ "url" : "https://i.scdn.co/image/106f04597938cf8892c969fe187c2ddddc665094",
+ "width" : 64
+ } ],
+ "name" : "Queen",
+ "popularity" : 76,
+ "type" : "artist",
+ "uri" : "spotify:artist:1dfeR4HaWDbWqFHLkxsg1d"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3qm84nBOXUEQ2vnTfUTTFC"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 746900
+ },
+ "genres" : [ "hard rock", "rock" ],
+ "href" : "https://api.spotify.com/v1/artists/3qm84nBOXUEQ2vnTfUTTFC",
+ "id" : "3qm84nBOXUEQ2vnTfUTTFC",
+ "images" : [ {
+ "height" : 1196,
+ "url" : "https://i.scdn.co/image/e5febc8c36b50a0aad9b75b44340b2c7daaf7304",
+ "width" : 1000
+ }, {
+ "height" : 765,
+ "url" : "https://i.scdn.co/image/e710440d0d23f6d2045edf7c48e189c32775df1e",
+ "width" : 640
+ }, {
+ "height" : 239,
+ "url" : "https://i.scdn.co/image/d9f697b417282c3f77cd88cb7d1241f95b5e3482",
+ "width" : 200
+ }, {
+ "height" : 77,
+ "url" : "https://i.scdn.co/image/31568da0f5b7aa7794df7c99a67d7211198e49a1",
+ "width" : 64
+ } ],
+ "name" : "Guns N' Roses",
+ "popularity" : 65,
+ "type" : "artist",
+ "uri" : "spotify:artist:3qm84nBOXUEQ2vnTfUTTFC"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/5hW4L92KnC6dX9t7tYM4Ve"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 98837
+ },
+ "genres" : [ "folk rock", "folk-pop", "singer-songwriter" ],
+ "href" : "https://api.spotify.com/v1/artists/5hW4L92KnC6dX9t7tYM4Ve",
+ "id" : "5hW4L92KnC6dX9t7tYM4Ve",
+ "images" : [ {
+ "height" : 784,
+ "url" : "https://i.scdn.co/image/091b12a139f5b6748389b906a7c3370256458163",
+ "width" : 1000
+ }, {
+ "height" : 502,
+ "url" : "https://i.scdn.co/image/c790fa02e5a862c89e7c2847f4ebef8b87c02f25",
+ "width" : 640
+ }, {
+ "height" : 157,
+ "url" : "https://i.scdn.co/image/6efcbe8a3af0a8191ae7b83547b3363ce34ef51f",
+ "width" : 200
+ }, {
+ "height" : 50,
+ "url" : "https://i.scdn.co/image/0b1efcf69be53242fbaab33752e937c335d4c690",
+ "width" : 64
+ } ],
+ "name" : "Joni Mitchell",
+ "popularity" : 60,
+ "type" : "artist",
+ "uri" : "spotify:artist:5hW4L92KnC6dX9t7tYM4Ve"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/5a2EaR3hamoenG9rDuVn8j"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 230869
+ },
+ "genres" : [ "classic funk rock", "funk rock" ],
+ "href" : "https://api.spotify.com/v1/artists/5a2EaR3hamoenG9rDuVn8j",
+ "id" : "5a2EaR3hamoenG9rDuVn8j",
+ "images" : [ {
+ "height" : 585,
+ "url" : "https://i.scdn.co/image/6c02aa8bba022a4317b1535ed66e675d350607b4",
+ "width" : 720
+ }, {
+ "height" : 520,
+ "url" : "https://i.scdn.co/image/0dd5b7997516744e8883aadc15ba18ba05cb8e67",
+ "width" : 640
+ }, {
+ "height" : 163,
+ "url" : "https://i.scdn.co/image/f0b041537109596173216eb5cd253e1e1ce4f27d",
+ "width" : 200
+ }, {
+ "height" : 52,
+ "url" : "https://i.scdn.co/image/5d082cd14be566e41681853667ef8fc0ab2cbd32",
+ "width" : 64
+ } ],
+ "name" : "Prince",
+ "popularity" : 72,
+ "type" : "artist",
+ "uri" : "spotify:artist:5a2EaR3hamoenG9rDuVn8j"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/67ea9eGLXYMsO2eYQRui3w"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 315351
+ },
+ "genres" : [ "rock" ],
+ "href" : "https://api.spotify.com/v1/artists/67ea9eGLXYMsO2eYQRui3w",
+ "id" : "67ea9eGLXYMsO2eYQRui3w",
+ "images" : [ {
+ "height" : 1296,
+ "url" : "https://i.scdn.co/image/5304476e4596646d98a8f556d4d4ed19983c419e",
+ "width" : 1000
+ }, {
+ "height" : 829,
+ "url" : "https://i.scdn.co/image/045087373e3a23d49371d39a2d2b6d08906046af",
+ "width" : 640
+ }, {
+ "height" : 259,
+ "url" : "https://i.scdn.co/image/e6d4c88c2d2d73d0dac733e3ba6ca8b61aec1154",
+ "width" : 200
+ }, {
+ "height" : 83,
+ "url" : "https://i.scdn.co/image/9f2fcb9407b9be5eebfd40c0096c268f86f0e615",
+ "width" : 64
+ } ],
+ "name" : "The Who",
+ "popularity" : 65,
+ "type" : "artist",
+ "uri" : "spotify:artist:67ea9eGLXYMsO2eYQRui3w"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/776Uo845nYHJpNaStv1Ds4"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 366092
+ },
+ "genres" : [ "blues-rock", "classic rock" ],
+ "href" : "https://api.spotify.com/v1/artists/776Uo845nYHJpNaStv1Ds4",
+ "id" : "776Uo845nYHJpNaStv1Ds4",
+ "images" : [ {
+ "height" : 1500,
+ "url" : "https://i.scdn.co/image/080183498389e920416d15d00b34f4c5dc4bbd0b",
+ "width" : 1000
+ }, {
+ "height" : 960,
+ "url" : "https://i.scdn.co/image/ac83b1e22aa158ce554f27b26751354c8b525dee",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/a5f86ee01b063916de2b636f44f1dfccd540a786",
+ "width" : 200
+ }, {
+ "height" : 96,
+ "url" : "https://i.scdn.co/image/577c11dbd9c88cf8872c938d2ce85d0a699a7c02",
+ "width" : 64
+ } ],
+ "name" : "Jimi Hendrix",
+ "popularity" : 67,
+ "type" : "artist",
+ "uri" : "spotify:artist:776Uo845nYHJpNaStv1Ds4"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1SQRv42e4PjEYfPhS0Tk9E"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 172330
+ },
+ "genres" : [ "british invasion", "glam rock" ],
+ "href" : "https://api.spotify.com/v1/artists/1SQRv42e4PjEYfPhS0Tk9E",
+ "id" : "1SQRv42e4PjEYfPhS0Tk9E",
+ "images" : [ {
+ "height" : 1203,
+ "url" : "https://i.scdn.co/image/2d5581f6949dda0687df4fee5ec990a216a182f9",
+ "width" : 1000
+ }, {
+ "height" : 770,
+ "url" : "https://i.scdn.co/image/d401f647a39eeeb589d1fb6fcb3ef2905f774dd0",
+ "width" : 640
+ }, {
+ "height" : 241,
+ "url" : "https://i.scdn.co/image/8594e0c7fff54add04aa56467cc5030b7422d519",
+ "width" : 200
+ }, {
+ "height" : 77,
+ "url" : "https://i.scdn.co/image/46376c0868912939513116b021b129ac69fca016",
+ "width" : 64
+ } ],
+ "name" : "The Kinks",
+ "popularity" : 60,
+ "type" : "artist",
+ "uri" : "spotify:artist:1SQRv42e4PjEYfPhS0Tk9E"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/0f8MDDzIc6M4uH1xH0o0gy"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 45434
+ },
+ "genres" : [ "acoustic blues", "blues", "delta blues", "traditional blues" ],
+ "href" : "https://api.spotify.com/v1/artists/0f8MDDzIc6M4uH1xH0o0gy",
+ "id" : "0f8MDDzIc6M4uH1xH0o0gy",
+ "images" : [ {
+ "height" : 1268,
+ "url" : "https://i.scdn.co/image/8cc55abbc1ed7527d40903f9d4a4dcbe51f514f3",
+ "width" : 968
+ }, {
+ "height" : 838,
+ "url" : "https://i.scdn.co/image/c71361d94ef194e26c432887b2295fdec78f2043",
+ "width" : 640
+ }, {
+ "height" : 262,
+ "url" : "https://i.scdn.co/image/8b2fc1fb2070a5437d518e4ff6b7946e5d410d9e",
+ "width" : 200
+ }, {
+ "height" : 84,
+ "url" : "https://i.scdn.co/image/ec4640d494630c33ca6f14e0e711c91a7461c3fd",
+ "width" : 64
+ } ],
+ "name" : "Robert Johnson",
+ "popularity" : 60,
+ "type" : "artist",
+ "uri" : "spotify:artist:0f8MDDzIc6M4uH1xH0o0gy"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/43ZHCT0cAZBISjO8DG9PnE"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 640755
+ },
+ "genres" : [ "rock-and-roll", "rockabilly" ],
+ "href" : "https://api.spotify.com/v1/artists/43ZHCT0cAZBISjO8DG9PnE",
+ "id" : "43ZHCT0cAZBISjO8DG9PnE",
+ "images" : [ {
+ "height" : 1296,
+ "url" : "https://i.scdn.co/image/c7b8708eab6d0f0902908c1b9f9ba1daaeed06af",
+ "width" : 1000
+ }, {
+ "height" : 829,
+ "url" : "https://i.scdn.co/image/e25cb372ca9a5317c17d5f62b3556f76ce2edde8",
+ "width" : 640
+ }, {
+ "height" : 259,
+ "url" : "https://i.scdn.co/image/7d0e683d6bb4cbb384586cd6d9007f5a40928251",
+ "width" : 200
+ }, {
+ "height" : 83,
+ "url" : "https://i.scdn.co/image/16045a251c9e9f5772d4aeb3f6fa23fe4fdeb54a",
+ "width" : 64
+ } ],
+ "name" : "Elvis Presley",
+ "popularity" : 94,
+ "type" : "artist",
+ "uri" : "spotify:artist:43ZHCT0cAZBISjO8DG9PnE"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/7Ey4PD4MYsKc5I2dolUwbH"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 416034
+ },
+ "genres" : [ "album rock", "hard rock", "rock" ],
+ "href" : "https://api.spotify.com/v1/artists/7Ey4PD4MYsKc5I2dolUwbH",
+ "id" : "7Ey4PD4MYsKc5I2dolUwbH",
+ "images" : [ {
+ "height" : 665,
+ "url" : "https://i.scdn.co/image/e0ea6225a3f89374d53ba1344c73ae2819cd2020",
+ "width" : 999
+ }, {
+ "height" : 426,
+ "url" : "https://i.scdn.co/image/58a89627ce645efd86a2d8b8140e9bc1378bdaca",
+ "width" : 640
+ }, {
+ "height" : 133,
+ "url" : "https://i.scdn.co/image/c26e4282a450cc2d85c2d8f28b7859a14b541f81",
+ "width" : 200
+ }, {
+ "height" : 43,
+ "url" : "https://i.scdn.co/image/3a98016f33459c8ac23333787a24a0e0b124170a",
+ "width" : 64
+ } ],
+ "name" : "Aerosmith",
+ "popularity" : 69,
+ "type" : "artist",
+ "uri" : "spotify:artist:7Ey4PD4MYsKc5I2dolUwbH"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2ye2Wgw4gimLv2eAKyk1NB"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 854158
+ },
+ "genres" : [ "metal" ],
+ "href" : "https://api.spotify.com/v1/artists/2ye2Wgw4gimLv2eAKyk1NB",
+ "id" : "2ye2Wgw4gimLv2eAKyk1NB",
+ "images" : [ {
+ "height" : 960,
+ "url" : "https://i.scdn.co/image/3e77faaefed7e976999d5d40b02c2d0cae173a5a",
+ "width" : 960
+ }, {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/2cfbc8c8e6af445b4323a3eda3ae97fe1bba8935",
+ "width" : 640
+ }, {
+ "height" : 200,
+ "url" : "https://i.scdn.co/image/15d9ccb37a96d49f69f44f999fb1e9e46f9b3ccd",
+ "width" : 200
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/412a8f3a40f44fcfadb53bcecef2434f45fdd015",
+ "width" : 64
+ } ],
+ "name" : "Metallica",
+ "popularity" : 63,
+ "type" : "artist",
+ "uri" : "spotify:artist:2ye2Wgw4gimLv2eAKyk1NB"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/4pejUc4iciQfgdX6OKulQn"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 357259
+ },
+ "genres" : [ ],
+ "href" : "https://api.spotify.com/v1/artists/4pejUc4iciQfgdX6OKulQn",
+ "id" : "4pejUc4iciQfgdX6OKulQn",
+ "images" : [ {
+ "height" : 792,
+ "url" : "https://i.scdn.co/image/02b4438a838006c6f99602728675b9b4954e8782",
+ "width" : 1000
+ }, {
+ "height" : 507,
+ "url" : "https://i.scdn.co/image/fbdc1b85274ac5b7dc3b1f03576080dc220c7484",
+ "width" : 640
+ }, {
+ "height" : 158,
+ "url" : "https://i.scdn.co/image/18acb48c4a8e43883ace161d1a774745fbe7401b",
+ "width" : 199
+ }, {
+ "height" : 51,
+ "url" : "https://i.scdn.co/image/101bfa10aae7177f78b128640cda367ab9943c62",
+ "width" : 64
+ } ],
+ "name" : "Queens Of The Stone Age",
+ "popularity" : 67,
+ "type" : "artist",
+ "uri" : "spotify:artist:4pejUc4iciQfgdX6OKulQn"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/74oJ4qxwOZvX6oSsu1DGnw"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 94659
+ },
+ "genres" : [ "blues-rock", "british blues", "classic rock", "psychedelic rock" ],
+ "href" : "https://api.spotify.com/v1/artists/74oJ4qxwOZvX6oSsu1DGnw",
+ "id" : "74oJ4qxwOZvX6oSsu1DGnw",
+ "images" : [ {
+ "height" : 792,
+ "url" : "https://i.scdn.co/image/a791d69ef7b3de518520a210acc349ea638ba3c7",
+ "width" : 999
+ }, {
+ "height" : 507,
+ "url" : "https://i.scdn.co/image/c9f01ba48dd7696fa5182154671c7cf33b740e7a",
+ "width" : 640
+ }, {
+ "height" : 158,
+ "url" : "https://i.scdn.co/image/6f78a9dbe221c14610b32829c8d5f550049c898d",
+ "width" : 199
+ }, {
+ "height" : 51,
+ "url" : "https://i.scdn.co/image/3e68373fb30b02cf7b80d7617b2663d406209a0c",
+ "width" : 64
+ } ],
+ "name" : "Cream",
+ "popularity" : 54,
+ "type" : "artist",
+ "uri" : "spotify:artist:74oJ4qxwOZvX6oSsu1DGnw"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3kQzSlXUpRIJtIG0IVQp7S"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 191
+ },
+ "genres" : [ ],
+ "href" : "https://api.spotify.com/v1/artists/3kQzSlXUpRIJtIG0IVQp7S",
+ "id" : "3kQzSlXUpRIJtIG0IVQp7S",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/581341b83669793a4722070bd63d16b0f800fdcb",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/cba9176381b827d4125b53e925765404e72a4ad7",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/2ddf6a3aa2a5ebb01e1002542e9614535f7a6f43",
+ "width" : 64
+ } ],
+ "name" : "The Master Musicians of Joujouka",
+ "popularity" : 0,
+ "type" : "artist",
+ "uri" : "spotify:artist:3kQzSlXUpRIJtIG0IVQp7S"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6olE6TJLqED3rqDCT0FyPh"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 962886
+ },
+ "genres" : [ "alternative rock", "grunge", "permanent wave" ],
+ "href" : "https://api.spotify.com/v1/artists/6olE6TJLqED3rqDCT0FyPh",
+ "id" : "6olE6TJLqED3rqDCT0FyPh",
+ "images" : [ {
+ "height" : 1057,
+ "url" : "https://i.scdn.co/image/5d66307bbf73337bb073bfb2bf242e099a47e219",
+ "width" : 1000
+ }, {
+ "height" : 677,
+ "url" : "https://i.scdn.co/image/695867a7c6a0df25c5bddf0b00cc2cfde35b3ffc",
+ "width" : 640
+ }, {
+ "height" : 211,
+ "url" : "https://i.scdn.co/image/3a9c12e86ad8e2bbecb0e919b80bb5ece6f1dbe3",
+ "width" : 200
+ }, {
+ "height" : 68,
+ "url" : "https://i.scdn.co/image/5ae6f10633adc53210cd18a4f216f27de330f19d",
+ "width" : 64
+ } ],
+ "name" : "Nirvana",
+ "popularity" : 67,
+ "type" : "artist",
+ "uri" : "spotify:artist:6olE6TJLqED3rqDCT0FyPh"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/5M52tdBnJaKSvOpJGz8mfZ"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 316643
+ },
+ "genres" : [ ],
+ "href" : "https://api.spotify.com/v1/artists/5M52tdBnJaKSvOpJGz8mfZ",
+ "id" : "5M52tdBnJaKSvOpJGz8mfZ",
+ "images" : [ {
+ "height" : 1059,
+ "url" : "https://i.scdn.co/image/c9d282ee411315454e6533474bf6bc6e2306c093",
+ "width" : 1000
+ }, {
+ "height" : 678,
+ "url" : "https://i.scdn.co/image/fb7ab8ca0d767e1b919acf1371cdc8719f72cedc",
+ "width" : 640
+ }, {
+ "height" : 212,
+ "url" : "https://i.scdn.co/image/7ff395e1ee99bcec086b7cc7164de410a13cfb3c",
+ "width" : 200
+ }, {
+ "height" : 68,
+ "url" : "https://i.scdn.co/image/a4dbc85fb3d2fe694d1de5119c44a514ede6fd1d",
+ "width" : 64
+ } ],
+ "name" : "Black Sabbath",
+ "popularity" : 62,
+ "type" : "artist",
+ "uri" : "spotify:artist:5M52tdBnJaKSvOpJGz8mfZ"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/0k17h0D3J5VfsdmQ1iZtE9"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 579320
+ },
+ "genres" : [ "art rock" ],
+ "href" : "https://api.spotify.com/v1/artists/0k17h0D3J5VfsdmQ1iZtE9",
+ "id" : "0k17h0D3J5VfsdmQ1iZtE9",
+ "images" : [ {
+ "height" : 977,
+ "url" : "https://i.scdn.co/image/b954149fed21dcbafe1cee4c30454eb934c384ee",
+ "width" : 1000
+ }, {
+ "height" : 625,
+ "url" : "https://i.scdn.co/image/63562bf58a1af52f9800c3ae225d49a476af212f",
+ "width" : 640
+ }, {
+ "height" : 195,
+ "url" : "https://i.scdn.co/image/792a417e8500405180a7746908afd7d5e3a30585",
+ "width" : 200
+ }, {
+ "height" : 63,
+ "url" : "https://i.scdn.co/image/a9b0636c32bb27f0590dbb283019614e861b2ed2",
+ "width" : 64
+ } ],
+ "name" : "Pink Floyd",
+ "popularity" : 61,
+ "type" : "artist",
+ "uri" : "spotify:artist:0k17h0D3J5VfsdmQ1iZtE9"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/4xls23Ye9WR9yy3yYMpAMm"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 40749
+ },
+ "genres" : [ "rock-and-roll", "rockabilly" ],
+ "href" : "https://api.spotify.com/v1/artists/4xls23Ye9WR9yy3yYMpAMm",
+ "id" : "4xls23Ye9WR9yy3yYMpAMm",
+ "images" : [ {
+ "height" : 596,
+ "url" : "https://i.scdn.co/image/225b21b951a28509cc944ddc3ff046a6dadfc58d",
+ "width" : 477
+ }, {
+ "height" : 250,
+ "url" : "https://i.scdn.co/image/10f5e668f76ad7e313ad1c523f6a67ee6f5dd9fc",
+ "width" : 200
+ }, {
+ "height" : 80,
+ "url" : "https://i.scdn.co/image/cfcab8b4b9caa4a8f05ebcc9e98d4f3d3ac4640b",
+ "width" : 64
+ } ],
+ "name" : "Little Richard",
+ "popularity" : 69,
+ "type" : "artist",
+ "uri" : "spotify:artist:4xls23Ye9WR9yy3yYMpAMm"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/7jy3rLJdDQY21OgRLCZ9sD"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 1002790
+ },
+ "genres" : [ "alternative rock", "permanent wave", "post-grunge" ],
+ "href" : "https://api.spotify.com/v1/artists/7jy3rLJdDQY21OgRLCZ9sD",
+ "id" : "7jy3rLJdDQY21OgRLCZ9sD",
+ "images" : [ {
+ "height" : 467,
+ "url" : "https://i.scdn.co/image/7415991bc4549837fe56506389396ecc23209fda",
+ "width" : 583
+ }, {
+ "height" : 160,
+ "url" : "https://i.scdn.co/image/5ce1d91816f8c7b2b4ac70cacc25c73ba330ab79",
+ "width" : 200
+ }, {
+ "height" : 51,
+ "url" : "https://i.scdn.co/image/2a65e02dc861340635db8edcb28c052bc2a5614b",
+ "width" : 64
+ } ],
+ "name" : "Foo Fighters",
+ "popularity" : 65,
+ "type" : "artist",
+ "uri" : "spotify:artist:7jy3rLJdDQY21OgRLCZ9sD"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/22bE4uQ6baNwSHPVcDxLCe"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 931999
+ },
+ "genres" : [ "blues-rock", "british blues", "classic rock" ],
+ "href" : "https://api.spotify.com/v1/artists/22bE4uQ6baNwSHPVcDxLCe",
+ "id" : "22bE4uQ6baNwSHPVcDxLCe",
+ "images" : [ {
+ "height" : 783,
+ "url" : "https://i.scdn.co/image/2b3993e967c42310876f226e5c380896e861ae8d",
+ "width" : 1000
+ }, {
+ "height" : 501,
+ "url" : "https://i.scdn.co/image/cbd1ad72d24348463379c726a65f7495c6a8c169",
+ "width" : 640
+ }, {
+ "height" : 157,
+ "url" : "https://i.scdn.co/image/839c66ae04452921f1a212823c3888a5beadac08",
+ "width" : 200
+ }, {
+ "height" : 50,
+ "url" : "https://i.scdn.co/image/2668b52807aad539039b27f69a267eb490f37ee1",
+ "width" : 64
+ } ],
+ "name" : "The Rolling Stones",
+ "popularity" : 75,
+ "type" : "artist",
+ "uri" : "spotify:artist:22bE4uQ6baNwSHPVcDxLCe"
+ } ]
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/artist-top-tracks.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/artist-top-tracks.json
new file mode 100644
index 0000000..797f6e4
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/artist-top-tracks.json
@@ -0,0 +1,543 @@
+{
+ "tracks" : [ {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/6chUA3fW0UUhceTPOYHvtQ"
+ },
+ "href" : "https://api.spotify.com/v1/albums/6chUA3fW0UUhceTPOYHvtQ",
+ "id" : "6chUA3fW0UUhceTPOYHvtQ",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/4ce59b41704d58fe340d1e52468607576c852fe3",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/458bc51b2bc2c9691ed80e1f7e0d4b2fdab4b23e",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/820a112e3d188eb9a028c0329041394f70d67a83",
+ "width" : 64
+ } ],
+ "name" : "Decade",
+ "type" : "album",
+ "uri" : "spotify:album:6chUA3fW0UUhceTPOYHvtQ"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6v8FB84lnmJs434UJf2Mrm"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6v8FB84lnmJs434UJf2Mrm",
+ "id" : "6v8FB84lnmJs434UJf2Mrm",
+ "name" : "Neil Young",
+ "type" : "artist",
+ "uri" : "spotify:artist:6v8FB84lnmJs434UJf2Mrm"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 187280,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USRE19900182"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/6XDdmCAuodZfXtEgJcxpS2"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/6XDdmCAuodZfXtEgJcxpS2",
+ "id" : "6XDdmCAuodZfXtEgJcxpS2",
+ "name" : "Heart Of Gold",
+ "popularity" : 72,
+ "preview_url" : "https://p.scdn.co/mp3-preview/074749894abde037d1f256d8b2e5e642f0994224",
+ "track_number" : 22,
+ "type" : "track",
+ "uri" : "spotify:track:6XDdmCAuodZfXtEgJcxpS2"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/6chUA3fW0UUhceTPOYHvtQ"
+ },
+ "href" : "https://api.spotify.com/v1/albums/6chUA3fW0UUhceTPOYHvtQ",
+ "id" : "6chUA3fW0UUhceTPOYHvtQ",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/4ce59b41704d58fe340d1e52468607576c852fe3",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/458bc51b2bc2c9691ed80e1f7e0d4b2fdab4b23e",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/820a112e3d188eb9a028c0329041394f70d67a83",
+ "width" : 64
+ } ],
+ "name" : "Decade",
+ "type" : "album",
+ "uri" : "spotify:album:6chUA3fW0UUhceTPOYHvtQ"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6v8FB84lnmJs434UJf2Mrm"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6v8FB84lnmJs434UJf2Mrm",
+ "id" : "6v8FB84lnmJs434UJf2Mrm",
+ "name" : "Neil Young",
+ "type" : "artist",
+ "uri" : "spotify:artist:6v8FB84lnmJs434UJf2Mrm"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 202693,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USRE19900185"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/4M13hC6sdFmvKCJ2MhKEbi"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/4M13hC6sdFmvKCJ2MhKEbi",
+ "id" : "4M13hC6sdFmvKCJ2MhKEbi",
+ "name" : "Old Man",
+ "popularity" : 67,
+ "preview_url" : "https://p.scdn.co/mp3-preview/ef5ba7e2d5e77979cca3a25655fee035f600cac0",
+ "track_number" : 19,
+ "type" : "track",
+ "uri" : "spotify:track:4M13hC6sdFmvKCJ2MhKEbi"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/5m2MQk77aAXPhwI6Ges8X5"
+ },
+ "href" : "https://api.spotify.com/v1/albums/5m2MQk77aAXPhwI6Ges8X5",
+ "id" : "5m2MQk77aAXPhwI6Ges8X5",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/0cda30e673dafdebb42793f18fa3ea112fd6b57c",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/01244d847df2e994a5474a2a8979715cc8d77a7a",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/234dec285c40e65f01f48539ead4d6bf748d8df2",
+ "width" : 64
+ } ],
+ "name" : "Rust Never Sleeps",
+ "type" : "album",
+ "uri" : "spotify:album:5m2MQk77aAXPhwI6Ges8X5"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6v8FB84lnmJs434UJf2Mrm"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6v8FB84lnmJs434UJf2Mrm",
+ "id" : "6v8FB84lnmJs434UJf2Mrm",
+ "name" : "Neil Young",
+ "type" : "artist",
+ "uri" : "spotify:artist:6v8FB84lnmJs434UJf2Mrm"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 227840,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USRE19901377"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/4DFMZUoz6TBh8JVqmw6Drv"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/4DFMZUoz6TBh8JVqmw6Drv",
+ "id" : "4DFMZUoz6TBh8JVqmw6Drv",
+ "name" : "My My, Hey Hey - Out Of The Blue",
+ "popularity" : 67,
+ "preview_url" : "https://p.scdn.co/mp3-preview/38720c71629ab201090f08e502cb3186e16047e9",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:4DFMZUoz6TBh8JVqmw6Drv"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/0tdm853TNWjVVChbJRbu3Q"
+ },
+ "href" : "https://api.spotify.com/v1/albums/0tdm853TNWjVVChbJRbu3Q",
+ "id" : "0tdm853TNWjVVChbJRbu3Q",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/d3d2d6c3f473c407b1f1295008cd3615b5a68512",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/793a9f37677c0605b74b9b5524fdcbb0f89880b5",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/74acd7cc2d4b81ce2627f94f8093322c811c61c9",
+ "width" : 64
+ } ],
+ "name" : "Harvest Moon",
+ "type" : "album",
+ "uri" : "spotify:album:0tdm853TNWjVVChbJRbu3Q"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6v8FB84lnmJs434UJf2Mrm"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6v8FB84lnmJs434UJf2Mrm",
+ "id" : "6v8FB84lnmJs434UJf2Mrm",
+ "name" : "Neil Young",
+ "type" : "artist",
+ "uri" : "spotify:artist:6v8FB84lnmJs434UJf2Mrm"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 303213,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USRE19900694"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/5l9c6bJmzvftumhz4TMPgk"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/5l9c6bJmzvftumhz4TMPgk",
+ "id" : "5l9c6bJmzvftumhz4TMPgk",
+ "name" : "Harvest Moon",
+ "popularity" : 67,
+ "preview_url" : "https://p.scdn.co/mp3-preview/7d47afa21ca9792ef670595afb150d77405782ec",
+ "track_number" : 4,
+ "type" : "track",
+ "uri" : "spotify:track:5l9c6bJmzvftumhz4TMPgk"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/3uOOKcr91I3Br0Rtmu4zdT"
+ },
+ "href" : "https://api.spotify.com/v1/albums/3uOOKcr91I3Br0Rtmu4zdT",
+ "id" : "3uOOKcr91I3Br0Rtmu4zdT",
+ "images" : [ {
+ "height" : 626,
+ "url" : "https://i.scdn.co/image/39be268126fcc5d8a79b733c49ff86d05d6df341",
+ "width" : 640
+ }, {
+ "height" : 293,
+ "url" : "https://i.scdn.co/image/33a2ae3b6c6e50f5ca32784db473d8df93fb1666",
+ "width" : 300
+ }, {
+ "height" : 63,
+ "url" : "https://i.scdn.co/image/f1205ef7007b3c0065f1eabce1d550381a3ade93",
+ "width" : 64
+ } ],
+ "name" : "Freedom",
+ "type" : "album",
+ "uri" : "spotify:album:3uOOKcr91I3Br0Rtmu4zdT"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6v8FB84lnmJs434UJf2Mrm"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6v8FB84lnmJs434UJf2Mrm",
+ "id" : "6v8FB84lnmJs434UJf2Mrm",
+ "name" : "Neil Young",
+ "type" : "artist",
+ "uri" : "spotify:artist:6v8FB84lnmJs434UJf2Mrm"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 281853,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USRE19900712"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/4Y7fEQ4PAzhlLnLviRw2P4"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/4Y7fEQ4PAzhlLnLviRw2P4",
+ "id" : "4Y7fEQ4PAzhlLnLviRw2P4",
+ "name" : "Rockin' In The Free World",
+ "popularity" : 62,
+ "preview_url" : "https://p.scdn.co/mp3-preview/b91632db351a630b6377fd272038737d285945fd",
+ "track_number" : 12,
+ "type" : "track",
+ "uri" : "spotify:track:4Y7fEQ4PAzhlLnLviRw2P4"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/6chUA3fW0UUhceTPOYHvtQ"
+ },
+ "href" : "https://api.spotify.com/v1/albums/6chUA3fW0UUhceTPOYHvtQ",
+ "id" : "6chUA3fW0UUhceTPOYHvtQ",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/4ce59b41704d58fe340d1e52468607576c852fe3",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/458bc51b2bc2c9691ed80e1f7e0d4b2fdab4b23e",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/820a112e3d188eb9a028c0329041394f70d67a83",
+ "width" : 64
+ } ],
+ "name" : "Decade",
+ "type" : "album",
+ "uri" : "spotify:album:6chUA3fW0UUhceTPOYHvtQ"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6v8FB84lnmJs434UJf2Mrm"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6v8FB84lnmJs434UJf2Mrm",
+ "id" : "6v8FB84lnmJs434UJf2Mrm",
+ "name" : "Neil Young",
+ "type" : "artist",
+ "uri" : "spotify:artist:6v8FB84lnmJs434UJf2Mrm"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 130520,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USRE19900188"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/3eKXd8eSlzMbvg94EPVmQE"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/3eKXd8eSlzMbvg94EPVmQE",
+ "id" : "3eKXd8eSlzMbvg94EPVmQE",
+ "name" : "The Needle And The Damage Done",
+ "popularity" : 57,
+ "preview_url" : "https://p.scdn.co/mp3-preview/f75f4db293854486af458de190b55be8790c1f36",
+ "track_number" : 24,
+ "type" : "track",
+ "uri" : "spotify:track:3eKXd8eSlzMbvg94EPVmQE"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/5wIp9G5YVsq4rqWFJINFfs"
+ },
+ "href" : "https://api.spotify.com/v1/albums/5wIp9G5YVsq4rqWFJINFfs",
+ "id" : "5wIp9G5YVsq4rqWFJINFfs",
+ "images" : [ {
+ "height" : 630,
+ "url" : "https://i.scdn.co/image/79d96dadf85600e8186d24b6ccc709920f8b87ff",
+ "width" : 640
+ }, {
+ "height" : 295,
+ "url" : "https://i.scdn.co/image/4add7ba4dd1c9bba6da343ed9a22bd20123fb1ef",
+ "width" : 300
+ }, {
+ "height" : 63,
+ "url" : "https://i.scdn.co/image/6e612ae63a4b33cd0c5e699d2a73bcb052c99384",
+ "width" : 64
+ } ],
+ "name" : "Greatest Hits",
+ "type" : "album",
+ "uri" : "spotify:album:5wIp9G5YVsq4rqWFJINFfs"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6v8FB84lnmJs434UJf2Mrm"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6v8FB84lnmJs434UJf2Mrm",
+ "id" : "6v8FB84lnmJs434UJf2Mrm",
+ "name" : "Neil Young",
+ "type" : "artist",
+ "uri" : "spotify:artist:6v8FB84lnmJs434UJf2Mrm"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 557466,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USRE19900417"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0uPBPvGoNFm8V7zB0QwywJ"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0uPBPvGoNFm8V7zB0QwywJ",
+ "id" : "0uPBPvGoNFm8V7zB0QwywJ",
+ "name" : "Down By The River",
+ "popularity" : 56,
+ "preview_url" : "https://p.scdn.co/mp3-preview/db003befb35087a3a573dcbc77da1a2e6ca8901d",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:0uPBPvGoNFm8V7zB0QwywJ"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/2h2zv7tulv5460Ijs1tpxs"
+ },
+ "href" : "https://api.spotify.com/v1/albums/2h2zv7tulv5460Ijs1tpxs",
+ "id" : "2h2zv7tulv5460Ijs1tpxs",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/a042e0e50696368635ba9df8c598f79d856e4b92",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/adf120673a98a0dec42bb9cde4b8a437ec60ec97",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/e2ee2d191ca0b30e417a1ae0d8889a0f365b8d37",
+ "width" : 64
+ } ],
+ "name" : "Live At The Cellar Door",
+ "type" : "album",
+ "uri" : "spotify:album:2h2zv7tulv5460Ijs1tpxs"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6v8FB84lnmJs434UJf2Mrm"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6v8FB84lnmJs434UJf2Mrm",
+ "id" : "6v8FB84lnmJs434UJf2Mrm",
+ "name" : "Neil Young",
+ "type" : "artist",
+ "uri" : "spotify:artist:6v8FB84lnmJs434UJf2Mrm"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 172200,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USRE11300417"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0qS52mdiqMsoVvGy0E7EZ5"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0qS52mdiqMsoVvGy0E7EZ5",
+ "id" : "0qS52mdiqMsoVvGy0E7EZ5",
+ "name" : "Tell Me Why - Live At The Cellar Door",
+ "popularity" : 55,
+ "preview_url" : "https://p.scdn.co/mp3-preview/c04e67f32c7bf2b840d22397b2b88d32e33ba3e1",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:0qS52mdiqMsoVvGy0E7EZ5"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/5EVlXlHbRQI8ybuNt4ArXI"
+ },
+ "href" : "https://api.spotify.com/v1/albums/5EVlXlHbRQI8ybuNt4ArXI",
+ "id" : "5EVlXlHbRQI8ybuNt4ArXI",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/a1d7dd6197a4a67cef6ac3e3f4ae50142862afff",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/8cf882c756e208465a4192ea61fb2a27675dfdc3",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/399f01efb1ebfed45a67035bc4477b175aff912e",
+ "width" : 64
+ } ],
+ "name" : "After The Gold Rush (Remastered Version)",
+ "type" : "album",
+ "uri" : "spotify:album:5EVlXlHbRQI8ybuNt4ArXI"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6v8FB84lnmJs434UJf2Mrm"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6v8FB84lnmJs434UJf2Mrm",
+ "id" : "6v8FB84lnmJs434UJf2Mrm",
+ "name" : "Neil Young",
+ "type" : "artist",
+ "uri" : "spotify:artist:6v8FB84lnmJs434UJf2Mrm"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 225973,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USRE10900209"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/2anPa0qaFG1Nf0swkpfOQd"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/2anPa0qaFG1Nf0swkpfOQd",
+ "id" : "2anPa0qaFG1Nf0swkpfOQd",
+ "name" : "After The Gold Rush - Remastered",
+ "popularity" : 54,
+ "preview_url" : "https://p.scdn.co/mp3-preview/40947fc42cdc9b6f746c6442f617a2a1303cd81f",
+ "track_number" : 2,
+ "type" : "track",
+ "uri" : "spotify:track:2anPa0qaFG1Nf0swkpfOQd"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/5wIp9G5YVsq4rqWFJINFfs"
+ },
+ "href" : "https://api.spotify.com/v1/albums/5wIp9G5YVsq4rqWFJINFfs",
+ "id" : "5wIp9G5YVsq4rqWFJINFfs",
+ "images" : [ {
+ "height" : 630,
+ "url" : "https://i.scdn.co/image/79d96dadf85600e8186d24b6ccc709920f8b87ff",
+ "width" : 640
+ }, {
+ "height" : 295,
+ "url" : "https://i.scdn.co/image/4add7ba4dd1c9bba6da343ed9a22bd20123fb1ef",
+ "width" : 300
+ }, {
+ "height" : 63,
+ "url" : "https://i.scdn.co/image/6e612ae63a4b33cd0c5e699d2a73bcb052c99384",
+ "width" : 64
+ } ],
+ "name" : "Greatest Hits",
+ "type" : "album",
+ "uri" : "spotify:album:5wIp9G5YVsq4rqWFJINFfs"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6v8FB84lnmJs434UJf2Mrm"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6v8FB84lnmJs434UJf2Mrm",
+ "id" : "6v8FB84lnmJs434UJf2Mrm",
+ "name" : "Neil Young",
+ "type" : "artist",
+ "uri" : "spotify:artist:6v8FB84lnmJs434UJf2Mrm"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 179960,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USRE19900416"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0vJcPfC5wHCul3w5ozg5nx"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0vJcPfC5wHCul3w5ozg5nx",
+ "id" : "0vJcPfC5wHCul3w5ozg5nx",
+ "name" : "Cinnamon Girl",
+ "popularity" : 54,
+ "preview_url" : "https://p.scdn.co/mp3-preview/e22fcbc61f3776f14375582c526f143052ecc182",
+ "track_number" : 3,
+ "type" : "track",
+ "uri" : "spotify:track:0vJcPfC5wHCul3w5ozg5nx"
+ } ]
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/artist.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/artist.json
new file mode 100644
index 0000000..ee6a245
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/artist.json
@@ -0,0 +1,29 @@
+{
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/36QJpDe2go2KgaRleHCDTp"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 499010
+ },
+ "genres" : [ "album rock", "blues-rock", "classic rock", "rock" ],
+ "href" : "https://api.spotify.com/v1/artists/36QJpDe2go2KgaRleHCDTp",
+ "id" : "36QJpDe2go2KgaRleHCDTp",
+ "images" : [ {
+ "height" : 600,
+ "url" : "https://i.scdn.co/image/f66bcaf9b7d00b6bd5dafa1d99586390a23f4935",
+ "width" : 600
+ }, {
+ "height" : 200,
+ "url" : "https://i.scdn.co/image/89f85b03f128056ea2d0ca941be999853bea3d7c",
+ "width" : 200
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/f0959931aeb8aa174ef264d0b1ab7dd99cd22c03",
+ "width" : 64
+ } ],
+ "name" : "Led Zeppelin",
+ "popularity" : 56,
+ "type" : "artist",
+ "uri" : "spotify:artist:36QJpDe2go2KgaRleHCDTp"
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/artists.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/artists.json
new file mode 100644
index 0000000..b1e21d5
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/artists.json
@@ -0,0 +1,67 @@
+{
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6v8FB84lnmJs434UJf2Mrm"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 353848
+ },
+ "genres" : [ "country rock", "folk rock", "roots rock", "singer-songwriter" ],
+ "href" : "https://api.spotify.com/v1/artists/6v8FB84lnmJs434UJf2Mrm",
+ "id" : "6v8FB84lnmJs434UJf2Mrm",
+ "images" : [ {
+ "height" : 667,
+ "url" : "https://i.scdn.co/image/9cf3c4417d299cd974c156636aed25cf776cc588",
+ "width" : 1000
+ }, {
+ "height" : 427,
+ "url" : "https://i.scdn.co/image/28056039df6056d8cadc9f10a6bf407af316bf32",
+ "width" : 640
+ }, {
+ "height" : 133,
+ "url" : "https://i.scdn.co/image/fe3f3cc057d65f0a3425f1b95f589f0a894bac56",
+ "width" : 200
+ }, {
+ "height" : 43,
+ "url" : "https://i.scdn.co/image/fe257b86f46d004487856f413d4e1e8f505986de",
+ "width" : 64
+ } ],
+ "name" : "Neil Young",
+ "popularity" : 65,
+ "type" : "artist",
+ "uri" : "spotify:artist:6v8FB84lnmJs434UJf2Mrm"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6olE6TJLqED3rqDCT0FyPh"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 962884
+ },
+ "genres" : [ "alternative rock", "grunge", "permanent wave" ],
+ "href" : "https://api.spotify.com/v1/artists/6olE6TJLqED3rqDCT0FyPh",
+ "id" : "6olE6TJLqED3rqDCT0FyPh",
+ "images" : [ {
+ "height" : 1057,
+ "url" : "https://i.scdn.co/image/5d66307bbf73337bb073bfb2bf242e099a47e219",
+ "width" : 1000
+ }, {
+ "height" : 677,
+ "url" : "https://i.scdn.co/image/695867a7c6a0df25c5bddf0b00cc2cfde35b3ffc",
+ "width" : 640
+ }, {
+ "height" : 211,
+ "url" : "https://i.scdn.co/image/3a9c12e86ad8e2bbecb0e919b80bb5ece6f1dbe3",
+ "width" : 200
+ }, {
+ "height" : 68,
+ "url" : "https://i.scdn.co/image/5ae6f10633adc53210cd18a4f216f27de330f19d",
+ "width" : 64
+ } ],
+ "name" : "Nirvana",
+ "popularity" : 67,
+ "type" : "artist",
+ "uri" : "spotify:artist:6olE6TJLqED3rqDCT0FyPh"
+ } ]
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/featured-playlists.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/featured-playlists.json
new file mode 100644
index 0000000..6b111c4
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/featured-playlists.json
@@ -0,0 +1,147 @@
+{
+ "message" : "Your Saturday night just got so much better...",
+ "playlists" : {
+ "href" : "https://api.spotify.com/v1/browse/featured-playlists?country=SE&locale=sv_SE×tamp=2014-10-25T21:00:00&offset=0&limit=5",
+ "items" : [ {
+ "collaborative" : false,
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/spotify/playlist/5Oo5QuAOjjXMMXphFqC6eo"
+ },
+ "href" : "https://api.spotify.com/v1/users/spotify/playlists/5Oo5QuAOjjXMMXphFqC6eo",
+ "id" : "5Oo5QuAOjjXMMXphFqC6eo",
+ "images" : [ {
+ "url" : "https://i.scdn.co/image/48294c9d3d171ac4c5b6400e0d8f2c357569ce75"
+ } ],
+ "name" : "Weekend Hangouts",
+ "owner" : {
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/spotify"
+ },
+ "href" : "https://api.spotify.com/v1/users/spotify",
+ "id" : "spotify",
+ "type" : "user",
+ "uri" : "spotify:user:spotify"
+ },
+ "public" : null,
+ "tracks" : {
+ "href" : "https://api.spotify.com/v1/users/spotify/playlists/5Oo5QuAOjjXMMXphFqC6eo/tracks",
+ "total" : 223
+ },
+ "type" : "playlist",
+ "uri" : "spotify:user:spotify:playlist:5Oo5QuAOjjXMMXphFqC6eo"
+ }, {
+ "collaborative" : false,
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/tv4se/playlist/6gI54Ois1dlCKZJqrLyVKN"
+ },
+ "href" : "https://api.spotify.com/v1/users/tv4se/playlists/6gI54Ois1dlCKZJqrLyVKN",
+ "id" : "6gI54Ois1dlCKZJqrLyVKN",
+ "images" : [ {
+ "url" : "https://i.scdn.co/image/3be6c5a5879dc630c7136a63e30ad61f55c64ec6"
+ } ],
+ "name" : "SÅ MYCKET BÄTTRE 2014",
+ "owner" : {
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/tv4se"
+ },
+ "href" : "https://api.spotify.com/v1/users/tv4se",
+ "id" : "tv4se",
+ "type" : "user",
+ "uri" : "spotify:user:tv4se"
+ },
+ "public" : null,
+ "tracks" : {
+ "href" : "https://api.spotify.com/v1/users/tv4se/playlists/6gI54Ois1dlCKZJqrLyVKN/tracks",
+ "total" : 12
+ },
+ "type" : "playlist",
+ "uri" : "spotify:user:tv4se:playlist:6gI54Ois1dlCKZJqrLyVKN"
+ }, {
+ "collaborative" : false,
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/spotify/playlist/63UdjnaWDFp0VNrwQ28qUw"
+ },
+ "href" : "https://api.spotify.com/v1/users/spotify/playlists/63UdjnaWDFp0VNrwQ28qUw",
+ "id" : "63UdjnaWDFp0VNrwQ28qUw",
+ "images" : [ {
+ "url" : "https://i.scdn.co/image/68dc8102daec4e47d501f5f83f0ed7c59e14ab23"
+ } ],
+ "name" : "Dinner Party",
+ "owner" : {
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/spotify"
+ },
+ "href" : "https://api.spotify.com/v1/users/spotify",
+ "id" : "spotify",
+ "type" : "user",
+ "uri" : "spotify:user:spotify"
+ },
+ "public" : null,
+ "tracks" : {
+ "href" : "https://api.spotify.com/v1/users/spotify/playlists/63UdjnaWDFp0VNrwQ28qUw/tracks",
+ "total" : 121
+ },
+ "type" : "playlist",
+ "uri" : "spotify:user:spotify:playlist:63UdjnaWDFp0VNrwQ28qUw"
+ }, {
+ "collaborative" : false,
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/spotify/playlist/5ILSWr90l2Bgk89xuhsysy"
+ },
+ "href" : "https://api.spotify.com/v1/users/spotify/playlists/5ILSWr90l2Bgk89xuhsysy",
+ "id" : "5ILSWr90l2Bgk89xuhsysy",
+ "images" : [ {
+ "url" : "https://i.scdn.co/image/b15df0f45ccf5b0b4ac97674658de5b42c342df1"
+ } ],
+ "name" : "Pre-Party",
+ "owner" : {
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/spotify"
+ },
+ "href" : "https://api.spotify.com/v1/users/spotify",
+ "id" : "spotify",
+ "type" : "user",
+ "uri" : "spotify:user:spotify"
+ },
+ "public" : null,
+ "tracks" : {
+ "href" : "https://api.spotify.com/v1/users/spotify/playlists/5ILSWr90l2Bgk89xuhsysy/tracks",
+ "total" : 106
+ },
+ "type" : "playlist",
+ "uri" : "spotify:user:spotify:playlist:5ILSWr90l2Bgk89xuhsysy"
+ }, {
+ "collaborative" : false,
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/spotify/playlist/7BixMZxL4bhgULJQ5wPbUz"
+ },
+ "href" : "https://api.spotify.com/v1/users/spotify/playlists/7BixMZxL4bhgULJQ5wPbUz",
+ "id" : "7BixMZxL4bhgULJQ5wPbUz",
+ "images" : [ {
+ "url" : "https://i.scdn.co/image/202df3b14174a06f1cd9541302d51c291eed8bee"
+ } ],
+ "name" : "Chillax",
+ "owner" : {
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/spotify"
+ },
+ "href" : "https://api.spotify.com/v1/users/spotify",
+ "id" : "spotify",
+ "type" : "user",
+ "uri" : "spotify:user:spotify"
+ },
+ "public" : null,
+ "tracks" : {
+ "href" : "https://api.spotify.com/v1/users/spotify/playlists/7BixMZxL4bhgULJQ5wPbUz/tracks",
+ "total" : 102
+ },
+ "type" : "playlist",
+ "uri" : "spotify:user:spotify:playlist:7BixMZxL4bhgULJQ5wPbUz"
+ } ],
+ "limit" : 5,
+ "next" : "https://api.spotify.com/v1/browse/featured-playlists?country=SE&locale=sv_SE×tamp=2014-10-25T21:00:00&offset=5&limit=5",
+ "offset" : 0,
+ "previous" : null,
+ "total" : 12
+ }
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/new-releases.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/new-releases.json
new file mode 100644
index 0000000..bbb2419
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/new-releases.json
@@ -0,0 +1,131 @@
+{
+ "albums" : {
+ "href" : "https://api.spotify.com/v1/browse/new-releases?country=SE&offset=0&limit=5",
+ "items" : [ {
+ "album_type" : "album",
+ "available_markets" : [ "AT", "AU", "CH", "CZ", "DE", "FI", "IE", "NL", "NZ", "SI", "SK", "HK", "MY", "PH", "SG", "TW", "BG", "CY", "EE", "GR", "LT", "LV", "RO", "TR", "AD", "BE", "DK", "ES", "FR", "HU", "IT", "LI", "LU", "MC", "MT", "NO", "PL", "SE", "GB", "PT", "IS", "UY", "AR", "CL", "PY", "BO", "BR", "DO", "CO", "EC", "PA", "PE", "CR", "GT", "HN", "NI", "SV" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/59Mjf7KcSU7niudeL4JsmQ"
+ },
+ "href" : "https://api.spotify.com/v1/albums/59Mjf7KcSU7niudeL4JsmQ",
+ "id" : "59Mjf7KcSU7niudeL4JsmQ",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/34ad44065027a8e99b5fc071b09b8109928a1e59",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/b9fc808bcf4a9e1d9576489e3f90ec6bfbf762df",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/7319c88ba4e6c9a091dd62a1bfbc1f72fe68e779",
+ "width" : 64
+ } ],
+ "name" : "Feels So Good",
+ "type" : "album",
+ "uri" : "spotify:album:59Mjf7KcSU7niudeL4JsmQ"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AT", "BE", "CH", "CZ", "DE", "EE", "FI", "IE", "LI", "LT", "LU", "LV", "NL", "SE", "SK", "TR" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/4KyyjcX6N1xcxTqdOTOghN"
+ },
+ "href" : "https://api.spotify.com/v1/albums/4KyyjcX6N1xcxTqdOTOghN",
+ "id" : "4KyyjcX6N1xcxTqdOTOghN",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/4b12129e2b6630cab568c2941835d0e28f85840b",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/c9ed2290296aa4038139f708ff7b6cefa65b98af",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/e8dd9b7e27363122b27eb99e63bf274a0849bd5f",
+ "width" : 64
+ } ],
+ "name" : "Back to Earth",
+ "type" : "album",
+ "uri" : "spotify:album:4KyyjcX6N1xcxTqdOTOghN"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AT", "CH", "CZ", "DE", "FI", "NL", "NZ", "SE", "SI", "SK" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/7yYva2MJYef1aOFVBtlA8I"
+ },
+ "href" : "https://api.spotify.com/v1/albums/7yYva2MJYef1aOFVBtlA8I",
+ "id" : "7yYva2MJYef1aOFVBtlA8I",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/a904eaf3c6440542493b10ef552cd955a8b1515a",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/c9bbdc3adc7a8a2f159f31da13a989457572353d",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/fdaa69c01adb12a603a7af8f4bfbce39a413ef21",
+ "width" : 64
+ } ],
+ "name" : "Nostalgia",
+ "type" : "album",
+ "uri" : "spotify:album:7yYva2MJYef1aOFVBtlA8I"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "SE" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/517pAxOuxIz2HyltDuBWYf"
+ },
+ "href" : "https://api.spotify.com/v1/albums/517pAxOuxIz2HyltDuBWYf",
+ "id" : "517pAxOuxIz2HyltDuBWYf",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/8db1fb7e5589d4d98022f3cc4ec0175a8bbc9b0e",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/1342d206b6f1191c7b900878e1b2d1f147215d9d",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/091236fc857a1c13a84319e614a0611d6829324f",
+ "width" : 64
+ } ],
+ "name" : "Så mycket bättre 5 - Orups dag",
+ "type" : "album",
+ "uri" : "spotify:album:517pAxOuxIz2HyltDuBWYf"
+ }, {
+ "album_type" : "single",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/50nrlTw0DWxBBvjNh1aiaq"
+ },
+ "href" : "https://api.spotify.com/v1/albums/50nrlTw0DWxBBvjNh1aiaq",
+ "id" : "50nrlTw0DWxBBvjNh1aiaq",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/e351bd24bd85140f3558022a101363bfc61c7e30",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/159230ff048626f793c86c7763c2dc782430d95e",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/8118a38f53efeb1dc9049d673851ed0ae3b6ac08",
+ "width" : 64
+ } ],
+ "name" : "Skuggor från Karelen",
+ "type" : "album",
+ "uri" : "spotify:album:50nrlTw0DWxBBvjNh1aiaq"
+ } ],
+ "limit" : 5,
+ "next" : "https://api.spotify.com/v1/browse/new-releases?country=SE&offset=5&limit=5",
+ "offset" : 0,
+ "previous" : null,
+ "total" : 500
+ }
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/search-album.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/search-album.json
new file mode 100644
index 0000000..6fb4cf7
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/search-album.json
@@ -0,0 +1,491 @@
+{
+ "albums" : {
+ "href" : "https://api.spotify.com/v1/search?query=blur&offset=0&limit=20&type=album",
+ "items" : [ {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/1bgkxe4t0HNeLn9rhrx79x"
+ },
+ "href" : "https://api.spotify.com/v1/albums/1bgkxe4t0HNeLn9rhrx79x",
+ "id" : "1bgkxe4t0HNeLn9rhrx79x",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/64d37b4adad0bad4c31ef0de9d499d94596a2060",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/1590a83b6e1ec12478a2fe8e993a4eecc261605e",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/77203b4469cb6dba1710c44f838ff6ab3a0433b7",
+ "width" : 64
+ } ],
+ "name" : "Blur: The Best Of",
+ "type" : "album",
+ "uri" : "spotify:album:1bgkxe4t0HNeLn9rhrx79x"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/7HvIrSkKGJCzd8AKyjTJ6Q"
+ },
+ "href" : "https://api.spotify.com/v1/albums/7HvIrSkKGJCzd8AKyjTJ6Q",
+ "id" : "7HvIrSkKGJCzd8AKyjTJ6Q",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/f701e71cd440d0c39e78ae84b11b521c151ca952",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/2f86cc9cd03fd681f0047e325538204913133de9",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/266f1a256cd75a954f5490dfb6455ae5e3c75cff",
+ "width" : 64
+ } ],
+ "name" : "Blur [Special Edition]",
+ "type" : "album",
+ "uri" : "spotify:album:7HvIrSkKGJCzd8AKyjTJ6Q"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/0DBkFC6739trhCoVreZyds"
+ },
+ "href" : "https://api.spotify.com/v1/albums/0DBkFC6739trhCoVreZyds",
+ "id" : "0DBkFC6739trhCoVreZyds",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/03c8065209537b0ac1c57c1ba9699b0220a4d4b8",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/ff643365919768d1d742a8cd7e7e199e401169df",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/eeaa64d81f9cbe8e30671a392bba2c78de766067",
+ "width" : 64
+ } ],
+ "name" : "Parklife [Special Edition]",
+ "type" : "album",
+ "uri" : "spotify:album:0DBkFC6739trhCoVreZyds"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/7BiMMjtvTX0OiB8Yi7CFB1"
+ },
+ "href" : "https://api.spotify.com/v1/albums/7BiMMjtvTX0OiB8Yi7CFB1",
+ "id" : "7BiMMjtvTX0OiB8Yi7CFB1",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/6fa8258b54a9be6d7a9f06814ff2c92514a1f873",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/b1174cbd3654639a2ac5831b2341f3a361cc568e",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/8caf4cb98b75f9adc9f172c21c5b66dbcbefaee7",
+ "width" : 64
+ } ],
+ "name" : "The Great Escape [Special Edition]",
+ "type" : "album",
+ "uri" : "spotify:album:7BiMMjtvTX0OiB8Yi7CFB1"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/6P3DICUiFYGBz5Ptdn57sG"
+ },
+ "href" : "https://api.spotify.com/v1/albums/6P3DICUiFYGBz5Ptdn57sG",
+ "id" : "6P3DICUiFYGBz5Ptdn57sG",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/19363cb2140fd4e8e6dd6f028d614465ac610ec0",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/007bc152e0b27a55a488954c74498ab8d4e4f1e1",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/0fde777508651ce4d71d49da8e1f1d2f09be64cf",
+ "width" : 64
+ } ],
+ "name" : "Midlife: A Beginner's Guide To Blur",
+ "type" : "album",
+ "uri" : "spotify:album:6P3DICUiFYGBz5Ptdn57sG"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/3VyHgnHE4cp7YuU7skzuJ2"
+ },
+ "href" : "https://api.spotify.com/v1/albums/3VyHgnHE4cp7YuU7skzuJ2",
+ "id" : "3VyHgnHE4cp7YuU7skzuJ2",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/39f5e076950b20d1410b95932bf6f7b62e6024f4",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/ab4864c47847f5b7623197d7b13475629630b466",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/1b5c8fd40c1d7371d928ad2a99aa77fa4e34c112",
+ "width" : 64
+ } ],
+ "name" : "Blur",
+ "type" : "album",
+ "uri" : "spotify:album:3VyHgnHE4cp7YuU7skzuJ2"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/5YuZ4DjvtZBywtIbHIqtGJ"
+ },
+ "href" : "https://api.spotify.com/v1/albums/5YuZ4DjvtZBywtIbHIqtGJ",
+ "id" : "5YuZ4DjvtZBywtIbHIqtGJ",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/bc4775423b7fcb1020df3bf7ca7d8eb1b17b5212",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/c3f1e7ac6a7dbcfb24bf8a34aee5e7e03520fe2f",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/c91d9f258227bc071370208cd1fc01340f524489",
+ "width" : 64
+ } ],
+ "name" : "13",
+ "type" : "album",
+ "uri" : "spotify:album:5YuZ4DjvtZBywtIbHIqtGJ"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/2gu1tAkUSoe5zTJNM0qU3g"
+ },
+ "href" : "https://api.spotify.com/v1/albums/2gu1tAkUSoe5zTJNM0qU3g",
+ "id" : "2gu1tAkUSoe5zTJNM0qU3g",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/c2eeefac6a0d26abbd03fbb0754ae9e5cce0ff68",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/6c11873c57173ec992aca45083c60ae1e5c5f685",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/95b6bd634795d9a8d6577e97c5a38be68d2345d2",
+ "width" : 64
+ } ],
+ "name" : "Modern Life Is Rubbish [Special Edition]",
+ "type" : "album",
+ "uri" : "spotify:album:2gu1tAkUSoe5zTJNM0qU3g"
+ }, {
+ "album_type" : "single",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/4KGXsaL5QHwStv15Mf7CHa"
+ },
+ "href" : "https://api.spotify.com/v1/albums/4KGXsaL5QHwStv15Mf7CHa",
+ "id" : "4KGXsaL5QHwStv15Mf7CHa",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/dc023f2adab949f4aba8bd40334492ef92de229f",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/47f06310b20144fba6168039f0ec7b1b718110c0",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/195b6f14876082aeee6a73bc24b8bd0658c9c7fd",
+ "width" : 64
+ } ],
+ "name" : "Blur",
+ "type" : "album",
+ "uri" : "spotify:album:4KGXsaL5QHwStv15Mf7CHa"
+ }, {
+ "album_type" : "single",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/17uiLcsHcK3RcSWS8XO54y"
+ },
+ "href" : "https://api.spotify.com/v1/albums/17uiLcsHcK3RcSWS8XO54y",
+ "id" : "17uiLcsHcK3RcSWS8XO54y",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/802ccdc98212db212e8a81f12470ecacf02995a7",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/02e59e28f4cd0f2bed98478faf3ffbff7894378d",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/e9764842d735334d4da8c4a939721804684bb4d6",
+ "width" : 64
+ } ],
+ "name" : "Under the Westway - Single",
+ "type" : "album",
+ "uri" : "spotify:album:17uiLcsHcK3RcSWS8XO54y"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/0egRXi9lcYlIGJZ01SpYM3"
+ },
+ "href" : "https://api.spotify.com/v1/albums/0egRXi9lcYlIGJZ01SpYM3",
+ "id" : "0egRXi9lcYlIGJZ01SpYM3",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/12e72e3e7fc9d644927bcf8bf49587a19f64f346",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/f3b3878e86ebf0a1681ccd054f89fa2c754d64bb",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/bdb16f332b3fbae09d86cafd84a86e845d82ef7f",
+ "width" : 64
+ } ],
+ "name" : "Think Tank",
+ "type" : "album",
+ "uri" : "spotify:album:0egRXi9lcYlIGJZ01SpYM3"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/0cTdvscLZjCTEKxYUlJFwa"
+ },
+ "href" : "https://api.spotify.com/v1/albums/0cTdvscLZjCTEKxYUlJFwa",
+ "id" : "0cTdvscLZjCTEKxYUlJFwa",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/2a81e7aee9b439086505f04e0ea8aefa128a3979",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/cd4834221762cb4be6b4f176dba94b72d54a23bd",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/4038f8a3a836dd63eace9b9bdf3b86ff1b85ae55",
+ "width" : 64
+ } ],
+ "name" : "Leisure [Special Edition]",
+ "type" : "album",
+ "uri" : "spotify:album:0cTdvscLZjCTEKxYUlJFwa"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/7xxg6PunBVeuTliClh4H5p"
+ },
+ "href" : "https://api.spotify.com/v1/albums/7xxg6PunBVeuTliClh4H5p",
+ "id" : "7xxg6PunBVeuTliClh4H5p",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/0b9bcd0fec270a14e10c513336feca6f0311425e",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/6d3e4992a8d29e8744c76e3b788ff5581925f316",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/451d3e26a2fda68790164d546a8aa31bfcf5e12d",
+ "width" : 64
+ } ],
+ "name" : "Parklive",
+ "type" : "album",
+ "uri" : "spotify:album:7xxg6PunBVeuTliClh4H5p"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/0YS25Dr3hMtMFlVTfuvzl4"
+ },
+ "href" : "https://api.spotify.com/v1/albums/0YS25Dr3hMtMFlVTfuvzl4",
+ "id" : "0YS25Dr3hMtMFlVTfuvzl4",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/03c8065209537b0ac1c57c1ba9699b0220a4d4b8",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/ff643365919768d1d742a8cd7e7e199e401169df",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/eeaa64d81f9cbe8e30671a392bba2c78de766067",
+ "width" : 64
+ } ],
+ "name" : "Parklife",
+ "type" : "album",
+ "uri" : "spotify:album:0YS25Dr3hMtMFlVTfuvzl4"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/1uF9iZYiDY2p5yhRFNJzjW"
+ },
+ "href" : "https://api.spotify.com/v1/albums/1uF9iZYiDY2p5yhRFNJzjW",
+ "id" : "1uF9iZYiDY2p5yhRFNJzjW",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/1bcea0cb3c994418cc5a5937337b06bf35cd96c2",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/49114f3245eaa8028a193085bf6a2177f41e12cf",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/99bf65de703ff621a24affe84483ff1a042f7627",
+ "width" : 64
+ } ],
+ "name" : "13 [Special Edition]",
+ "type" : "album",
+ "uri" : "spotify:album:1uF9iZYiDY2p5yhRFNJzjW"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/4s4QIAQ1gpnuGWT5KZKjtr"
+ },
+ "href" : "https://api.spotify.com/v1/albums/4s4QIAQ1gpnuGWT5KZKjtr",
+ "id" : "4s4QIAQ1gpnuGWT5KZKjtr",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/ffeafc4bbf32b429983b18e6fefae3e8627156e2",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/b6fdcc68c0b7e4b3f2284993e5537b6b911ebf5a",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/e9fb4c60c04fd64342b616656c1e6f1fd919a502",
+ "width" : 64
+ } ],
+ "name" : "All The People... Blur Live At Hyde Park 02/07/2009",
+ "type" : "album",
+ "uri" : "spotify:album:4s4QIAQ1gpnuGWT5KZKjtr"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/68P7oIUK327pt5tDIZJd63"
+ },
+ "href" : "https://api.spotify.com/v1/albums/68P7oIUK327pt5tDIZJd63",
+ "id" : "68P7oIUK327pt5tDIZJd63",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/12e72e3e7fc9d644927bcf8bf49587a19f64f346",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/f3b3878e86ebf0a1681ccd054f89fa2c754d64bb",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/bdb16f332b3fbae09d86cafd84a86e845d82ef7f",
+ "width" : 64
+ } ],
+ "name" : "Think Tank [Special Edition]",
+ "type" : "album",
+ "uri" : "spotify:album:68P7oIUK327pt5tDIZJd63"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/3rXnMAuqzR6UQl6gBlJrDL"
+ },
+ "href" : "https://api.spotify.com/v1/albums/3rXnMAuqzR6UQl6gBlJrDL",
+ "id" : "3rXnMAuqzR6UQl6gBlJrDL",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/ece34ad19a2dcb5e1376026bf329bc875fef4f99",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/0eb45530a7e13aef826c7c7acbec7233d5ed8b2a",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/0fdc38bd236f028f7a6fde5ba152779a90031d46",
+ "width" : 64
+ } ],
+ "name" : "The Great Escape",
+ "type" : "album",
+ "uri" : "spotify:album:3rXnMAuqzR6UQl6gBlJrDL"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/2AAx5D9aJnP6XK859Q1Pyl"
+ },
+ "href" : "https://api.spotify.com/v1/albums/2AAx5D9aJnP6XK859Q1Pyl",
+ "id" : "2AAx5D9aJnP6XK859Q1Pyl",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/731f004ddd99490e1e5b30de9f14a21a3ca7d212",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/1f504d0cfdf0454b616046f7d00d40540f70791f",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/7cb6254c5ec1e25eb71789966b7a0d5ab8f7dd3d",
+ "width" : 64
+ } ],
+ "name" : "Leisure",
+ "type" : "album",
+ "uri" : "spotify:album:2AAx5D9aJnP6XK859Q1Pyl"
+ }, {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/23mDNB6otna4M0e8MORCsZ"
+ },
+ "href" : "https://api.spotify.com/v1/albums/23mDNB6otna4M0e8MORCsZ",
+ "id" : "23mDNB6otna4M0e8MORCsZ",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/c2eeefac6a0d26abbd03fbb0754ae9e5cce0ff68",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/6c11873c57173ec992aca45083c60ae1e5c5f685",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/95b6bd634795d9a8d6577e97c5a38be68d2345d2",
+ "width" : 64
+ } ],
+ "name" : "Modern Life Is Rubbish",
+ "type" : "album",
+ "uri" : "spotify:album:23mDNB6otna4M0e8MORCsZ"
+ } ],
+ "limit" : 20,
+ "next" : "https://api.spotify.com/v1/search?query=blur&offset=20&limit=20&type=album",
+ "offset" : 0,
+ "previous" : null,
+ "total" : 251
+ }
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/search-artist.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/search-artist.json
new file mode 100644
index 0000000..90dec1a
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/search-artist.json
@@ -0,0 +1,291 @@
+{
+ "artists" : {
+ "href" : "https://api.spotify.com/v1/search?query=blur&offset=0&limit=20&type=artist",
+ "items" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/7MhMgCo0Bl0Kukl93PZbYS"
+ },
+ "genres" : [ "britpop", "madchester" ],
+ "href" : "https://api.spotify.com/v1/artists/7MhMgCo0Bl0Kukl93PZbYS",
+ "id" : "7MhMgCo0Bl0Kukl93PZbYS",
+ "images" : [ {
+ "height" : 806,
+ "url" : "https://i.scdn.co/image/c43243b291c54f379219c7db655701ad0396286f",
+ "width" : 1000
+ }, {
+ "height" : 516,
+ "url" : "https://i.scdn.co/image/e8e3ab8e998f360896e4989b915521364b90736e",
+ "width" : 640
+ }, {
+ "height" : 161,
+ "url" : "https://i.scdn.co/image/01f9e2c5f17994d358ac111e48ddc10d74cbddee",
+ "width" : 200
+ }, {
+ "height" : 52,
+ "url" : "https://i.scdn.co/image/cb0a151b66831ff9ee61798916152a3f6c84f972",
+ "width" : 64
+ } ],
+ "name" : "Blur",
+ "popularity" : 56,
+ "type" : "artist",
+ "uri" : "spotify:artist:7MhMgCo0Bl0Kukl93PZbYS"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/7g62VYILD5ObgKWKJRI6vY"
+ },
+ "genres" : [ ],
+ "href" : "https://api.spotify.com/v1/artists/7g62VYILD5ObgKWKJRI6vY",
+ "id" : "7g62VYILD5ObgKWKJRI6vY",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/1457be1091909a1dca1bd7b0115e7ea05a64542a",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/185f51bab69869e58901bf2283ae4b420674b6c0",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/3e9f39440d58fcbcf160c3f1d0f6739185ebe764",
+ "width" : 64
+ } ],
+ "name" : "Moorea Blur",
+ "popularity" : 0,
+ "type" : "artist",
+ "uri" : "spotify:artist:7g62VYILD5ObgKWKJRI6vY"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1lRAJ76z6bvECSpTHYQoyO"
+ },
+ "genres" : [ ],
+ "href" : "https://api.spotify.com/v1/artists/1lRAJ76z6bvECSpTHYQoyO",
+ "id" : "1lRAJ76z6bvECSpTHYQoyO",
+ "images" : [ ],
+ "name" : "Motion Blur",
+ "popularity" : 0,
+ "type" : "artist",
+ "uri" : "spotify:artist:1lRAJ76z6bvECSpTHYQoyO"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3OrIWUPgp8rHYNQjB0AmVc"
+ },
+ "genres" : [ ],
+ "href" : "https://api.spotify.com/v1/artists/3OrIWUPgp8rHYNQjB0AmVc",
+ "id" : "3OrIWUPgp8rHYNQjB0AmVc",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/01385c6ea7ef8289d53f396e6f3095f045f632b8",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/b5e9e8eee10456d321f9285c8a186a9eee43401d",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/fa0848c15a8100c8deb6c6896015d6f7f5dc7e52",
+ "width" : 64
+ } ],
+ "name" : "Calico Blur",
+ "popularity" : 0,
+ "type" : "artist",
+ "uri" : "spotify:artist:3OrIWUPgp8rHYNQjB0AmVc"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6S1jz3WtJuzBIwjzdsi91n"
+ },
+ "genres" : [ ],
+ "href" : "https://api.spotify.com/v1/artists/6S1jz3WtJuzBIwjzdsi91n",
+ "id" : "6S1jz3WtJuzBIwjzdsi91n",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/4d45f4b75e331c65582731f68b3c138c8b9a0f02",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/f93a0a46e72e4263952e13ee17a5126d3bf36d84",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/0fbba00c47168d68c95e725396c3fc61cd69895c",
+ "width" : 64
+ } ],
+ "name" : "Psycho Blur",
+ "popularity" : 0,
+ "type" : "artist",
+ "uri" : "spotify:artist:6S1jz3WtJuzBIwjzdsi91n"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3BanK4yL2jhgf1N3VPKlTU"
+ },
+ "genres" : [ ],
+ "href" : "https://api.spotify.com/v1/artists/3BanK4yL2jhgf1N3VPKlTU",
+ "id" : "3BanK4yL2jhgf1N3VPKlTU",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/df0af1fb0192e09e4f01ff85fbc4b0e741c7cf7f",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/f7f42fc3040c70a9bd0c4963463d76110607d98d",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/a52a625da8acb49b0f33041ce06bef5c04ecda96",
+ "width" : 64
+ } ],
+ "name" : "Panoramic Blur",
+ "popularity" : 0,
+ "type" : "artist",
+ "uri" : "spotify:artist:3BanK4yL2jhgf1N3VPKlTU"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/098K5q2u4YiyW97bvKbfd1"
+ },
+ "genres" : [ ],
+ "href" : "https://api.spotify.com/v1/artists/098K5q2u4YiyW97bvKbfd1",
+ "id" : "098K5q2u4YiyW97bvKbfd1",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/9dfb5cb66a6bf952026d78916e1c9c3361a51fd8",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/0696b1896ab9cc776d04b2053415d80dca66bbc4",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/ba8d3bfaf54efe0c4702670dd3a89cb17fbbc288",
+ "width" : 64
+ } ],
+ "name" : "Blur Project",
+ "popularity" : 1,
+ "type" : "artist",
+ "uri" : "spotify:artist:098K5q2u4YiyW97bvKbfd1"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6AK6IQ7fC1GA3c81ISZAsQ"
+ },
+ "genres" : [ ],
+ "href" : "https://api.spotify.com/v1/artists/6AK6IQ7fC1GA3c81ISZAsQ",
+ "id" : "6AK6IQ7fC1GA3c81ISZAsQ",
+ "images" : [ ],
+ "name" : "Nico Blur",
+ "popularity" : 0,
+ "type" : "artist",
+ "uri" : "spotify:artist:6AK6IQ7fC1GA3c81ISZAsQ"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6anoYwcV8b2qTgLwrNyipq"
+ },
+ "genres" : [ ],
+ "href" : "https://api.spotify.com/v1/artists/6anoYwcV8b2qTgLwrNyipq",
+ "id" : "6anoYwcV8b2qTgLwrNyipq",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/e1c898f55ee4d13e79052bd9cb35e01fd894241f",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/59a5158e9eb073097c09324dd679fff4291df012",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/8ca1232fe5f43c894af1f4d65b63a1f1f72d69a8",
+ "width" : 64
+ } ],
+ "name" : "Point Blur",
+ "popularity" : 0,
+ "type" : "artist",
+ "uri" : "spotify:artist:6anoYwcV8b2qTgLwrNyipq"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/12UnqjmImdCGDS3bSH1dOe"
+ },
+ "genres" : [ ],
+ "href" : "https://api.spotify.com/v1/artists/12UnqjmImdCGDS3bSH1dOe",
+ "id" : "12UnqjmImdCGDS3bSH1dOe",
+ "images" : [ ],
+ "name" : "Blur The Technicolor",
+ "popularity" : 0,
+ "type" : "artist",
+ "uri" : "spotify:artist:12UnqjmImdCGDS3bSH1dOe"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/5FbqP1p0vA6kT5sF3jr4Ur"
+ },
+ "genres" : [ ],
+ "href" : "https://api.spotify.com/v1/artists/5FbqP1p0vA6kT5sF3jr4Ur",
+ "id" : "5FbqP1p0vA6kT5sF3jr4Ur",
+ "images" : [ ],
+ "name" : "Seymour AKA Blur",
+ "popularity" : 0,
+ "type" : "artist",
+ "uri" : "spotify:artist:5FbqP1p0vA6kT5sF3jr4Ur"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/4jGzAmE1ci50TbOgS0EGM5"
+ },
+ "genres" : [ ],
+ "href" : "https://api.spotify.com/v1/artists/4jGzAmE1ci50TbOgS0EGM5",
+ "id" : "4jGzAmE1ci50TbOgS0EGM5",
+ "images" : [ ],
+ "name" : "Moment Sound Blur",
+ "popularity" : 0,
+ "type" : "artist",
+ "uri" : "spotify:artist:4jGzAmE1ci50TbOgS0EGM5"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3FQlTlZ1Q94zxU2B5Vk8ib"
+ },
+ "genres" : [ ],
+ "href" : "https://api.spotify.com/v1/artists/3FQlTlZ1Q94zxU2B5Vk8ib",
+ "id" : "3FQlTlZ1Q94zxU2B5Vk8ib",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/8ed651ddd4c6e7a4024b554a341d9b63e6b6976d",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/114039e3b7f365671f07a338271324e3c14c6cd8",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/f368a0479a6bb984a3304a30f30a8b258c26c0aa",
+ "width" : 64
+ } ],
+ "name" : "Paul Miller presents: Motion Blur",
+ "popularity" : 0,
+ "type" : "artist",
+ "uri" : "spotify:artist:3FQlTlZ1Q94zxU2B5Vk8ib"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/0aPUx2j1RCs6iJFuhA9Goe"
+ },
+ "genres" : [ ],
+ "href" : "https://api.spotify.com/v1/artists/0aPUx2j1RCs6iJFuhA9Goe",
+ "id" : "0aPUx2j1RCs6iJFuhA9Goe",
+ "images" : [ ],
+ "name" : "Paul Miller Presents Motion Blur",
+ "popularity" : 0,
+ "type" : "artist",
+ "uri" : "spotify:artist:0aPUx2j1RCs6iJFuhA9Goe"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2vtVMKkCCkgTouX0RDZirb"
+ },
+ "genres" : [ ],
+ "href" : "https://api.spotify.com/v1/artists/2vtVMKkCCkgTouX0RDZirb",
+ "id" : "2vtVMKkCCkgTouX0RDZirb",
+ "images" : [ ],
+ "name" : "Karaoke - Blur",
+ "popularity" : 0,
+ "type" : "artist",
+ "uri" : "spotify:artist:2vtVMKkCCkgTouX0RDZirb"
+ } ],
+ "limit" : 20,
+ "next" : null,
+ "offset" : 0,
+ "previous" : null,
+ "total" : 15
+ }
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/search-track.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/search-track.json
new file mode 100644
index 0000000..0bf1518
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/search-track.json
@@ -0,0 +1,1181 @@
+{
+ "tracks" : {
+ "href" : "https://api.spotify.com/v1/search?query=song+2&offset=0&limit=20&type=track",
+ "items" : [ {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/3oVGphWQJKx9bGmAgcsJEz"
+ },
+ "href" : "https://api.spotify.com/v1/albums/3oVGphWQJKx9bGmAgcsJEz",
+ "id" : "3oVGphWQJKx9bGmAgcsJEz",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/10a3f52647fa90ce34092ab33335ba52632f9b20",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/9eced5939ce0959017f9447c6bbf8f2e55411d19",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/b3dbd6fa39737fde7f2643576dfd6fb4b90612ab",
+ "width" : 64
+ } ],
+ "name" : "Classical Music You'll Know, Vol. 2",
+ "type" : "album",
+ "uri" : "spotify:album:3oVGphWQJKx9bGmAgcsJEz"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/5wTAi7QkpP6kp8a54lmTOq"
+ },
+ "href" : "https://api.spotify.com/v1/artists/5wTAi7QkpP6kp8a54lmTOq",
+ "id" : "5wTAi7QkpP6kp8a54lmTOq",
+ "name" : "Johannes Brahms",
+ "type" : "artist",
+ "uri" : "spotify:artist:5wTAi7QkpP6kp8a54lmTOq"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2cnyJZ5ThoBGnPsXFvnwYG"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2cnyJZ5ThoBGnPsXFvnwYG",
+ "id" : "2cnyJZ5ThoBGnPsXFvnwYG",
+ "name" : "Capital City Symphony",
+ "type" : "artist",
+ "uri" : "spotify:artist:2cnyJZ5ThoBGnPsXFvnwYG"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/27Q9cug2S8OLaUxnqDbnJ4"
+ },
+ "href" : "https://api.spotify.com/v1/artists/27Q9cug2S8OLaUxnqDbnJ4",
+ "id" : "27Q9cug2S8OLaUxnqDbnJ4",
+ "name" : "Carmen Dragon",
+ "type" : "artist",
+ "uri" : "spotify:artist:27Q9cug2S8OLaUxnqDbnJ4"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 139346,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USV291499678"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/3f00opLou6rzQCkgM5Qhpk"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/3f00opLou6rzQCkgM5Qhpk",
+ "id" : "3f00opLou6rzQCkgM5Qhpk",
+ "name" : "Cradle Song, Op. 49, No. 4",
+ "popularity" : 0,
+ "preview_url" : "https://p.scdn.co/mp3-preview/b319ac172ee420dda0278a0af5d2994197171381",
+ "track_number" : 44,
+ "type" : "track",
+ "uri" : "spotify:track:3f00opLou6rzQCkgM5Qhpk"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/1bgkxe4t0HNeLn9rhrx79x"
+ },
+ "href" : "https://api.spotify.com/v1/albums/1bgkxe4t0HNeLn9rhrx79x",
+ "id" : "1bgkxe4t0HNeLn9rhrx79x",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/64d37b4adad0bad4c31ef0de9d499d94596a2060",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/1590a83b6e1ec12478a2fe8e993a4eecc261605e",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/77203b4469cb6dba1710c44f838ff6ab3a0433b7",
+ "width" : 64
+ } ],
+ "name" : "Blur: The Best Of",
+ "type" : "album",
+ "uri" : "spotify:album:1bgkxe4t0HNeLn9rhrx79x"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/7MhMgCo0Bl0Kukl93PZbYS"
+ },
+ "href" : "https://api.spotify.com/v1/artists/7MhMgCo0Bl0Kukl93PZbYS",
+ "id" : "7MhMgCo0Bl0Kukl93PZbYS",
+ "name" : "Blur",
+ "type" : "artist",
+ "uri" : "spotify:artist:7MhMgCo0Bl0Kukl93PZbYS"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 121880,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "GBAYE9600015"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/3GfOAdcoc3X5GPiiXmpBjK"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/3GfOAdcoc3X5GPiiXmpBjK",
+ "id" : "3GfOAdcoc3X5GPiiXmpBjK",
+ "name" : "Song 2",
+ "popularity" : 74,
+ "preview_url" : "https://p.scdn.co/mp3-preview/2ef05c62aab0a17fc676ffa8a92398b2d3af0ce6",
+ "track_number" : 2,
+ "type" : "track",
+ "uri" : "spotify:track:3GfOAdcoc3X5GPiiXmpBjK"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/7HvIrSkKGJCzd8AKyjTJ6Q"
+ },
+ "href" : "https://api.spotify.com/v1/albums/7HvIrSkKGJCzd8AKyjTJ6Q",
+ "id" : "7HvIrSkKGJCzd8AKyjTJ6Q",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/f701e71cd440d0c39e78ae84b11b521c151ca952",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/2f86cc9cd03fd681f0047e325538204913133de9",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/266f1a256cd75a954f5490dfb6455ae5e3c75cff",
+ "width" : 64
+ } ],
+ "name" : "Blur [Special Edition]",
+ "type" : "album",
+ "uri" : "spotify:album:7HvIrSkKGJCzd8AKyjTJ6Q"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/7MhMgCo0Bl0Kukl93PZbYS"
+ },
+ "href" : "https://api.spotify.com/v1/artists/7MhMgCo0Bl0Kukl93PZbYS",
+ "id" : "7MhMgCo0Bl0Kukl93PZbYS",
+ "name" : "Blur",
+ "type" : "artist",
+ "uri" : "spotify:artist:7MhMgCo0Bl0Kukl93PZbYS"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 121160,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "GBAYE1200348"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/1FTSo4v6BOZH9QxKc3MbVM"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/1FTSo4v6BOZH9QxKc3MbVM",
+ "id" : "1FTSo4v6BOZH9QxKc3MbVM",
+ "name" : "Song 2 - 2012 Remastered Version",
+ "popularity" : 68,
+ "preview_url" : "https://p.scdn.co/mp3-preview/f3fc66e8c2711d4739131432594b01c9bd786b71",
+ "track_number" : 2,
+ "type" : "track",
+ "uri" : "spotify:track:1FTSo4v6BOZH9QxKc3MbVM"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BR", "CH", "CL", "CO", "CY", "CZ", "DE", "DK", "EE", "ES", "FI", "GB", "GR", "HK", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MY", "NL", "NO", "NZ", "PH", "PL", "PT", "RO", "SE", "SG", "SI", "SK", "TR", "TW" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/2l8AfaaUCWRasDQJMEmc5J"
+ },
+ "href" : "https://api.spotify.com/v1/albums/2l8AfaaUCWRasDQJMEmc5J",
+ "id" : "2l8AfaaUCWRasDQJMEmc5J",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/2eed6216863940b6a2acc269e56ecc4d9971d073",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/184c4a16ea42cfee76640df0be900771d3ed7c1c",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/b5518d0f963f9e4ac480507681eb389fb3e4476b",
+ "width" : 64
+ } ],
+ "name" : "Going Down To The River",
+ "type" : "album",
+ "uri" : "spotify:album:2l8AfaaUCWRasDQJMEmc5J"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2WO6GcXH1rWwzge9wOnuxm"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2WO6GcXH1rWwzge9wOnuxm",
+ "id" : "2WO6GcXH1rWwzge9wOnuxm",
+ "name" : "Doug Seegers",
+ "type" : "artist",
+ "uri" : "spotify:artist:2WO6GcXH1rWwzge9wOnuxm"
+ } ],
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BR", "CH", "CL", "CO", "CY", "CZ", "DE", "DK", "EE", "ES", "FI", "GB", "GR", "HK", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MY", "NL", "NO", "NZ", "PH", "PL", "PT", "RO", "SE", "SG", "SI", "SK", "TR", "TW" ],
+ "disc_number" : 1,
+ "duration_ms" : 209933,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "SEPEL1402301"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/3iFEYyvJcdEDqUMHUwlu6Y"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/3iFEYyvJcdEDqUMHUwlu6Y",
+ "id" : "3iFEYyvJcdEDqUMHUwlu6Y",
+ "name" : "Angie's Song",
+ "popularity" : 51,
+ "preview_url" : "https://p.scdn.co/mp3-preview/038e7d671a1cb55102b38e49c4944c14583942d3",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:3iFEYyvJcdEDqUMHUwlu6Y"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/2qXCZn0iGL41LxeMBN7FPe"
+ },
+ "href" : "https://api.spotify.com/v1/albums/2qXCZn0iGL41LxeMBN7FPe",
+ "id" : "2qXCZn0iGL41LxeMBN7FPe",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/8207d123804333af9f3d3955c4e3ffb3dbc3525e",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/e90c175e0beab07dcf78b6771ef53c49849b296a",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/32361242a1ced28ebcd35bb83c40c11a9ea7d10a",
+ "width" : 64
+ } ],
+ "name" : "A Love Song to Finance",
+ "type" : "album",
+ "uri" : "spotify:album:2qXCZn0iGL41LxeMBN7FPe"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6ApQXwvnRk07rZvtCVlZDs"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6ApQXwvnRk07rZvtCVlZDs",
+ "id" : "6ApQXwvnRk07rZvtCVlZDs",
+ "name" : "Jasmine Kennedy",
+ "type" : "artist",
+ "uri" : "spotify:artist:6ApQXwvnRk07rZvtCVlZDs"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 213000,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "UK4RA1300004"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/3BV9lwVoZ6iwCIQrpNM9KN"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/3BV9lwVoZ6iwCIQrpNM9KN",
+ "id" : "3BV9lwVoZ6iwCIQrpNM9KN",
+ "name" : "Percy Anderson",
+ "popularity" : 59,
+ "preview_url" : "https://p.scdn.co/mp3-preview/4f83b633ccf4071f215e326a55308b27d74241f2",
+ "track_number" : 4,
+ "type" : "track",
+ "uri" : "spotify:track:3BV9lwVoZ6iwCIQrpNM9KN"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AT", "AU", "BG", "CA", "CH", "CY", "DE", "ES", "GR", "HK", "LI", "MX", "MY", "NZ", "PH", "PT", "RO", "SE", "SG", "SI", "TW", "US" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/1VM5qKftnTKFU9rthvEgYx"
+ },
+ "href" : "https://api.spotify.com/v1/albums/1VM5qKftnTKFU9rthvEgYx",
+ "id" : "1VM5qKftnTKFU9rthvEgYx",
+ "images" : [ {
+ "height" : 637,
+ "url" : "https://i.scdn.co/image/ee6d18ccc9e1efbef13b4259063e1d2ecb763f47",
+ "width" : 640
+ }, {
+ "height" : 298,
+ "url" : "https://i.scdn.co/image/edc37bd681fce0d91e6bf3a2788b47fac14d93ea",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/fc3988c6745dd2eaab19c4519d3347ce0197b53a",
+ "width" : 64
+ } ],
+ "name" : "Victorious: Music From The Hit TV Show",
+ "type" : "album",
+ "uri" : "spotify:album:1VM5qKftnTKFU9rthvEgYx"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1KYszkVzlhV3rAqmAcYIgd"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1KYszkVzlhV3rAqmAcYIgd",
+ "id" : "1KYszkVzlhV3rAqmAcYIgd",
+ "name" : "Victorious Cast",
+ "type" : "artist",
+ "uri" : "spotify:artist:1KYszkVzlhV3rAqmAcYIgd"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1b8ktET4P814G5Mnhw0Y27"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1b8ktET4P814G5Mnhw0Y27",
+ "id" : "1b8ktET4P814G5Mnhw0Y27",
+ "name" : "Leon Thomas, III",
+ "type" : "artist",
+ "uri" : "spotify:artist:1b8ktET4P814G5Mnhw0Y27"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2OTfr6S2kuHRYStjt1IkY6"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2OTfr6S2kuHRYStjt1IkY6",
+ "id" : "2OTfr6S2kuHRYStjt1IkY6",
+ "name" : "Victoria Justice",
+ "type" : "artist",
+ "uri" : "spotify:artist:2OTfr6S2kuHRYStjt1IkY6"
+ } ],
+ "available_markets" : [ "AT", "AU", "BG", "CA", "CH", "CY", "DE", "ES", "GR", "HK", "LI", "MX", "MY", "NZ", "PH", "PT", "RO", "SE", "SG", "SI", "TW", "US" ],
+ "disc_number" : 1,
+ "duration_ms" : 218373,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USSM11101547"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0UwsTR4qFd0kjJviMtVBIs"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0UwsTR4qFd0kjJviMtVBIs",
+ "id" : "0UwsTR4qFd0kjJviMtVBIs",
+ "name" : "Song 2 You",
+ "popularity" : 52,
+ "preview_url" : "https://p.scdn.co/mp3-preview/16ddb7948fa2e69c73ddb6edfe0211860cb60599",
+ "track_number" : 9,
+ "type" : "track",
+ "uri" : "spotify:track:0UwsTR4qFd0kjJviMtVBIs"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/5hjlzVCJCePW4DmMJVryla"
+ },
+ "href" : "https://api.spotify.com/v1/albums/5hjlzVCJCePW4DmMJVryla",
+ "id" : "5hjlzVCJCePW4DmMJVryla",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/bf4c7c3a63b9398dc86b18ca03affb87098d7a9b",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/ae5c1e45cee082dfb43b1b1a51d3732c0c093743",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/9918c8edc9a2677dcbfa33de950cf9b28ac02a3e",
+ "width" : 64
+ } ],
+ "name" : "Put Your Back N 2 It",
+ "type" : "album",
+ "uri" : "spotify:album:5hjlzVCJCePW4DmMJVryla"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2ueoLVCXQ948OfhVvAy3Nn"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2ueoLVCXQ948OfhVvAy3Nn",
+ "id" : "2ueoLVCXQ948OfhVvAy3Nn",
+ "name" : "Perfume Genius",
+ "type" : "artist",
+ "uri" : "spotify:artist:2ueoLVCXQ948OfhVvAy3Nn"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 193306,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "GB7TY1102002"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/7eqvBMxS4zAunq8DlI4Jij"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/7eqvBMxS4zAunq8DlI4Jij",
+ "id" : "7eqvBMxS4zAunq8DlI4Jij",
+ "name" : "Normal Song",
+ "popularity" : 55,
+ "preview_url" : "https://p.scdn.co/mp3-preview/83add024673fc93a390c49d15320bae927eb3417",
+ "track_number" : 2,
+ "type" : "track",
+ "uri" : "spotify:track:7eqvBMxS4zAunq8DlI4Jij"
+ }, {
+ "album" : {
+ "album_type" : "single",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/13OkOMXSrWYIbw6scZSzif"
+ },
+ "href" : "https://api.spotify.com/v1/albums/13OkOMXSrWYIbw6scZSzif",
+ "id" : "13OkOMXSrWYIbw6scZSzif",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/a493f6dcd829b7cd8ae13b884231187da64075a6",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/63e94b1ec3a1974f31674ff6bf597837aada5333",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/d06a79e52a80005a8dd5aad1fe335e29664d7eb3",
+ "width" : 64
+ } ],
+ "name" : "The Walking Dead: AMC Original Soundtrack, Vol. 2",
+ "type" : "album",
+ "uri" : "spotify:album:13OkOMXSrWYIbw6scZSzif"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1KNNZV9twnpQBqyUoGvWA6"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1KNNZV9twnpQBqyUoGvWA6",
+ "id" : "1KNNZV9twnpQBqyUoGvWA6",
+ "name" : "Lee DeWyze",
+ "type" : "artist",
+ "uri" : "spotify:artist:1KNNZV9twnpQBqyUoGvWA6"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 254706,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USVG21403526"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/4cXh7tIzWUlSse7qSoyTN6"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/4cXh7tIzWUlSse7qSoyTN6",
+ "id" : "4cXh7tIzWUlSse7qSoyTN6",
+ "name" : "Blackbird Song",
+ "popularity" : 50,
+ "preview_url" : "https://p.scdn.co/mp3-preview/07e62684dadcc1c378cf0a5f09647a51c4a3fe56",
+ "track_number" : 3,
+ "type" : "track",
+ "uri" : "spotify:track:4cXh7tIzWUlSse7qSoyTN6"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/3p6wrYqeSr2KPNzJpxNWSc"
+ },
+ "href" : "https://api.spotify.com/v1/albums/3p6wrYqeSr2KPNzJpxNWSc",
+ "id" : "3p6wrYqeSr2KPNzJpxNWSc",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/ef05b97985627bbdf11ea3b84e5c4fa0017ec69e",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/d188abbdc4ed7ff06cbc1431b471091f21b61919",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/b22d5cb9dfe80203ce142c806469abcca8f158e8",
+ "width" : 64
+ } ],
+ "name" : "Based On A T.R.U. Story",
+ "type" : "album",
+ "uri" : "spotify:album:3p6wrYqeSr2KPNzJpxNWSc"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/17lzZA2AlOHwCwFALHttmp"
+ },
+ "href" : "https://api.spotify.com/v1/artists/17lzZA2AlOHwCwFALHttmp",
+ "id" : "17lzZA2AlOHwCwFALHttmp",
+ "name" : "2 Chainz",
+ "type" : "artist",
+ "uri" : "spotify:artist:17lzZA2AlOHwCwFALHttmp"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/5K4W6rqBFWDnAN6FQUkS6x"
+ },
+ "href" : "https://api.spotify.com/v1/artists/5K4W6rqBFWDnAN6FQUkS6x",
+ "id" : "5K4W6rqBFWDnAN6FQUkS6x",
+ "name" : "Kanye West",
+ "type" : "artist",
+ "uri" : "spotify:artist:5K4W6rqBFWDnAN6FQUkS6x"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "disc_number" : 1,
+ "duration_ms" : 306626,
+ "explicit" : true,
+ "external_ids" : {
+ "isrc" : "USUM71207262"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/7mtuFTyxaUE2UF5Wxb6c38"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/7mtuFTyxaUE2UF5Wxb6c38",
+ "id" : "7mtuFTyxaUE2UF5Wxb6c38",
+ "name" : "Birthday Song",
+ "popularity" : 57,
+ "preview_url" : "https://p.scdn.co/mp3-preview/8f2a032ccae620be964ced13514c9615a01e696c",
+ "track_number" : 5,
+ "type" : "track",
+ "uri" : "spotify:track:7mtuFTyxaUE2UF5Wxb6c38"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/2ChBXM2MXu0Kvmkq9gAbXm"
+ },
+ "href" : "https://api.spotify.com/v1/albums/2ChBXM2MXu0Kvmkq9gAbXm",
+ "id" : "2ChBXM2MXu0Kvmkq9gAbXm",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/81cc6904fbfa5281e62bf2efe998f0fb6dcfd1b2",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/74b41c98793dd55d4bb9cf650ebadc3d2f8d8abf",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/1f4d6ce1044eaa7aeacdb43ae7719aaffc9feff9",
+ "width" : 64
+ } ],
+ "name" : "Eurovision Song Contest 2014 Copenhagen",
+ "type" : "album",
+ "uri" : "spotify:album:2ChBXM2MXu0Kvmkq9gAbXm"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/62emvbuTFQdMRR5sVbVScY"
+ },
+ "href" : "https://api.spotify.com/v1/artists/62emvbuTFQdMRR5sVbVScY",
+ "id" : "62emvbuTFQdMRR5sVbVScY",
+ "name" : "Aarzemnieki",
+ "type" : "artist",
+ "uri" : "spotify:artist:62emvbuTFQdMRR5sVbVScY"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 2,
+ "duration_ms" : 181386,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "DK2DY1400046"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/5Qd68IgarqOFsNiLoKudmu"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/5Qd68IgarqOFsNiLoKudmu",
+ "id" : "5Qd68IgarqOFsNiLoKudmu",
+ "name" : "Cake To Bake - Eurovision 2014 - Latvia",
+ "popularity" : 45,
+ "preview_url" : "https://p.scdn.co/mp3-preview/3b5cd2837c0c642d6d1f700f072468c3934ddb73",
+ "track_number" : 4,
+ "type" : "track",
+ "uri" : "spotify:track:5Qd68IgarqOFsNiLoKudmu"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/5By3QnrtdJkkEZmK8qQgl5"
+ },
+ "href" : "https://api.spotify.com/v1/albums/5By3QnrtdJkkEZmK8qQgl5",
+ "id" : "5By3QnrtdJkkEZmK8qQgl5",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/a25528002462710401e179a5bb6748e1038bc9e2",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/8c3dbbca98b392ee9ad9f8007029c2103eebca8d",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/e2eaf35d7c4ebd5eb2205a2437993d7be19f630a",
+ "width" : 64
+ } ],
+ "name" : "Back to 6",
+ "type" : "album",
+ "uri" : "spotify:album:5By3QnrtdJkkEZmK8qQgl5"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6fNmOWQzfOVyHLQ2UqUQew"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6fNmOWQzfOVyHLQ2UqUQew",
+ "id" : "6fNmOWQzfOVyHLQ2UqUQew",
+ "name" : "Eva Cassidy",
+ "type" : "artist",
+ "uri" : "spotify:artist:6fNmOWQzfOVyHLQ2UqUQew"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 215066,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "ES8301026803"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/3CzIMP0Yq2t7w1NZF83xxp"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/3CzIMP0Yq2t7w1NZF83xxp",
+ "id" : "3CzIMP0Yq2t7w1NZF83xxp",
+ "name" : "Song Bird",
+ "popularity" : 50,
+ "preview_url" : "https://p.scdn.co/mp3-preview/01c65373b994ac89153fe9243fe69f51aae89f99",
+ "track_number" : 3,
+ "type" : "track",
+ "uri" : "spotify:track:3CzIMP0Yq2t7w1NZF83xxp"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AT", "BE", "BG", "CH", "CY", "CZ", "DE", "DK", "EE", "ES", "FI", "FR", "GR", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "NL", "NO", "PL", "PT", "RO", "SE", "SI", "SK", "TR" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/0w57XnlENgJWxQmK2iiKKa"
+ },
+ "href" : "https://api.spotify.com/v1/albums/0w57XnlENgJWxQmK2iiKKa",
+ "id" : "0w57XnlENgJWxQmK2iiKKa",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/f67703ae72b5057f6b9942a67476b30f9777f3f0",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/1d31e9a4ca514adc4a839eb2158e29e3062cc175",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/7c217a075fb4f2935ec855ffeed7cb51b4fbd312",
+ "width" : 64
+ } ],
+ "name" : "Camp Rock 2: The Final Jam",
+ "type" : "album",
+ "uri" : "spotify:album:0w57XnlENgJWxQmK2iiKKa"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/5ZuWrQzWBgJXbAfcLx2WTL"
+ },
+ "href" : "https://api.spotify.com/v1/artists/5ZuWrQzWBgJXbAfcLx2WTL",
+ "id" : "5ZuWrQzWBgJXbAfcLx2WTL",
+ "name" : "Alyson Stoner",
+ "type" : "artist",
+ "uri" : "spotify:artist:5ZuWrQzWBgJXbAfcLx2WTL"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6S2OmqARrzebs0tKUEyXyp"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6S2OmqARrzebs0tKUEyXyp",
+ "id" : "6S2OmqARrzebs0tKUEyXyp",
+ "name" : "Demi Lovato",
+ "type" : "artist",
+ "uri" : "spotify:artist:6S2OmqARrzebs0tKUEyXyp"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/4Rxn7Im3LGfyRkY2FlHhWi"
+ },
+ "href" : "https://api.spotify.com/v1/artists/4Rxn7Im3LGfyRkY2FlHhWi",
+ "id" : "4Rxn7Im3LGfyRkY2FlHhWi",
+ "name" : "Nick Jonas",
+ "type" : "artist",
+ "uri" : "spotify:artist:4Rxn7Im3LGfyRkY2FlHhWi"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/7gbmX8SsfjEjxDMzBi1ZOL"
+ },
+ "href" : "https://api.spotify.com/v1/artists/7gbmX8SsfjEjxDMzBi1ZOL",
+ "id" : "7gbmX8SsfjEjxDMzBi1ZOL",
+ "name" : "Joe Jonas",
+ "type" : "artist",
+ "uri" : "spotify:artist:7gbmX8SsfjEjxDMzBi1ZOL"
+ } ],
+ "available_markets" : [ "AD", "AT", "BE", "BG", "CH", "CY", "CZ", "DE", "DK", "EE", "ES", "FI", "FR", "GR", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "NL", "NO", "PL", "PT", "RO", "SE", "SI", "SK", "TR" ],
+ "disc_number" : 1,
+ "duration_ms" : 178333,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USWD11038149"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0q6ku8ljaOYoxs80gYrW8r"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0q6ku8ljaOYoxs80gYrW8r",
+ "id" : "0q6ku8ljaOYoxs80gYrW8r",
+ "name" : "This Is Our Song",
+ "popularity" : 48,
+ "preview_url" : "https://p.scdn.co/mp3-preview/86f457e0553b94fdbde0c6f57fe9d9e26b65da3c",
+ "track_number" : 11,
+ "type" : "track",
+ "uri" : "spotify:track:0q6ku8ljaOYoxs80gYrW8r"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/3cVNp1AXxdzoKIs9r6keWU"
+ },
+ "href" : "https://api.spotify.com/v1/albums/3cVNp1AXxdzoKIs9r6keWU",
+ "id" : "3cVNp1AXxdzoKIs9r6keWU",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/3e43b7cd2ccc9ec5f7b8c9f5e5f825c0d79f28cd",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/dfc4e6140ad802bc0835329d5cb61aa6d41bc678",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/394e6ede0e3978d675b4506c3dbb64cbf05ae92f",
+ "width" : 64
+ } ],
+ "name" : "Between Two Lungs",
+ "type" : "album",
+ "uri" : "spotify:album:3cVNp1AXxdzoKIs9r6keWU"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1moxjboGR7GNWYIMWsRjgG"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1moxjboGR7GNWYIMWsRjgG",
+ "id" : "1moxjboGR7GNWYIMWsRjgG",
+ "name" : "Florence + The Machine",
+ "type" : "artist",
+ "uri" : "spotify:artist:1moxjboGR7GNWYIMWsRjgG"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 223826,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "GBUM70904756"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/6SkxGjgzMbD4cBtRpF6AAm"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/6SkxGjgzMbD4cBtRpF6AAm",
+ "id" : "6SkxGjgzMbD4cBtRpF6AAm",
+ "name" : "Drumming Song",
+ "popularity" : 52,
+ "preview_url" : "https://p.scdn.co/mp3-preview/68496fc230c215e4dfa666b4aba97b517f0bbbf5",
+ "track_number" : 7,
+ "type" : "track",
+ "uri" : "spotify:track:6SkxGjgzMbD4cBtRpF6AAm"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/1KZGuujnfwHjZ48hxCbhHk"
+ },
+ "href" : "https://api.spotify.com/v1/albums/1KZGuujnfwHjZ48hxCbhHk",
+ "id" : "1KZGuujnfwHjZ48hxCbhHk",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/180e509f77068a1708da01aec2b02628e736ecef",
+ "width" : 639
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/9ddbc136e4c446a7c80e85de86dbd94058e6cd09",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/78d01d60502e9accf2981d7153ae690ca654a9aa",
+ "width" : 64
+ } ],
+ "name" : "Siren Song Of The Counter-Culture",
+ "type" : "album",
+ "uri" : "spotify:album:1KZGuujnfwHjZ48hxCbhHk"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6Wr3hh341P84m3EI8qdn9O"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6Wr3hh341P84m3EI8qdn9O",
+ "id" : "6Wr3hh341P84m3EI8qdn9O",
+ "name" : "Rise Against",
+ "type" : "artist",
+ "uri" : "spotify:artist:6Wr3hh341P84m3EI8qdn9O"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 228205,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USDW10400790"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/5kagLFYUXfUYnaJmmr83Ai"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/5kagLFYUXfUYnaJmmr83Ai",
+ "id" : "5kagLFYUXfUYnaJmmr83Ai",
+ "name" : "Blood To Bleed",
+ "popularity" : 48,
+ "preview_url" : "https://p.scdn.co/mp3-preview/684758000eeeb38d123c73a8862be976e159c0a9",
+ "track_number" : 5,
+ "type" : "track",
+ "uri" : "spotify:track:5kagLFYUXfUYnaJmmr83Ai"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/0ssMZRCnobXKQXjQ2R5A5a"
+ },
+ "href" : "https://api.spotify.com/v1/albums/0ssMZRCnobXKQXjQ2R5A5a",
+ "id" : "0ssMZRCnobXKQXjQ2R5A5a",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/242f984b3e816c575868829c3fe50addfb204707",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/61179887979282254ac7d6dd0f2f44b7eeabfac2",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/963a6d5b05be22f0165ca6cbdf98c41f944d2c54",
+ "width" : 64
+ } ],
+ "name" : "Begin To Hope (Special Edition)",
+ "type" : "album",
+ "uri" : "spotify:album:0ssMZRCnobXKQXjQ2R5A5a"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3z6Gk257P9jNcZbBXJNX5i"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3z6Gk257P9jNcZbBXJNX5i",
+ "id" : "3z6Gk257P9jNcZbBXJNX5i",
+ "name" : "Regina Spektor",
+ "type" : "artist",
+ "uri" : "spotify:artist:3z6Gk257P9jNcZbBXJNX5i"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 207725,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USWB10600590"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/3hMeLjX7z3VCZVsJYJ9Ar8"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/3hMeLjX7z3VCZVsJYJ9Ar8",
+ "id" : "3hMeLjX7z3VCZVsJYJ9Ar8",
+ "name" : "Hotel Song",
+ "popularity" : 49,
+ "preview_url" : "https://p.scdn.co/mp3-preview/2683df3348c10e59654787d96e4eaad1da969252",
+ "track_number" : 6,
+ "type" : "track",
+ "uri" : "spotify:track:3hMeLjX7z3VCZVsJYJ9Ar8"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/5k63xxy9YcKM0H9GS3vP1K"
+ },
+ "href" : "https://api.spotify.com/v1/albums/5k63xxy9YcKM0H9GS3vP1K",
+ "id" : "5k63xxy9YcKM0H9GS3vP1K",
+ "images" : [ {
+ "height" : 636,
+ "url" : "https://i.scdn.co/image/e76791de0ebed752cac6430f8c9a623c87b59b07",
+ "width" : 640
+ }, {
+ "height" : 298,
+ "url" : "https://i.scdn.co/image/414f881e5ef31cb1d8bb9fa6aa624b442b388103",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/4ae8d0506fc2a04f8356fc7328a5f2f7aca731d1",
+ "width" : 64
+ } ],
+ "name" : "Bob Dylan",
+ "type" : "album",
+ "uri" : "spotify:album:5k63xxy9YcKM0H9GS3vP1K"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/74ASZWbe4lXaubB36ztrGX"
+ },
+ "href" : "https://api.spotify.com/v1/artists/74ASZWbe4lXaubB36ztrGX",
+ "id" : "74ASZWbe4lXaubB36ztrGX",
+ "name" : "Bob Dylan",
+ "type" : "artist",
+ "uri" : "spotify:artist:74ASZWbe4lXaubB36ztrGX"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 160000,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USSM16101371"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0dfdXhBg11XA16XgAEtFcN"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0dfdXhBg11XA16XgAEtFcN",
+ "id" : "0dfdXhBg11XA16XgAEtFcN",
+ "name" : "Song to Woody",
+ "popularity" : 48,
+ "preview_url" : "https://p.scdn.co/mp3-preview/dcd44e959468cba708a4dfe4e0f141bb3c922998",
+ "track_number" : 12,
+ "type" : "track",
+ "uri" : "spotify:track:0dfdXhBg11XA16XgAEtFcN"
+ }, {
+ "album" : {
+ "album_type" : "compilation",
+ "available_markets" : [ "AD", "AU", "BE", "BG", "CH", "CY", "CZ", "DK", "DO", "EE", "ES", "FI", "GR", "HK", "HU", "IS", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NO", "NZ", "PH", "PL", "PT", "RO", "SE", "SG", "SI", "SK", "TR", "TW" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/4FoJzaRTuSq4HWYQVUHkY5"
+ },
+ "href" : "https://api.spotify.com/v1/albums/4FoJzaRTuSq4HWYQVUHkY5",
+ "id" : "4FoJzaRTuSq4HWYQVUHkY5",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/9c9494400ce5dce6924dfcb7b4306a836e4d3b70",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/8909489dcbee342b55b36c552d9e79abf74c7675",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/6e0315ded3ad60e52edec36564c12329f589d827",
+ "width" : 64
+ } ],
+ "name" : "2011 (Continous DJ-Mix)",
+ "type" : "album",
+ "uri" : "spotify:album:4FoJzaRTuSq4HWYQVUHkY5"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6yTYR09WCvsgdnurDW4WQo"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6yTYR09WCvsgdnurDW4WQo",
+ "id" : "6yTYR09WCvsgdnurDW4WQo",
+ "name" : "DJ Antoine",
+ "type" : "artist",
+ "uri" : "spotify:artist:6yTYR09WCvsgdnurDW4WQo"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3yBEHAINorE3uSvsCmyCwQ"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3yBEHAINorE3uSvsCmyCwQ",
+ "id" : "3yBEHAINorE3uSvsCmyCwQ",
+ "name" : "Mad Mark",
+ "type" : "artist",
+ "uri" : "spotify:artist:3yBEHAINorE3uSvsCmyCwQ"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3vyUTiW9vClzOUXCHVNWsy"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3vyUTiW9vClzOUXCHVNWsy",
+ "id" : "3vyUTiW9vClzOUXCHVNWsy",
+ "name" : "James Gruntz",
+ "type" : "artist",
+ "uri" : "spotify:artist:3vyUTiW9vClzOUXCHVNWsy"
+ } ],
+ "available_markets" : [ "AD", "AU", "BE", "BG", "CH", "CY", "CZ", "DK", "DO", "EE", "ES", "FI", "GR", "HK", "HU", "IS", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NO", "NZ", "PH", "PL", "PT", "RO", "SE", "SG", "SI", "SK", "TR", "TW" ],
+ "disc_number" : 1,
+ "duration_ms" : 267656,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "CH4881100504"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/5cLJsdgvsndmtsWie12xFE"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/5cLJsdgvsndmtsWie12xFE",
+ "id" : "5cLJsdgvsndmtsWie12xFE",
+ "name" : "Song To The Sea - DJ Antoine vs Mad Mark Re-Construction",
+ "popularity" : 48,
+ "preview_url" : "https://p.scdn.co/mp3-preview/aa6e966d1dad90f2b36bb6f109d1ef4f59018612",
+ "track_number" : 4,
+ "type" : "track",
+ "uri" : "spotify:track:5cLJsdgvsndmtsWie12xFE"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/2d3wa6DNw6HEdrKf6VmW4O"
+ },
+ "href" : "https://api.spotify.com/v1/albums/2d3wa6DNw6HEdrKf6VmW4O",
+ "id" : "2d3wa6DNw6HEdrKf6VmW4O",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/0fef47f22b90c4ff9263660e109d2dd20e5fe3eb",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/f33aa61e1f7b9e87cfc16e1d77378ef854015f51",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/9687d92df8f7e056104de07f2b61c9e183efc9c3",
+ "width" : 64
+ } ],
+ "name" : "The Christmas Song",
+ "type" : "album",
+ "uri" : "spotify:album:2d3wa6DNw6HEdrKf6VmW4O"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/7v4imS0moSyGdXyLgVTIV7"
+ },
+ "href" : "https://api.spotify.com/v1/artists/7v4imS0moSyGdXyLgVTIV7",
+ "id" : "7v4imS0moSyGdXyLgVTIV7",
+ "name" : "Nat King Cole",
+ "type" : "artist",
+ "uri" : "spotify:artist:7v4imS0moSyGdXyLgVTIV7"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 191640,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USCA29900551"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/4cqLCCMzG6GQ9Bch2PBzFp"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/4cqLCCMzG6GQ9Bch2PBzFp",
+ "id" : "4cqLCCMzG6GQ9Bch2PBzFp",
+ "name" : "The Christmas Song (Merry Christmas To You)",
+ "popularity" : 43,
+ "preview_url" : "https://p.scdn.co/mp3-preview/df19489b1d92b6bd8495fce1b4b35cd937b04880",
+ "track_number" : 2,
+ "type" : "track",
+ "uri" : "spotify:track:4cqLCCMzG6GQ9Bch2PBzFp"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AU", "BE", "BG", "BR", "CH", "CY", "CZ", "DE", "DK", "EE", "ES", "FI", "FR", "GB", "GR", "HK", "HU", "IE", "IS", "LT", "LU", "LV", "MT", "MY", "NL", "NO", "NZ", "PH", "PT", "SE", "SG", "SK", "TR", "TW" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/5SwpV7g0iey70Ux6xeHKw0"
+ },
+ "href" : "https://api.spotify.com/v1/albums/5SwpV7g0iey70Ux6xeHKw0",
+ "id" : "5SwpV7g0iey70Ux6xeHKw0",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/4ae9930edae15390fb6ee5b67d4d095a5fcae945",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/32222229de2db05bc1ede324f914728650c13bd1",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/4423395ffb7215f34c9ab9414a6bebc28ec7836e",
+ "width" : 64
+ } ],
+ "name" : "Hits For Børn 2",
+ "type" : "album",
+ "uri" : "spotify:album:5SwpV7g0iey70Ux6xeHKw0"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2UOx6w3eHpPKc3RBnNV3Rl"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2UOx6w3eHpPKc3RBnNV3Rl",
+ "id" : "2UOx6w3eHpPKc3RBnNV3Rl",
+ "name" : "Safri Duo",
+ "type" : "artist",
+ "uri" : "spotify:artist:2UOx6w3eHpPKc3RBnNV3Rl"
+ } ],
+ "available_markets" : [ "AU", "BE", "BG", "BR", "CH", "CY", "CZ", "DE", "DK", "EE", "ES", "FI", "FR", "GB", "GR", "HK", "HU", "IE", "IS", "LT", "LU", "LV", "MT", "MY", "NL", "NO", "NZ", "PH", "PT", "SE", "SG", "SK", "TR", "TW" ],
+ "disc_number" : 1,
+ "duration_ms" : 196560,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "DKBKA0001601"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/2MDdh4rbNNBiy8l6XgI6E9"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/2MDdh4rbNNBiy8l6XgI6E9",
+ "id" : "2MDdh4rbNNBiy8l6XgI6E9",
+ "name" : "Played-A-Live (The Bongo Song) - Radio Cut",
+ "popularity" : 49,
+ "preview_url" : "https://p.scdn.co/mp3-preview/077d052e72dba1184d03a75a723a99df5dc811ad",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:2MDdh4rbNNBiy8l6XgI6E9"
+ }, {
+ "album" : {
+ "album_type" : "single",
+ "available_markets" : [ "SE" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/1lyU2F80dCrewThtCuHhnm"
+ },
+ "href" : "https://api.spotify.com/v1/albums/1lyU2F80dCrewThtCuHhnm",
+ "id" : "1lyU2F80dCrewThtCuHhnm",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/d0bc11c250e63fd2771a3f1aa4d4dfb8f8428a4a",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/f7057bc72a17434884396c5dfc2b68d3db3ef1d3",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/d239f9c7e3227a396af3d878ebe0048f4339b102",
+ "width" : 64
+ } ],
+ "name" : "It's Time to Make a Wish (Christmas Song)",
+ "type" : "album",
+ "uri" : "spotify:album:1lyU2F80dCrewThtCuHhnm"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/5PldDs8KtXMy0KZ6due44x"
+ },
+ "href" : "https://api.spotify.com/v1/artists/5PldDs8KtXMy0KZ6due44x",
+ "id" : "5PldDs8KtXMy0KZ6due44x",
+ "name" : "The Fooo Conspiracy",
+ "type" : "artist",
+ "uri" : "spotify:artist:5PldDs8KtXMy0KZ6due44x"
+ } ],
+ "available_markets" : [ "SE" ],
+ "disc_number" : 1,
+ "duration_ms" : 196733,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "SEBGA1300910"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/7N2tW22daw8VBWuxuO6u6m"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/7N2tW22daw8VBWuxuO6u6m",
+ "id" : "7N2tW22daw8VBWuxuO6u6m",
+ "name" : "It's Time to Make a Wish (Christmas Song)",
+ "popularity" : 46,
+ "preview_url" : "https://p.scdn.co/mp3-preview/9fbadb13dfd1c997dd3ceb5ec917f3644e0db2e4",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:7N2tW22daw8VBWuxuO6u6m"
+ } ],
+ "limit" : 20,
+ "next" : "https://api.spotify.com/v1/search?query=song+2&offset=20&limit=20&type=track",
+ "offset" : 0,
+ "previous" : null,
+ "total" : 43246
+ }
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/track.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/track.json
new file mode 100644
index 0000000..a7ab4ab
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/track.json
@@ -0,0 +1,55 @@
+{
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/3tpJtzZm4Urb0n2ITN5mwF"
+ },
+ "href" : "https://api.spotify.com/v1/albums/3tpJtzZm4Urb0n2ITN5mwF",
+ "id" : "3tpJtzZm4Urb0n2ITN5mwF",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/42f1407919f09c53af5cac7290f5224cc098b6cc",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/1844e9ff8ea90e78e62ca892900c1c36e98a58ee",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/7c5288b11adf33302a5eef5a722372494335114a",
+ "width" : 64
+ } ],
+ "name" : "Original Motion Picture Soundtrack - Full Metal Jacket",
+ "type" : "album",
+ "uri" : "spotify:album:3tpJtzZm4Urb0n2ITN5mwF"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/5QEA3sofVt5QckQA6QX2nN"
+ },
+ "href" : "https://api.spotify.com/v1/artists/5QEA3sofVt5QckQA6QX2nN",
+ "id" : "5QEA3sofVt5QckQA6QX2nN",
+ "name" : "The Trashmen",
+ "type" : "artist",
+ "uri" : "spotify:artist:5QEA3sofVt5QckQA6QX2nN"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 137133,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USWB10102873"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/7EjyzZcbLxW7PaaLua9Ksb"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/7EjyzZcbLxW7PaaLua9Ksb",
+ "id" : "7EjyzZcbLxW7PaaLua9Ksb",
+ "name" : "Surfin' Bird",
+ "popularity" : 53,
+ "preview_url" : "https://p.scdn.co/mp3-preview/c1a3f50a46ad126ec97442119bf912fc4017c2a5",
+ "track_number" : 7,
+ "type" : "track",
+ "uri" : "spotify:track:7EjyzZcbLxW7PaaLua9Ksb"
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/tracks.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/tracks.json
new file mode 100644
index 0000000..4330cad
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/tracks.json
@@ -0,0 +1,111 @@
+{
+ "tracks" : [ {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/6TJmQnO44YE5BtTxH8pop1"
+ },
+ "href" : "https://api.spotify.com/v1/albums/6TJmQnO44YE5BtTxH8pop1",
+ "id" : "6TJmQnO44YE5BtTxH8pop1",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/8e13218039f81b000553e25522a7f0d7a0600f2e",
+ "width" : 629
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/8c1e066b5d1045038437d92815d49987f519e44f",
+ "width" : 295
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/d49268a8fc0768084f4750cf1647709e89a27172",
+ "width" : 63
+ } ],
+ "name" : "Hot Fuss",
+ "type" : "album",
+ "uri" : "spotify:album:6TJmQnO44YE5BtTxH8pop1"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/0C0XlULifJtAgn6ZNCW2eu"
+ },
+ "href" : "https://api.spotify.com/v1/artists/0C0XlULifJtAgn6ZNCW2eu",
+ "id" : "0C0XlULifJtAgn6ZNCW2eu",
+ "name" : "The Killers",
+ "type" : "artist",
+ "uri" : "spotify:artist:0C0XlULifJtAgn6ZNCW2eu"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 222075,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USIR20400274"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0eGsygTp906u18L0Oimnem"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0eGsygTp906u18L0Oimnem",
+ "id" : "0eGsygTp906u18L0Oimnem",
+ "name" : "Mr. Brightside",
+ "popularity" : 75,
+ "preview_url" : "https://p.scdn.co/mp3-preview/f454c8224828e21fa146af84916fd22cb89cedc6",
+ "track_number" : 2,
+ "type" : "track",
+ "uri" : "spotify:track:0eGsygTp906u18L0Oimnem"
+ }, {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/6TJmQnO44YE5BtTxH8pop1"
+ },
+ "href" : "https://api.spotify.com/v1/albums/6TJmQnO44YE5BtTxH8pop1",
+ "id" : "6TJmQnO44YE5BtTxH8pop1",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/8e13218039f81b000553e25522a7f0d7a0600f2e",
+ "width" : 629
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/8c1e066b5d1045038437d92815d49987f519e44f",
+ "width" : 295
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/d49268a8fc0768084f4750cf1647709e89a27172",
+ "width" : 63
+ } ],
+ "name" : "Hot Fuss",
+ "type" : "album",
+ "uri" : "spotify:album:6TJmQnO44YE5BtTxH8pop1"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/0C0XlULifJtAgn6ZNCW2eu"
+ },
+ "href" : "https://api.spotify.com/v1/artists/0C0XlULifJtAgn6ZNCW2eu",
+ "id" : "0C0XlULifJtAgn6ZNCW2eu",
+ "name" : "The Killers",
+ "type" : "artist",
+ "uri" : "spotify:artist:0C0XlULifJtAgn6ZNCW2eu"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 197160,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USIR20400195"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/1lDWb6b6ieDQ2xT7ewTC3G"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/1lDWb6b6ieDQ2xT7ewTC3G",
+ "id" : "1lDWb6b6ieDQ2xT7ewTC3G",
+ "name" : "Somebody Told Me",
+ "popularity" : 71,
+ "preview_url" : "https://p.scdn.co/mp3-preview/4c63a3d4eaf7f8f86cfdb8bf46ef3974f4092357",
+ "track_number" : 4,
+ "type" : "track",
+ "uri" : "spotify:track:1lDWb6b6ieDQ2xT7ewTC3G"
+ } ]
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-playlist-public.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-playlist-public.json
new file mode 100644
index 0000000..098d35d
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-playlist-public.json
@@ -0,0 +1,1075 @@
+{
+ "collaborative" : false,
+ "description" : null,
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/mcgurk/playlist/0UZ0Ll4HJHR7yvURYbHJe9"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 0
+ },
+ "href" : "https://api.spotify.com/v1/users/mcgurk/playlists/0UZ0Ll4HJHR7yvURYbHJe9",
+ "id" : "0UZ0Ll4HJHR7yvURYbHJe9",
+ "images" : [ ],
+ "name" : "PARTY",
+ "owner" : {
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/mcgurk"
+ },
+ "href" : "https://api.spotify.com/v1/users/mcgurk",
+ "id" : "mcgurk",
+ "type" : "user",
+ "uri" : "spotify:user:mcgurk"
+ },
+ "public" : true,
+ "snapshot_id" : "bKMQr5cpdBKJCat1G4h4C2VinMLjIX7C1b1FEs1OWp2+e0cSd9ilKN5G1K0R+fpr",
+ "tracks" : {
+ "href" : "https://api.spotify.com/v1/users/mcgurk/playlists/0UZ0Ll4HJHR7yvURYbHJe9/tracks",
+ "items" : [ {
+ "added_at" : "2010-05-03T10:49:43Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/1qwlxZTNLe1jq3b0iidlue"
+ },
+ "href" : "https://api.spotify.com/v1/albums/1qwlxZTNLe1jq3b0iidlue",
+ "id" : "1qwlxZTNLe1jq3b0iidlue",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/9643ed59c59a044b817482a51e67377971ad7469",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/a51c3a507f52a0cc798d29e7a2d8d6e1adace445",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/a06ede8283b1ce28b70aaf7e500edf4e409b50e0",
+ "width" : 64
+ } ],
+ "name" : "The Fame",
+ "type" : "album",
+ "uri" : "spotify:album:1qwlxZTNLe1jq3b0iidlue"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/7fObcBw9VM3x7ntWKCYl0z"
+ },
+ "href" : "https://api.spotify.com/v1/artists/7fObcBw9VM3x7ntWKCYl0z",
+ "id" : "7fObcBw9VM3x7ntWKCYl0z",
+ "name" : "Colby O'Donis",
+ "type" : "artist",
+ "uri" : "spotify:artist:7fObcBw9VM3x7ntWKCYl0z"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 241933,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM70807646"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/1dzQoRqT5ucxXVaAhTcT0J"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/1dzQoRqT5ucxXVaAhTcT0J",
+ "id" : "1dzQoRqT5ucxXVaAhTcT0J",
+ "name" : "Just Dance",
+ "popularity" : 66,
+ "preview_url" : "https://p.scdn.co/mp3-preview/3dbcc47a8bcbeefeb4a0e68db1d6937b7dee4980",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:1dzQoRqT5ucxXVaAhTcT0J"
+ }
+ }, {
+ "added_at" : "2010-05-03T10:49:46Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/1qwlxZTNLe1jq3b0iidlue"
+ },
+ "href" : "https://api.spotify.com/v1/albums/1qwlxZTNLe1jq3b0iidlue",
+ "id" : "1qwlxZTNLe1jq3b0iidlue",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/9643ed59c59a044b817482a51e67377971ad7469",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/a51c3a507f52a0cc798d29e7a2d8d6e1adace445",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/a06ede8283b1ce28b70aaf7e500edf4e409b50e0",
+ "width" : 64
+ } ],
+ "name" : "The Fame",
+ "type" : "album",
+ "uri" : "spotify:album:1qwlxZTNLe1jq3b0iidlue"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 208306,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM70824408"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/02XnQdf7sipaKBBHixz3Zp"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/02XnQdf7sipaKBBHixz3Zp",
+ "id" : "02XnQdf7sipaKBBHixz3Zp",
+ "name" : "Paparazzi",
+ "popularity" : 58,
+ "preview_url" : "https://p.scdn.co/mp3-preview/ac27854ae09b2d4bce83c712af1eacb3071a96dc",
+ "track_number" : 3,
+ "type" : "track",
+ "uri" : "spotify:track:02XnQdf7sipaKBBHixz3Zp"
+ }
+ }, {
+ "added_at" : "2010-05-03T10:49:47Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "single",
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/482HqzMMfrkFXAGujtwFrm"
+ },
+ "href" : "https://api.spotify.com/v1/albums/482HqzMMfrkFXAGujtwFrm",
+ "id" : "482HqzMMfrkFXAGujtwFrm",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/bb8d1b26591b8187455990b6c37efee9e325b6cd",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/e8e0c44240138a62ea6d89f814774ce5ef62fe79",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/03b69cdc8ed6725e199571bce6aa583daf0ec4cd",
+ "width" : 64
+ } ],
+ "name" : "Poker Face",
+ "type" : "album",
+ "uri" : "spotify:album:482HqzMMfrkFXAGujtwFrm"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ } ],
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "disc_number" : 1,
+ "duration_ms" : 237400,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM70824409"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/6w1hZMlo2SVuq29liebhb8"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/6w1hZMlo2SVuq29liebhb8",
+ "id" : "6w1hZMlo2SVuq29liebhb8",
+ "name" : "Poker Face",
+ "popularity" : 64,
+ "preview_url" : "https://p.scdn.co/mp3-preview/ae1b1b93c2288d3363b9a46c51bcca39abd99779",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:6w1hZMlo2SVuq29liebhb8"
+ }
+ }, {
+ "added_at" : "2010-05-03T10:49:49Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "single",
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/1Ot9FUXNmehWsLMmrYUt3F"
+ },
+ "href" : "https://api.spotify.com/v1/albums/1Ot9FUXNmehWsLMmrYUt3F",
+ "id" : "1Ot9FUXNmehWsLMmrYUt3F",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/0401ab7daff118586b6ca67eea6fa92af97aa36d",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/6c21051a71d8ac9fe061a4b0063537da0893f55c",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/48d4ebd64a44f4c256f27fa6042fe015f4d0740b",
+ "width" : 64
+ } ],
+ "name" : "Bad Romance",
+ "type" : "album",
+ "uri" : "spotify:album:1Ot9FUXNmehWsLMmrYUt3F"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ } ],
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "disc_number" : 1,
+ "duration_ms" : 294640,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM70903859"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/6MjiVEJy1YVuJNFu72OH61"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/6MjiVEJy1YVuJNFu72OH61",
+ "id" : "6MjiVEJy1YVuJNFu72OH61",
+ "name" : "Bad Romance",
+ "popularity" : 67,
+ "preview_url" : "https://p.scdn.co/mp3-preview/4ddf5c8885830a3e1e7d05ebeb9170b850d27e9e",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:6MjiVEJy1YVuJNFu72OH61"
+ }
+ }, {
+ "added_at" : "2010-05-03T10:51:44Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/67j3NJodNRI8USUwKwTZA6"
+ },
+ "href" : "https://api.spotify.com/v1/albums/67j3NJodNRI8USUwKwTZA6",
+ "id" : "67j3NJodNRI8USUwKwTZA6",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/88300dc6d25e9c6d110db6cd7a206bf590412f9d",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/5850cd38f30cf5c6bc2846fc7bbba1d72313324f",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/15e1da0a85e6d1fad488172e3be7d9fd1b97fa73",
+ "width" : 64
+ } ],
+ "name" : "The Fame Monster (International Deluxe)",
+ "type" : "album",
+ "uri" : "spotify:album:67j3NJodNRI8USUwKwTZA6"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 2,
+ "duration_ms" : 175346,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM70824406"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/6z7HmyQFiVBJm1OzBknw38"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/6z7HmyQFiVBJm1OzBknw38",
+ "id" : "6z7HmyQFiVBJm1OzBknw38",
+ "name" : "Eh, Eh (Nothing Else I Can Say)",
+ "popularity" : 48,
+ "preview_url" : "https://p.scdn.co/mp3-preview/a2ee2124a43f27cdf71bfee176013d67451c7942",
+ "track_number" : 6,
+ "type" : "track",
+ "uri" : "spotify:track:6z7HmyQFiVBJm1OzBknw38"
+ }
+ }, {
+ "added_at" : "2010-06-02T13:33:34Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/67j3NJodNRI8USUwKwTZA6"
+ },
+ "href" : "https://api.spotify.com/v1/albums/67j3NJodNRI8USUwKwTZA6",
+ "id" : "67j3NJodNRI8USUwKwTZA6",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/88300dc6d25e9c6d110db6cd7a206bf590412f9d",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/5850cd38f30cf5c6bc2846fc7bbba1d72313324f",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/15e1da0a85e6d1fad488172e3be7d9fd1b97fa73",
+ "width" : 64
+ } ],
+ "name" : "The Fame Monster (International Deluxe)",
+ "type" : "album",
+ "uri" : "spotify:album:67j3NJodNRI8USUwKwTZA6"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6vWDO969PvNqNYHIOW5v0m"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6vWDO969PvNqNYHIOW5v0m",
+ "id" : "6vWDO969PvNqNYHIOW5v0m",
+ "name" : "Beyoncé",
+ "type" : "artist",
+ "uri" : "spotify:artist:6vWDO969PvNqNYHIOW5v0m"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 220626,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM70905541"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/00BuKLSAFkaEkaVAgIMbeA"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/00BuKLSAFkaEkaVAgIMbeA",
+ "id" : "00BuKLSAFkaEkaVAgIMbeA",
+ "name" : "Telephone",
+ "popularity" : 67,
+ "preview_url" : "https://p.scdn.co/mp3-preview/20a9177d56bb05bbccf7c5fe82058e74edd328a2",
+ "track_number" : 6,
+ "type" : "track",
+ "uri" : "spotify:track:00BuKLSAFkaEkaVAgIMbeA"
+ }
+ }, {
+ "added_at" : "2011-09-09T19:52:27Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "single",
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/6brEmLzLxjAOB0KcXdT7ye"
+ },
+ "href" : "https://api.spotify.com/v1/albums/6brEmLzLxjAOB0KcXdT7ye",
+ "id" : "6brEmLzLxjAOB0KcXdT7ye",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/fce70d4c29071b363425bd2fa8072ee54e6eb16b",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/b59f854ec0e0c317cb0d367ea91a0e64d4a0c009",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/e5a400bd412f77c2c6870903eee86083851aa842",
+ "width" : 64
+ } ],
+ "name" : "Born This Way",
+ "type" : "album",
+ "uri" : "spotify:album:6brEmLzLxjAOB0KcXdT7ye"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ } ],
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "disc_number" : 1,
+ "duration_ms" : 260466,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM71100638"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/6wAdqKcL7uESrsekjLTKod"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/6wAdqKcL7uESrsekjLTKod",
+ "id" : "6wAdqKcL7uESrsekjLTKod",
+ "name" : "Born This Way",
+ "popularity" : 55,
+ "preview_url" : "https://p.scdn.co/mp3-preview/c4b51e0193335f61306f0bd6f5868c7e801df525",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:6wAdqKcL7uESrsekjLTKod"
+ }
+ }, {
+ "added_at" : "2011-09-09T19:52:25Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "single",
+ "available_markets" : [ "AR", "AU", "BE", "BR", "CH", "CL", "CO", "CY", "DK", "EE", "ES", "FI", "FR", "GB", "GR", "HK", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NL", "NO", "NZ", "PH", "PT", "PY", "RO", "SI", "TW" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/48JuX7nVVKCBIZbHJG6azi"
+ },
+ "href" : "https://api.spotify.com/v1/albums/48JuX7nVVKCBIZbHJG6azi",
+ "id" : "48JuX7nVVKCBIZbHJG6azi",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/7d5c94043c997d08123cdedc5f3e7729641ce84a",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/c5082b33a66bcd4a83537e07ece345a373751ab7",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/4eaa61afcc38dd30272f82f14b7f05473436b785",
+ "width" : 64
+ } ],
+ "name" : "The Edge Of Glory",
+ "type" : "album",
+ "uri" : "spotify:album:48JuX7nVVKCBIZbHJG6azi"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ } ],
+ "available_markets" : [ "AR", "AU", "BE", "BR", "CH", "CL", "CO", "CY", "DK", "EE", "ES", "FI", "FR", "GB", "GR", "HK", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NL", "NO", "NZ", "PH", "PT", "PY", "RO", "SI", "TW" ],
+ "disc_number" : 1,
+ "duration_ms" : 320626,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM71106458"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/1VpoMzYjmoQMOflZMGTZN3"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/1VpoMzYjmoQMOflZMGTZN3",
+ "id" : "1VpoMzYjmoQMOflZMGTZN3",
+ "name" : "The Edge Of Glory",
+ "popularity" : 57,
+ "preview_url" : "https://p.scdn.co/mp3-preview/b8fa0035a66a73b3fd934c65073eaca1576ba3c0",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:1VpoMzYjmoQMOflZMGTZN3"
+ }
+ }, {
+ "added_at" : "2011-12-02T09:24:16Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "single",
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/49ZMLWbQzziuxH2vHUjOX9"
+ },
+ "href" : "https://api.spotify.com/v1/albums/49ZMLWbQzziuxH2vHUjOX9",
+ "id" : "49ZMLWbQzziuxH2vHUjOX9",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/33e47286f2b359aee82fdb3b1cf8a509812b8432",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/8efa8470652e6b2f5adf2575d447b5809be3148a",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/a1547b43572ab7e05b9a5929ae826045b473bf38",
+ "width" : 64
+ } ],
+ "name" : "Judas",
+ "type" : "album",
+ "uri" : "spotify:album:49ZMLWbQzziuxH2vHUjOX9"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ } ],
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "disc_number" : 1,
+ "duration_ms" : 250053,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM71104998"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/1BrydEwIuNpfeCXBjKWpAu"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/1BrydEwIuNpfeCXBjKWpAu",
+ "id" : "1BrydEwIuNpfeCXBjKWpAu",
+ "name" : "Judas",
+ "popularity" : 50,
+ "preview_url" : "https://p.scdn.co/mp3-preview/7bf43c58ccd93e9fcd28ab4849c13ba6529d1fe2",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:1BrydEwIuNpfeCXBjKWpAu"
+ }
+ }, {
+ "added_at" : "2010-05-06T09:16:55Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "single",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/1yKCNIVac6PKISJ5u6IO1T"
+ },
+ "href" : "https://api.spotify.com/v1/albums/1yKCNIVac6PKISJ5u6IO1T",
+ "id" : "1yKCNIVac6PKISJ5u6IO1T",
+ "images" : [ {
+ "height" : 600,
+ "url" : "https://i.scdn.co/image/bae487ab75f6a199e6663a38b10cb662c95e0a7a",
+ "width" : 600
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/1f55ace17bf6d814b89a9638fb05dbf03bd072bf",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/774cf32f107964a86177d8504a863a7bbac676fe",
+ "width" : 64
+ } ],
+ "name" : "Hot N Cold",
+ "type" : "album",
+ "uri" : "spotify:album:1yKCNIVac6PKISJ5u6IO1T"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6jJ0s89eD6GaHleKKya26X"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6jJ0s89eD6GaHleKKya26X",
+ "id" : "6jJ0s89eD6GaHleKKya26X",
+ "name" : "Katy Perry",
+ "type" : "artist",
+ "uri" : "spotify:artist:6jJ0s89eD6GaHleKKya26X"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 223226,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USCA20802544"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0IZM2onaTBMRTEIcc5oIi9"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0IZM2onaTBMRTEIcc5oIi9",
+ "id" : "0IZM2onaTBMRTEIcc5oIi9",
+ "name" : "Hot N Cold",
+ "popularity" : 61,
+ "preview_url" : "https://p.scdn.co/mp3-preview/5de67261e77d6807a541d369451cbd5e028072b4",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:0IZM2onaTBMRTEIcc5oIi9"
+ }
+ }, {
+ "added_at" : "2010-05-08T06:23:31Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/7MsL9vKLZM44fxTHlosW9b"
+ },
+ "href" : "https://api.spotify.com/v1/albums/7MsL9vKLZM44fxTHlosW9b",
+ "id" : "7MsL9vKLZM44fxTHlosW9b",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/8a95bb3db01f311de33568ac076adca94c12f287",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/71c12c4519ece2c7cccd33f04436cceac5a45852",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/d263e6d6e4a5e95bb6f48c7c9cc3211d6df833e5",
+ "width" : 64
+ } ],
+ "name" : "Latino Disco",
+ "type" : "album",
+ "uri" : "spotify:album:7MsL9vKLZM44fxTHlosW9b"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2HcpPno2Aejd2XpN0nDxV9"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2HcpPno2Aejd2XpN0nDxV9",
+ "id" : "2HcpPno2Aejd2XpN0nDxV9",
+ "name" : "Studio 99",
+ "type" : "artist",
+ "uri" : "spotify:artist:2HcpPno2Aejd2XpN0nDxV9"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 278058,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USA370550563"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/6HM9UgDB38hLDFm7e1RF6W"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/6HM9UgDB38hLDFm7e1RF6W",
+ "id" : "6HM9UgDB38hLDFm7e1RF6W",
+ "name" : "Bailando",
+ "popularity" : 37,
+ "preview_url" : "https://p.scdn.co/mp3-preview/6a1791d436ed587afb091d9efb05f4589b25b08b",
+ "track_number" : 7,
+ "type" : "track",
+ "uri" : "spotify:track:6HM9UgDB38hLDFm7e1RF6W"
+ }
+ }, {
+ "added_at" : "2010-05-08T06:24:31Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "NI", "NL", "NO", "PA", "PE", "PL", "PT", "PY", "RO", "SE", "SI", "SK", "SV", "TR", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/08gFKsqvthQiLDTilR43SI"
+ },
+ "href" : "https://api.spotify.com/v1/albums/08gFKsqvthQiLDTilR43SI",
+ "id" : "08gFKsqvthQiLDTilR43SI",
+ "images" : [ {
+ "height" : 558,
+ "url" : "https://i.scdn.co/image/593292023494ae286bc3d48b3e64b3a520bb6dd1",
+ "width" : 640
+ }, {
+ "height" : 262,
+ "url" : "https://i.scdn.co/image/b6983937b248111714ce55073c9e3da2e16862ef",
+ "width" : 300
+ }, {
+ "height" : 56,
+ "url" : "https://i.scdn.co/image/f38a2b8359591634647863f944d58ed68311d26c",
+ "width" : 64
+ } ],
+ "name" : "Come Get It: The Very Best Of Aaron Carter",
+ "type" : "album",
+ "uri" : "spotify:album:08gFKsqvthQiLDTilR43SI"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/5338fdSzGNOFD4cxAxDTeq"
+ },
+ "href" : "https://api.spotify.com/v1/artists/5338fdSzGNOFD4cxAxDTeq",
+ "id" : "5338fdSzGNOFD4cxAxDTeq",
+ "name" : "Aaron Carter",
+ "type" : "artist",
+ "uri" : "spotify:artist:5338fdSzGNOFD4cxAxDTeq"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "NI", "NL", "NO", "PA", "PE", "PL", "PT", "PY", "RO", "SE", "SI", "SK", "SV", "TR", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 194253,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USJI10000281"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/2cnZuQpDprgZB7jzdmBBCK"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/2cnZuQpDprgZB7jzdmBBCK",
+ "id" : "2cnZuQpDprgZB7jzdmBBCK",
+ "name" : "I Want Candy",
+ "popularity" : 12,
+ "preview_url" : "https://p.scdn.co/mp3-preview/beb1759bd33c368b3d9a321086a16a999f095a97",
+ "track_number" : 5,
+ "type" : "track",
+ "uri" : "spotify:track:2cnZuQpDprgZB7jzdmBBCK"
+ }
+ }, {
+ "added_at" : "2010-05-14T12:51:26Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BR", "CH", "CL", "CO", "CR", "CZ", "DE", "DK", "EE", "ES", "FI", "FR", "GB", "GR", "HK", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NL", "NZ", "PH", "PL", "PT", "RO", "SE", "SG", "SI", "SK", "TR", "TW" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/3vkxgQhR4QsgozSDmGoAvY"
+ },
+ "href" : "https://api.spotify.com/v1/albums/3vkxgQhR4QsgozSDmGoAvY",
+ "id" : "3vkxgQhR4QsgozSDmGoAvY",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/566ee4034e25c779bb522a2297112e68bfc23b06",
+ "width" : 638
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/015d40395c05b2e88a65c6e96e9415327e163dea",
+ "width" : 299
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/a28506fbf3b80f1a94c514f20005832bbb78bf96",
+ "width" : 64
+ } ],
+ "name" : "Pop Party",
+ "type" : "album",
+ "uri" : "spotify:album:3vkxgQhR4QsgozSDmGoAvY"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6kBjAFKyd0he7LiA5GQ3Gz"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6kBjAFKyd0he7LiA5GQ3Gz",
+ "id" : "6kBjAFKyd0he7LiA5GQ3Gz",
+ "name" : "Aqua",
+ "type" : "artist",
+ "uri" : "spotify:artist:6kBjAFKyd0he7LiA5GQ3Gz"
+ } ],
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BR", "CH", "CL", "CO", "CR", "CZ", "DE", "DK", "EE", "ES", "FI", "FR", "GB", "GR", "HK", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NL", "NZ", "PH", "PL", "PT", "RO", "SE", "SG", "SI", "SK", "TR", "TW" ],
+ "disc_number" : 1,
+ "duration_ms" : 194040,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "DKBKA9700403"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/7kz6GbFr2MCI7PgXJOdq8c"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/7kz6GbFr2MCI7PgXJOdq8c",
+ "id" : "7kz6GbFr2MCI7PgXJOdq8c",
+ "name" : "Barbie Girl",
+ "popularity" : 64,
+ "preview_url" : "https://p.scdn.co/mp3-preview/31c02df23f26b7ece015b96b1b6baaf8f97f0273",
+ "track_number" : 3,
+ "type" : "track",
+ "uri" : "spotify:track:7kz6GbFr2MCI7PgXJOdq8c"
+ }
+ }, {
+ "added_at" : "2011-12-15T15:02:58Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/06SY6Ke6mXzZHhURLVU57R"
+ },
+ "href" : "https://api.spotify.com/v1/albums/06SY6Ke6mXzZHhURLVU57R",
+ "id" : "06SY6Ke6mXzZHhURLVU57R",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/ce8f207440681b989f02c20129b0b627036fd71c",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/409c641ca368b7b9c589103bb9ca8a5914c640dc",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/28bab516d29947e363b6c169100f2efbad6b84e2",
+ "width" : 64
+ } ],
+ "name" : "Teenage Dream",
+ "type" : "album",
+ "uri" : "spotify:album:06SY6Ke6mXzZHhURLVU57R"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6jJ0s89eD6GaHleKKya26X"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6jJ0s89eD6GaHleKKya26X",
+ "id" : "6jJ0s89eD6GaHleKKya26X",
+ "name" : "Katy Perry",
+ "type" : "artist",
+ "uri" : "spotify:artist:6jJ0s89eD6GaHleKKya26X"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 230733,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USCA21001264"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/3oHNJECGN3bBoGXejlw2b1"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/3oHNJECGN3bBoGXejlw2b1",
+ "id" : "3oHNJECGN3bBoGXejlw2b1",
+ "name" : "Last Friday Night (T.G.I.F.)",
+ "popularity" : 62,
+ "preview_url" : "https://p.scdn.co/mp3-preview/6b419ceb20e3ca3ea800832b1ab3010d744b2c26",
+ "track_number" : 2,
+ "type" : "track",
+ "uri" : "spotify:track:3oHNJECGN3bBoGXejlw2b1"
+ }
+ }, {
+ "added_at" : "2012-06-26T18:53:34Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "single",
+ "available_markets" : [ ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/2zjaqU3EvxkxbYObOJOWPc"
+ },
+ "href" : "https://api.spotify.com/v1/albums/2zjaqU3EvxkxbYObOJOWPc",
+ "id" : "2zjaqU3EvxkxbYObOJOWPc",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/7a5ea8d84dfd79d66ed3b771f0fa27d95e77f8c6",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/f1c2fdb993cfeafe149ad1d8c81290c85b175076",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/b9867d389ff8158f3b6d4963064e84738ec3db04",
+ "width" : 64
+ } ],
+ "name" : "Get Free",
+ "type" : "album",
+ "uri" : "spotify:album:2zjaqU3EvxkxbYObOJOWPc"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/738wLrAtLtCtFOLvQBXOXp"
+ },
+ "href" : "https://api.spotify.com/v1/artists/738wLrAtLtCtFOLvQBXOXp",
+ "id" : "738wLrAtLtCtFOLvQBXOXp",
+ "name" : "Major Lazer",
+ "type" : "artist",
+ "uri" : "spotify:artist:738wLrAtLtCtFOLvQBXOXp"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/50n0lOYeD5omHicMWhTJ4W"
+ },
+ "href" : "https://api.spotify.com/v1/artists/50n0lOYeD5omHicMWhTJ4W",
+ "id" : "50n0lOYeD5omHicMWhTJ4W",
+ "name" : "Amber of the Dirty Projectors",
+ "type" : "artist",
+ "uri" : "spotify:artist:50n0lOYeD5omHicMWhTJ4W"
+ } ],
+ "available_markets" : [ ],
+ "disc_number" : 1,
+ "duration_ms" : 223299,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USCJ81200812"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/1H5vt0uSkg4Pz2aLgTFs14"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/1H5vt0uSkg4Pz2aLgTFs14",
+ "id" : "1H5vt0uSkg4Pz2aLgTFs14",
+ "name" : "Get Free - Bonde Do Role Remix",
+ "popularity" : 0,
+ "preview_url" : "https://p.scdn.co/mp3-preview/25503f61c5d0527aa6428f648906e2f8d3f72a64",
+ "track_number" : 2,
+ "type" : "track",
+ "uri" : "spotify:track:1H5vt0uSkg4Pz2aLgTFs14"
+ }
+ }, {
+ "added_at" : "2013-06-03T18:00:50Z",
+ "added_by" : {
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/mcgurk"
+ },
+ "href" : "https://api.spotify.com/v1/users/mcgurk",
+ "id" : "mcgurk",
+ "type" : "user",
+ "uri" : "spotify:user:mcgurk"
+ },
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/2Sscsd9Fo1Fa4VZC26k5jl"
+ },
+ "href" : "https://api.spotify.com/v1/albums/2Sscsd9Fo1Fa4VZC26k5jl",
+ "id" : "2Sscsd9Fo1Fa4VZC26k5jl",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/155cc4ef02624c248644651bfe3c0c67339aa35e",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/79c0b56d99777ff45adda02a492b7be1001049ee",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/08c6f092971d2e57a99b76eac230aaf95e976a62",
+ "width" : 64
+ } ],
+ "name" : "The Safety Dance – The Collection",
+ "type" : "album",
+ "uri" : "spotify:album:2Sscsd9Fo1Fa4VZC26k5jl"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/34PLzyi7CdXUekiLHYyqXq"
+ },
+ "href" : "https://api.spotify.com/v1/artists/34PLzyi7CdXUekiLHYyqXq",
+ "id" : "34PLzyi7CdXUekiLHYyqXq",
+ "name" : "Men Without Hats",
+ "type" : "artist",
+ "uri" : "spotify:artist:34PLzyi7CdXUekiLHYyqXq"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 164866,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "GBBLG0200043"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/7eEfbAG7wgV4AgkdTakVFT"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/7eEfbAG7wgV4AgkdTakVFT",
+ "id" : "7eEfbAG7wgV4AgkdTakVFT",
+ "name" : "The Safety Dance",
+ "popularity" : 42,
+ "preview_url" : "https://p.scdn.co/mp3-preview/05676ec46121522e9f0fc658c9d43ed924a6e65c",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:7eEfbAG7wgV4AgkdTakVFT"
+ }
+ }, {
+ "added_at" : "2013-12-24T23:52:57Z",
+ "added_by" : {
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/mcgurk"
+ },
+ "href" : "https://api.spotify.com/v1/users/mcgurk",
+ "id" : "mcgurk",
+ "type" : "user",
+ "uri" : "spotify:user:mcgurk"
+ },
+ "track" : {
+ "album" : {
+ "album_type" : "single",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/7nvaG92AQuoXY8uWJDMpXW"
+ },
+ "href" : "https://api.spotify.com/v1/albums/7nvaG92AQuoXY8uWJDMpXW",
+ "id" : "7nvaG92AQuoXY8uWJDMpXW",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/42826eb468e063e241212770a870d8599cc75d59",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/12f05f4aad5e40624162c5a27616709172153760",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/e5f79913e60b158757ed1a197231a41612eb32cc",
+ "width" : 64
+ } ],
+ "name" : "Perfect (Exceeder)",
+ "type" : "album",
+ "uri" : "spotify:album:7nvaG92AQuoXY8uWJDMpXW"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/307erl4VjT1dZDMYpneZqd"
+ },
+ "href" : "https://api.spotify.com/v1/artists/307erl4VjT1dZDMYpneZqd",
+ "id" : "307erl4VjT1dZDMYpneZqd",
+ "name" : "Mason",
+ "type" : "artist",
+ "uri" : "spotify:artist:307erl4VjT1dZDMYpneZqd"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/7JQn9DfFTtsFTg2dFc75jM"
+ },
+ "href" : "https://api.spotify.com/v1/artists/7JQn9DfFTtsFTg2dFc75jM",
+ "id" : "7JQn9DfFTtsFTg2dFc75jM",
+ "name" : "Princess Superstar",
+ "type" : "artist",
+ "uri" : "spotify:artist:7JQn9DfFTtsFTg2dFc75jM"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 161250,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "NLF711312388"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/2nyBqOKARcKxrJaPyXRNx3"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/2nyBqOKARcKxrJaPyXRNx3",
+ "id" : "2nyBqOKARcKxrJaPyXRNx3",
+ "name" : "Perfect (Exceeder) - Radio Edit",
+ "popularity" : 46,
+ "preview_url" : "https://p.scdn.co/mp3-preview/b7c76d0b50d90e50f3d1cdfb4f8df91ebfe55848",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:2nyBqOKARcKxrJaPyXRNx3"
+ }
+ } ],
+ "limit" : 100,
+ "next" : null,
+ "offset" : 0,
+ "previous" : null,
+ "total" : 17
+ },
+ "type" : "playlist",
+ "uri" : "spotify:user:mcgurk:playlist:0UZ0Ll4HJHR7yvURYbHJe9"
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-playlist-snapshot-id.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-playlist-snapshot-id.json
new file mode 100644
index 0000000..cb6bf72
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-playlist-snapshot-id.json
@@ -0,0 +1 @@
+{ "snapshot_id" : "JbtmHBDBAYu3/bt8BOXKjzKx3i0b6LCa/wVjyl6qQ2Yf6nFXkbmzuEa+ZI/U1yF+" }
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-playlist-tracks.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-playlist-tracks.json
new file mode 100644
index 0000000..02bbb41
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-playlist-tracks.json
@@ -0,0 +1,308 @@
+{
+ "href" : "https://api.spotify.com/v1/users/mcgurk/playlists/0UZ0Ll4HJHR7yvURYbHJe9/tracks",
+ "items" : [ {
+ "added_at" : "2010-05-03T10:49:43Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/1qwlxZTNLe1jq3b0iidlue"
+ },
+ "href" : "https://api.spotify.com/v1/albums/1qwlxZTNLe1jq3b0iidlue",
+ "id" : "1qwlxZTNLe1jq3b0iidlue",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/9643ed59c59a044b817482a51e67377971ad7469",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/a51c3a507f52a0cc798d29e7a2d8d6e1adace445",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/a06ede8283b1ce28b70aaf7e500edf4e409b50e0",
+ "width" : 64
+ } ],
+ "name" : "The Fame",
+ "type" : "album",
+ "uri" : "spotify:album:1qwlxZTNLe1jq3b0iidlue"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/7fObcBw9VM3x7ntWKCYl0z"
+ },
+ "href" : "https://api.spotify.com/v1/artists/7fObcBw9VM3x7ntWKCYl0z",
+ "id" : "7fObcBw9VM3x7ntWKCYl0z",
+ "name" : "Colby O'Donis",
+ "type" : "artist",
+ "uri" : "spotify:artist:7fObcBw9VM3x7ntWKCYl0z"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 241933,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM70807646"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/1dzQoRqT5ucxXVaAhTcT0J"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/1dzQoRqT5ucxXVaAhTcT0J",
+ "id" : "1dzQoRqT5ucxXVaAhTcT0J",
+ "name" : "Just Dance",
+ "popularity" : 66,
+ "preview_url" : "https://p.scdn.co/mp3-preview/3dbcc47a8bcbeefeb4a0e68db1d6937b7dee4980",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:1dzQoRqT5ucxXVaAhTcT0J"
+ }
+ }, {
+ "added_at" : "2010-05-03T10:49:46Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/1qwlxZTNLe1jq3b0iidlue"
+ },
+ "href" : "https://api.spotify.com/v1/albums/1qwlxZTNLe1jq3b0iidlue",
+ "id" : "1qwlxZTNLe1jq3b0iidlue",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/9643ed59c59a044b817482a51e67377971ad7469",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/a51c3a507f52a0cc798d29e7a2d8d6e1adace445",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/a06ede8283b1ce28b70aaf7e500edf4e409b50e0",
+ "width" : 64
+ } ],
+ "name" : "The Fame",
+ "type" : "album",
+ "uri" : "spotify:album:1qwlxZTNLe1jq3b0iidlue"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 208306,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM70824408"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/02XnQdf7sipaKBBHixz3Zp"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/02XnQdf7sipaKBBHixz3Zp",
+ "id" : "02XnQdf7sipaKBBHixz3Zp",
+ "name" : "Paparazzi",
+ "popularity" : 58,
+ "preview_url" : "https://p.scdn.co/mp3-preview/ac27854ae09b2d4bce83c712af1eacb3071a96dc",
+ "track_number" : 3,
+ "type" : "track",
+ "uri" : "spotify:track:02XnQdf7sipaKBBHixz3Zp"
+ }
+ }, {
+ "added_at" : "2010-05-03T10:49:47Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "single",
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/482HqzMMfrkFXAGujtwFrm"
+ },
+ "href" : "https://api.spotify.com/v1/albums/482HqzMMfrkFXAGujtwFrm",
+ "id" : "482HqzMMfrkFXAGujtwFrm",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/bb8d1b26591b8187455990b6c37efee9e325b6cd",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/e8e0c44240138a62ea6d89f814774ce5ef62fe79",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/03b69cdc8ed6725e199571bce6aa583daf0ec4cd",
+ "width" : 64
+ } ],
+ "name" : "Poker Face",
+ "type" : "album",
+ "uri" : "spotify:album:482HqzMMfrkFXAGujtwFrm"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ } ],
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "disc_number" : 1,
+ "duration_ms" : 237400,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM70824409"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/6w1hZMlo2SVuq29liebhb8"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/6w1hZMlo2SVuq29liebhb8",
+ "id" : "6w1hZMlo2SVuq29liebhb8",
+ "name" : "Poker Face",
+ "popularity" : 64,
+ "preview_url" : "https://p.scdn.co/mp3-preview/ae1b1b93c2288d3363b9a46c51bcca39abd99779",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:6w1hZMlo2SVuq29liebhb8"
+ }
+ }, {
+ "added_at" : "2010-05-03T10:49:49Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "single",
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/1Ot9FUXNmehWsLMmrYUt3F"
+ },
+ "href" : "https://api.spotify.com/v1/albums/1Ot9FUXNmehWsLMmrYUt3F",
+ "id" : "1Ot9FUXNmehWsLMmrYUt3F",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/0401ab7daff118586b6ca67eea6fa92af97aa36d",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/6c21051a71d8ac9fe061a4b0063537da0893f55c",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/48d4ebd64a44f4c256f27fa6042fe015f4d0740b",
+ "width" : 64
+ } ],
+ "name" : "Bad Romance",
+ "type" : "album",
+ "uri" : "spotify:album:1Ot9FUXNmehWsLMmrYUt3F"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ } ],
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "disc_number" : 1,
+ "duration_ms" : 294640,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM70903859"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/6MjiVEJy1YVuJNFu72OH61"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/6MjiVEJy1YVuJNFu72OH61",
+ "id" : "6MjiVEJy1YVuJNFu72OH61",
+ "name" : "Bad Romance",
+ "popularity" : 67,
+ "preview_url" : "https://p.scdn.co/mp3-preview/4ddf5c8885830a3e1e7d05ebeb9170b850d27e9e",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:6MjiVEJy1YVuJNFu72OH61"
+ }
+ }, {
+ "added_at" : "2010-05-03T10:51:44Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/67j3NJodNRI8USUwKwTZA6"
+ },
+ "href" : "https://api.spotify.com/v1/albums/67j3NJodNRI8USUwKwTZA6",
+ "id" : "67j3NJodNRI8USUwKwTZA6",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/88300dc6d25e9c6d110db6cd7a206bf590412f9d",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/5850cd38f30cf5c6bc2846fc7bbba1d72313324f",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/15e1da0a85e6d1fad488172e3be7d9fd1b97fa73",
+ "width" : 64
+ } ],
+ "name" : "The Fame Monster (International Deluxe)",
+ "type" : "album",
+ "uri" : "spotify:album:67j3NJodNRI8USUwKwTZA6"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 2,
+ "duration_ms" : 175346,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM70824406"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/6z7HmyQFiVBJm1OzBknw38"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/6z7HmyQFiVBJm1OzBknw38",
+ "id" : "6z7HmyQFiVBJm1OzBknw38",
+ "name" : "Eh, Eh (Nothing Else I Can Say)",
+ "popularity" : 48,
+ "preview_url" : "https://p.scdn.co/mp3-preview/a2ee2124a43f27cdf71bfee176013d67451c7942",
+ "track_number" : 6,
+ "type" : "track",
+ "uri" : "spotify:track:6z7HmyQFiVBJm1OzBknw38"
+ }
+ } ],
+ "limit" : 5,
+ "next" : "https://api.spotify.com/v1/users/mcgurk/playlists/0UZ0Ll4HJHR7yvURYbHJe9/tracks?offset=5&limit=5",
+ "offset" : 0,
+ "previous" : null,
+ "total" : 17
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-playlist.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-playlist.json
new file mode 100644
index 0000000..49c78a9
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-playlist.json
@@ -0,0 +1,1075 @@
+{
+ "collaborative" : false,
+ "description" : null,
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/mcgurk/playlist/0UZ0Ll4HJHR7yvURYbHJe9"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 0
+ },
+ "href" : "https://api.spotify.com/v1/users/mcgurk/playlists/0UZ0Ll4HJHR7yvURYbHJe9",
+ "id" : "0UZ0Ll4HJHR7yvURYbHJe9",
+ "images" : [ ],
+ "name" : "PARTY",
+ "owner" : {
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/mcgurk"
+ },
+ "href" : "https://api.spotify.com/v1/users/mcgurk",
+ "id" : "mcgurk",
+ "type" : "user",
+ "uri" : "spotify:user:mcgurk"
+ },
+ "public" : false,
+ "snapshot_id" : "bKMQr5cpdBKJCat1G4h4C2VinMLjIX7C1b1FEs1OWp2+e0cSd9ilKN5G1K0R+fpr",
+ "tracks" : {
+ "href" : "https://api.spotify.com/v1/users/mcgurk/playlists/0UZ0Ll4HJHR7yvURYbHJe9/tracks",
+ "items" : [ {
+ "added_at" : "2010-05-03T10:49:43Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/1qwlxZTNLe1jq3b0iidlue"
+ },
+ "href" : "https://api.spotify.com/v1/albums/1qwlxZTNLe1jq3b0iidlue",
+ "id" : "1qwlxZTNLe1jq3b0iidlue",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/9643ed59c59a044b817482a51e67377971ad7469",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/a51c3a507f52a0cc798d29e7a2d8d6e1adace445",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/a06ede8283b1ce28b70aaf7e500edf4e409b50e0",
+ "width" : 64
+ } ],
+ "name" : "The Fame",
+ "type" : "album",
+ "uri" : "spotify:album:1qwlxZTNLe1jq3b0iidlue"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/7fObcBw9VM3x7ntWKCYl0z"
+ },
+ "href" : "https://api.spotify.com/v1/artists/7fObcBw9VM3x7ntWKCYl0z",
+ "id" : "7fObcBw9VM3x7ntWKCYl0z",
+ "name" : "Colby O'Donis",
+ "type" : "artist",
+ "uri" : "spotify:artist:7fObcBw9VM3x7ntWKCYl0z"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 241933,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM70807646"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/1dzQoRqT5ucxXVaAhTcT0J"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/1dzQoRqT5ucxXVaAhTcT0J",
+ "id" : "1dzQoRqT5ucxXVaAhTcT0J",
+ "name" : "Just Dance",
+ "popularity" : 66,
+ "preview_url" : "https://p.scdn.co/mp3-preview/3dbcc47a8bcbeefeb4a0e68db1d6937b7dee4980",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:1dzQoRqT5ucxXVaAhTcT0J"
+ }
+ }, {
+ "added_at" : "2010-05-03T10:49:46Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/1qwlxZTNLe1jq3b0iidlue"
+ },
+ "href" : "https://api.spotify.com/v1/albums/1qwlxZTNLe1jq3b0iidlue",
+ "id" : "1qwlxZTNLe1jq3b0iidlue",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/9643ed59c59a044b817482a51e67377971ad7469",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/a51c3a507f52a0cc798d29e7a2d8d6e1adace445",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/a06ede8283b1ce28b70aaf7e500edf4e409b50e0",
+ "width" : 64
+ } ],
+ "name" : "The Fame",
+ "type" : "album",
+ "uri" : "spotify:album:1qwlxZTNLe1jq3b0iidlue"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 208306,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM70824408"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/02XnQdf7sipaKBBHixz3Zp"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/02XnQdf7sipaKBBHixz3Zp",
+ "id" : "02XnQdf7sipaKBBHixz3Zp",
+ "name" : "Paparazzi",
+ "popularity" : 58,
+ "preview_url" : "https://p.scdn.co/mp3-preview/ac27854ae09b2d4bce83c712af1eacb3071a96dc",
+ "track_number" : 3,
+ "type" : "track",
+ "uri" : "spotify:track:02XnQdf7sipaKBBHixz3Zp"
+ }
+ }, {
+ "added_at" : "2010-05-03T10:49:47Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "single",
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/482HqzMMfrkFXAGujtwFrm"
+ },
+ "href" : "https://api.spotify.com/v1/albums/482HqzMMfrkFXAGujtwFrm",
+ "id" : "482HqzMMfrkFXAGujtwFrm",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/bb8d1b26591b8187455990b6c37efee9e325b6cd",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/e8e0c44240138a62ea6d89f814774ce5ef62fe79",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/03b69cdc8ed6725e199571bce6aa583daf0ec4cd",
+ "width" : 64
+ } ],
+ "name" : "Poker Face",
+ "type" : "album",
+ "uri" : "spotify:album:482HqzMMfrkFXAGujtwFrm"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ } ],
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "disc_number" : 1,
+ "duration_ms" : 237400,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM70824409"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/6w1hZMlo2SVuq29liebhb8"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/6w1hZMlo2SVuq29liebhb8",
+ "id" : "6w1hZMlo2SVuq29liebhb8",
+ "name" : "Poker Face",
+ "popularity" : 64,
+ "preview_url" : "https://p.scdn.co/mp3-preview/ae1b1b93c2288d3363b9a46c51bcca39abd99779",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:6w1hZMlo2SVuq29liebhb8"
+ }
+ }, {
+ "added_at" : "2010-05-03T10:49:49Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "single",
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/1Ot9FUXNmehWsLMmrYUt3F"
+ },
+ "href" : "https://api.spotify.com/v1/albums/1Ot9FUXNmehWsLMmrYUt3F",
+ "id" : "1Ot9FUXNmehWsLMmrYUt3F",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/0401ab7daff118586b6ca67eea6fa92af97aa36d",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/6c21051a71d8ac9fe061a4b0063537da0893f55c",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/48d4ebd64a44f4c256f27fa6042fe015f4d0740b",
+ "width" : 64
+ } ],
+ "name" : "Bad Romance",
+ "type" : "album",
+ "uri" : "spotify:album:1Ot9FUXNmehWsLMmrYUt3F"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ } ],
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "disc_number" : 1,
+ "duration_ms" : 294640,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM70903859"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/6MjiVEJy1YVuJNFu72OH61"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/6MjiVEJy1YVuJNFu72OH61",
+ "id" : "6MjiVEJy1YVuJNFu72OH61",
+ "name" : "Bad Romance",
+ "popularity" : 67,
+ "preview_url" : "https://p.scdn.co/mp3-preview/4ddf5c8885830a3e1e7d05ebeb9170b850d27e9e",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:6MjiVEJy1YVuJNFu72OH61"
+ }
+ }, {
+ "added_at" : "2010-05-03T10:51:44Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/67j3NJodNRI8USUwKwTZA6"
+ },
+ "href" : "https://api.spotify.com/v1/albums/67j3NJodNRI8USUwKwTZA6",
+ "id" : "67j3NJodNRI8USUwKwTZA6",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/88300dc6d25e9c6d110db6cd7a206bf590412f9d",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/5850cd38f30cf5c6bc2846fc7bbba1d72313324f",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/15e1da0a85e6d1fad488172e3be7d9fd1b97fa73",
+ "width" : 64
+ } ],
+ "name" : "The Fame Monster (International Deluxe)",
+ "type" : "album",
+ "uri" : "spotify:album:67j3NJodNRI8USUwKwTZA6"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 2,
+ "duration_ms" : 175346,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM70824406"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/6z7HmyQFiVBJm1OzBknw38"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/6z7HmyQFiVBJm1OzBknw38",
+ "id" : "6z7HmyQFiVBJm1OzBknw38",
+ "name" : "Eh, Eh (Nothing Else I Can Say)",
+ "popularity" : 48,
+ "preview_url" : "https://p.scdn.co/mp3-preview/a2ee2124a43f27cdf71bfee176013d67451c7942",
+ "track_number" : 6,
+ "type" : "track",
+ "uri" : "spotify:track:6z7HmyQFiVBJm1OzBknw38"
+ }
+ }, {
+ "added_at" : "2010-06-02T13:33:34Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/67j3NJodNRI8USUwKwTZA6"
+ },
+ "href" : "https://api.spotify.com/v1/albums/67j3NJodNRI8USUwKwTZA6",
+ "id" : "67j3NJodNRI8USUwKwTZA6",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/88300dc6d25e9c6d110db6cd7a206bf590412f9d",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/5850cd38f30cf5c6bc2846fc7bbba1d72313324f",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/15e1da0a85e6d1fad488172e3be7d9fd1b97fa73",
+ "width" : 64
+ } ],
+ "name" : "The Fame Monster (International Deluxe)",
+ "type" : "album",
+ "uri" : "spotify:album:67j3NJodNRI8USUwKwTZA6"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6vWDO969PvNqNYHIOW5v0m"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6vWDO969PvNqNYHIOW5v0m",
+ "id" : "6vWDO969PvNqNYHIOW5v0m",
+ "name" : "Beyoncé",
+ "type" : "artist",
+ "uri" : "spotify:artist:6vWDO969PvNqNYHIOW5v0m"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 220626,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM70905541"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/00BuKLSAFkaEkaVAgIMbeA"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/00BuKLSAFkaEkaVAgIMbeA",
+ "id" : "00BuKLSAFkaEkaVAgIMbeA",
+ "name" : "Telephone",
+ "popularity" : 67,
+ "preview_url" : "https://p.scdn.co/mp3-preview/20a9177d56bb05bbccf7c5fe82058e74edd328a2",
+ "track_number" : 6,
+ "type" : "track",
+ "uri" : "spotify:track:00BuKLSAFkaEkaVAgIMbeA"
+ }
+ }, {
+ "added_at" : "2011-09-09T19:52:27Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "single",
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/6brEmLzLxjAOB0KcXdT7ye"
+ },
+ "href" : "https://api.spotify.com/v1/albums/6brEmLzLxjAOB0KcXdT7ye",
+ "id" : "6brEmLzLxjAOB0KcXdT7ye",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/fce70d4c29071b363425bd2fa8072ee54e6eb16b",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/b59f854ec0e0c317cb0d367ea91a0e64d4a0c009",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/e5a400bd412f77c2c6870903eee86083851aa842",
+ "width" : 64
+ } ],
+ "name" : "Born This Way",
+ "type" : "album",
+ "uri" : "spotify:album:6brEmLzLxjAOB0KcXdT7ye"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ } ],
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "disc_number" : 1,
+ "duration_ms" : 260466,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM71100638"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/6wAdqKcL7uESrsekjLTKod"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/6wAdqKcL7uESrsekjLTKod",
+ "id" : "6wAdqKcL7uESrsekjLTKod",
+ "name" : "Born This Way",
+ "popularity" : 55,
+ "preview_url" : "https://p.scdn.co/mp3-preview/c4b51e0193335f61306f0bd6f5868c7e801df525",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:6wAdqKcL7uESrsekjLTKod"
+ }
+ }, {
+ "added_at" : "2011-09-09T19:52:25Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "single",
+ "available_markets" : [ "AR", "AU", "BE", "BR", "CH", "CL", "CO", "CY", "DK", "EE", "ES", "FI", "FR", "GB", "GR", "HK", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NL", "NO", "NZ", "PH", "PT", "PY", "RO", "SI", "TW" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/48JuX7nVVKCBIZbHJG6azi"
+ },
+ "href" : "https://api.spotify.com/v1/albums/48JuX7nVVKCBIZbHJG6azi",
+ "id" : "48JuX7nVVKCBIZbHJG6azi",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/7d5c94043c997d08123cdedc5f3e7729641ce84a",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/c5082b33a66bcd4a83537e07ece345a373751ab7",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/4eaa61afcc38dd30272f82f14b7f05473436b785",
+ "width" : 64
+ } ],
+ "name" : "The Edge Of Glory",
+ "type" : "album",
+ "uri" : "spotify:album:48JuX7nVVKCBIZbHJG6azi"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ } ],
+ "available_markets" : [ "AR", "AU", "BE", "BR", "CH", "CL", "CO", "CY", "DK", "EE", "ES", "FI", "FR", "GB", "GR", "HK", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NL", "NO", "NZ", "PH", "PT", "PY", "RO", "SI", "TW" ],
+ "disc_number" : 1,
+ "duration_ms" : 320626,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM71106458"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/1VpoMzYjmoQMOflZMGTZN3"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/1VpoMzYjmoQMOflZMGTZN3",
+ "id" : "1VpoMzYjmoQMOflZMGTZN3",
+ "name" : "The Edge Of Glory",
+ "popularity" : 57,
+ "preview_url" : "https://p.scdn.co/mp3-preview/b8fa0035a66a73b3fd934c65073eaca1576ba3c0",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:1VpoMzYjmoQMOflZMGTZN3"
+ }
+ }, {
+ "added_at" : "2011-12-02T09:24:16Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "single",
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/49ZMLWbQzziuxH2vHUjOX9"
+ },
+ "href" : "https://api.spotify.com/v1/albums/49ZMLWbQzziuxH2vHUjOX9",
+ "id" : "49ZMLWbQzziuxH2vHUjOX9",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/33e47286f2b359aee82fdb3b1cf8a509812b8432",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/8efa8470652e6b2f5adf2575d447b5809be3148a",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/a1547b43572ab7e05b9a5929ae826045b473bf38",
+ "width" : 64
+ } ],
+ "name" : "Judas",
+ "type" : "album",
+ "uri" : "spotify:album:49ZMLWbQzziuxH2vHUjOX9"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/1HY2Jd0NmPuamShAr6KMms"
+ },
+ "href" : "https://api.spotify.com/v1/artists/1HY2Jd0NmPuamShAr6KMms",
+ "id" : "1HY2Jd0NmPuamShAr6KMms",
+ "name" : "Lady Gaga",
+ "type" : "artist",
+ "uri" : "spotify:artist:1HY2Jd0NmPuamShAr6KMms"
+ } ],
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SG", "SI", "SK", "SV", "TR", "TW" ],
+ "disc_number" : 1,
+ "duration_ms" : 250053,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USUM71104998"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/1BrydEwIuNpfeCXBjKWpAu"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/1BrydEwIuNpfeCXBjKWpAu",
+ "id" : "1BrydEwIuNpfeCXBjKWpAu",
+ "name" : "Judas",
+ "popularity" : 50,
+ "preview_url" : "https://p.scdn.co/mp3-preview/7bf43c58ccd93e9fcd28ab4849c13ba6529d1fe2",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:1BrydEwIuNpfeCXBjKWpAu"
+ }
+ }, {
+ "added_at" : "2010-05-06T09:16:55Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "single",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/1yKCNIVac6PKISJ5u6IO1T"
+ },
+ "href" : "https://api.spotify.com/v1/albums/1yKCNIVac6PKISJ5u6IO1T",
+ "id" : "1yKCNIVac6PKISJ5u6IO1T",
+ "images" : [ {
+ "height" : 600,
+ "url" : "https://i.scdn.co/image/bae487ab75f6a199e6663a38b10cb662c95e0a7a",
+ "width" : 600
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/1f55ace17bf6d814b89a9638fb05dbf03bd072bf",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/774cf32f107964a86177d8504a863a7bbac676fe",
+ "width" : 64
+ } ],
+ "name" : "Hot N Cold",
+ "type" : "album",
+ "uri" : "spotify:album:1yKCNIVac6PKISJ5u6IO1T"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6jJ0s89eD6GaHleKKya26X"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6jJ0s89eD6GaHleKKya26X",
+ "id" : "6jJ0s89eD6GaHleKKya26X",
+ "name" : "Katy Perry",
+ "type" : "artist",
+ "uri" : "spotify:artist:6jJ0s89eD6GaHleKKya26X"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GR", "GT", "HK", "HN", "HU", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 223226,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USCA20802544"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0IZM2onaTBMRTEIcc5oIi9"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0IZM2onaTBMRTEIcc5oIi9",
+ "id" : "0IZM2onaTBMRTEIcc5oIi9",
+ "name" : "Hot N Cold",
+ "popularity" : 61,
+ "preview_url" : "https://p.scdn.co/mp3-preview/5de67261e77d6807a541d369451cbd5e028072b4",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:0IZM2onaTBMRTEIcc5oIi9"
+ }
+ }, {
+ "added_at" : "2010-05-08T06:23:31Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/7MsL9vKLZM44fxTHlosW9b"
+ },
+ "href" : "https://api.spotify.com/v1/albums/7MsL9vKLZM44fxTHlosW9b",
+ "id" : "7MsL9vKLZM44fxTHlosW9b",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/8a95bb3db01f311de33568ac076adca94c12f287",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/71c12c4519ece2c7cccd33f04436cceac5a45852",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/d263e6d6e4a5e95bb6f48c7c9cc3211d6df833e5",
+ "width" : 64
+ } ],
+ "name" : "Latino Disco",
+ "type" : "album",
+ "uri" : "spotify:album:7MsL9vKLZM44fxTHlosW9b"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2HcpPno2Aejd2XpN0nDxV9"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2HcpPno2Aejd2XpN0nDxV9",
+ "id" : "2HcpPno2Aejd2XpN0nDxV9",
+ "name" : "Studio 99",
+ "type" : "artist",
+ "uri" : "spotify:artist:2HcpPno2Aejd2XpN0nDxV9"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 278058,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USA370550563"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/6HM9UgDB38hLDFm7e1RF6W"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/6HM9UgDB38hLDFm7e1RF6W",
+ "id" : "6HM9UgDB38hLDFm7e1RF6W",
+ "name" : "Bailando",
+ "popularity" : 37,
+ "preview_url" : "https://p.scdn.co/mp3-preview/6a1791d436ed587afb091d9efb05f4589b25b08b",
+ "track_number" : 7,
+ "type" : "track",
+ "uri" : "spotify:track:6HM9UgDB38hLDFm7e1RF6W"
+ }
+ }, {
+ "added_at" : "2010-05-08T06:24:31Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "NI", "NL", "NO", "PA", "PE", "PL", "PT", "PY", "RO", "SE", "SI", "SK", "SV", "TR", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/08gFKsqvthQiLDTilR43SI"
+ },
+ "href" : "https://api.spotify.com/v1/albums/08gFKsqvthQiLDTilR43SI",
+ "id" : "08gFKsqvthQiLDTilR43SI",
+ "images" : [ {
+ "height" : 558,
+ "url" : "https://i.scdn.co/image/593292023494ae286bc3d48b3e64b3a520bb6dd1",
+ "width" : 640
+ }, {
+ "height" : 262,
+ "url" : "https://i.scdn.co/image/b6983937b248111714ce55073c9e3da2e16862ef",
+ "width" : 300
+ }, {
+ "height" : 56,
+ "url" : "https://i.scdn.co/image/f38a2b8359591634647863f944d58ed68311d26c",
+ "width" : 64
+ } ],
+ "name" : "Come Get It: The Very Best Of Aaron Carter",
+ "type" : "album",
+ "uri" : "spotify:album:08gFKsqvthQiLDTilR43SI"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/5338fdSzGNOFD4cxAxDTeq"
+ },
+ "href" : "https://api.spotify.com/v1/artists/5338fdSzGNOFD4cxAxDTeq",
+ "id" : "5338fdSzGNOFD4cxAxDTeq",
+ "name" : "Aaron Carter",
+ "type" : "artist",
+ "uri" : "spotify:artist:5338fdSzGNOFD4cxAxDTeq"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "NI", "NL", "NO", "PA", "PE", "PL", "PT", "PY", "RO", "SE", "SI", "SK", "SV", "TR", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 194253,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USJI10000281"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/2cnZuQpDprgZB7jzdmBBCK"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/2cnZuQpDprgZB7jzdmBBCK",
+ "id" : "2cnZuQpDprgZB7jzdmBBCK",
+ "name" : "I Want Candy",
+ "popularity" : 12,
+ "preview_url" : "https://p.scdn.co/mp3-preview/beb1759bd33c368b3d9a321086a16a999f095a97",
+ "track_number" : 5,
+ "type" : "track",
+ "uri" : "spotify:track:2cnZuQpDprgZB7jzdmBBCK"
+ }
+ }, {
+ "added_at" : "2010-05-14T12:51:26Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BR", "CH", "CL", "CO", "CR", "CZ", "DE", "DK", "EE", "ES", "FI", "FR", "GB", "GR", "HK", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NL", "NZ", "PH", "PL", "PT", "RO", "SE", "SG", "SI", "SK", "TR", "TW" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/3vkxgQhR4QsgozSDmGoAvY"
+ },
+ "href" : "https://api.spotify.com/v1/albums/3vkxgQhR4QsgozSDmGoAvY",
+ "id" : "3vkxgQhR4QsgozSDmGoAvY",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/566ee4034e25c779bb522a2297112e68bfc23b06",
+ "width" : 638
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/015d40395c05b2e88a65c6e96e9415327e163dea",
+ "width" : 299
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/a28506fbf3b80f1a94c514f20005832bbb78bf96",
+ "width" : 64
+ } ],
+ "name" : "Pop Party",
+ "type" : "album",
+ "uri" : "spotify:album:3vkxgQhR4QsgozSDmGoAvY"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6kBjAFKyd0he7LiA5GQ3Gz"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6kBjAFKyd0he7LiA5GQ3Gz",
+ "id" : "6kBjAFKyd0he7LiA5GQ3Gz",
+ "name" : "Aqua",
+ "type" : "artist",
+ "uri" : "spotify:artist:6kBjAFKyd0he7LiA5GQ3Gz"
+ } ],
+ "available_markets" : [ "AR", "AT", "AU", "BE", "BG", "BR", "CH", "CL", "CO", "CR", "CZ", "DE", "DK", "EE", "ES", "FI", "FR", "GB", "GR", "HK", "HU", "IE", "IS", "IT", "LT", "LU", "LV", "MT", "MY", "NL", "NZ", "PH", "PL", "PT", "RO", "SE", "SG", "SI", "SK", "TR", "TW" ],
+ "disc_number" : 1,
+ "duration_ms" : 194040,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "DKBKA9700403"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/7kz6GbFr2MCI7PgXJOdq8c"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/7kz6GbFr2MCI7PgXJOdq8c",
+ "id" : "7kz6GbFr2MCI7PgXJOdq8c",
+ "name" : "Barbie Girl",
+ "popularity" : 64,
+ "preview_url" : "https://p.scdn.co/mp3-preview/31c02df23f26b7ece015b96b1b6baaf8f97f0273",
+ "track_number" : 3,
+ "type" : "track",
+ "uri" : "spotify:track:7kz6GbFr2MCI7PgXJOdq8c"
+ }
+ }, {
+ "added_at" : "2011-12-15T15:02:58Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/06SY6Ke6mXzZHhURLVU57R"
+ },
+ "href" : "https://api.spotify.com/v1/albums/06SY6Ke6mXzZHhURLVU57R",
+ "id" : "06SY6Ke6mXzZHhURLVU57R",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/ce8f207440681b989f02c20129b0b627036fd71c",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/409c641ca368b7b9c589103bb9ca8a5914c640dc",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/28bab516d29947e363b6c169100f2efbad6b84e2",
+ "width" : 64
+ } ],
+ "name" : "Teenage Dream",
+ "type" : "album",
+ "uri" : "spotify:album:06SY6Ke6mXzZHhURLVU57R"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/6jJ0s89eD6GaHleKKya26X"
+ },
+ "href" : "https://api.spotify.com/v1/artists/6jJ0s89eD6GaHleKKya26X",
+ "id" : "6jJ0s89eD6GaHleKKya26X",
+ "name" : "Katy Perry",
+ "type" : "artist",
+ "uri" : "spotify:artist:6jJ0s89eD6GaHleKKya26X"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 230733,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USCA21001264"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/3oHNJECGN3bBoGXejlw2b1"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/3oHNJECGN3bBoGXejlw2b1",
+ "id" : "3oHNJECGN3bBoGXejlw2b1",
+ "name" : "Last Friday Night (T.G.I.F.)",
+ "popularity" : 62,
+ "preview_url" : "https://p.scdn.co/mp3-preview/6b419ceb20e3ca3ea800832b1ab3010d744b2c26",
+ "track_number" : 2,
+ "type" : "track",
+ "uri" : "spotify:track:3oHNJECGN3bBoGXejlw2b1"
+ }
+ }, {
+ "added_at" : "2012-06-26T18:53:34Z",
+ "added_by" : null,
+ "track" : {
+ "album" : {
+ "album_type" : "single",
+ "available_markets" : [ ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/2zjaqU3EvxkxbYObOJOWPc"
+ },
+ "href" : "https://api.spotify.com/v1/albums/2zjaqU3EvxkxbYObOJOWPc",
+ "id" : "2zjaqU3EvxkxbYObOJOWPc",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/7a5ea8d84dfd79d66ed3b771f0fa27d95e77f8c6",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/f1c2fdb993cfeafe149ad1d8c81290c85b175076",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/b9867d389ff8158f3b6d4963064e84738ec3db04",
+ "width" : 64
+ } ],
+ "name" : "Get Free",
+ "type" : "album",
+ "uri" : "spotify:album:2zjaqU3EvxkxbYObOJOWPc"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/738wLrAtLtCtFOLvQBXOXp"
+ },
+ "href" : "https://api.spotify.com/v1/artists/738wLrAtLtCtFOLvQBXOXp",
+ "id" : "738wLrAtLtCtFOLvQBXOXp",
+ "name" : "Major Lazer",
+ "type" : "artist",
+ "uri" : "spotify:artist:738wLrAtLtCtFOLvQBXOXp"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/50n0lOYeD5omHicMWhTJ4W"
+ },
+ "href" : "https://api.spotify.com/v1/artists/50n0lOYeD5omHicMWhTJ4W",
+ "id" : "50n0lOYeD5omHicMWhTJ4W",
+ "name" : "Amber of the Dirty Projectors",
+ "type" : "artist",
+ "uri" : "spotify:artist:50n0lOYeD5omHicMWhTJ4W"
+ } ],
+ "available_markets" : [ ],
+ "disc_number" : 1,
+ "duration_ms" : 223299,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USCJ81200812"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/1H5vt0uSkg4Pz2aLgTFs14"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/1H5vt0uSkg4Pz2aLgTFs14",
+ "id" : "1H5vt0uSkg4Pz2aLgTFs14",
+ "name" : "Get Free - Bonde Do Role Remix",
+ "popularity" : 0,
+ "preview_url" : "https://p.scdn.co/mp3-preview/25503f61c5d0527aa6428f648906e2f8d3f72a64",
+ "track_number" : 2,
+ "type" : "track",
+ "uri" : "spotify:track:1H5vt0uSkg4Pz2aLgTFs14"
+ }
+ }, {
+ "added_at" : "2013-06-03T18:00:50Z",
+ "added_by" : {
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/mcgurk"
+ },
+ "href" : "https://api.spotify.com/v1/users/mcgurk",
+ "id" : "mcgurk",
+ "type" : "user",
+ "uri" : "spotify:user:mcgurk"
+ },
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/2Sscsd9Fo1Fa4VZC26k5jl"
+ },
+ "href" : "https://api.spotify.com/v1/albums/2Sscsd9Fo1Fa4VZC26k5jl",
+ "id" : "2Sscsd9Fo1Fa4VZC26k5jl",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/155cc4ef02624c248644651bfe3c0c67339aa35e",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/79c0b56d99777ff45adda02a492b7be1001049ee",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/08c6f092971d2e57a99b76eac230aaf95e976a62",
+ "width" : 64
+ } ],
+ "name" : "The Safety Dance – The Collection",
+ "type" : "album",
+ "uri" : "spotify:album:2Sscsd9Fo1Fa4VZC26k5jl"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/34PLzyi7CdXUekiLHYyqXq"
+ },
+ "href" : "https://api.spotify.com/v1/artists/34PLzyi7CdXUekiLHYyqXq",
+ "id" : "34PLzyi7CdXUekiLHYyqXq",
+ "name" : "Men Without Hats",
+ "type" : "artist",
+ "uri" : "spotify:artist:34PLzyi7CdXUekiLHYyqXq"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 164866,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "GBBLG0200043"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/7eEfbAG7wgV4AgkdTakVFT"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/7eEfbAG7wgV4AgkdTakVFT",
+ "id" : "7eEfbAG7wgV4AgkdTakVFT",
+ "name" : "The Safety Dance",
+ "popularity" : 42,
+ "preview_url" : "https://p.scdn.co/mp3-preview/05676ec46121522e9f0fc658c9d43ed924a6e65c",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:7eEfbAG7wgV4AgkdTakVFT"
+ }
+ }, {
+ "added_at" : "2013-12-24T23:52:57Z",
+ "added_by" : {
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/mcgurk"
+ },
+ "href" : "https://api.spotify.com/v1/users/mcgurk",
+ "id" : "mcgurk",
+ "type" : "user",
+ "uri" : "spotify:user:mcgurk"
+ },
+ "track" : {
+ "album" : {
+ "album_type" : "single",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/7nvaG92AQuoXY8uWJDMpXW"
+ },
+ "href" : "https://api.spotify.com/v1/albums/7nvaG92AQuoXY8uWJDMpXW",
+ "id" : "7nvaG92AQuoXY8uWJDMpXW",
+ "images" : [ {
+ "height" : 640,
+ "url" : "https://i.scdn.co/image/42826eb468e063e241212770a870d8599cc75d59",
+ "width" : 640
+ }, {
+ "height" : 300,
+ "url" : "https://i.scdn.co/image/12f05f4aad5e40624162c5a27616709172153760",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/e5f79913e60b158757ed1a197231a41612eb32cc",
+ "width" : 64
+ } ],
+ "name" : "Perfect (Exceeder)",
+ "type" : "album",
+ "uri" : "spotify:album:7nvaG92AQuoXY8uWJDMpXW"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/307erl4VjT1dZDMYpneZqd"
+ },
+ "href" : "https://api.spotify.com/v1/artists/307erl4VjT1dZDMYpneZqd",
+ "id" : "307erl4VjT1dZDMYpneZqd",
+ "name" : "Mason",
+ "type" : "artist",
+ "uri" : "spotify:artist:307erl4VjT1dZDMYpneZqd"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/7JQn9DfFTtsFTg2dFc75jM"
+ },
+ "href" : "https://api.spotify.com/v1/artists/7JQn9DfFTtsFTg2dFc75jM",
+ "id" : "7JQn9DfFTtsFTg2dFc75jM",
+ "name" : "Princess Superstar",
+ "type" : "artist",
+ "uri" : "spotify:artist:7JQn9DfFTtsFTg2dFc75jM"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 161250,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "NLF711312388"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/2nyBqOKARcKxrJaPyXRNx3"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/2nyBqOKARcKxrJaPyXRNx3",
+ "id" : "2nyBqOKARcKxrJaPyXRNx3",
+ "name" : "Perfect (Exceeder) - Radio Edit",
+ "popularity" : 46,
+ "preview_url" : "https://p.scdn.co/mp3-preview/b7c76d0b50d90e50f3d1cdfb4f8df91ebfe55848",
+ "track_number" : 1,
+ "type" : "track",
+ "uri" : "spotify:track:2nyBqOKARcKxrJaPyXRNx3"
+ }
+ } ],
+ "limit" : 100,
+ "next" : null,
+ "offset" : 0,
+ "previous" : null,
+ "total" : 17
+ },
+ "type" : "playlist",
+ "uri" : "spotify:user:mcgurk:playlist:0UZ0Ll4HJHR7yvURYbHJe9"
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-playlists.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-playlists.json
new file mode 100644
index 0000000..0114e2a
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-playlists.json
@@ -0,0 +1,134 @@
+{
+ "href" : "https://api.spotify.com/v1/users/mcgurk/playlists?offset=0&limit=5",
+ "items" : [ {
+ "collaborative" : false,
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/mcgurk/playlist/4YOPp7RlelOVGJ1d4CZBqW"
+ },
+ "href" : "https://api.spotify.com/v1/users/mcgurk/playlists/4YOPp7RlelOVGJ1d4CZBqW",
+ "id" : "4YOPp7RlelOVGJ1d4CZBqW",
+ "images" : [ ],
+ "name" : "Soft chill",
+ "owner" : {
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/mcgurk"
+ },
+ "href" : "https://api.spotify.com/v1/users/mcgurk",
+ "id" : "mcgurk",
+ "type" : "user",
+ "uri" : "spotify:user:mcgurk"
+ },
+ "public" : false,
+ "tracks" : {
+ "href" : "https://api.spotify.com/v1/users/mcgurk/playlists/4YOPp7RlelOVGJ1d4CZBqW/tracks",
+ "total" : 7
+ },
+ "type" : "playlist",
+ "uri" : "spotify:user:mcgurk:playlist:4YOPp7RlelOVGJ1d4CZBqW"
+ }, {
+ "collaborative" : false,
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/mcgurk/playlist/2zNRHPRBynwGI2qIZZ2EGp"
+ },
+ "href" : "https://api.spotify.com/v1/users/mcgurk/playlists/2zNRHPRBynwGI2qIZZ2EGp",
+ "id" : "2zNRHPRBynwGI2qIZZ2EGp",
+ "images" : [ ],
+ "name" : "Liked from Radio",
+ "owner" : {
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/mcgurk"
+ },
+ "href" : "https://api.spotify.com/v1/users/mcgurk",
+ "id" : "mcgurk",
+ "type" : "user",
+ "uri" : "spotify:user:mcgurk"
+ },
+ "public" : false,
+ "tracks" : {
+ "href" : "https://api.spotify.com/v1/users/mcgurk/playlists/2zNRHPRBynwGI2qIZZ2EGp/tracks",
+ "total" : 66
+ },
+ "type" : "playlist",
+ "uri" : "spotify:user:mcgurk:playlist:2zNRHPRBynwGI2qIZZ2EGp"
+ }, {
+ "collaborative" : false,
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/mcgurk/playlist/0CQyRJcgAUtu3HXedHTukP"
+ },
+ "href" : "https://api.spotify.com/v1/users/mcgurk/playlists/0CQyRJcgAUtu3HXedHTukP",
+ "id" : "0CQyRJcgAUtu3HXedHTukP",
+ "images" : [ ],
+ "name" : "Musica",
+ "owner" : {
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/mcgurk"
+ },
+ "href" : "https://api.spotify.com/v1/users/mcgurk",
+ "id" : "mcgurk",
+ "type" : "user",
+ "uri" : "spotify:user:mcgurk"
+ },
+ "public" : false,
+ "tracks" : {
+ "href" : "https://api.spotify.com/v1/users/mcgurk/playlists/0CQyRJcgAUtu3HXedHTukP/tracks",
+ "total" : 774
+ },
+ "type" : "playlist",
+ "uri" : "spotify:user:mcgurk:playlist:0CQyRJcgAUtu3HXedHTukP"
+ }, {
+ "collaborative" : false,
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/mcgurk/playlist/0dWICxwZcXNTxavch2ViJl"
+ },
+ "href" : "https://api.spotify.com/v1/users/mcgurk/playlists/0dWICxwZcXNTxavch2ViJl",
+ "id" : "0dWICxwZcXNTxavch2ViJl",
+ "images" : [ ],
+ "name" : "Mmmh marabou",
+ "owner" : {
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/mcgurk"
+ },
+ "href" : "https://api.spotify.com/v1/users/mcgurk",
+ "id" : "mcgurk",
+ "type" : "user",
+ "uri" : "spotify:user:mcgurk"
+ },
+ "public" : false,
+ "tracks" : {
+ "href" : "https://api.spotify.com/v1/users/mcgurk/playlists/0dWICxwZcXNTxavch2ViJl/tracks",
+ "total" : 58
+ },
+ "type" : "playlist",
+ "uri" : "spotify:user:mcgurk:playlist:0dWICxwZcXNTxavch2ViJl"
+ }, {
+ "collaborative" : false,
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/mcgurk/playlist/1f1zO9SrQXk9X0bY59HS5r"
+ },
+ "href" : "https://api.spotify.com/v1/users/mcgurk/playlists/1f1zO9SrQXk9X0bY59HS5r",
+ "id" : "1f1zO9SrQXk9X0bY59HS5r",
+ "images" : [ ],
+ "name" : "Mys",
+ "owner" : {
+ "external_urls" : {
+ "spotify" : "http://open.spotify.com/user/mcgurk"
+ },
+ "href" : "https://api.spotify.com/v1/users/mcgurk",
+ "id" : "mcgurk",
+ "type" : "user",
+ "uri" : "spotify:user:mcgurk"
+ },
+ "public" : false,
+ "tracks" : {
+ "href" : "https://api.spotify.com/v1/users/mcgurk/playlists/1f1zO9SrQXk9X0bY59HS5r/tracks",
+ "total" : 4
+ },
+ "type" : "playlist",
+ "uri" : "spotify:user:mcgurk:playlist:1f1zO9SrQXk9X0bY59HS5r"
+ } ],
+ "limit" : 5,
+ "next" : "https://api.spotify.com/v1/users/mcgurk/playlists?offset=5&limit=5",
+ "offset" : 0,
+ "previous" : null,
+ "total" : 8
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-tracks-contain.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-tracks-contain.json
new file mode 100644
index 0000000..29513c4
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-tracks-contain.json
@@ -0,0 +1 @@
+[true]
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-tracks-contains.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-tracks-contains.json
new file mode 100644
index 0000000..ae6199a
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-tracks-contains.json
@@ -0,0 +1 @@
+[true, true]
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-tracks.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-tracks.json
new file mode 100644
index 0000000..3e8bd90
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user-tracks.json
@@ -0,0 +1,141 @@
+{
+ "href" : "https://api.spotify.com/v1/me/tracks?offset=0&limit=5",
+ "items" : [ {
+ "added_at" : "2014-10-26T14:22:34Z",
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/4m2880jivSbbyEGAKfITCa"
+ },
+ "href" : "https://api.spotify.com/v1/albums/4m2880jivSbbyEGAKfITCa",
+ "id" : "4m2880jivSbbyEGAKfITCa",
+ "images" : [ {
+ "height" : 636,
+ "url" : "https://i.scdn.co/image/6710552422788861893233437ad9f0830b95c07c",
+ "width" : 640
+ }, {
+ "height" : 298,
+ "url" : "https://i.scdn.co/image/4df66c8b705efa6dd3be4e884fe2ca8779fd4fc9",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/a3d945a1c9de931ed6eeb3dbca90579f6a6388c8",
+ "width" : 64
+ } ],
+ "name" : "Random Access Memories",
+ "type" : "album",
+ "uri" : "spotify:album:4m2880jivSbbyEGAKfITCa"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/4tZwfgrHOc3mvqYlEYSvVi"
+ },
+ "href" : "https://api.spotify.com/v1/artists/4tZwfgrHOc3mvqYlEYSvVi",
+ "id" : "4tZwfgrHOc3mvqYlEYSvVi",
+ "name" : "Daft Punk",
+ "type" : "artist",
+ "uri" : "spotify:artist:4tZwfgrHOc3mvqYlEYSvVi"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 544626,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USQX91300103"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/0oks4FnzhNp5QPTZtoet7c"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/0oks4FnzhNp5QPTZtoet7c",
+ "id" : "0oks4FnzhNp5QPTZtoet7c",
+ "name" : "Giorgio by Moroder",
+ "popularity" : 68,
+ "preview_url" : "https://p.scdn.co/mp3-preview/9f30c1ab377fab3d5fba3c376ce32174f70d5546",
+ "track_number" : 3,
+ "type" : "track",
+ "uri" : "spotify:track:0oks4FnzhNp5QPTZtoet7c"
+ }
+ }, {
+ "added_at" : "2014-10-26T14:22:29Z",
+ "track" : {
+ "album" : {
+ "album_type" : "album",
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/album/4m2880jivSbbyEGAKfITCa"
+ },
+ "href" : "https://api.spotify.com/v1/albums/4m2880jivSbbyEGAKfITCa",
+ "id" : "4m2880jivSbbyEGAKfITCa",
+ "images" : [ {
+ "height" : 636,
+ "url" : "https://i.scdn.co/image/6710552422788861893233437ad9f0830b95c07c",
+ "width" : 640
+ }, {
+ "height" : 298,
+ "url" : "https://i.scdn.co/image/4df66c8b705efa6dd3be4e884fe2ca8779fd4fc9",
+ "width" : 300
+ }, {
+ "height" : 64,
+ "url" : "https://i.scdn.co/image/a3d945a1c9de931ed6eeb3dbca90579f6a6388c8",
+ "width" : 64
+ } ],
+ "name" : "Random Access Memories",
+ "type" : "album",
+ "uri" : "spotify:album:4m2880jivSbbyEGAKfITCa"
+ },
+ "artists" : [ {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/4tZwfgrHOc3mvqYlEYSvVi"
+ },
+ "href" : "https://api.spotify.com/v1/artists/4tZwfgrHOc3mvqYlEYSvVi",
+ "id" : "4tZwfgrHOc3mvqYlEYSvVi",
+ "name" : "Daft Punk",
+ "type" : "artist",
+ "uri" : "spotify:artist:4tZwfgrHOc3mvqYlEYSvVi"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/2RdwBSPQiwcmiDo9kixcl8"
+ },
+ "href" : "https://api.spotify.com/v1/artists/2RdwBSPQiwcmiDo9kixcl8",
+ "id" : "2RdwBSPQiwcmiDo9kixcl8",
+ "name" : "Pharrell Williams",
+ "type" : "artist",
+ "uri" : "spotify:artist:2RdwBSPQiwcmiDo9kixcl8"
+ }, {
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/artist/3yDIp0kaq9EFKe07X1X2rz"
+ },
+ "href" : "https://api.spotify.com/v1/artists/3yDIp0kaq9EFKe07X1X2rz",
+ "id" : "3yDIp0kaq9EFKe07X1X2rz",
+ "name" : "Nile Rodgers",
+ "type" : "artist",
+ "uri" : "spotify:artist:3yDIp0kaq9EFKe07X1X2rz"
+ } ],
+ "available_markets" : [ "AD", "AR", "AT", "AU", "BE", "BG", "BO", "BR", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "EC", "EE", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HU", "IE", "IS", "IT", "LI", "LT", "LU", "LV", "MC", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "PA", "PE", "PH", "PL", "PT", "PY", "RO", "SE", "SG", "SI", "SK", "SV", "TR", "TW", "US", "UY" ],
+ "disc_number" : 1,
+ "duration_ms" : 369626,
+ "explicit" : false,
+ "external_ids" : {
+ "isrc" : "USQX91300108"
+ },
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/track/69kOkLUCkxIZYexIgSG8rq"
+ },
+ "href" : "https://api.spotify.com/v1/tracks/69kOkLUCkxIZYexIgSG8rq",
+ "id" : "69kOkLUCkxIZYexIgSG8rq",
+ "name" : "Get Lucky",
+ "popularity" : 78,
+ "preview_url" : "https://p.scdn.co/mp3-preview/31208a018b7ab55969b945200901b7ef371c3a72",
+ "track_number" : 8,
+ "type" : "track",
+ "uri" : "spotify:track:69kOkLUCkxIZYexIgSG8rq"
+ }
+ } ],
+ "limit" : 5,
+ "next" : null,
+ "offset" : 0,
+ "previous" : null,
+ "total" : 2
+}
diff --git a/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user.json b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user.json
new file mode 100644
index 0000000..231a445
--- /dev/null
+++ b/vendor/jwilsson/spotify-web-api-php/tests/fixtures/user.json
@@ -0,0 +1,15 @@
+{
+ "display_name" : null,
+ "external_urls" : {
+ "spotify" : "https://open.spotify.com/user/mcgurk"
+ },
+ "followers" : {
+ "href" : null,
+ "total" : 1
+ },
+ "href" : "https://api.spotify.com/v1/users/mcgurk",
+ "id" : "mcgurk",
+ "images" : [ ],
+ "type" : "user",
+ "uri" : "spotify:user:mcgurk"
+}