diff --git a/packages/nodes-base/nodes/Spotify/GenericFunctions.ts b/packages/nodes-base/nodes/Spotify/GenericFunctions.ts index 7210a70e17af8..3fe3bcf948adb 100644 --- a/packages/nodes-base/nodes/Spotify/GenericFunctions.ts +++ b/packages/nodes-base/nodes/Spotify/GenericFunctions.ts @@ -5,7 +5,7 @@ import type { IHookFunctions, JsonObject, IHttpRequestMethods, - IRequestOptions, + IHttpRequestOptions, } from 'n8n-workflow'; import { NodeApiError } from 'n8n-workflow'; @@ -21,7 +21,7 @@ export async function spotifyApiRequest( query?: IDataObject, uri?: string, ): Promise { - const options: IRequestOptions = { + const options: IHttpRequestOptions = { method, headers: { 'User-Agent': 'n8n', @@ -29,7 +29,7 @@ export async function spotifyApiRequest( Accept: ' application/json', }, qs: query, - uri: uri || `https://api.spotify.com/v1${endpoint}`, + url: uri ?? `https://api.spotify.com/v1${endpoint}`, json: true, }; @@ -37,7 +37,7 @@ export async function spotifyApiRequest( options.body = body; } try { - return await this.helpers.requestOAuth2.call(this, 'spotifyOAuth2Api', options); + return await this.helpers.httpRequestWithAuthentication.call(this, 'spotifyOAuth2Api', options); } catch (error) { throw new NodeApiError(this.getNode(), error as JsonObject); } diff --git a/packages/nodes-base/nodes/Spotify/Spotify.node.ts b/packages/nodes-base/nodes/Spotify/Spotify.node.ts index b9c792a564a87..772a6a7c695c7 100644 --- a/packages/nodes-base/nodes/Spotify/Spotify.node.ts +++ b/packages/nodes-base/nodes/Spotify/Spotify.node.ts @@ -1308,6 +1308,10 @@ export class Spotify implements INodeType { ); } + // Remove null values from the response + if (operation === 'getUserPlaylists') { + responseData = responseData.filter((item: IDataObject) => item !== null); + } const executionData = this.helpers.constructExecutionMetaData( this.helpers.returnJsonArray(responseData as IDataObject[]), { itemData: { item: i } }, diff --git a/packages/nodes-base/nodes/Spotify/__tests__/GenericFunctions.test.ts b/packages/nodes-base/nodes/Spotify/__tests__/GenericFunctions.test.ts new file mode 100644 index 0000000000000..e61b4a10a25e2 --- /dev/null +++ b/packages/nodes-base/nodes/Spotify/__tests__/GenericFunctions.test.ts @@ -0,0 +1,62 @@ +import type { IExecuteFunctions, IHookFunctions } from 'n8n-workflow'; +import { NodeApiError } from 'n8n-workflow'; + +import { spotifyApiRequest } from '../GenericFunctions'; + +describe('Spotify -> GenericFunctions', () => { + let mockThis: IHookFunctions | IExecuteFunctions; + + beforeEach(() => { + mockThis = { + helpers: { + httpRequestWithAuthentication: jest.fn(), + }, + getNode: jest.fn().mockReturnValue({}), + } as unknown as IHookFunctions | IExecuteFunctions; + }); + + it('should make a request with the correct options', async () => { + const method = 'GET'; + const endpoint = '/me'; + const body = {}; + const query = { limit: 10 }; + const response = { data: 'test' }; + + (mockThis.helpers.httpRequestWithAuthentication as jest.Mock).mockResolvedValue(response); + + const result = await spotifyApiRequest.call(mockThis, method, endpoint, body, query); + + expect(mockThis.helpers.httpRequestWithAuthentication).toHaveBeenCalledWith( + 'spotifyOAuth2Api', + { + method, + headers: { + 'User-Agent': 'n8n', + 'Content-Type': 'text/plain', + Accept: ' application/json', + }, + qs: query, + url: `https://api.spotify.com/v1${endpoint}`, + json: true, + }, + ); + + expect(result).toEqual(response); + }); + + it('should throw a NodeApiError on request failure', async () => { + const method = 'GET'; + const endpoint = '/me'; + const body = {}; + const query = { limit: 10 }; + const error = new Error('Request failed'); + + (mockThis.helpers.httpRequestWithAuthentication as jest.Mock).mockRejectedValue(error); + + await expect(spotifyApiRequest.call(mockThis, method, endpoint, body, query)).rejects.toThrow( + NodeApiError, + ); + + expect(mockThis.getNode).toHaveBeenCalled(); + }); +}); diff --git a/packages/nodes-base/nodes/Spotify/__tests__/workflow/Spotify.workflow.json b/packages/nodes-base/nodes/Spotify/__tests__/workflow/Spotify.workflow.json new file mode 100644 index 0000000000000..b0962bd4bc3ae --- /dev/null +++ b/packages/nodes-base/nodes/Spotify/__tests__/workflow/Spotify.workflow.json @@ -0,0 +1,5941 @@ +{ + "name": "[TEST] Spotify", + "nodes": [ + { + "parameters": {}, + "type": "n8n-nodes-base.manualTrigger", + "typeVersion": 1, + "position": [40, 140], + "id": "08d02705-0913-46e1-9916-5f319c190127", + "name": "When clicking ‘Test workflow’" + }, + { + "parameters": { + "resource": "album", + "operation": "search", + "query": "From Xero", + "limit": 2, + "filters": {} + }, + "type": "n8n-nodes-base.spotify", + "typeVersion": 1, + "position": [460, -100], + "id": "a3c57688-3368-48ea-977a-3092ff6da385", + "name": "Spotify", + "credentials": { + "spotifyOAuth2Api": { + "id": "hHQKInC4oVrsBebI", + "name": "Spotify account" + } + } + }, + { + "parameters": {}, + "type": "n8n-nodes-base.noOp", + "typeVersion": 1, + "position": [640, -100], + "id": "bd6ad825-697b-465f-bda8-79e4db65c18e", + "name": "No Operation, do nothing" + }, + { + "parameters": { + "resource": "album", + "operation": "getNewReleases", + "limit": 2, + "filters": {} + }, + "type": "n8n-nodes-base.spotify", + "typeVersion": 1, + "position": [460, 80], + "id": "9f67f24d-6a80-4ca2-aefe-0efbf65054e2", + "name": "Spotify1", + "credentials": { + "spotifyOAuth2Api": { + "id": "hHQKInC4oVrsBebI", + "name": "Spotify account" + } + } + }, + { + "parameters": {}, + "type": "n8n-nodes-base.noOp", + "typeVersion": 1, + "position": [640, 80], + "id": "c0049cfc-67b3-43c6-bdb2-0249b8531e63", + "name": "No Operation, do nothing1" + }, + { + "parameters": { + "resource": "album", + "operation": "getTracks", + "id": "spotify:album:4R6FV9NSzhPihHR0h4pI93", + "returnAll": true + }, + "type": "n8n-nodes-base.spotify", + "typeVersion": 1, + "position": [460, 260], + "id": "3f04a285-fecf-4d8b-9a54-dd45483072cb", + "name": "Spotify2", + "credentials": { + "spotifyOAuth2Api": { + "id": "hHQKInC4oVrsBebI", + "name": "Spotify account" + } + } + }, + { + "parameters": {}, + "type": "n8n-nodes-base.noOp", + "typeVersion": 1, + "position": [640, 260], + "id": "e1ec2e5e-cd8b-4c45-9202-95027a50029c", + "name": "No Operation, do nothing2" + }, + { + "parameters": { + "resource": "album", + "id": "4R6FV9NSzhPihHR0h4pI93" + }, + "type": "n8n-nodes-base.spotify", + "typeVersion": 1, + "position": [460, 620], + "id": "e2d26e12-a308-4d30-8908-46da973885ad", + "name": "Spotify4", + "credentials": { + "spotifyOAuth2Api": { + "id": "hHQKInC4oVrsBebI", + "name": "Spotify account" + } + } + }, + { + "parameters": {}, + "type": "n8n-nodes-base.noOp", + "typeVersion": 1, + "position": [680, 620], + "id": "55478529-904e-4da8-9f96-1d5a391e9468", + "name": "No Operation, do nothing4" + } + ], + "pinData": { + "No Operation, do nothing": [ + { + "json": { + "album_type": "album", + "total_tracks": 11, + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "external_urls": { + "spotify": "https://open.spotify.com/album/4R6FV9NSzhPihHR0h4pI93" + }, + "href": "https://api.spotify.com/v1/albums/4R6FV9NSzhPihHR0h4pI93", + "id": "4R6FV9NSzhPihHR0h4pI93", + "images": [ + { + "height": 640, + "url": "https://i.scdn.co/image/ab67616d0000b273b11a5489e8cb11dd22b930a0", + "width": 640 + }, + { + "height": 300, + "url": "https://i.scdn.co/image/ab67616d00001e02b11a5489e8cb11dd22b930a0", + "width": 300 + }, + { + "height": 64, + "url": "https://i.scdn.co/image/ab67616d00004851b11a5489e8cb11dd22b930a0", + "width": 64 + } + ], + "name": "From Zero", + "release_date": "2024-11-15", + "release_date_precision": "day", + "type": "album", + "uri": "spotify:album:4R6FV9NSzhPihHR0h4pI93", + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ] + } + }, + { + "json": { + "album_type": "single", + "total_tracks": 3, + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "BY", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "external_urls": { + "spotify": "https://open.spotify.com/album/5v5KesD6W6Ptlid6iyGxSq" + }, + "href": "https://api.spotify.com/v1/albums/5v5KesD6W6Ptlid6iyGxSq", + "id": "5v5KesD6W6Ptlid6iyGxSq", + "images": [ + { + "height": 640, + "url": "https://i.scdn.co/image/ab67616d0000b273b554768192043c597c31133a", + "width": 640 + }, + { + "height": 300, + "url": "https://i.scdn.co/image/ab67616d00001e02b554768192043c597c31133a", + "width": 300 + }, + { + "height": 64, + "url": "https://i.scdn.co/image/ab67616d00004851b554768192043c597c31133a", + "width": 64 + } + ], + "name": "From Xero", + "release_date": "2021-11-15", + "release_date_precision": "day", + "type": "album", + "uri": "spotify:album:5v5KesD6W6Ptlid6iyGxSq", + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/1EGVsuJeCpKQf69Io9kz1T" + }, + "href": "https://api.spotify.com/v1/artists/1EGVsuJeCpKQf69Io9kz1T", + "id": "1EGVsuJeCpKQf69Io9kz1T", + "name": "HJY", + "type": "artist", + "uri": "spotify:artist:1EGVsuJeCpKQf69Io9kz1T" + } + ] + } + } + ], + "No Operation, do nothing1": [ + { + "json": { + "album_type": "album", + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/3eVa5w3URK5duf6eyVDbu9" + }, + "href": "https://api.spotify.com/v1/artists/3eVa5w3URK5duf6eyVDbu9", + "id": "3eVa5w3URK5duf6eyVDbu9", + "name": "ROSÉ", + "type": "artist", + "uri": "spotify:artist:3eVa5w3URK5duf6eyVDbu9" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "external_urls": { + "spotify": "https://open.spotify.com/album/7kFyd5oyJdVX2pIi6P4iHE" + }, + "href": "https://api.spotify.com/v1/albums/7kFyd5oyJdVX2pIi6P4iHE", + "id": "7kFyd5oyJdVX2pIi6P4iHE", + "images": [ + { + "height": 300, + "url": "https://i.scdn.co/image/ab67616d00001e025074bd0894cb1340b8d8a678", + "width": 300 + }, + { + "height": 64, + "url": "https://i.scdn.co/image/ab67616d000048515074bd0894cb1340b8d8a678", + "width": 64 + }, + { + "height": 640, + "url": "https://i.scdn.co/image/ab67616d0000b2735074bd0894cb1340b8d8a678", + "width": 640 + } + ], + "name": "rosie", + "release_date": "2024-12-06", + "release_date_precision": "day", + "total_tracks": 12, + "type": "album", + "uri": "spotify:album:7kFyd5oyJdVX2pIi6P4iHE" + } + }, + { + "json": { + "album_type": "album", + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/2FXC3k01G6Gw61bmprjgqS" + }, + "href": "https://api.spotify.com/v1/artists/2FXC3k01G6Gw61bmprjgqS", + "id": "2FXC3k01G6Gw61bmprjgqS", + "name": "Hozier", + "type": "artist", + "uri": "spotify:artist:2FXC3k01G6Gw61bmprjgqS" + } + ], + "available_markets": ["AU", "CA", "PR", "US"], + "external_urls": { + "spotify": "https://open.spotify.com/album/10MWtR7jwqRTLQAvmTU7uQ" + }, + "href": "https://api.spotify.com/v1/albums/10MWtR7jwqRTLQAvmTU7uQ", + "id": "10MWtR7jwqRTLQAvmTU7uQ", + "images": [ + { + "height": 300, + "url": "https://i.scdn.co/image/ab67616d00001e028044f38f15837e87e2b65222", + "width": 300 + }, + { + "height": 64, + "url": "https://i.scdn.co/image/ab67616d000048518044f38f15837e87e2b65222", + "width": 64 + }, + { + "height": 640, + "url": "https://i.scdn.co/image/ab67616d0000b2738044f38f15837e87e2b65222", + "width": 640 + } + ], + "name": "Unreal Unearth: Unending", + "release_date": "2024-12-06", + "release_date_precision": "day", + "total_tracks": 26, + "type": "album", + "uri": "spotify:album:10MWtR7jwqRTLQAvmTU7uQ" + } + } + ], + "No Operation, do nothing2": [ + { + "json": { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 22174, + "explicit": false, + "external_urls": { + "spotify": "https://open.spotify.com/track/1uhces29ApKuQWFdpiUsvH" + }, + "href": "https://api.spotify.com/v1/tracks/1uhces29ApKuQWFdpiUsvH", + "id": "1uhces29ApKuQWFdpiUsvH", + "name": "From Zero (Intro)", + "preview_url": null, + "track_number": 1, + "type": "track", + "uri": "spotify:track:1uhces29ApKuQWFdpiUsvH", + "is_local": false + } + }, + { + "json": { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 190427, + "explicit": true, + "external_urls": { + "spotify": "https://open.spotify.com/track/1EDPVGbyPKJPeGqATwXZvN" + }, + "href": "https://api.spotify.com/v1/tracks/1EDPVGbyPKJPeGqATwXZvN", + "id": "1EDPVGbyPKJPeGqATwXZvN", + "name": "The Emptiness Machine", + "preview_url": null, + "track_number": 2, + "type": "track", + "uri": "spotify:track:1EDPVGbyPKJPeGqATwXZvN", + "is_local": false + } + }, + { + "json": { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 228606, + "explicit": false, + "external_urls": { + "spotify": "https://open.spotify.com/track/5mFZipkX1HZ4Idz5LOWpzq" + }, + "href": "https://api.spotify.com/v1/tracks/5mFZipkX1HZ4Idz5LOWpzq", + "id": "5mFZipkX1HZ4Idz5LOWpzq", + "name": "Cut the Bridge", + "preview_url": null, + "track_number": 3, + "type": "track", + "uri": "spotify:track:5mFZipkX1HZ4Idz5LOWpzq", + "is_local": false + } + }, + { + "json": { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 167012, + "explicit": false, + "external_urls": { + "spotify": "https://open.spotify.com/track/2HBBM75Xv3o2Mqdyh1NcM0" + }, + "href": "https://api.spotify.com/v1/tracks/2HBBM75Xv3o2Mqdyh1NcM0", + "id": "2HBBM75Xv3o2Mqdyh1NcM0", + "name": "Heavy Is the Crown", + "preview_url": null, + "track_number": 4, + "type": "track", + "uri": "spotify:track:2HBBM75Xv3o2Mqdyh1NcM0", + "is_local": false + } + }, + { + "json": { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 170445, + "explicit": false, + "external_urls": { + "spotify": "https://open.spotify.com/track/3k4gjmYNJugQRlh2aounZ9" + }, + "href": "https://api.spotify.com/v1/tracks/3k4gjmYNJugQRlh2aounZ9", + "id": "3k4gjmYNJugQRlh2aounZ9", + "name": "Over Each Other", + "preview_url": null, + "track_number": 5, + "type": "track", + "uri": "spotify:track:3k4gjmYNJugQRlh2aounZ9", + "is_local": false + } + }, + { + "json": { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 140915, + "explicit": false, + "external_urls": { + "spotify": "https://open.spotify.com/track/7BkzAHnNW7WfrT4NcLaUDx" + }, + "href": "https://api.spotify.com/v1/tracks/7BkzAHnNW7WfrT4NcLaUDx", + "id": "7BkzAHnNW7WfrT4NcLaUDx", + "name": "Casualty", + "preview_url": null, + "track_number": 6, + "type": "track", + "uri": "spotify:track:7BkzAHnNW7WfrT4NcLaUDx", + "is_local": false + } + }, + { + "json": { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 211027, + "explicit": false, + "external_urls": { + "spotify": "https://open.spotify.com/track/7diOv6wm3ngF7Vt6ubK0Sf" + }, + "href": "https://api.spotify.com/v1/tracks/7diOv6wm3ngF7Vt6ubK0Sf", + "id": "7diOv6wm3ngF7Vt6ubK0Sf", + "name": "Overflow", + "preview_url": null, + "track_number": 7, + "type": "track", + "uri": "spotify:track:7diOv6wm3ngF7Vt6ubK0Sf", + "is_local": false + } + }, + { + "json": { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 183584, + "explicit": false, + "external_urls": { + "spotify": "https://open.spotify.com/track/6i5qhmmF9UNUBRyrPSGn4m" + }, + "href": "https://api.spotify.com/v1/tracks/6i5qhmmF9UNUBRyrPSGn4m", + "id": "6i5qhmmF9UNUBRyrPSGn4m", + "name": "Two Faced", + "preview_url": null, + "track_number": 8, + "type": "track", + "uri": "spotify:track:6i5qhmmF9UNUBRyrPSGn4m", + "is_local": false + } + }, + { + "json": { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 185414, + "explicit": false, + "external_urls": { + "spotify": "https://open.spotify.com/track/0J1IJsMbKWb5g2sJArTkGF" + }, + "href": "https://api.spotify.com/v1/tracks/0J1IJsMbKWb5g2sJArTkGF", + "id": "0J1IJsMbKWb5g2sJArTkGF", + "name": "Stained", + "preview_url": null, + "track_number": 9, + "type": "track", + "uri": "spotify:track:0J1IJsMbKWb5g2sJArTkGF", + "is_local": false + } + }, + { + "json": { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 209083, + "explicit": false, + "external_urls": { + "spotify": "https://open.spotify.com/track/7M8eZBRTD9QNasEVReEM0H" + }, + "href": "https://api.spotify.com/v1/tracks/7M8eZBRTD9QNasEVReEM0H", + "id": "7M8eZBRTD9QNasEVReEM0H", + "name": "IGYEIH", + "preview_url": null, + "track_number": 10, + "type": "track", + "uri": "spotify:track:7M8eZBRTD9QNasEVReEM0H", + "is_local": false + } + }, + { + "json": { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 209844, + "explicit": true, + "external_urls": { + "spotify": "https://open.spotify.com/track/6aCBjSb87RizdH8lVBIRW7" + }, + "href": "https://api.spotify.com/v1/tracks/6aCBjSb87RizdH8lVBIRW7", + "id": "6aCBjSb87RizdH8lVBIRW7", + "name": "Good Things Go", + "preview_url": null, + "track_number": 11, + "type": "track", + "uri": "spotify:track:6aCBjSb87RizdH8lVBIRW7", + "is_local": false + } + } + ], + "No Operation, do nothing4": [ + { + "json": { + "album_type": "album", + "total_tracks": 11, + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "external_urls": { + "spotify": "https://open.spotify.com/album/4R6FV9NSzhPihHR0h4pI93" + }, + "href": "https://api.spotify.com/v1/albums/4R6FV9NSzhPihHR0h4pI93", + "id": "4R6FV9NSzhPihHR0h4pI93", + "images": [ + { + "url": "https://i.scdn.co/image/ab67616d0000b273b11a5489e8cb11dd22b930a0", + "height": 640, + "width": 640 + }, + { + "url": "https://i.scdn.co/image/ab67616d00001e02b11a5489e8cb11dd22b930a0", + "height": 300, + "width": 300 + }, + { + "url": "https://i.scdn.co/image/ab67616d00004851b11a5489e8cb11dd22b930a0", + "height": 64, + "width": 64 + } + ], + "name": "From Zero", + "release_date": "2024-11-15", + "release_date_precision": "day", + "type": "album", + "uri": "spotify:album:4R6FV9NSzhPihHR0h4pI93", + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "tracks": { + "href": "https://api.spotify.com/v1/albums/4R6FV9NSzhPihHR0h4pI93/tracks", + "limit": 50, + "next": null, + "offset": 0, + "previous": null, + "total": 11, + "items": [ + { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 22174, + "explicit": false, + "external_urls": { + "spotify": "https://open.spotify.com/track/1uhces29ApKuQWFdpiUsvH" + }, + "href": "https://api.spotify.com/v1/tracks/1uhces29ApKuQWFdpiUsvH", + "id": "1uhces29ApKuQWFdpiUsvH", + "name": "From Zero (Intro)", + "preview_url": null, + "track_number": 1, + "type": "track", + "uri": "spotify:track:1uhces29ApKuQWFdpiUsvH", + "is_local": false + }, + { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 190427, + "explicit": true, + "external_urls": { + "spotify": "https://open.spotify.com/track/1EDPVGbyPKJPeGqATwXZvN" + }, + "href": "https://api.spotify.com/v1/tracks/1EDPVGbyPKJPeGqATwXZvN", + "id": "1EDPVGbyPKJPeGqATwXZvN", + "name": "The Emptiness Machine", + "preview_url": null, + "track_number": 2, + "type": "track", + "uri": "spotify:track:1EDPVGbyPKJPeGqATwXZvN", + "is_local": false + }, + { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 228606, + "explicit": false, + "external_urls": { + "spotify": "https://open.spotify.com/track/5mFZipkX1HZ4Idz5LOWpzq" + }, + "href": "https://api.spotify.com/v1/tracks/5mFZipkX1HZ4Idz5LOWpzq", + "id": "5mFZipkX1HZ4Idz5LOWpzq", + "name": "Cut the Bridge", + "preview_url": null, + "track_number": 3, + "type": "track", + "uri": "spotify:track:5mFZipkX1HZ4Idz5LOWpzq", + "is_local": false + }, + { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 167012, + "explicit": false, + "external_urls": { + "spotify": "https://open.spotify.com/track/2HBBM75Xv3o2Mqdyh1NcM0" + }, + "href": "https://api.spotify.com/v1/tracks/2HBBM75Xv3o2Mqdyh1NcM0", + "id": "2HBBM75Xv3o2Mqdyh1NcM0", + "name": "Heavy Is the Crown", + "preview_url": null, + "track_number": 4, + "type": "track", + "uri": "spotify:track:2HBBM75Xv3o2Mqdyh1NcM0", + "is_local": false + }, + { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 170445, + "explicit": false, + "external_urls": { + "spotify": "https://open.spotify.com/track/3k4gjmYNJugQRlh2aounZ9" + }, + "href": "https://api.spotify.com/v1/tracks/3k4gjmYNJugQRlh2aounZ9", + "id": "3k4gjmYNJugQRlh2aounZ9", + "name": "Over Each Other", + "preview_url": null, + "track_number": 5, + "type": "track", + "uri": "spotify:track:3k4gjmYNJugQRlh2aounZ9", + "is_local": false + }, + { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 140915, + "explicit": false, + "external_urls": { + "spotify": "https://open.spotify.com/track/7BkzAHnNW7WfrT4NcLaUDx" + }, + "href": "https://api.spotify.com/v1/tracks/7BkzAHnNW7WfrT4NcLaUDx", + "id": "7BkzAHnNW7WfrT4NcLaUDx", + "name": "Casualty", + "preview_url": null, + "track_number": 6, + "type": "track", + "uri": "spotify:track:7BkzAHnNW7WfrT4NcLaUDx", + "is_local": false + }, + { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 211027, + "explicit": false, + "external_urls": { + "spotify": "https://open.spotify.com/track/7diOv6wm3ngF7Vt6ubK0Sf" + }, + "href": "https://api.spotify.com/v1/tracks/7diOv6wm3ngF7Vt6ubK0Sf", + "id": "7diOv6wm3ngF7Vt6ubK0Sf", + "name": "Overflow", + "preview_url": null, + "track_number": 7, + "type": "track", + "uri": "spotify:track:7diOv6wm3ngF7Vt6ubK0Sf", + "is_local": false + }, + { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 183584, + "explicit": false, + "external_urls": { + "spotify": "https://open.spotify.com/track/6i5qhmmF9UNUBRyrPSGn4m" + }, + "href": "https://api.spotify.com/v1/tracks/6i5qhmmF9UNUBRyrPSGn4m", + "id": "6i5qhmmF9UNUBRyrPSGn4m", + "name": "Two Faced", + "preview_url": null, + "track_number": 8, + "type": "track", + "uri": "spotify:track:6i5qhmmF9UNUBRyrPSGn4m", + "is_local": false + }, + { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 185414, + "explicit": false, + "external_urls": { + "spotify": "https://open.spotify.com/track/0J1IJsMbKWb5g2sJArTkGF" + }, + "href": "https://api.spotify.com/v1/tracks/0J1IJsMbKWb5g2sJArTkGF", + "id": "0J1IJsMbKWb5g2sJArTkGF", + "name": "Stained", + "preview_url": null, + "track_number": 9, + "type": "track", + "uri": "spotify:track:0J1IJsMbKWb5g2sJArTkGF", + "is_local": false + }, + { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 209083, + "explicit": false, + "external_urls": { + "spotify": "https://open.spotify.com/track/7M8eZBRTD9QNasEVReEM0H" + }, + "href": "https://api.spotify.com/v1/tracks/7M8eZBRTD9QNasEVReEM0H", + "id": "7M8eZBRTD9QNasEVReEM0H", + "name": "IGYEIH", + "preview_url": null, + "track_number": 10, + "type": "track", + "uri": "spotify:track:7M8eZBRTD9QNasEVReEM0H", + "is_local": false + }, + { + "artists": [ + { + "external_urls": { + "spotify": "https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz" + }, + "href": "https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz", + "id": "6XyY86QOPPrYVGvF9ch6wz", + "name": "Linkin Park", + "type": "artist", + "uri": "spotify:artist:6XyY86QOPPrYVGvF9ch6wz" + } + ], + "available_markets": [ + "AR", + "AU", + "AT", + "BE", + "BO", + "BR", + "BG", + "CA", + "CL", + "CO", + "CR", + "CY", + "CZ", + "DK", + "DO", + "DE", + "EC", + "EE", + "SV", + "FI", + "FR", + "GR", + "GT", + "HN", + "HK", + "HU", + "IS", + "IE", + "IT", + "LV", + "LT", + "LU", + "MY", + "MT", + "MX", + "NL", + "NZ", + "NI", + "NO", + "PA", + "PY", + "PE", + "PH", + "PL", + "PT", + "SG", + "SK", + "ES", + "SE", + "CH", + "TW", + "TR", + "UY", + "US", + "GB", + "AD", + "LI", + "MC", + "ID", + "JP", + "TH", + "VN", + "RO", + "IL", + "ZA", + "SA", + "AE", + "BH", + "QA", + "OM", + "KW", + "EG", + "MA", + "DZ", + "TN", + "LB", + "JO", + "PS", + "IN", + "KZ", + "MD", + "UA", + "AL", + "BA", + "HR", + "ME", + "MK", + "RS", + "SI", + "KR", + "BD", + "PK", + "LK", + "GH", + "KE", + "NG", + "TZ", + "UG", + "AG", + "AM", + "BS", + "BB", + "BZ", + "BT", + "BW", + "BF", + "CV", + "CW", + "DM", + "FJ", + "GM", + "GE", + "GD", + "GW", + "GY", + "HT", + "JM", + "KI", + "LS", + "LR", + "MW", + "MV", + "ML", + "MH", + "FM", + "NA", + "NR", + "NE", + "PW", + "PG", + "PR", + "WS", + "SM", + "ST", + "SN", + "SC", + "SL", + "SB", + "KN", + "LC", + "VC", + "SR", + "TL", + "TO", + "TT", + "TV", + "VU", + "AZ", + "BN", + "BI", + "KH", + "CM", + "TD", + "KM", + "GQ", + "SZ", + "GA", + "GN", + "KG", + "LA", + "MO", + "MR", + "MN", + "NP", + "RW", + "TG", + "UZ", + "ZW", + "BJ", + "MG", + "MU", + "MZ", + "AO", + "CI", + "DJ", + "ZM", + "CD", + "CG", + "IQ", + "LY", + "TJ", + "VE", + "ET", + "XK" + ], + "disc_number": 1, + "duration_ms": 209844, + "explicit": true, + "external_urls": { + "spotify": "https://open.spotify.com/track/6aCBjSb87RizdH8lVBIRW7" + }, + "href": "https://api.spotify.com/v1/tracks/6aCBjSb87RizdH8lVBIRW7", + "id": "6aCBjSb87RizdH8lVBIRW7", + "name": "Good Things Go", + "preview_url": null, + "track_number": 11, + "type": "track", + "uri": "spotify:track:6aCBjSb87RizdH8lVBIRW7", + "is_local": false + } + ] + }, + "copyrights": [ + { + "text": "© 2024 Linkin Park, LLC under exclusive license to Warner Records Inc.", + "type": "C" + }, + { + "text": "℗ 2024 Linkin Park, LLC under exclusive license to Warner Records Inc.", + "type": "P" + } + ], + "external_ids": { + "upc": "093624839811" + }, + "genres": [], + "label": "Warner Records", + "popularity": 91 + } + } + ] + }, + "connections": { + "When clicking ‘Test workflow’": { + "main": [ + [ + { + "node": "Spotify", + "type": "main", + "index": 0 + }, + { + "node": "Spotify1", + "type": "main", + "index": 0 + }, + { + "node": "Spotify2", + "type": "main", + "index": 0 + }, + { + "node": "Spotify4", + "type": "main", + "index": 0 + } + ] + ] + }, + "Spotify": { + "main": [ + [ + { + "node": "No Operation, do nothing", + "type": "main", + "index": 0 + } + ] + ] + }, + "Spotify1": { + "main": [ + [ + { + "node": "No Operation, do nothing1", + "type": "main", + "index": 0 + } + ] + ] + }, + "Spotify2": { + "main": [ + [ + { + "node": "No Operation, do nothing2", + "type": "main", + "index": 0 + } + ] + ] + }, + "No Operation, do nothing2": { + "main": [[]] + }, + "Spotify4": { + "main": [ + [ + { + "node": "No Operation, do nothing4", + "type": "main", + "index": 0 + } + ] + ] + } + }, + "active": false, + "settings": { + "executionOrder": "v1" + }, + "versionId": "e9413658-28ab-43a4-9ab6-409d60326b7e", + "meta": { + "instanceId": "8c8c5237b8e37b006a7adce87f4369350c58e41f3ca9de16196d3197f69eabcd" + }, + "id": "EygPNhavSktkheN2", + "tags": [] +} diff --git a/packages/nodes-base/nodes/Spotify/__tests__/workflow/apiResponses.ts b/packages/nodes-base/nodes/Spotify/__tests__/workflow/apiResponses.ts new file mode 100644 index 0000000000000..aac0c1f00f862 --- /dev/null +++ b/packages/nodes-base/nodes/Spotify/__tests__/workflow/apiResponses.ts @@ -0,0 +1,1146 @@ +const available_markets = [ + 'AR', + 'AU', + 'AT', + 'BE', + 'BO', + 'BR', + 'BG', + 'CA', + 'CL', + 'CO', + 'CR', + 'CY', + 'CZ', + 'DK', + 'DO', + 'DE', + 'EC', + 'EE', + 'SV', + 'FI', + 'FR', + 'GR', + 'GT', + 'HN', + 'HK', + 'HU', + 'IS', + 'IE', + 'IT', + 'LV', + 'LT', + 'LU', + 'MY', + 'MT', + 'MX', + 'NL', + 'NZ', + 'NI', + 'NO', + 'PA', + 'PY', + 'PE', + 'PH', + 'PL', + 'PT', + 'SG', + 'SK', + 'ES', + 'SE', + 'CH', + 'TW', + 'TR', + 'UY', + 'US', + 'GB', + 'AD', + 'LI', + 'MC', + 'ID', + 'JP', + 'TH', + 'VN', + 'RO', + 'IL', + 'ZA', + 'SA', + 'AE', + 'BH', + 'QA', + 'OM', + 'KW', + 'EG', + 'MA', + 'DZ', + 'TN', + 'LB', + 'JO', + 'PS', + 'IN', + 'KZ', + 'MD', + 'UA', + 'AL', + 'BA', + 'HR', + 'ME', + 'MK', + 'RS', + 'SI', + 'KR', + 'BD', + 'PK', + 'LK', + 'GH', + 'KE', + 'NG', + 'TZ', + 'UG', + 'AG', + 'AM', + 'BS', + 'BB', + 'BZ', + 'BT', + 'BW', + 'BF', + 'CV', + 'CW', + 'DM', + 'FJ', + 'GM', + 'GE', + 'GD', + 'GW', + 'GY', + 'HT', + 'JM', + 'KI', + 'LS', + 'LR', + 'MW', + 'MV', + 'ML', + 'MH', + 'FM', + 'NA', + 'NR', + 'NE', + 'PW', + 'PG', + 'PR', + 'WS', + 'SM', + 'ST', + 'SN', + 'SC', + 'SL', + 'SB', + 'KN', + 'LC', + 'VC', + 'SR', + 'TL', + 'TO', + 'TT', + 'TV', + 'VU', + 'AZ', + 'BN', + 'BI', + 'KH', + 'CM', + 'TD', + 'KM', + 'GQ', + 'SZ', + 'GA', + 'GN', + 'KG', + 'LA', + 'MO', + 'MR', + 'MN', + 'NP', + 'RW', + 'TG', + 'UZ', + 'ZW', + 'BJ', + 'MG', + 'MU', + 'MZ', + 'AO', + 'CI', + 'DJ', + 'ZM', + 'CD', + 'CG', + 'IQ', + 'LY', + 'TJ', + 'VE', + 'ET', + 'XK', +]; + +export const searchForAlbum = { + albums: { + href: 'https://api.spotify.com/v1/search?offset=0&limit=2&query=From%20Xero&type=album&locale=en-GB,en-US;q%3D0.9,en;q%3D0.8', + limit: 2, + next: 'https://api.spotify.com/v1/search?offset=2&limit=2&query=From%20Xero&type=album&locale=en-GB,en-US;q%3D0.9,en;q%3D0.8', + offset: 0, + previous: null, + total: 787, + items: [ + { + album_type: 'album', + total_tracks: 11, + available_markets, + external_urls: { + spotify: 'https://open.spotify.com/album/4R6FV9NSzhPihHR0h4pI93', + }, + href: 'https://api.spotify.com/v1/albums/4R6FV9NSzhPihHR0h4pI93', + id: '4R6FV9NSzhPihHR0h4pI93', + images: [ + { + height: 640, + url: 'https://i.scdn.co/image/ab67616d0000b273b11a5489e8cb11dd22b930a0', + width: 640, + }, + { + height: 300, + url: 'https://i.scdn.co/image/ab67616d00001e02b11a5489e8cb11dd22b930a0', + width: 300, + }, + { + height: 64, + url: 'https://i.scdn.co/image/ab67616d00004851b11a5489e8cb11dd22b930a0', + width: 64, + }, + ], + name: 'From Zero', + release_date: '2024-11-15', + release_date_precision: 'day', + type: 'album', + uri: 'spotify:album:4R6FV9NSzhPihHR0h4pI93', + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + }, + { + album_type: 'single', + total_tracks: 3, + available_markets: [ + ...available_markets.slice(0, 79), + 'BY', + ...available_markets.slice(79), + ], + external_urls: { + spotify: 'https://open.spotify.com/album/5v5KesD6W6Ptlid6iyGxSq', + }, + href: 'https://api.spotify.com/v1/albums/5v5KesD6W6Ptlid6iyGxSq', + id: '5v5KesD6W6Ptlid6iyGxSq', + images: [ + { + height: 640, + url: 'https://i.scdn.co/image/ab67616d0000b273b554768192043c597c31133a', + width: 640, + }, + { + height: 300, + url: 'https://i.scdn.co/image/ab67616d00001e02b554768192043c597c31133a', + width: 300, + }, + { + height: 64, + url: 'https://i.scdn.co/image/ab67616d00004851b554768192043c597c31133a', + width: 64, + }, + ], + name: 'From Xero', + release_date: '2021-11-15', + release_date_precision: 'day', + type: 'album', + uri: 'spotify:album:5v5KesD6W6Ptlid6iyGxSq', + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/1EGVsuJeCpKQf69Io9kz1T', + }, + href: 'https://api.spotify.com/v1/artists/1EGVsuJeCpKQf69Io9kz1T', + id: '1EGVsuJeCpKQf69Io9kz1T', + name: 'HJY', + type: 'artist', + uri: 'spotify:artist:1EGVsuJeCpKQf69Io9kz1T', + }, + ], + }, + ], + }, +}; + +export const getNewReleases = { + albums: { + href: 'https://api.spotify.com/v1/browse/new-releases?offset=0&limit=2&locale=en-GB,en-US;q%3D0.9,en;q%3D0.8', + items: [ + { + album_type: 'album', + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/3eVa5w3URK5duf6eyVDbu9', + }, + href: 'https://api.spotify.com/v1/artists/3eVa5w3URK5duf6eyVDbu9', + id: '3eVa5w3URK5duf6eyVDbu9', + name: 'ROSÉ', + type: 'artist', + uri: 'spotify:artist:3eVa5w3URK5duf6eyVDbu9', + }, + ], + available_markets: available_markets.filter((market) => market !== 'KR'), + external_urls: { + spotify: 'https://open.spotify.com/album/7kFyd5oyJdVX2pIi6P4iHE', + }, + href: 'https://api.spotify.com/v1/albums/7kFyd5oyJdVX2pIi6P4iHE', + id: '7kFyd5oyJdVX2pIi6P4iHE', + images: [ + { + height: 300, + url: 'https://i.scdn.co/image/ab67616d00001e025074bd0894cb1340b8d8a678', + width: 300, + }, + { + height: 64, + url: 'https://i.scdn.co/image/ab67616d000048515074bd0894cb1340b8d8a678', + width: 64, + }, + { + height: 640, + url: 'https://i.scdn.co/image/ab67616d0000b2735074bd0894cb1340b8d8a678', + width: 640, + }, + ], + name: 'rosie', + release_date: '2024-12-06', + release_date_precision: 'day', + total_tracks: 12, + type: 'album', + uri: 'spotify:album:7kFyd5oyJdVX2pIi6P4iHE', + }, + { + album_type: 'album', + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/2FXC3k01G6Gw61bmprjgqS', + }, + href: 'https://api.spotify.com/v1/artists/2FXC3k01G6Gw61bmprjgqS', + id: '2FXC3k01G6Gw61bmprjgqS', + name: 'Hozier', + type: 'artist', + uri: 'spotify:artist:2FXC3k01G6Gw61bmprjgqS', + }, + ], + available_markets: ['AU', 'CA', 'PR', 'US'], + external_urls: { + spotify: 'https://open.spotify.com/album/10MWtR7jwqRTLQAvmTU7uQ', + }, + href: 'https://api.spotify.com/v1/albums/10MWtR7jwqRTLQAvmTU7uQ', + id: '10MWtR7jwqRTLQAvmTU7uQ', + images: [ + { + height: 300, + url: 'https://i.scdn.co/image/ab67616d00001e028044f38f15837e87e2b65222', + width: 300, + }, + { + height: 64, + url: 'https://i.scdn.co/image/ab67616d000048518044f38f15837e87e2b65222', + width: 64, + }, + { + height: 640, + url: 'https://i.scdn.co/image/ab67616d0000b2738044f38f15837e87e2b65222', + width: 640, + }, + ], + name: 'Unreal Unearth: Unending', + release_date: '2024-12-06', + release_date_precision: 'day', + total_tracks: 26, + type: 'album', + uri: 'spotify:album:10MWtR7jwqRTLQAvmTU7uQ', + }, + ], + limit: 2, + next: 'https://api.spotify.com/v1/browse/new-releases?offset=2&limit=2&locale=en-GB,en-US;q%3D0.9,en;q%3D0.8', + offset: 0, + previous: null, + total: 100, + }, +}; + +export const getAlbumTracks = { + href: 'https://api.spotify.com/v1/albums/4R6FV9NSzhPihHR0h4pI93/tracks?offset=0&limit=20', + items: [ + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 22174, + explicit: false, + external_urls: { + spotify: 'https://open.spotify.com/track/1uhces29ApKuQWFdpiUsvH', + }, + href: 'https://api.spotify.com/v1/tracks/1uhces29ApKuQWFdpiUsvH', + id: '1uhces29ApKuQWFdpiUsvH', + name: 'From Zero (Intro)', + preview_url: null, + track_number: 1, + type: 'track', + uri: 'spotify:track:1uhces29ApKuQWFdpiUsvH', + is_local: false, + }, + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 190427, + explicit: true, + external_urls: { + spotify: 'https://open.spotify.com/track/1EDPVGbyPKJPeGqATwXZvN', + }, + href: 'https://api.spotify.com/v1/tracks/1EDPVGbyPKJPeGqATwXZvN', + id: '1EDPVGbyPKJPeGqATwXZvN', + name: 'The Emptiness Machine', + preview_url: null, + track_number: 2, + type: 'track', + uri: 'spotify:track:1EDPVGbyPKJPeGqATwXZvN', + is_local: false, + }, + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 228606, + explicit: false, + external_urls: { + spotify: 'https://open.spotify.com/track/5mFZipkX1HZ4Idz5LOWpzq', + }, + href: 'https://api.spotify.com/v1/tracks/5mFZipkX1HZ4Idz5LOWpzq', + id: '5mFZipkX1HZ4Idz5LOWpzq', + name: 'Cut the Bridge', + preview_url: null, + track_number: 3, + type: 'track', + uri: 'spotify:track:5mFZipkX1HZ4Idz5LOWpzq', + is_local: false, + }, + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 167012, + explicit: false, + external_urls: { + spotify: 'https://open.spotify.com/track/2HBBM75Xv3o2Mqdyh1NcM0', + }, + href: 'https://api.spotify.com/v1/tracks/2HBBM75Xv3o2Mqdyh1NcM0', + id: '2HBBM75Xv3o2Mqdyh1NcM0', + name: 'Heavy Is the Crown', + preview_url: null, + track_number: 4, + type: 'track', + uri: 'spotify:track:2HBBM75Xv3o2Mqdyh1NcM0', + is_local: false, + }, + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 170445, + explicit: false, + external_urls: { + spotify: 'https://open.spotify.com/track/3k4gjmYNJugQRlh2aounZ9', + }, + href: 'https://api.spotify.com/v1/tracks/3k4gjmYNJugQRlh2aounZ9', + id: '3k4gjmYNJugQRlh2aounZ9', + name: 'Over Each Other', + preview_url: null, + track_number: 5, + type: 'track', + uri: 'spotify:track:3k4gjmYNJugQRlh2aounZ9', + is_local: false, + }, + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 140915, + explicit: false, + external_urls: { + spotify: 'https://open.spotify.com/track/7BkzAHnNW7WfrT4NcLaUDx', + }, + href: 'https://api.spotify.com/v1/tracks/7BkzAHnNW7WfrT4NcLaUDx', + id: '7BkzAHnNW7WfrT4NcLaUDx', + name: 'Casualty', + preview_url: null, + track_number: 6, + type: 'track', + uri: 'spotify:track:7BkzAHnNW7WfrT4NcLaUDx', + is_local: false, + }, + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 211027, + explicit: false, + external_urls: { + spotify: 'https://open.spotify.com/track/7diOv6wm3ngF7Vt6ubK0Sf', + }, + href: 'https://api.spotify.com/v1/tracks/7diOv6wm3ngF7Vt6ubK0Sf', + id: '7diOv6wm3ngF7Vt6ubK0Sf', + name: 'Overflow', + preview_url: null, + track_number: 7, + type: 'track', + uri: 'spotify:track:7diOv6wm3ngF7Vt6ubK0Sf', + is_local: false, + }, + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 183584, + explicit: false, + external_urls: { + spotify: 'https://open.spotify.com/track/6i5qhmmF9UNUBRyrPSGn4m', + }, + href: 'https://api.spotify.com/v1/tracks/6i5qhmmF9UNUBRyrPSGn4m', + id: '6i5qhmmF9UNUBRyrPSGn4m', + name: 'Two Faced', + preview_url: null, + track_number: 8, + type: 'track', + uri: 'spotify:track:6i5qhmmF9UNUBRyrPSGn4m', + is_local: false, + }, + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 185414, + explicit: false, + external_urls: { + spotify: 'https://open.spotify.com/track/0J1IJsMbKWb5g2sJArTkGF', + }, + href: 'https://api.spotify.com/v1/tracks/0J1IJsMbKWb5g2sJArTkGF', + id: '0J1IJsMbKWb5g2sJArTkGF', + name: 'Stained', + preview_url: null, + track_number: 9, + type: 'track', + uri: 'spotify:track:0J1IJsMbKWb5g2sJArTkGF', + is_local: false, + }, + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 209083, + explicit: false, + external_urls: { + spotify: 'https://open.spotify.com/track/7M8eZBRTD9QNasEVReEM0H', + }, + href: 'https://api.spotify.com/v1/tracks/7M8eZBRTD9QNasEVReEM0H', + id: '7M8eZBRTD9QNasEVReEM0H', + name: 'IGYEIH', + preview_url: null, + track_number: 10, + type: 'track', + uri: 'spotify:track:7M8eZBRTD9QNasEVReEM0H', + is_local: false, + }, + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 209844, + explicit: true, + external_urls: { + spotify: 'https://open.spotify.com/track/6aCBjSb87RizdH8lVBIRW7', + }, + href: 'https://api.spotify.com/v1/tracks/6aCBjSb87RizdH8lVBIRW7', + id: '6aCBjSb87RizdH8lVBIRW7', + name: 'Good Things Go', + preview_url: null, + track_number: 11, + type: 'track', + uri: 'spotify:track:6aCBjSb87RizdH8lVBIRW7', + is_local: false, + }, + ], + limit: 20, + next: null, + offset: 0, + previous: null, + total: 11, +}; + +export const getArtist = { + external_urls: { + spotify: 'https://open.spotify.com/artist/12Chz98pHFMPJEknJQMWvI', + }, + followers: { + href: null, + total: 8063570, + }, + genres: ['alternative rock', 'modern rock', 'permanent wave', 'rock'], + href: 'https://api.spotify.com/v1/artists/12Chz98pHFMPJEknJQMWvI?locale=en-GB%2Cen-US%3Bq%3D0.9%2Cen%3Bq%3D0.8', + id: '12Chz98pHFMPJEknJQMWvI', + images: [ + { + url: 'https://i.scdn.co/image/ab6761610000e5eb0accbbe13e1aa147dd27671c', + height: 640, + width: 640, + }, + { + url: 'https://i.scdn.co/image/ab676161000051740accbbe13e1aa147dd27671c', + height: 320, + width: 320, + }, + { + url: 'https://i.scdn.co/image/ab6761610000f1780accbbe13e1aa147dd27671c', + height: 160, + width: 160, + }, + ], + name: 'Muse', + popularity: 77, + type: 'artist', + uri: 'spotify:artist:12Chz98pHFMPJEknJQMWvI', +}; + +export const getAlbum = { + album_type: 'album', + total_tracks: 11, + available_markets, + external_urls: { + spotify: 'https://open.spotify.com/album/4R6FV9NSzhPihHR0h4pI93', + }, + href: 'https://api.spotify.com/v1/albums/4R6FV9NSzhPihHR0h4pI93', + id: '4R6FV9NSzhPihHR0h4pI93', + images: [ + { + url: 'https://i.scdn.co/image/ab67616d0000b273b11a5489e8cb11dd22b930a0', + height: 640, + width: 640, + }, + { + url: 'https://i.scdn.co/image/ab67616d00001e02b11a5489e8cb11dd22b930a0', + height: 300, + width: 300, + }, + { + url: 'https://i.scdn.co/image/ab67616d00004851b11a5489e8cb11dd22b930a0', + height: 64, + width: 64, + }, + ], + name: 'From Zero', + release_date: '2024-11-15', + release_date_precision: 'day', + type: 'album', + uri: 'spotify:album:4R6FV9NSzhPihHR0h4pI93', + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + tracks: { + href: 'https://api.spotify.com/v1/albums/4R6FV9NSzhPihHR0h4pI93/tracks', + limit: 50, + next: null, + offset: 0, + previous: null, + total: 11, + items: [ + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 22174, + explicit: false, + external_urls: { + spotify: 'https://open.spotify.com/track/1uhces29ApKuQWFdpiUsvH', + }, + href: 'https://api.spotify.com/v1/tracks/1uhces29ApKuQWFdpiUsvH', + id: '1uhces29ApKuQWFdpiUsvH', + name: 'From Zero (Intro)', + preview_url: null, + track_number: 1, + type: 'track', + uri: 'spotify:track:1uhces29ApKuQWFdpiUsvH', + is_local: false, + }, + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 190427, + explicit: true, + external_urls: { + spotify: 'https://open.spotify.com/track/1EDPVGbyPKJPeGqATwXZvN', + }, + href: 'https://api.spotify.com/v1/tracks/1EDPVGbyPKJPeGqATwXZvN', + id: '1EDPVGbyPKJPeGqATwXZvN', + name: 'The Emptiness Machine', + preview_url: null, + track_number: 2, + type: 'track', + uri: 'spotify:track:1EDPVGbyPKJPeGqATwXZvN', + is_local: false, + }, + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 228606, + explicit: false, + external_urls: { + spotify: 'https://open.spotify.com/track/5mFZipkX1HZ4Idz5LOWpzq', + }, + href: 'https://api.spotify.com/v1/tracks/5mFZipkX1HZ4Idz5LOWpzq', + id: '5mFZipkX1HZ4Idz5LOWpzq', + name: 'Cut the Bridge', + preview_url: null, + track_number: 3, + type: 'track', + uri: 'spotify:track:5mFZipkX1HZ4Idz5LOWpzq', + is_local: false, + }, + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 167012, + explicit: false, + external_urls: { + spotify: 'https://open.spotify.com/track/2HBBM75Xv3o2Mqdyh1NcM0', + }, + href: 'https://api.spotify.com/v1/tracks/2HBBM75Xv3o2Mqdyh1NcM0', + id: '2HBBM75Xv3o2Mqdyh1NcM0', + name: 'Heavy Is the Crown', + preview_url: null, + track_number: 4, + type: 'track', + uri: 'spotify:track:2HBBM75Xv3o2Mqdyh1NcM0', + is_local: false, + }, + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 170445, + explicit: false, + external_urls: { + spotify: 'https://open.spotify.com/track/3k4gjmYNJugQRlh2aounZ9', + }, + href: 'https://api.spotify.com/v1/tracks/3k4gjmYNJugQRlh2aounZ9', + id: '3k4gjmYNJugQRlh2aounZ9', + name: 'Over Each Other', + preview_url: null, + track_number: 5, + type: 'track', + uri: 'spotify:track:3k4gjmYNJugQRlh2aounZ9', + is_local: false, + }, + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 140915, + explicit: false, + external_urls: { + spotify: 'https://open.spotify.com/track/7BkzAHnNW7WfrT4NcLaUDx', + }, + href: 'https://api.spotify.com/v1/tracks/7BkzAHnNW7WfrT4NcLaUDx', + id: '7BkzAHnNW7WfrT4NcLaUDx', + name: 'Casualty', + preview_url: null, + track_number: 6, + type: 'track', + uri: 'spotify:track:7BkzAHnNW7WfrT4NcLaUDx', + is_local: false, + }, + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 211027, + explicit: false, + external_urls: { + spotify: 'https://open.spotify.com/track/7diOv6wm3ngF7Vt6ubK0Sf', + }, + href: 'https://api.spotify.com/v1/tracks/7diOv6wm3ngF7Vt6ubK0Sf', + id: '7diOv6wm3ngF7Vt6ubK0Sf', + name: 'Overflow', + preview_url: null, + track_number: 7, + type: 'track', + uri: 'spotify:track:7diOv6wm3ngF7Vt6ubK0Sf', + is_local: false, + }, + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 183584, + explicit: false, + external_urls: { + spotify: 'https://open.spotify.com/track/6i5qhmmF9UNUBRyrPSGn4m', + }, + href: 'https://api.spotify.com/v1/tracks/6i5qhmmF9UNUBRyrPSGn4m', + id: '6i5qhmmF9UNUBRyrPSGn4m', + name: 'Two Faced', + preview_url: null, + track_number: 8, + type: 'track', + uri: 'spotify:track:6i5qhmmF9UNUBRyrPSGn4m', + is_local: false, + }, + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 185414, + explicit: false, + external_urls: { + spotify: 'https://open.spotify.com/track/0J1IJsMbKWb5g2sJArTkGF', + }, + href: 'https://api.spotify.com/v1/tracks/0J1IJsMbKWb5g2sJArTkGF', + id: '0J1IJsMbKWb5g2sJArTkGF', + name: 'Stained', + preview_url: null, + track_number: 9, + type: 'track', + uri: 'spotify:track:0J1IJsMbKWb5g2sJArTkGF', + is_local: false, + }, + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 209083, + explicit: false, + external_urls: { + spotify: 'https://open.spotify.com/track/7M8eZBRTD9QNasEVReEM0H', + }, + href: 'https://api.spotify.com/v1/tracks/7M8eZBRTD9QNasEVReEM0H', + id: '7M8eZBRTD9QNasEVReEM0H', + name: 'IGYEIH', + preview_url: null, + track_number: 10, + type: 'track', + uri: 'spotify:track:7M8eZBRTD9QNasEVReEM0H', + is_local: false, + }, + { + artists: [ + { + external_urls: { + spotify: 'https://open.spotify.com/artist/6XyY86QOPPrYVGvF9ch6wz', + }, + href: 'https://api.spotify.com/v1/artists/6XyY86QOPPrYVGvF9ch6wz', + id: '6XyY86QOPPrYVGvF9ch6wz', + name: 'Linkin Park', + type: 'artist', + uri: 'spotify:artist:6XyY86QOPPrYVGvF9ch6wz', + }, + ], + available_markets, + disc_number: 1, + duration_ms: 209844, + explicit: true, + external_urls: { + spotify: 'https://open.spotify.com/track/6aCBjSb87RizdH8lVBIRW7', + }, + href: 'https://api.spotify.com/v1/tracks/6aCBjSb87RizdH8lVBIRW7', + id: '6aCBjSb87RizdH8lVBIRW7', + name: 'Good Things Go', + preview_url: null, + track_number: 11, + type: 'track', + uri: 'spotify:track:6aCBjSb87RizdH8lVBIRW7', + is_local: false, + }, + ], + }, + copyrights: [ + { + text: '© 2024 Linkin Park, LLC under exclusive license to Warner Records Inc.', + type: 'C', + }, + { + text: '℗ 2024 Linkin Park, LLC under exclusive license to Warner Records Inc.', + type: 'P', + }, + ], + external_ids: { + upc: '093624839811', + }, + genres: [], + label: 'Warner Records', + popularity: 91, +}; diff --git a/packages/nodes-base/nodes/Spotify/__tests__/workflow/workflow.test.ts b/packages/nodes-base/nodes/Spotify/__tests__/workflow/workflow.test.ts new file mode 100644 index 0000000000000..393fd511b4b57 --- /dev/null +++ b/packages/nodes-base/nodes/Spotify/__tests__/workflow/workflow.test.ts @@ -0,0 +1,46 @@ +import nock from 'nock'; + +import { + getAlbum, + getAlbumTracks, + getArtist, + getNewReleases, + searchForAlbum, +} from './apiResponses'; +import { + setup, + equalityTest, + workflowToTests, + getWorkflowFilenames, +} from '../../../../test/nodes/Helpers'; + +describe('Spotify', () => { + describe('Run workflow', () => { + const workflows = getWorkflowFilenames(__dirname); + const tests = workflowToTests(workflows); + + beforeAll(() => { + nock.disableNetConnect(); + + const mock = nock('https://api.spotify.com/v1'); + mock + .get('/search') + .query({ q: 'From Xero', type: 'album', limit: 2 }) + .reply(200, searchForAlbum); + mock.get('/browse/new-releases').query({ limit: 2 }).reply(200, getNewReleases); + mock.get('/albums/4R6FV9NSzhPihHR0h4pI93/tracks').reply(200, getAlbumTracks); + mock.get('/albums/4R6FV9NSzhPihHR0h4pI93').reply(200, getAlbum); + mock.get('/artists/12Chz98pHFMPJEknJQMWvI').reply(200, getArtist); + }); + + afterAll(() => { + nock.restore(); + }); + + const nodeTypes = setup(tests); + + for (const testData of tests) { + test(testData.description, async () => await equalityTest(testData, nodeTypes)); + } + }); +}); diff --git a/packages/nodes-base/test/nodes/FakeCredentialsMap.ts b/packages/nodes-base/test/nodes/FakeCredentialsMap.ts index 96445973e92e7..e7fee750f8198 100644 --- a/packages/nodes-base/test/nodes/FakeCredentialsMap.ts +++ b/packages/nodes-base/test/nodes/FakeCredentialsMap.ts @@ -187,4 +187,24 @@ BQIDAQAB expires_in: 86400, }, }, + spotifyOAuth2Api: { + accessTokenUrl: 'https://accounts.spotify.com/api/token', + authQueryParameters: '', + authUrl: 'https://accounts.spotify.com/authorize', + authentication: 'header', + clientId: 'CLIENT_ID', + clientSecret: 'CLIENT_SECRET', + grantType: 'authorizationCode', + oauthTokenData: { + access_token: 'ACCESS_TOKEN', + expires_in: 3600, + refresh_token: 'REFRESH_TOKEN', + scope: + 'playlist-read-private playlist-read-collaborative user-modify-playback-state user-library-read user-follow-read playlist-modify-private playlist-modify-public user-read-playback-state user-read-currently-playing user-read-recently-played', + token_type: 'Bearer', + }, + scope: + 'user-read-playback-state playlist-read-collaborative user-modify-playback-state playlist-modify-public user-read-currently-playing playlist-read-private user-read-recently-played playlist-modify-private user-library-read user-follow-read', + server: 'https://api.spotify.com/', + }, } as const;