diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..d91fd10 --- /dev/null +++ b/.babelrc @@ -0,0 +1,10 @@ +{ + "compact": "true", + "presets": ["es2015"], + "plugins": ["transform-object-assign"], + "env": { + "production": { + "plugins": ["add-module-exports"] + } + } +} diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..edca18e --- /dev/null +++ b/.eslintrc @@ -0,0 +1,13 @@ +{ + "extends": "standard", + "rules": { + "semi": [2, "always"], + "space-before-function-paren": [2, "never"] + }, + "globals": { + "it": true, + "should": true, + "describe": true, + "before": true, + } +} diff --git a/.gitignore b/.gitignore index 6efe12c..3e32e7b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ node_modules/ +.idea/ npm-debug.log .tmp/ +dist/ +coverage/ diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..e69de29 diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..449691b --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +save-exact=true \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index eda6304..11f9a91 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,6 @@ language: node_js node_js: + - "6" - "5" - "5.1" - "4" @@ -8,6 +9,4 @@ node_js: - "4.0" - "0.12" - "0.11" - - "0.10" - "iojs" - diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..9e4c4d9 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,44 @@ +# Overview + +This document lists the breaking changes, new features, and resolved issues which accompany each version bump. + +## [2016-07-28] 1.0.0 + +### Major Changes (Backwards Incompatible) + +* Calls to API V2 endpoints now return a new `Result` Object, which provides support for pagination, as well as metadata (counts, helpers, etc). The data returned in that page previously in `result[0]` is now available within `result.items[0]`, for example. + +### New Features + +* SDK is no longer exclusively for NodeJS, and supports vanilla JavaScript for use in client-side applications as well. This means you can use this project in your client-side Ticketmaster API consumer as well, i.e. React/Angular/EmberJS apps. + +## [2016-07-19] 0.5.0 + +### Resolved Issues + +* Added 'withCredentials: false' flag for CORS on client version of JS SDK + +## [2016-06-30] 0.4.0 + +### New Features + +* Added Commerce API V2 Offer functionality +* Added support for Discovery API v2 Classifications +* Added support for Discovery API v2 Search Attractions +* Added extra tests around module API + +## [2016-06-23] 0.3.0 + +### New Features + +* Added event search filtering via query string params in API V1 + V2 event.all() calls + +## [2016-05-21] 0.2.0 + +### New Features + +* Added support for Discovery API v2 +* Added Travis CI badge to README.md +* Fixed namespacing if you want to instantiate a subset of the API +* Added specs +* Initial version diff --git a/Makefile b/Makefile index 7b8b51f..bd67ce9 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ install: node_modules/ clean: - @rm -rf node_modules/ + @rm -rf node_modules/ dist/ node_modules/: @npm install diff --git a/README.md b/README.md index a936a81..3e34002 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ -# ticketmaster [![Build Status](https://travis-ci.org/ticketmaster-api/sdk-javascript.svg?branch=master)](https://travis-ci.org/ticketmaster-api/sdk-javascript) +# **[Ticketmaster](https://www.npmjs.com/package/ticketmaster)** [![Build Status](https://travis-ci.org/ticketmaster-api/sdk-javascript.svg?branch=master)](https://travis-ci.org/ticketmaster-api/sdk-javascript) -Node SDK for the Ticketmaster Open Platform (http://developer.ticketmaster.com/). +Javascript SDK for the **[Ticketmaster Open Platform](http://developer.ticketmaster.com/)**. Aims to wrap the Ticketmaster API with coverage for all Open Platform endpoints, featuring: - API key authentication support @@ -10,35 +10,122 @@ Aims to wrap the Ticketmaster API with coverage for all Open Platform endpoints, ## System Requirements - - NodeJS (v0.10 or greater) + - [NodeJS](https://nodejs.org) (v0.12 or greater) -## Usage +## Installation: +```bash +npm install --save ticketmaster@ +``` + +NOTE: We heavily use [semantic versioning](http://semver.org/), and actively introduce breaking changes across MAJOR version changes. To avoid any breaking changes being introduced inadvertently, you should lock this package at a specific version using the npm command above, and upgrade explicitly. + +## Client: + +For use in the browser-based client-side JS applications, a **dist/** folder exists for each release. Releases can be found @ [https://github.com/ticketmaster-api/sdk-javascript/releases](https://github.com/ticketmaster-api/sdk-javascript/releases). + +```bash +git clone --branch git@github.com:ticketmaster-api/sdk-javascript.git +``` + +For browser usage there are two files in **dist/** folder +```bash +./dist/ticketmaster-[version].js (raw with source-maps) +./dist/ticketmaster-[version].min.js (minified) +``` + +Include one of them in to your project: +```html +... + + +... +``` -1. Include the ticketmaster npm package: +Use global variable **ticketmaster** to make an API call (name can be changed in webpack settings during rebuild): - - `npm install --save ticketmaster` +```javascript +ticketmaster('your-api-key').discovery.v2.event.all() +.then(function(result) { + // "result" is an object of Ticketmaster events information +}); +``` -2. Require the package and make an API call: +## Server: + +Require the package and make an API call: ```javascript -var TM = require('ticketmaster'); -TM('your-api-key').discovery.v2.event.all() -.then(function(events) { - // "events" is an array of Ticketmaster event information - console.log(events); +var ticketmaster = require('ticketmaster'); +ticketmaster('your-api-key').discovery.v2.event.all() +.then(function(result) { + // "result" is an object of Ticketmaster events information }); ``` Alternative syntax if you are only interested in a subset of the API: + ```javascript var EventAPI = require('ticketmaster').discovery.v2.event; EventAPI('your-api-key').all() ``` +## Rebuild source: + +In case you want to build your own bundle for client + +`1`. Clone this repository + +```bash +git clone git@github.com:ticketmaster-api/sdk-javascript.git +``` +`2`. install dependencies + +```bash +npm install +``` +`3`. Run npm script: + +- for raw (with source-maps) version of client lib use: +```bash +npm run-script dev +``` +- for minified version of client lib use: +```bash +npm run-script prod +``` +- or (for Windows users): +```bash +npm run-script win-prod +``` + + +## Error handling: + +**Be aware:** no **.catch()** method provided! You should write it by your own. + + +## Result object API: + +(provided only for sets which are result of **.all()** type methods) + +properties: +-`result.items` - Array of Ticketmaster event information. +-`result.page` - Additional general information object. + +methods: +-`result.getPage(index)` - Promise which returns a new Result object. +-`result.nextPage()` - Promise which returns a new Result object. Can take additional param - step (1 by default). +-`result.previousPage()` - Promise which returns a new Result object. Can take additional param - step (1 by default). +-`result.records()` - returns an Array of this page's records +-`result.count()` - returns the total count of items +-`result.isLastPage()` - returns a Boolean if current Result is the last page + ## Running Tests - - `make test` + ```bash + npm test + ``` ## Status @@ -67,7 +154,16 @@ Currently supports the following endpoints: The goal is to implement all endpoints available @ http://developer.ticketmaster.com/. Pull Requests gladly accepted! +## Deployment + +Maintainers can cut a new release: + +```bash +npm version +``` + +This will build, tag, push to git, and push the build folder to npm. + ## Contact Us [internal only] Find us in #open-platform on Ticketmaster Slack! - diff --git a/config.js b/config.js deleted file mode 100644 index 40a5943..0000000 --- a/config.js +++ /dev/null @@ -1,5 +0,0 @@ -var config = { - baseURL: "https://app.ticketmaster.com" -} - -module.exports = config; diff --git a/config/webpack/config.js b/config/webpack/config.js new file mode 100644 index 0000000..552d853 --- /dev/null +++ b/config/webpack/config.js @@ -0,0 +1,31 @@ +import path from 'path'; + +import pkg from './../../package.json'; + +function getFilename(suffix) { + return pkg.name + '-' + pkg.version + suffix; +} + +const settings = (options) => ({ + entry: './lib/index.js', + output: Object.assign({}, { + filename: `node/${pkg.name}.js`, + library: pkg.name, + libraryTarget: 'umd', + path: path.resolve(process.cwd(), 'dist') + }, options.output), + devtool: options.devtool, + module: { + loaders: [ + { + test: /\.js$/, + loader: 'babel', + include: path.join(process.cwd(), 'lib') + } + ] + }, + resolve: options.resolve, + plugins: options.plugins +}); + +export {settings, getFilename}; diff --git a/config/webpack/webpack.config.web.babel.js b/config/webpack/webpack.config.web.babel.js new file mode 100644 index 0000000..af9349c --- /dev/null +++ b/config/webpack/webpack.config.web.babel.js @@ -0,0 +1,23 @@ +import webpack from 'webpack'; + +import {settings, getFilename} from './config'; + +const config = settings({ + output: { + filename: 'web/' + getFilename('.min.js') + }, + devtool: false, + plugins: [ + new webpack.LoaderOptionsPlugin({ + minimize: true, + debug: false + }), + new webpack.optimize.UglifyJsPlugin({ + compress: {warnings: false}, + comments: false, + sourceMap: false + }) + ] +}); + +export default config; diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..ab72c4a --- /dev/null +++ b/docs/index.html @@ -0,0 +1,35 @@ + + + + + TMAPI + + + + + + + + diff --git a/docs/test.js b/docs/test.js new file mode 100644 index 0000000..421d6cd --- /dev/null +++ b/docs/test.js @@ -0,0 +1,21 @@ +var tmapi = require('../dist/node'); + +var sdk = tmapi('YOUR_KEY_HERE'); + +function logNextPage(page) { + console.log(page.page.number, page.items.map(function(item) { + return item.name; + })); + + return page.getNext(); +} + +if (sdk) { + sdk.discovery.v2.event.all({page: 4, size: 5, city: 'London'}) + .then(logNextPage) + .then(logNextPage) + .then(logNextPage) + .catch(function(e) { + console.log(e); + }); +} diff --git a/index.js b/index.js deleted file mode 100644 index c9e68f1..0000000 --- a/index.js +++ /dev/null @@ -1,15 +0,0 @@ -var discovery = require('./lib/discovery'); - -var API = function(apiKey, accessToken) { - return { - apiKey: apiKey, - accessToken: accessToken, - discovery: discovery(apiKey, accessToken) - } -}; - -module.exports = function(apiKey, accessToken) { - return API(apiKey, accessToken); -}; - -module.exports.discovery = discovery; diff --git a/lib/commerce/index.js b/lib/commerce/index.js new file mode 100644 index 0000000..2d10a12 --- /dev/null +++ b/lib/commerce/index.js @@ -0,0 +1,5 @@ +import v2 from './v2'; + +export default (apiKey) => ({ + v2: v2(apiKey) +}); diff --git a/lib/commerce/v2/index.js b/lib/commerce/v2/index.js new file mode 100644 index 0000000..383bc9d --- /dev/null +++ b/lib/commerce/v2/index.js @@ -0,0 +1,7 @@ +import offer from './offer'; + +export const api = 'commerce/v2'; + +export default (apikey) => ({ + offer: offer(apikey) +}); diff --git a/lib/commerce/v2/offer.js b/lib/commerce/v2/offer.js new file mode 100644 index 0000000..20c3d7b --- /dev/null +++ b/lib/commerce/v2/offer.js @@ -0,0 +1,7 @@ +import find from '../../utils/find'; + +import {api} from './'; + +export default (apikey) => ({ + find: find(api, apikey, 'events', 'offers') +}); diff --git a/lib/config.js b/lib/config.js new file mode 100644 index 0000000..52e7d52 --- /dev/null +++ b/lib/config.js @@ -0,0 +1,5 @@ +const config = { + baseURL: 'https://app.ticketmaster.com' +}; + +export default config; diff --git a/lib/discovery/index.js b/lib/discovery/index.js index 7043c53..2c69d81 100644 --- a/lib/discovery/index.js +++ b/lib/discovery/index.js @@ -1,12 +1,7 @@ -var v1 = require('./v1'), - v2 = require('./v2'); +import v1 from './v1'; +import v2 from './v2'; -module.exports = function(apiKey, accessToken) { - return { - v1: v1(apiKey, accessToken), - v2: v2(apiKey, accessToken) - }; -}; - -module.exports.v1 = v1; -module.exports.v2 = v2; +export default (apiKey) => ({ + v1: v1(apiKey), + v2: v2(apiKey) +}); diff --git a/lib/discovery/v1/attraction.js b/lib/discovery/v1/attraction.js new file mode 100644 index 0000000..34957c4 --- /dev/null +++ b/lib/discovery/v1/attraction.js @@ -0,0 +1,9 @@ +import all from '../../utils/all'; +import find from '../../utils/find'; + +import {api} from './'; + +export default (apiKey) => ({ + all: all(api, apiKey, 'attractions'), + find: find(api, apiKey, 'attractions') +}); diff --git a/lib/discovery/v1/attraction/find.js b/lib/discovery/v1/attraction/find.js deleted file mode 100644 index f37376f..0000000 --- a/lib/discovery/v1/attraction/find.js +++ /dev/null @@ -1,20 +0,0 @@ -var Promise = require('bluebird'); -var requestAsync = require('../../../helpers/request_helper'); -var config = require('../../../../config'); - -module.exports = function(apiKey, accessToken) { - return function(attractionId) { - return requestAsync({ - url: config.baseURL + '/discovery/v1/attractions/' + attractionId + '?apikey=' + apiKey, - method: 'GET' - }) - .spread(function (response, body) { - if(response.statusCode === 200) { - return JSON.parse(body); - } else { - parsedBody = JSON.parse(body); - return Promise.reject(parsedBody); - } - }); - } -}; diff --git a/lib/discovery/v1/attraction/index.js b/lib/discovery/v1/attraction/index.js deleted file mode 100644 index 10ab67f..0000000 --- a/lib/discovery/v1/attraction/index.js +++ /dev/null @@ -1,9 +0,0 @@ -var find = require('./find'); - -module.exports = function(apiKey, accessToken) { - return { - find: find(apiKey, accessToken) - } -}; - -module.exports.find = find; diff --git a/lib/discovery/v1/attraction/model.js b/lib/discovery/v1/attraction/model.js deleted file mode 100644 index 72734fe..0000000 --- a/lib/discovery/v1/attraction/model.js +++ /dev/null @@ -1,8 +0,0 @@ -var Attraction = function() { - this.id = undefined; - this.name = undefined; - this.url = undefined; - this.image_url = undefined; -}; - -module.exports = Attraction; diff --git a/lib/discovery/v1/attraction/parse_response.js b/lib/discovery/v1/attraction/parse_response.js deleted file mode 100644 index df23cf3..0000000 --- a/lib/discovery/v1/attraction/parse_response.js +++ /dev/null @@ -1,13 +0,0 @@ -var Attraction = require('./model'); - -module.exports = function(response) { - var attraction = new Attraction; - - attraction.id = response.id; - attraction.name = response.name; - attraction.url = response.url; - attraction.url = response.url; - attraction.image_url = response.image.url; - - return attraction; -}; diff --git a/lib/discovery/v1/category.js b/lib/discovery/v1/category.js new file mode 100644 index 0000000..3fa29a9 --- /dev/null +++ b/lib/discovery/v1/category.js @@ -0,0 +1,9 @@ +import all from '../../utils/all'; +import find from '../../utils/find'; + +import {api} from './'; + +export default (apiKey) => ({ + all: all(api, apiKey, 'categories'), + find: find(api, apiKey, 'categories') +}); diff --git a/lib/discovery/v1/category/find.js b/lib/discovery/v1/category/find.js deleted file mode 100644 index 47bf551..0000000 --- a/lib/discovery/v1/category/find.js +++ /dev/null @@ -1,20 +0,0 @@ -var Promise = require('bluebird'); -var requestAsync = require('../../../helpers/request_helper'); -var config = require('../../../../config'); - -module.exports = function(apiKey, accessToken) { - return function(categoryId) { - return requestAsync({ - url: config.baseURL + '/discovery/v1/categories/' + categoryId + '?apikey=' + apiKey, - method: 'GET' - }) - .spread(function (response, body) { - if(response.statusCode === 200) { - return JSON.parse(body); - } else { - parsedBody = JSON.parse(body); - return Promise.reject(parsedBody); - } - }); - } -}; diff --git a/lib/discovery/v1/category/index.js b/lib/discovery/v1/category/index.js deleted file mode 100644 index 10ab67f..0000000 --- a/lib/discovery/v1/category/index.js +++ /dev/null @@ -1,9 +0,0 @@ -var find = require('./find'); - -module.exports = function(apiKey, accessToken) { - return { - find: find(apiKey, accessToken) - } -}; - -module.exports.find = find; diff --git a/lib/discovery/v1/category/model.js b/lib/discovery/v1/category/model.js deleted file mode 100644 index 78e9182..0000000 --- a/lib/discovery/v1/category/model.js +++ /dev/null @@ -1,7 +0,0 @@ -var Category = function() { - this.id = undefined; - this.name = undefined; - this.level = undefined; -}; - -module.exports = Category; diff --git a/lib/discovery/v1/category/parse_response.js b/lib/discovery/v1/category/parse_response.js deleted file mode 100644 index b1744db..0000000 --- a/lib/discovery/v1/category/parse_response.js +++ /dev/null @@ -1,11 +0,0 @@ -var Category = require('./model'); - -module.exports = function(response) { - var category = new Category; - - category.id = response.id; - category.name = response.name; - category.level = response.level; - - return category; -}; diff --git a/lib/discovery/v1/event.js b/lib/discovery/v1/event.js new file mode 100644 index 0000000..7bc63c2 --- /dev/null +++ b/lib/discovery/v1/event.js @@ -0,0 +1,9 @@ +import all from '../../utils/all'; +import find from '../../utils/find'; + +import {api} from './'; + +export default (apiKey) => ({ + all: all(api, apiKey, 'events'), + find: find(api, apiKey, 'events') +}); diff --git a/lib/discovery/v1/event/all.js b/lib/discovery/v1/event/all.js deleted file mode 100644 index 3a91476..0000000 --- a/lib/discovery/v1/event/all.js +++ /dev/null @@ -1,25 +0,0 @@ -var Promise = require('bluebird'); -var requestAsync = require('../../../helpers/request_helper'); -var config = require('../../../../config'); - -module.exports = function(apiKey, accessToken) { - return function(options) { - options = options || {}; - options.apikey = apiKey; - - return requestAsync({ - url: config.baseURL + '/discovery/v1/events/', - method: 'GET', - qs: options - }) - .spread(function (response, body) { - if(response.statusCode === 200) { - var result = JSON.parse(body); - return result._embedded.events; - } else { - parsedBody = JSON.parse(body); - return Promise.reject(parsedBody); - } - }); - } -}; diff --git a/lib/discovery/v1/event/find.js b/lib/discovery/v1/event/find.js deleted file mode 100644 index 1682448..0000000 --- a/lib/discovery/v1/event/find.js +++ /dev/null @@ -1,20 +0,0 @@ -var Promise = require('bluebird'); -var requestAsync = require('../../../helpers/request_helper'); -var config = require('../../../../config'); - -module.exports = function(apiKey, accessToken) { - return function(eventId) { - return requestAsync({ - url: config.baseURL + '/discovery/v1/events/' + eventId + '?apikey=' + apiKey, - method: 'GET' - }) - .spread(function (response, body) { - if(response.statusCode === 200) { - return JSON.parse(body); - } else { - parsedBody = JSON.parse(body); - return Promise.reject(parsedBody); - } - }); - } -}; diff --git a/lib/discovery/v1/event/index.js b/lib/discovery/v1/event/index.js deleted file mode 100644 index aef3fb6..0000000 --- a/lib/discovery/v1/event/index.js +++ /dev/null @@ -1,12 +0,0 @@ -var all = require('./all'), - find = require('./find'); - -module.exports = function(apiKey, accessToken) { - return { - all: all(apiKey, accessToken), - find: find(apiKey, accessToken) - } -}; - -module.exports.all = all; -module.exports.find = find; diff --git a/lib/discovery/v1/event/model.js b/lib/discovery/v1/event/model.js deleted file mode 100644 index ea3b687..0000000 --- a/lib/discovery/v1/event/model.js +++ /dev/null @@ -1,11 +0,0 @@ -var Event = function() { - this.id = undefined; - this.name = undefined; - this.locale = undefined; - - this.categories = []; - this.attractions = []; - this.venue = undefined; -}; - -module.exports = Event; diff --git a/lib/discovery/v1/event/parse_response.js b/lib/discovery/v1/event/parse_response.js deleted file mode 100644 index f71d1e5..0000000 --- a/lib/discovery/v1/event/parse_response.js +++ /dev/null @@ -1,24 +0,0 @@ -var Event = require('./model'); -var CategoryParser = require('../category/parse_response'); -var AttractionParser = require('../attraction/parse_response'); -var VenueParser = require('../venue/parse_response'); - -module.exports = function(response) { - var event = new Event; - - event.id = response.id; - event.name = response.name; - event.locale = response.locale; - - response._embedded.categories.forEach(function(response) { - event.categories.push(CategoryParser(response)); - }); - - response._embedded.attractions.forEach(function(response) { - event.attractions.push(AttractionParser(response)); - }); - - event.venue = VenueParser(response._embedded.venue[0]); - - return event; -}; diff --git a/lib/discovery/v1/index.js b/lib/discovery/v1/index.js index c984c51..ccf6f01 100644 --- a/lib/discovery/v1/index.js +++ b/lib/discovery/v1/index.js @@ -1,18 +1,13 @@ -var attraction = require('./attraction'), - category = require('./category'), - event = require('./event'), - venue = require('./venue'); +import attraction from './attraction'; +import category from './category'; +import event from './event'; +import venue from './venue'; -module.exports = function(apiKey, accessToken) { - return { - attraction: attraction(apiKey, accessToken), - category: category(apiKey, accessToken), - event: event(apiKey, accessToken), - venue: venue(apiKey, accessToken) - }; -}; +export const api = 'discovery/v1'; -module.exports.attraction = attraction; -module.exports.category = category; -module.exports.event = event; -module.exports.venue = venue; +export default (apiKey) => ({ + attraction: attraction(apiKey), + category: category(apiKey), + event: event(apiKey), + venue: venue(apiKey) +}); diff --git a/lib/discovery/v1/venue.js b/lib/discovery/v1/venue.js new file mode 100644 index 0000000..c33fe1d --- /dev/null +++ b/lib/discovery/v1/venue.js @@ -0,0 +1,9 @@ +import all from '../../utils/all'; +import find from '../../utils/find'; + +import {api} from './'; + +export default (apiKey) => ({ + all: all(api, apiKey, 'venues'), + find: find(api, apiKey, 'venues') +}); diff --git a/lib/discovery/v1/venue/find.js b/lib/discovery/v1/venue/find.js deleted file mode 100644 index 3ded796..0000000 --- a/lib/discovery/v1/venue/find.js +++ /dev/null @@ -1,20 +0,0 @@ -var Promise = require('bluebird'); -var requestAsync = require('../../../helpers/request_helper'); -var config = require('../../../../config'); - -module.exports = function(apiKey, accessToken) { - return function(venueId) { - return requestAsync({ - url: config.baseURL + '/discovery/v1/venues/' + venueId + '?apikey=' + apiKey, - method: 'GET' - }) - .spread(function (response, body) { - if(response.statusCode === 200) { - return JSON.parse(body); - } else { - parsedBody = JSON.parse(body); - return Promise.reject(parsedBody); - } - }); - } -}; diff --git a/lib/discovery/v1/venue/index.js b/lib/discovery/v1/venue/index.js deleted file mode 100644 index bdb6540..0000000 --- a/lib/discovery/v1/venue/index.js +++ /dev/null @@ -1,7 +0,0 @@ -var find = require('./find'); - -module.exports = function(apiKey, accessToken) { - return { - find: find(apiKey, accessToken) - } -}; diff --git a/lib/discovery/v1/venue/model.js b/lib/discovery/v1/venue/model.js deleted file mode 100644 index 1dc184c..0000000 --- a/lib/discovery/v1/venue/model.js +++ /dev/null @@ -1,18 +0,0 @@ -var Venue = function() { - this.id = undefined; - this.name = undefined; - this.test = undefined; - this.url = undefined; - this.locale = undefined; - this.postalCode = undefined; - this.timezone = undefined; - this.city = undefined; - this.state = undefined; - this.country = undefined; - this.address = undefined; - this.location = undefined; - this.markets = undefined; - this.dmas = undefined; -}; - -module.exports = Venue; diff --git a/lib/discovery/v1/venue/parse_response.js b/lib/discovery/v1/venue/parse_response.js deleted file mode 100644 index 574ffb3..0000000 --- a/lib/discovery/v1/venue/parse_response.js +++ /dev/null @@ -1,19 +0,0 @@ -var Venue = require('./model'); - -module.exports = function(response) { - var venue = new Venue; - - venue.id = response.id; - venue.name = response.name; - venue.country = response.country.countryCode; - venue.state = response.state.stateCode; - venue.city = response.city.name; - venue.postal_code = response.postalCode; - venue.latitude = response.location.latitude; - venue.longitude = response.location.longitude; - venue.address_line_1 = response.address.line1; - venue.address_line_2 = response.address.line2; - venue.time_zone = response.timeZone; - - return venue; -}; diff --git a/lib/discovery/v2/attraction.js b/lib/discovery/v2/attraction.js new file mode 100644 index 0000000..34957c4 --- /dev/null +++ b/lib/discovery/v2/attraction.js @@ -0,0 +1,9 @@ +import all from '../../utils/all'; +import find from '../../utils/find'; + +import {api} from './'; + +export default (apiKey) => ({ + all: all(api, apiKey, 'attractions'), + find: find(api, apiKey, 'attractions') +}); diff --git a/lib/discovery/v2/attraction/find.js b/lib/discovery/v2/attraction/find.js deleted file mode 100644 index 5161e9c..0000000 --- a/lib/discovery/v2/attraction/find.js +++ /dev/null @@ -1,20 +0,0 @@ -var Promise = require('bluebird'); -var requestAsync = require('../../../helpers/request_helper'); -var config = require('../../../../config'); - -module.exports = function(apiKey, accessToken) { - return function(attractionId) { - return requestAsync({ - url: config.baseURL + '/discovery/v2/attractions/' + attractionId + '?apikey=' + apiKey, - method: 'GET' - }) - .spread(function (response, body) { - if(response.statusCode === 200) { - return JSON.parse(body); - } else { - parsedBody = JSON.parse(body); - return Promise.reject(parsedBody); - } - }); - } -}; diff --git a/lib/discovery/v2/attraction/index.js b/lib/discovery/v2/attraction/index.js deleted file mode 100644 index 10ab67f..0000000 --- a/lib/discovery/v2/attraction/index.js +++ /dev/null @@ -1,9 +0,0 @@ -var find = require('./find'); - -module.exports = function(apiKey, accessToken) { - return { - find: find(apiKey, accessToken) - } -}; - -module.exports.find = find; diff --git a/lib/discovery/v2/attraction/model.js b/lib/discovery/v2/attraction/model.js deleted file mode 100644 index ab834d2..0000000 --- a/lib/discovery/v2/attraction/model.js +++ /dev/null @@ -1,11 +0,0 @@ -var Attraction = function() { - this.id = undefined; - this.name = undefined; - this.test = undefined; - this.url = undefined; - this.locale = undefined; - this.images = undefined; - this.classifications = undefined; -}; - -module.exports = Attraction; diff --git a/lib/discovery/v2/attraction/parse_response.js b/lib/discovery/v2/attraction/parse_response.js deleted file mode 100644 index 8c95cc7..0000000 --- a/lib/discovery/v2/attraction/parse_response.js +++ /dev/null @@ -1,15 +0,0 @@ -var Attraction = require('./model'); - -module.exports = function(response) { - var attraction = new Attraction; - - attraction.id = response.id; - attraction.name = response.name; - attraction.test = response.test; - attraction.url = response.url; - attraction.locale = response.locale; - attraction.images = response.images; - attraction.classifications = response.classifications; - - return attraction; -}; diff --git a/lib/discovery/v2/classification.js b/lib/discovery/v2/classification.js new file mode 100644 index 0000000..0ebfd02 --- /dev/null +++ b/lib/discovery/v2/classification.js @@ -0,0 +1,9 @@ +import all from '../../utils/all'; +import find from '../../utils/find'; + +import {api} from './'; + +export default (apiKey) => ({ + all: all(api, apiKey, 'classifications'), + find: find(api, apiKey, 'classifications') +}); diff --git a/lib/discovery/v2/event.js b/lib/discovery/v2/event.js new file mode 100644 index 0000000..3534d59 --- /dev/null +++ b/lib/discovery/v2/event.js @@ -0,0 +1,10 @@ +import all from '../../utils/all'; +import find from '../../utils/find'; + +import {api} from './'; + +export default (apiKey) => ({ + all: all(api, apiKey, 'events'), + find: find(api, apiKey, 'events'), + findImages: find(api, apiKey, 'events', 'images') +}); diff --git a/lib/discovery/v2/event/all.js b/lib/discovery/v2/event/all.js deleted file mode 100644 index 0e0ff98..0000000 --- a/lib/discovery/v2/event/all.js +++ /dev/null @@ -1,25 +0,0 @@ -var Promise = require('bluebird'); -var requestAsync = require('../../../helpers/request_helper'); -var config = require('../../../../config'); - -module.exports = function(apiKey, accessToken) { - return function(options) { - options = options || {}; - options.apikey = apiKey; - - return requestAsync({ - url: config.baseURL + '/discovery/v2/events/', - method: 'GET', - qs: options - }) - .spread(function (response, body) { - if(response.statusCode === 200) { - var result = JSON.parse(body); - return result._embedded.events; - } else { - parsedBody = JSON.parse(body); - return Promise.reject(parsedBody); - } - }); - } -}; diff --git a/lib/discovery/v2/event/find.js b/lib/discovery/v2/event/find.js deleted file mode 100644 index 740ef33..0000000 --- a/lib/discovery/v2/event/find.js +++ /dev/null @@ -1,20 +0,0 @@ -var Promise = require('bluebird'); -var requestAsync = require('../../../helpers/request_helper'); -var config = require('../../../../config'); - -module.exports = function(apiKey, accessToken) { - return function(eventId) { - return requestAsync({ - url: config.baseURL + '/discovery/v2/events/' + eventId + '?apikey=' + apiKey, - method: 'GET' - }) - .spread(function (response, body) { - if(response.statusCode === 200) { - return JSON.parse(body); - } else { - parsedBody = JSON.parse(body); - return Promise.reject(parsedBody); - } - }); - } -}; diff --git a/lib/discovery/v2/event/index.js b/lib/discovery/v2/event/index.js deleted file mode 100644 index aef3fb6..0000000 --- a/lib/discovery/v2/event/index.js +++ /dev/null @@ -1,12 +0,0 @@ -var all = require('./all'), - find = require('./find'); - -module.exports = function(apiKey, accessToken) { - return { - all: all(apiKey, accessToken), - find: find(apiKey, accessToken) - } -}; - -module.exports.all = all; -module.exports.find = find; diff --git a/lib/discovery/v2/event/model.js b/lib/discovery/v2/event/model.js deleted file mode 100644 index 5b3d515..0000000 --- a/lib/discovery/v2/event/model.js +++ /dev/null @@ -1,20 +0,0 @@ -var Event = function() { - this.id = undefined; - this.name = undefined; - this.locale = undefined; - this.test = undefined; - this.url = undefined; - this.locale = undefined; - this.images = []; - this.sale = []; - this.date = []; - this.classification = []; - this.promoter = undefined; - this.info = undefined; - this.priceRange = []; - - this.attractions = []; - this.venue = undefined; -}; - -module.exports = Event; diff --git a/lib/discovery/v2/event/parse_response.js b/lib/discovery/v2/event/parse_response.js deleted file mode 100644 index 12983ee..0000000 --- a/lib/discovery/v2/event/parse_response.js +++ /dev/null @@ -1,31 +0,0 @@ -var Event = require('./model'); -var AttractionParser = require('../attraction/parse_response'); -var VenueParser = require('../venue/parse_response'); - -module.exports = function(response) { - var event = new Event; - - event.id = response.id; - event.name = response.name; - event.locale = response.locale; - event.test = response.test; - event.url = response.url; - event.locale = response.locale; - event.images = response.images; - event.sale = response.sale; - event.date = response.date; - event.classification = response.classification; - event.promoter = response.promoter; - event.info = response.info; - event.priceRange = response.priceRange; - - response._embedded.attractions.forEach(function(response) { - event.attractions.push(AttractionParser(response)); - }); - - response._embedded.venues.forEach(function(response) { - event.venues.push(VenueParser(response)); - }); - - return event; -}; diff --git a/lib/discovery/v2/index.js b/lib/discovery/v2/index.js index b6a7530..a48b00d 100644 --- a/lib/discovery/v2/index.js +++ b/lib/discovery/v2/index.js @@ -1,15 +1,13 @@ -var attraction = require('./attraction'), - event = require('./event'), - venue = require('./venue'); +import attraction from './attraction'; +import classification from './classification'; +import event from './event'; +import venue from './venue'; -module.exports = function(apiKey, accessToken) { - return { - attraction: attraction(apiKey, accessToken), - event: event(apiKey, accessToken), - venue: venue(apiKey, accessToken) - }; -}; +export const api = 'discovery/v2'; -module.exports.attraction = attraction; -module.exports.event = event; -module.exports.venue = venue; +export default (apiKey) => ({ + attraction: attraction(apiKey), + classification: classification(apiKey), + event: event(apiKey), + venue: venue(apiKey) +}); diff --git a/lib/discovery/v2/venue.js b/lib/discovery/v2/venue.js new file mode 100644 index 0000000..c33fe1d --- /dev/null +++ b/lib/discovery/v2/venue.js @@ -0,0 +1,9 @@ +import all from '../../utils/all'; +import find from '../../utils/find'; + +import {api} from './'; + +export default (apiKey) => ({ + all: all(api, apiKey, 'venues'), + find: find(api, apiKey, 'venues') +}); diff --git a/lib/discovery/v2/venue/find.js b/lib/discovery/v2/venue/find.js deleted file mode 100644 index 08c677a..0000000 --- a/lib/discovery/v2/venue/find.js +++ /dev/null @@ -1,20 +0,0 @@ -var Promise = require('bluebird'); -var requestAsync = require('../../../helpers/request_helper'); -var config = require('../../../../config'); - -module.exports = function(apiKey, accessToken) { - return function(venueId) { - return requestAsync({ - url: config.baseURL + '/discovery/v2/venues/' + venueId + '?apikey=' + apiKey, - method: 'GET' - }) - .spread(function (response, body) { - if(response.statusCode === 200) { - return JSON.parse(body); - } else { - parsedBody = JSON.parse(body); - return Promise.reject(parsedBody); - } - }); - } -}; diff --git a/lib/discovery/v2/venue/index.js b/lib/discovery/v2/venue/index.js deleted file mode 100644 index bdb6540..0000000 --- a/lib/discovery/v2/venue/index.js +++ /dev/null @@ -1,7 +0,0 @@ -var find = require('./find'); - -module.exports = function(apiKey, accessToken) { - return { - find: find(apiKey, accessToken) - } -}; diff --git a/lib/discovery/v2/venue/model.js b/lib/discovery/v2/venue/model.js deleted file mode 100644 index cf2798d..0000000 --- a/lib/discovery/v2/venue/model.js +++ /dev/null @@ -1,17 +0,0 @@ -var Venue = function() { - this.id = undefined; - this.name = undefined; - this.test = undefined; - this.url = undefined; - this.locale = undefined; - this.postalCode = undefined; - this.timezone = undefined; - this.city = undefined; - this.country = undefined; - this.address = undefined; - this.location = undefined; - this.markets = []; - this.dmas = []; -}; - -module.exports = Venue; diff --git a/lib/discovery/v2/venue/parse_response.js b/lib/discovery/v2/venue/parse_response.js deleted file mode 100644 index 07bb107..0000000 --- a/lib/discovery/v2/venue/parse_response.js +++ /dev/null @@ -1,21 +0,0 @@ -var Venue = require('./model'); - -module.exports = function(response) { - var venue = new Venue; - - venue.id = response.id; - venue.name = response.name; - venue.test = response.test; - venue.url = response.url; - venue.locale = response.locale; - venue.postal_code = response.postalCode; - venue.timezone = response.timezone; - venue.city = response.city; - venue.country = response.country; - venue.address = response.address; - venue.location = response.location; - venue.markets = response.markets; - venue.dmas = response.dmas; - - return venue; -}; diff --git a/lib/helpers/request_helper.js b/lib/helpers/request_helper.js deleted file mode 100644 index b65bbf0..0000000 --- a/lib/helpers/request_helper.js +++ /dev/null @@ -1,11 +0,0 @@ -var Promise = require('bluebird'); -var request = require('request'); - -var requestAsync = Promise.promisify(request.defaults({ - headers: { - 'Accept': 'application/json' - }, - timeout: 30000 -})); - -module.exports = requestAsync diff --git a/lib/index.js b/lib/index.js new file mode 100644 index 0000000..16ed79d --- /dev/null +++ b/lib/index.js @@ -0,0 +1,16 @@ +import discovery from './discovery/index'; +import commerce from './commerce/index'; + +const API = (apikey) => { + if (apikey === 'YOUR_KEY_HERE') { + return console.log('Please apply for your key at https://live-livenation.devportal.apigee.com/user/register'); + } + + return { + apikey, + discovery: discovery(apikey), + commerce: commerce(apikey) + }; +}; + +export default API; diff --git a/lib/page.js b/lib/page.js new file mode 100644 index 0000000..f407298 --- /dev/null +++ b/lib/page.js @@ -0,0 +1,86 @@ +import getData from './utils/getData'; + +/** + * Page object constructor + * @param options + * @constructor + */ +class Page { + constructor({_embedded, page}, path, qs) { + const itemKey = Object.keys(_embedded)[0]; + + this.items = _embedded[itemKey]; + this.page = page; + this.path = path; + this.qs = qs; + } + + /** + * Method of Page object type + * Gets some page of results by it's number passed as param. + * @param n {number} + * @returns {Promise} + */ + getAt(n) { + const qs = Object.assign({}, this.qs, {page: n}); + + if (n > 0 && n <= this.page.totalPages) { + return getData({path: this.path, qs}); + } + + return Promise.reject({message: 'You should pass correct page number.', qs}); + }; + + /** + * Method of Page object type + * (Iterator method) Gets next page of same type results + * @param step {number} + * @returns {Promise} + */ + getNext(step = 1) { + const n = this.page.number + step; + const qs = Object.assign({}, this.qs, {page: n}); + + if (n <= this.page.totalPages) { + return getData({path: this.path, qs}); + } + + return Promise.reject({message: 'No next page! You are on the last.', qs}); + }; + + /** + * Method of Page object type + * (Iterator method) Gets previous page of same type results + * @param step {number} + * @returns {Promise} + */ + getPrev(step = 1) { + const n = this.page.number - step; + const qs = Object.assign({}, this.qs, {page: n}); + + if (n > 0) { + return getData({path: this.path, qs}); + } + + return Promise.reject({message: 'No previous page! You are on the first one.', qs}); + }; + + /** + * Method of Page object type + * Checker if current result page is the last one + * @returns {boolean} + */ + isLast() { + return this.page.number === this.page.totalPages; + }; + + /** + * Method of Page object type + * @returns {number} quantity of all items of the same type + */ + count() { + return this.page.totalElements; + }; +} + +export default Page; diff --git a/lib/utils/all.js b/lib/utils/all.js new file mode 100644 index 0000000..5206d5c --- /dev/null +++ b/lib/utils/all.js @@ -0,0 +1,12 @@ +import getData from './getData'; + +export default (api, apikey, type) => (qs = {}) => { + qs.apikey = apikey; + + const params = { + path: [api, type], + qs: qs + }; + + return getData(params); +}; diff --git a/lib/utils/find.js b/lib/utils/find.js new file mode 100644 index 0000000..d2f06e5 --- /dev/null +++ b/lib/utils/find.js @@ -0,0 +1,10 @@ +import getData from './getData'; + +export default (api, apikey, type, ...path) => (eventId) => { + const params = { + path: [api, type, eventId, ...path], + qs: {apikey} + }; + + return getData(params); +}; diff --git a/lib/utils/getData.js b/lib/utils/getData.js new file mode 100644 index 0000000..76cb810 --- /dev/null +++ b/lib/utils/getData.js @@ -0,0 +1,25 @@ +import fetch from 'isomorphic-fetch'; +import queryString from 'query-string'; + +import config from '../config'; +import Page from '../page'; + +const getURL = (path, qs) => { + return `${[config.baseURL].concat(path).join('/')}?${queryString.stringify(qs)}`; +}; + +/** + * Main GET Data configuration function for API + * + * @param path {array} + * @param qs {string} + * + * @returns {promise} + */ +const getData = ({path, qs}) => { + return fetch(getURL(path, qs)) + .then((res) => (res.status === 200) ? res.json() : res.json().then(Promise.reject.bind(Promise))) + .then((json) => json.page ? new Page(json, path, qs) : json); +}; + +export default getData; diff --git a/package.json b/package.json index 6fccd90..258e701 100644 --- a/package.json +++ b/package.json @@ -1,21 +1,60 @@ { "name": "ticketmaster", - "version": "0.2.0", - "description": "Node SDK for the Ticketmaster Open Platform", - "main": "index.js", + "version": "2.0.4", + "description": "SDK for the Ticketmaster Open Platform", + "main": "./dist/node/index.js", + "module": "./lib/index.js", "scripts": { - "test": "./node_modules/mocha/bin/mocha test --recursive" + "clean": "rimraf ./dist", + "build": "npm run prod:web && npm run prod:node", + "prod:node": "cross-env NODE_ENV=production babel lib -d dist/node", + "prod:web": "cross-env NODE_ENV=production webpack --config ./config/webpack/webpack.config.web.babel.js", + "stats:web": "npm run prod:web -- --display-modules --sort-modules-by size", + "test": "cross-env NODE_ENV=test mocha", + "lint": "eslint ./lib ./test", + "precommit": "npm run lint && npm test", + "postcommit": "npm run build", + "preversion": "npm run clean", + "postversion": "./scripts/post-release.sh" + }, + "keywords": [ + "ticketmaster", + "ticketmaster-api", + "ticketmaster-sdk", + "ticketmaster-node", + "ticketmaster-client" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/ticketmaster-api/sdk-javascript.git" }, "author": "Adam Meghji", "license": "MIT", "devDependencies": { - "chai": "3.0.0", - "inherits": "^2.0.1", - "mocha": "2.2.5", - "nock": "2.6.0" + "babel-cli": "6.11.4", + "babel-core": "6.13.1", + "babel-loader": "6.2.4", + "babel-plugin-add-module-exports": "0.2.1", + "babel-plugin-transform-object-assign": "6.8.0", + "babel-preset-es2015": "6.13.1", + "babel-preset-es2015-webpack": "6.4.2", + "babel-register": "6.11.6", + "chai": "3.5.0", + "cross-env": "2.0.0", + "eslint": "3.2.2", + "eslint-config-standard": "5.3.5", + "eslint-plugin-promise": "2.0.0", + "eslint-plugin-standard": "2.0.0", + "husky": "0.11.6", + "inherits": "2.0.1", + "mocha": "3.0.1", + "nock": "8.0.0", + "rimraf": "2.5.4", + "webpack": "2.1.0-beta.20" }, "dependencies": { - "bluebird": "2.9.30", - "request": "2.58.0" - } + "query-string": "4.2.2", + "isomorphic-fetch": "2.2.1" + }, + "homepage": "https://github.com/ticketmaster-api/sdk-javascript" } diff --git a/scripts/post-release.sh b/scripts/post-release.sh new file mode 100755 index 0000000..cd24e5c --- /dev/null +++ b/scripts/post-release.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +VERSION=$(cat package.json | grep '"version":' | grep -o '\d\+\.\d\+\.\d\+') +GIT_BRANCH=$(git symbolic-ref HEAD | sed -e 's|^refs/heads/||') +GIT_TAG="${VERSION}" +RELEASE_BRANCH="release-$VERSION" + +trap '{ echo -e "\nError: $BASH_COMMAND" >&2; cleanup; exit 1; }' ERR +trap '{ echo -e "\nExit" >&2; cleanup; exit 1; }' SIGQUIT SIGTERM SIGINT + +cleanup() { + rm -rf ./dist + git checkout $GIT_BRANCH + git branch -D $RELEASE_BRANCH +} + +git checkout -b $RELEASE_BRANCH +npm run build +git add --force ./dist +git commit -m "Build $VERSION" +git tag $GIT_TAG --force -m "Release $VERSION" + +printf "Push release? [yN] " +read -n 1 push +printf "\n" + +if [ $push == "y" ] +then + git push origin $GIT_TAG + npm publish +fi + +cleanup diff --git a/test/commerce/index.js b/test/commerce/index.js new file mode 100644 index 0000000..054a96b --- /dev/null +++ b/test/commerce/index.js @@ -0,0 +1,8 @@ +import commerce from '../../lib/commerce'; + +describe('commerce', () => { + it('should provide v2', done => { + commerce().should.have.property('v2'); + done(); + }); +}); diff --git a/test/commerce/v2/index.js b/test/commerce/v2/index.js new file mode 100644 index 0000000..a1a7a87 --- /dev/null +++ b/test/commerce/v2/index.js @@ -0,0 +1,8 @@ +import v2 from '../../../lib/commerce/v2'; + +describe('commerce.v2', () => { + it('should provide offer', done => { + v2().should.have.property('offer'); + done(); + }); +}); diff --git a/test/commerce/v2/offer/find.js b/test/commerce/v2/offer/find.js new file mode 100644 index 0000000..16e9287 --- /dev/null +++ b/test/commerce/v2/offer/find.js @@ -0,0 +1,35 @@ +import {back as nockBack} from 'nock'; + +import Offer from '../../../../lib/commerce/v2/offer'; + +describe('commerce.v2.offer.find', () => { + before(() => { + nockBack.fixtures = './test/fixtures/commerce/v2'; + }); + + describe('success', () => { + it('should find offers', (done) => { + nockBack('offer/find-200.json', {}, (nockDone) => { + Offer('mock-api-key').find('vvG1iZKU5jIxKX', 'offers') + .then((result) => { + result.limits.max.should.equal(14); + nockDone(); + done(); + }); + }); + }); + }); + + describe('not found', () => { + it('should handle 500', (done) => { + nockBack('offer/find-500.json', {}, (nockDone) => { + Offer('mock-api-key').find('unknown-id', 'offers') + .catch((response) => { + response.errors[0].code.should.equal('40001'); + nockDone(); + done(); + }); + }); + }); + }); +}); diff --git a/test/commerce/v2/offer/index.js b/test/commerce/v2/offer/index.js new file mode 100644 index 0000000..519822c --- /dev/null +++ b/test/commerce/v2/offer/index.js @@ -0,0 +1,8 @@ +import event from '../../../../lib/commerce/v2/offer'; + +describe('commerce.v2.offer', () => { + it('should provide find', (done) => { + event().should.have.property('find'); + done(); + }); +}); diff --git a/test/discovery/index.js b/test/discovery/index.js index a0a0d54..e05d3f1 100644 --- a/test/discovery/index.js +++ b/test/discovery/index.js @@ -1,16 +1,14 @@ -var chai = require("chai"); -var should = chai.should(); -var discovery = require('../../lib/discovery'); +import discovery from '../../lib/discovery'; -describe('discovery', function() { - it('should provide v1', function(done) { +describe('discovery', () => { + it('should provide v1', done => { discovery().should.have.property('v1'); done(); }); }); -describe('discovery', function() { - it('should provide v2', function(done) { +describe('discovery', () => { + it('should provide v2', done => { discovery().should.have.property('v2'); done(); }); diff --git a/test/discovery/v1/attraction/find.js b/test/discovery/v1/attraction/find.js index 33872d8..e7307aa 100644 --- a/test/discovery/v1/attraction/find.js +++ b/test/discovery/v1/attraction/find.js @@ -1,26 +1,22 @@ -var chai = require("chai"); -var should = chai.should(); -var nock = require('nock'); -var nockBack = nock.back; -var Find = require('../../../../lib/discovery/v1/attraction/find'); +import {back as nockBack} from 'nock'; -describe('discovery.v1.attraction.find', function() { - before(function() { - nockBack.fixtures = './test/fixtures/discovery/v1' +import Attraction from '../../../../lib/discovery/v1/attraction'; + +describe('discovery.v1.attraction.find', () => { + before(() => { + nockBack.fixtures = './test/fixtures/discovery/v1'; }); - describe('success', function() { - it('should find a attraction', function(done) { + describe('success', () => { + it('should find a attraction', done => { nockBack('attraction/find-200.json', {}, function(nockDone) { - var find = Find('mock-api-key'); - find('1542376') - .then((function(_this) { - return function(result) { - result.name.should.equal("Monster Jam"); + Attraction('mock-api-key').find('1542376') + .then((result) => { + result.name.should.equal('Monster Jam'); nockDone(); done(); - }; - })(this)) + }) + .catch(() => done()); }); }); }); diff --git a/test/discovery/v1/attraction/index.js b/test/discovery/v1/attraction/index.js index 85c905a..cc400f6 100644 --- a/test/discovery/v1/attraction/index.js +++ b/test/discovery/v1/attraction/index.js @@ -1,9 +1,7 @@ -var chai = require("chai"); -var should = chai.should(); -var attraction = require('../../../../lib/discovery/v1/attraction'); +import attraction from '../../../../lib/discovery/v1/attraction'; -describe('discovery.v1.attraction', function() { - it('should provide find', function(done) { +describe('discovery.v1.attraction', () => { + it('should provide find', done => { attraction().should.have.property('find'); done(); }); diff --git a/test/discovery/v1/attraction/parse_response.js b/test/discovery/v1/attraction/parse_response.js deleted file mode 100644 index 7454a99..0000000 --- a/test/discovery/v1/attraction/parse_response.js +++ /dev/null @@ -1,33 +0,0 @@ -var chai = require("chai"); -var should = chai.should(); -var getAttractionJson = require('../../../fixtures/discovery/v1/attraction/find-200')[0].response; -var ParseResponse = require('../../../../lib/discovery/v1/attraction/parse_response'); - -describe('discovery.v1.attraction.parseResponse', function() { - describe('success', function() { - it('should return a Attraction object', function(done) { - ParseResponse(getAttractionJson).should.be.a('object'); - done(); - }); - - it('should set name', function(done) { - ParseResponse(getAttractionJson).name.should.eq('Monster Jam'); - done(); - }); - - it('should set id', function(done) { - ParseResponse(getAttractionJson).id.should.eq('1542376'); - done(); - }); - - it('should set url', function(done) { - ParseResponse(getAttractionJson).url.should.eq('/Monster-Jam-tickets/artist/1542376'); - done(); - }); - - it('should set image_url', function(done) { - ParseResponse(getAttractionJson).image_url.should.eq('/dam/a/538/8948796f-1145-44d1-b738-c4308059d538_55751_EVENT_DETAIL_PAGE_16_9.jpg'); - done(); - }); - }); -}); diff --git a/test/discovery/v1/category/find.js b/test/discovery/v1/category/find.js index 81a13b3..c55b75c 100644 --- a/test/discovery/v1/category/find.js +++ b/test/discovery/v1/category/find.js @@ -1,26 +1,22 @@ -var chai = require("chai"); -var should = chai.should(); -var nock = require('nock'); -var nockBack = nock.back; -var Find = require('../../../../lib/discovery/v1/category/find'); +import {back as nockBack} from 'nock'; -describe('discovery.v1.category.find', function() { - before(function() { - nockBack.fixtures = './test/fixtures/discovery/v1' +import Category from '../../../../lib/discovery/v1/category'; + +describe('discovery.v1.category.find', () => { + before(() => { + nockBack.fixtures = './test/fixtures/discovery/v1'; }); - describe('success', function() { - it('should find a category', function(done) { - nockBack('category/find-200.json', {}, function(nockDone) { - var find = Find('mock-api-key'); - find('10004') - .then((function(_this) { - return function(result) { - result.name.should.equal("Sports"); + describe('success', () => { + it('should find a category', done => { + nockBack('category/find-200.json', {}, nockDone => { + Category('mock-api-key').find('10004') + .then((result) => { + result.name.should.equal('Sports'); nockDone(); done(); - }; - })(this)) + }) + .catch(() => done()); }); }); }); diff --git a/test/discovery/v1/category/index.js b/test/discovery/v1/category/index.js index 2e325cf..008d7e5 100644 --- a/test/discovery/v1/category/index.js +++ b/test/discovery/v1/category/index.js @@ -1,9 +1,7 @@ -var chai = require("chai"); -var should = chai.should(); -var category = require('../../../../lib/discovery/v1/category'); +import category from '../../../../lib/discovery/v1/category'; -describe('discovery.v1.category', function() { - it('should provide find', function(done) { +describe('discovery.v1.category', () => { + it('should provide find', done => { category().should.have.property('find'); done(); }); diff --git a/test/discovery/v1/category/parse_response.js b/test/discovery/v1/category/parse_response.js deleted file mode 100644 index 963fa22..0000000 --- a/test/discovery/v1/category/parse_response.js +++ /dev/null @@ -1,28 +0,0 @@ -var chai = require("chai"); -var should = chai.should(); -var getCategoryJson = require('../../../fixtures/discovery/v1/category/find-200')[0].response; -var ParseResponse = require('../../../../lib/discovery/v1/category/parse_response'); - -describe('discovery.v1.category.parseResponse', function() { - describe('success', function() { - it('should return a Category object', function(done) { - ParseResponse(getCategoryJson).should.be.a('object'); - done(); - }); - - it('should set name', function(done) { - ParseResponse(getCategoryJson).name.should.eq('Sports'); - done(); - }); - - it('should set id', function(done) { - ParseResponse(getCategoryJson).id.should.eq('10004'); - done(); - }); - - it('should set level', function(done) { - ParseResponse(getCategoryJson).level.should.eq(1); - done(); - }); - }); -}); diff --git a/test/discovery/v1/event/all.js b/test/discovery/v1/event/all.js index 48a4953..90d5226 100644 --- a/test/discovery/v1/event/all.js +++ b/test/discovery/v1/event/all.js @@ -1,24 +1,22 @@ -var chai = require("chai"); -var should = chai.should(); -var nock = require('nock'); -var nockBack = nock.back; -var All = require('../../../../lib/discovery/v1/event/all'); +import {back as nockBack} from 'nock'; -describe('discovery.v1.event.all', function() { - before(function() { - nockBack.fixtures = './test/fixtures/discovery/v1' +import Event from '../../../../lib/discovery/v1/event'; + +describe('discovery.v1.event.all', () => { + before(() => { + nockBack.fixtures = './test/fixtures/discovery/v1'; }); - describe('success', function() { - it('should find an event', function(done) { - nockBack('event/all-200.json', {}, function(nockDone) { - var all = All('mock-api-key'); - all() - .then(function(events) { - events[0].name.should.equal("OSEA Membership Registration"); - nockDone(); - done(); - }) + describe('success', () => { + it('should find an event', done => { + nockBack('event/all-200.json', {}, nockDone => { + Event('mock-api-key').all() + .then((result) => { + result.items[0].name.should.equal('OSEA Membership Registration'); + nockDone(); + done(); + }) + .catch(() => done()); }); }); }); diff --git a/test/discovery/v1/event/find.js b/test/discovery/v1/event/find.js index 10992be..d5d7960 100644 --- a/test/discovery/v1/event/find.js +++ b/test/discovery/v1/event/find.js @@ -1,42 +1,36 @@ -var chai = require("chai"); -var should = chai.should(); -var nock = require('nock'); -var nockBack = nock.back; -var Find = require('../../../../lib/discovery/v1/event/find'); +import {back as nockBack} from 'nock'; -describe('discovery.v1.event.find', function() { - before(function() { - nockBack.fixtures = './test/fixtures/discovery/v1' +import Event from '../../../../lib/discovery/v1/event'; + +describe('discovery.v1.event.find', () => { + before(() => { + nockBack.fixtures = './test/fixtures/discovery/v1'; }); - describe('success', function() { - it('should find an event', function(done) { + describe('success', () => { + it('should find an event', done => { nockBack('event/find-200.json', {}, function(nockDone) { - var find = Find('mock-api-key'); - find('3A004F38C8275108') - .then((function(_this) { - return function(result) { - result.name.should.equal("Monster Jam"); + Event('mock-api-key').find('3A004F38C8275108') + .then((result) => { + result.name.should.equal('Monster Jam'); nockDone(); done(); - }; - })(this)) + }) + .catch(() => done()); }); }); }); - describe('not found', function() { - it('should handle 404', function(done) { + describe('not found', () => { + it('should handle 404', done => { nockBack('event/find-404.json', {}, function(nockDone) { - var find = Find('mock-api-key'); - find('unknown-id') - .catch((function(_this) { - return function(response) { - response.errors[0].code.should.equal('DIS1004'); + Event('mock-api-key').find('unknown-id') + .then((result) => { + result.errors[0].code.should.equal('DIS1004'); nockDone(); done(); - }; - })(this)) + }) + .catch(() => done()); }); }); }); diff --git a/test/discovery/v1/event/index.js b/test/discovery/v1/event/index.js index 698a554..18e2145 100644 --- a/test/discovery/v1/event/index.js +++ b/test/discovery/v1/event/index.js @@ -1,14 +1,12 @@ -var chai = require("chai"); -var should = chai.should(); -var event = require('../../../../lib/discovery/v1/event'); +import event from '../../../../lib/discovery/v1/event'; -describe('discovery.v1.event', function() { - it('should provide find', function(done) { +describe('discovery.v1.event', () => { + it('should provide find', done => { event().should.have.property('find'); done(); }); - it('should provide all', function(done) { + it('should provide all', done => { event().should.have.property('all'); done(); }); diff --git a/test/discovery/v1/event/parse_response.js b/test/discovery/v1/event/parse_response.js deleted file mode 100644 index a8a559c..0000000 --- a/test/discovery/v1/event/parse_response.js +++ /dev/null @@ -1,41 +0,0 @@ -var chai = require("chai"); -var should = chai.should(); -var getEventJson = require('../../../fixtures/discovery/v1/event/find-200')[0].response; -var ParseResponse = require('../../../../lib/discovery/v1/event/parse_response'); - -describe('discovery.v1.event.parseResponse', function() { - describe('success', function() { - it('should return an Event object', function(done) { - ParseResponse(getEventJson).should.be.a('object'); - done(); - }); - - it('should set name', function(done) { - ParseResponse(getEventJson).name.should.eq('Monster Jam'); - done(); - }); - - it('should set locale', function(done) { - ParseResponse(getEventJson).locale.should.eq('en-us'); - done(); - }); - - it('should set categories', function(done) { - ParseResponse(getEventJson).categories.should.be.a('array'); - ParseResponse(getEventJson).categories[0].should.be.a('object'); - ParseResponse(getEventJson).categories[1].should.be.a('object'); - done(); - }); - - it('should set attractions', function(done) { - ParseResponse(getEventJson).attractions.should.be.a('array'); - ParseResponse(getEventJson).attractions[0].should.be.a('object'); - done(); - }); - - it('should set venue', function(done) { - ParseResponse(getEventJson).venue.should.be.a('object'); - done(); - }); - }); -}); diff --git a/test/discovery/v1/index.js b/test/discovery/v1/index.js index 6f1cb91..f7f7092 100644 --- a/test/discovery/v1/index.js +++ b/test/discovery/v1/index.js @@ -1,24 +1,22 @@ -var chai = require("chai"); -var should = chai.should(); -var v1 = require('../../../lib/discovery/v1'); +import v1 from '../../../lib/discovery/v1'; -describe('discovery.v1', function() { - it('should provide attraction', function(done) { +describe('discovery.v1', () => { + it('should provide attraction', done => { v1().should.have.property('attraction'); done(); }); - it('should provide category', function(done) { + it('should provide category', done => { v1().should.have.property('category'); done(); }); - it('should provide event', function(done) { + it('should provide event', done => { v1().should.have.property('event'); done(); }); - it('should provide venue', function(done) { + it('should provide venue', done => { v1().should.have.property('venue'); done(); }); diff --git a/test/discovery/v1/venue/find.js b/test/discovery/v1/venue/find.js index f330014..967a531 100644 --- a/test/discovery/v1/venue/find.js +++ b/test/discovery/v1/venue/find.js @@ -1,26 +1,22 @@ -var chai = require("chai"); -var should = chai.should(); -var nock = require('nock'); -var nockBack = nock.back; -var Find = require('../../../../lib/discovery/v1/venue/find'); +import {back as nockBack} from 'nock'; -describe('discovery.v1.venue.find', function() { - before(function() { - nockBack.fixtures = './test/fixtures/discovery/v1' +import Venue from '../../../../lib/discovery/v1/venue'; + +describe('discovery.v1.venue.find', () => { + before(() => { + nockBack.fixtures = './test/fixtures/discovery/v1'; }); - describe('success', function() { - it('should find a venue', function(done) { + describe('success', () => { + it('should find a venue', done => { nockBack('venue/find-200.json', {}, function(nockDone) { - var find = Find('mock-api-key'); - find('475247') - .then((function(_this) { - return function(result) { - result.name.should.equal("Alamodome"); + Venue('mock-api-key').find('475247') + .then((result) => { + result.name.should.equal('Alamodome'); nockDone(); done(); - }; - })(this)) + }) + .catch(() => done()); }); }); }); diff --git a/test/discovery/v1/venue/index.js b/test/discovery/v1/venue/index.js index e090a76..a58c185 100644 --- a/test/discovery/v1/venue/index.js +++ b/test/discovery/v1/venue/index.js @@ -1,9 +1,7 @@ -var chai = require("chai"); -var should = chai.should(); -var venue = require('../../../../lib/discovery/v1/venue'); +import venue from '../../../../lib/discovery/v1/venue'; -describe('discovery.v1.venue', function() { - it('should provide find', function(done) { +describe('discovery.v1.venue', () => { + it('should provide find', (done) => { venue().should.have.property('find'); done(); }); diff --git a/test/discovery/v1/venue/parse_response.js b/test/discovery/v1/venue/parse_response.js deleted file mode 100644 index 6f34b5a..0000000 --- a/test/discovery/v1/venue/parse_response.js +++ /dev/null @@ -1,68 +0,0 @@ -var chai = require("chai"); -var should = chai.should(); -var getVenueJson = require('../../../fixtures/discovery/v1/venue/find-200')[0].response; -var ParseResponse = require('../../../../lib/discovery/v1/venue/parse_response'); - -describe('discovery.v1.venue.parseResponse', function() { - describe('success', function() { - it('should return a Venue object', function(done) { - ParseResponse(getVenueJson).should.be.a('object'); - done(); - }); - - it('should set name', function(done) { - ParseResponse(getVenueJson).name.should.eq('Alamodome'); - done(); - }); - - it('should set id', function(done) { - ParseResponse(getVenueJson).id.should.eq('475247'); - done(); - }); - - it('should set country', function(done) { - ParseResponse(getVenueJson).country.should.eq('US'); - done(); - }); - - it('should set state', function(done) { - ParseResponse(getVenueJson).state.should.eq('TX'); - done(); - }); - - it('should set city', function(done) { - ParseResponse(getVenueJson).city.should.eq('San Antonio'); - done(); - }); - - it('should set postal_code', function(done) { - ParseResponse(getVenueJson).postal_code.should.eq('78203'); - done(); - }); - - it('should set latitude', function(done) { - ParseResponse(getVenueJson).latitude.should.eq('29.417054662'); - done(); - }); - - it('should set longitude', function(done) { - ParseResponse(getVenueJson).longitude.should.eq('-98.479151396'); - done(); - }); - - it('should set address_line_1', function(done) { - ParseResponse(getVenueJson).address_line_1.should.eq('100 Montana St'); - done(); - }); - - it('should set address_line_2', function(done) { - ParseResponse(getVenueJson).address_line_2.should.eq('San Antonio, TX'); - done(); - }); - - it('should set time_zone', function(done) { - ParseResponse(getVenueJson).time_zone.should.eq('America/Chicago'); - done(); - }); - }); -}); diff --git a/test/discovery/v2/attraction/all.js b/test/discovery/v2/attraction/all.js new file mode 100644 index 0000000..dcba7da --- /dev/null +++ b/test/discovery/v2/attraction/all.js @@ -0,0 +1,23 @@ +import {back as nockBack} from 'nock'; + +import Attraction from '../../../../lib/discovery/v2/attraction'; + +describe('discovery.v2.attraction.all', () => { + before(() => { + nockBack.fixtures = './test/fixtures/discovery/v2'; + }); + + describe('success', () => { + it('should find an attraction', (done) => { + nockBack('attraction/all-200.json', {}, nockDone => { + Attraction('mock-api-key').all() + .then((result) => { + result.items[0].name.should.equal('!!!'); + nockDone(); + done(); + }) + .catch(() => done()); + }); + }); + }); +}); diff --git a/test/discovery/v2/attraction/find.js b/test/discovery/v2/attraction/find.js index 563113c..2c110a4 100644 --- a/test/discovery/v2/attraction/find.js +++ b/test/discovery/v2/attraction/find.js @@ -1,26 +1,22 @@ -var chai = require("chai"); -var should = chai.should(); -var nock = require('nock'); -var nockBack = nock.back; -var Find = require('../../../../lib/discovery/v2/attraction/find'); +import {back as nockBack} from 'nock'; -describe('discovery.v2.attraction.find', function() { - before(function() { - nockBack.fixtures = './test/fixtures/discovery/v2' +import Attraction from '../../../../lib/discovery/v2/attraction'; + +describe('discovery.v2.attraction.find', () => { + before(() => { + nockBack.fixtures = './test/fixtures/discovery/v2'; }); - describe('success', function() { - it('should find a attraction', function(done) { - nockBack('attraction/find-200.json', {}, function(nockDone) { - var find = Find('mock-api-key'); - find('K8vZ917Kew0') - .then((function(_this) { - return function(result) { - result.name.should.equal("Susquehanna Breakdown Music Festival"); + describe('success', () => { + it('should find a attraction', (done) => { + nockBack('attraction/find-200.json', {}, (nockDone) => { + Attraction('mock-api-key').find('K8vZ917Kew0') + .then((result) => { + result.name.should.equal('Susquehanna Breakdown Music Festival'); nockDone(); done(); - }; - })(this)) + }) + .catch(() => done()); }); }); }); diff --git a/test/discovery/v2/attraction/index.js b/test/discovery/v2/attraction/index.js new file mode 100644 index 0000000..29a3aad --- /dev/null +++ b/test/discovery/v2/attraction/index.js @@ -0,0 +1,13 @@ +import Attraction from '../../../../lib/discovery/v2/attraction'; + +describe('discovery.v2.attraction', () => { + it('should provide all', (done) => { + Attraction().should.have.property('all'); + done(); + }); + + it('should provide find', (done) => { + Attraction().should.have.property('find'); + done(); + }); +}); diff --git a/test/discovery/v2/classification/all.js b/test/discovery/v2/classification/all.js new file mode 100644 index 0000000..5ca1162 --- /dev/null +++ b/test/discovery/v2/classification/all.js @@ -0,0 +1,23 @@ +import {back as nockBack} from 'nock'; + +import Classification from '../../../../lib/discovery/v2/classification'; + +describe('discovery.v2.classification.all', () => { + before(() => { + nockBack.fixtures = './test/fixtures/discovery/v2'; + }); + + describe('success', () => { + it('should find an classification', (done) => { + nockBack('classification/all-200.json', {}, (nockDone) => { + Classification('mock-api-key').all() + .then((result) => { + result.items[0].should.not.be.an('undefined'); + nockDone(); + done(); + }) + .catch((err) => done(err)); + }); + }); + }); +}); diff --git a/test/discovery/v2/classification/find.js b/test/discovery/v2/classification/find.js new file mode 100644 index 0000000..4de9ca6 --- /dev/null +++ b/test/discovery/v2/classification/find.js @@ -0,0 +1,23 @@ +import {back as nockBack} from 'nock'; + +import Classification from '../../../../lib/discovery/v2/classification'; + +describe('discovery.v2.classification.find', () => { + before(() => { + nockBack.fixtures = './test/fixtures/discovery/v2'; + }); + + describe('success', () => { + it('should find a classification', done => { + nockBack('classification/find-200.json', {}, nockDone => { + Classification('mock-api-key').find('KZFzniwnSyZfZ7v7na') + .then(result => { + result.segment.name.should.equal('Arts & Theatre'); + nockDone(); + done(); + }) + .catch((err) => done(err)); + }); + }); + }); +}); diff --git a/test/discovery/v2/event/all.js b/test/discovery/v2/event/all.js index 0d07566..4ceb255 100644 --- a/test/discovery/v2/event/all.js +++ b/test/discovery/v2/event/all.js @@ -1,24 +1,36 @@ -var chai = require("chai"); -var should = chai.should(); -var nock = require('nock'); -var nockBack = nock.back; -var All = require('../../../../lib/discovery/v2/event/all'); - -describe('discovery.v2.event.all', function() { - before(function() { - nockBack.fixtures = './test/fixtures/discovery/v2' - }); +import {back as nockBack} from 'nock'; + +import sdk from '../../../../lib'; +import Event from '../../../../lib/discovery/v2/event'; + +const api = sdk('mock-api-key'); + +const onResult = (done) => (page) => { + page.items[0].name.should.equal('OSEA Membership Registration'); + done(); +}; + +nockBack.fixtures = './test/fixtures/discovery/v2'; + +describe('discovery.v2.event.all', () => { + describe('success', () => { + it('should find an event using the fluent API', (done) => { + nockBack('event/all-200.json', {}, (nockDone) => { + nockDone(); + + api.discovery.v2.event.all() + .then(onResult(done)) + .catch((err) => done(err)); + }); + }); + + it('should find an event', (done) => { + nockBack('event/all-200.json', {}, (nockDone) => { + nockDone(); - describe('success', function() { - it('should find an event', function(done) { - nockBack('event/all-200.json', {}, function(nockDone) { - var all = All('mock-api-key'); - all() - .then(function(events) { - events[0].name.should.equal("OSEA Membership Registration"); - nockDone(); - done(); - }) + Event('mock-api-key').all() + .then(onResult(done)) + .catch((err) => done(err)); }); }); }); diff --git a/test/discovery/v2/event/find.js b/test/discovery/v2/event/find.js index eab0c9e..4bd2487 100644 --- a/test/discovery/v2/event/find.js +++ b/test/discovery/v2/event/find.js @@ -1,38 +1,54 @@ -var chai = require("chai"); -var should = chai.should(); -var nock = require('nock'); -var nockBack = nock.back; -var Find = require('../../../../lib/discovery/v2/event/find'); +import {back as nockBack} from 'nock'; -describe('discovery.v2.event.find', function() { - before(function() { - nockBack.fixtures = './test/fixtures/discovery/v2' +import Event from '../../../../lib/discovery/v2/event'; + +describe('discovery.v2.event.find', () => { + before(() => { + nockBack.fixtures = './test/fixtures/discovery/v2'; }); - describe('success', function() { - it('should find an event', function(done) { - nockBack('event/find-200.json', {}, function(nockDone) { - var find = Find('mock-api-key'); - find('vv17FZfdGkSrrMju') - .then(function(result) { - result.name.should.equal("Susquehanna Breakdown RV Pass"); - nockDone(); - done(); - }); + describe('success', () => { + it('should find an event', (done) => { + nockBack('event/find-200.json', {}, (nockDone) => { + Event('mock-api-key').find('vv17FZfdGkSrrMju') + .then((result) => { + result.name.should.equal('Susquehanna Breakdown RV Pass'); + nockDone(); + done(); + }) + .catch((err) => done(err)); + }); + }); + + it('should find images for an event', (done) => { + nockBack('event/findImages-200.json', {}, (nockDone) => { + Event('mock-api-key').findImages('vv17FZfdGkSrrMju') + .then((result) => { + result.images[0].should.deep.equal({ + 'ratio': '3_2', + 'url': 'http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_ARTIST_PAGE_3_2.jpg', + 'width': 305, + 'height': 203, + 'fallback': true + }); + nockDone(); + done(); + }) + .catch((err) => done(err)); }); }); }); - describe('not found', function() { - it('should handle 404', function(done) { - nockBack('event/find-404.json', {}, function(nockDone) { - var find = Find('mock-api-key'); - find('unknown-id') - .catch(function(response) { - response.errors[0].code.should.equal('DIS1004'); - nockDone(); - done(); - }); + describe('not found', () => { + it('should handle 404', (done) => { + nockBack('event/find-404.json', {}, (nockDone) => { + Event('mock-api-key').find('unknown-id') + .catch((response) => { + response.errors[0].code.should.equal('DIS1004'); + nockDone(); + done(); + }) + .catch((err) => done(err)); }); }); }); diff --git a/test/discovery/v2/event/index.js b/test/discovery/v2/event/index.js new file mode 100644 index 0000000..cdbed0b --- /dev/null +++ b/test/discovery/v2/event/index.js @@ -0,0 +1,13 @@ +import event from '../../../../lib/discovery/v2/event'; + +describe('discovery.v2.event', () => { + it('should provide all', done => { + event().should.have.property('all'); + done(); + }); + + it('should provide find', done => { + event().should.have.property('find'); + done(); + }); +}); diff --git a/test/discovery/v2/event/options.js b/test/discovery/v2/event/options.js new file mode 100644 index 0000000..6c95636 --- /dev/null +++ b/test/discovery/v2/event/options.js @@ -0,0 +1,27 @@ +import {back as nockBack} from 'nock'; + +import Event from '../../../../lib/discovery/v2/event'; + +nockBack.fixtures = './test/fixtures/discovery/v2'; + +describe('discovery.v2.event.options', () => { + describe('options', () => { + it('works', (done) => { + nockBack('event/all-200-options.json', (nockDone) => { + nockDone(); + + Event('mock-api-key').all({page: 2, size: 5, sort: 'name,desc'}) + .then((page) => { + page.items.length.should.equal(5); + page.isLast().should.equal(false); + page.getAt(1).should.be.instanceOf(Promise); + page.getNext(1).should.be.instanceOf(Promise); + page.getPrev(1).should.be.instanceOf(Promise); + + done(); + }) + .catch((err) => done(err)); + }); + }); + }); +}); diff --git a/test/discovery/v2/index.js b/test/discovery/v2/index.js index ca54c81..00376a3 100644 --- a/test/discovery/v2/index.js +++ b/test/discovery/v2/index.js @@ -1,19 +1,17 @@ -var chai = require("chai"); -var should = chai.should(); -var v2 = require('../../../lib/discovery/v2'); +import v2 from '../../../lib/discovery/v2'; -describe('discovery.v2', function() { - it('should provide attraction', function(done) { +describe('discovery.v2', () => { + it('should provide attraction', (done) => { v2().should.have.property('attraction'); done(); }); - it('should provide event', function(done) { + it('should provide event', (done) => { v2().should.have.property('event'); done(); }); - it('should provide venue', function(done) { + it('should provide venue', (done) => { v2().should.have.property('venue'); done(); }); diff --git a/test/discovery/v2/venue/find.js b/test/discovery/v2/venue/find.js index df03677..03df1a7 100644 --- a/test/discovery/v2/venue/find.js +++ b/test/discovery/v2/venue/find.js @@ -1,26 +1,22 @@ -var chai = require("chai"); -var should = chai.should(); -var nock = require('nock'); -var nockBack = nock.back; -var Find = require('../../../../lib/discovery/v2/venue/find'); +import {back as nockBack} from 'nock'; -describe('discovery.v2.venue.find', function() { - before(function() { - nockBack.fixtures = './test/fixtures/discovery/v2' +import Venue from '../../../../lib/discovery/v2/venue'; + +describe('discovery.v2.venue.find', () => { + before(() => { + nockBack.fixtures = './test/fixtures/discovery/v2'; }); - describe('success', function() { - it('should find a venue', function(done) { - nockBack('venue/find-200.json', {}, function(nockDone) { - var find = Find('mock-api-key'); - find('KovZpZAEA76A') - .then((function(_this) { - return function(result) { - result.name.should.equal("The Pavilion at Montage Mountain"); + describe('success', () => { + it('should find a venue', done => { + nockBack('venue/find-200.json', {}, (nockDone) => { + Venue('mock-api-key').find('KovZpZAEA76A') + .then((result) => { + result.name.should.equal('The Pavilion at Montage Mountain'); nockDone(); done(); - }; - })(this)) + }) + .catch(() => done()); }); }); }); diff --git a/test/discovery/v2/venue/index.js b/test/discovery/v2/venue/index.js new file mode 100644 index 0000000..1c2ecd5 --- /dev/null +++ b/test/discovery/v2/venue/index.js @@ -0,0 +1,8 @@ +import venue from '../../../../lib/discovery/v2/venue'; + +describe('discovery.v2.venue', () => { + it('should provide find', (done) => { + venue().should.have.property('find'); + done(); + }); +}); diff --git a/test/fixtures/commerce/v2/offer/find-200.json b/test/fixtures/commerce/v2/offer/find-200.json new file mode 100644 index 0000000..dff490e --- /dev/null +++ b/test/fixtures/commerce/v2/offer/find-200.json @@ -0,0 +1,3304 @@ +[ + { + "scope": "https://app.ticketmaster.com", + "method": "GET", + "path": "/commerce/v2/events/vvG1iZKU5jIxKX/offers?apikey=mock-api-key", + "status": 200, + "headers": { + "Access-Control-Allow-Headers": "origin, x-requested-with, accept", + "Access-Control-Allow-Origin": "*", + "Date": "Sat, 25 Jun 2016 20:55:35 GMT", + "Content-Length": "3488", + "Access-Control-Max-Age": "3628800", + "Access-Control-Allow-Methods": "GET, PUT, POST, DELETE", + "X-Application-Context": "application:default,jetson4", + "Connection": "keep-alive", + "Content-Type": "application/json;charset=utf-8", + "Server": "Apache-Coyote/1.1" + }, + "response": { + "metadata": { + "eventMapping": { + "id": "vvG1iZKU5jIxKX", + "type": "event", + "source": { + "name": "ticketmaster", + "id": "0B004F62DCA224FE" + } + } + }, + "limits": { + "max": 14 + }, + "prices": { + "_embedded": [ + { + "type": "offered-prices", + "attributes": { + "currency": "USD", + "value": "50.00" + }, + "relationships": { + "offers": { + "_embedded": [ + { + "id": "00003E140009", + "type": "offers" + } + ] + }, + "priceZones": { + "_embedded": [ + { + "id": "2", + "type": "price-zones" + }, + { + "id": "1", + "type": "price-zones" + }, + { + "id": "13", + "type": "price-zones" + }, + { + "id": "3", + "type": "price-zones" + }, + { + "id": "4", + "type": "price-zones" + }, + { + "id": "5", + "type": "price-zones" + } + ] + }, + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "8", + "type": "areas" + }, + { + "id": "9", + "type": "areas" + }, + { + "id": "10", + "type": "areas" + }, + { + "id": "6", + "type": "areas" + }, + { + "id": "11", + "type": "areas" + }, + { + "id": "12", + "type": "areas" + } + ] + } + } + }, + { + "type": "offered-prices", + "attributes": { + "currency": "USD", + "value": "150.00" + }, + "relationships": { + "offers": { + "_embedded": [ + { + "id": "000036100009", + "type": "offers" + } + ] + }, + "priceZones": { + "_embedded": [ + { + "id": "2", + "type": "price-zones" + }, + { + "id": "1", + "type": "price-zones" + }, + { + "id": "13", + "type": "price-zones" + }, + { + "id": "3", + "type": "price-zones" + }, + { + "id": "4", + "type": "price-zones" + }, + { + "id": "5", + "type": "price-zones" + } + ] + }, + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "8", + "type": "areas" + }, + { + "id": "9", + "type": "areas" + }, + { + "id": "10", + "type": "areas" + }, + { + "id": "6", + "type": "areas" + }, + { + "id": "11", + "type": "areas" + }, + { + "id": "12", + "type": "areas" + } + ] + } + } + }, + { + "type": "offered-prices", + "attributes": { + "currency": "USD", + "value": "175.00" + }, + "relationships": { + "offers": { + "_embedded": [ + { + "id": "0000340F0009", + "type": "offers" + } + ] + }, + "priceZones": { + "_embedded": [ + { + "id": "2", + "type": "price-zones" + }, + { + "id": "1", + "type": "price-zones" + }, + { + "id": "13", + "type": "price-zones" + }, + { + "id": "3", + "type": "price-zones" + }, + { + "id": "4", + "type": "price-zones" + }, + { + "id": "5", + "type": "price-zones" + } + ] + }, + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "8", + "type": "areas" + }, + { + "id": "9", + "type": "areas" + }, + { + "id": "10", + "type": "areas" + }, + { + "id": "6", + "type": "areas" + }, + { + "id": "11", + "type": "areas" + }, + { + "id": "12", + "type": "areas" + } + ] + } + } + }, + { + "type": "offered-prices", + "attributes": { + "currency": "USD", + "value": "225.00" + }, + "relationships": { + "offers": { + "_embedded": [ + { + "id": "0000300D0009", + "type": "offers" + } + ] + }, + "priceZones": { + "_embedded": [ + { + "id": "2", + "type": "price-zones" + }, + { + "id": "1", + "type": "price-zones" + }, + { + "id": "13", + "type": "price-zones" + }, + { + "id": "3", + "type": "price-zones" + }, + { + "id": "4", + "type": "price-zones" + }, + { + "id": "5", + "type": "price-zones" + } + ] + }, + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "8", + "type": "areas" + }, + { + "id": "9", + "type": "areas" + }, + { + "id": "10", + "type": "areas" + }, + { + "id": "6", + "type": "areas" + }, + { + "id": "11", + "type": "areas" + }, + { + "id": "12", + "type": "areas" + } + ] + } + } + }, + { + "type": "offered-prices", + "attributes": { + "currency": "USD", + "value": "250.00" + }, + "relationships": { + "offers": { + "_embedded": [ + { + "id": "00002E0C0009", + "type": "offers" + } + ] + }, + "priceZones": { + "_embedded": [ + { + "id": "2", + "type": "price-zones" + }, + { + "id": "1", + "type": "price-zones" + }, + { + "id": "13", + "type": "price-zones" + }, + { + "id": "3", + "type": "price-zones" + }, + { + "id": "4", + "type": "price-zones" + }, + { + "id": "5", + "type": "price-zones" + } + ] + }, + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "8", + "type": "areas" + }, + { + "id": "9", + "type": "areas" + }, + { + "id": "10", + "type": "areas" + }, + { + "id": "6", + "type": "areas" + }, + { + "id": "11", + "type": "areas" + }, + { + "id": "12", + "type": "areas" + } + ] + } + } + }, + { + "type": "offered-prices", + "attributes": { + "currency": "USD", + "value": "275.00" + }, + "relationships": { + "offers": { + "_embedded": [ + { + "id": "00002C0B0009", + "type": "offers" + } + ] + }, + "priceZones": { + "_embedded": [ + { + "id": "2", + "type": "price-zones" + }, + { + "id": "1", + "type": "price-zones" + }, + { + "id": "13", + "type": "price-zones" + }, + { + "id": "3", + "type": "price-zones" + }, + { + "id": "4", + "type": "price-zones" + }, + { + "id": "5", + "type": "price-zones" + } + ] + }, + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "8", + "type": "areas" + }, + { + "id": "9", + "type": "areas" + }, + { + "id": "10", + "type": "areas" + }, + { + "id": "6", + "type": "areas" + }, + { + "id": "11", + "type": "areas" + }, + { + "id": "12", + "type": "areas" + } + ] + } + } + } + ] + }, + "priceZones": { + "_embedded": [ + { + "id": "2", + "type": "price-zones", + "attributes": { + "currency": "USD", + "name": "Price Level 2" + }, + "relationships": { + "offers": { + "_embedded": [ + { + "id": "00002C0B0009", + "type": "offers" + }, + { + "id": "00002E0C0009", + "type": "offers" + }, + { + "id": "0000300D0009", + "type": "offers" + }, + { + "id": "0000340F0009", + "type": "offers" + }, + { + "id": "000036100009", + "type": "offers" + }, + { + "id": "00003E140009", + "type": "offers" + } + ] + }, + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "8", + "type": "areas" + }, + { + "id": "9", + "type": "areas" + }, + { + "id": "10", + "type": "areas" + } + ] + } + } + }, + { + "id": "1", + "type": "price-zones", + "attributes": { + "currency": "USD", + "name": "Price Level 1" + }, + "relationships": { + "offers": { + "_embedded": [ + { + "id": "00002C0B0009", + "type": "offers" + }, + { + "id": "00002E0C0009", + "type": "offers" + }, + { + "id": "0000300D0009", + "type": "offers" + }, + { + "id": "0000340F0009", + "type": "offers" + }, + { + "id": "000036100009", + "type": "offers" + }, + { + "id": "00003E140009", + "type": "offers" + } + ] + }, + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "8", + "type": "areas" + }, + { + "id": "9", + "type": "areas" + }, + { + "id": "10", + "type": "areas" + } + ] + } + } + }, + { + "id": "13", + "type": "price-zones", + "attributes": { + "currency": "USD", + "name": "Price Level 6" + }, + "relationships": { + "offers": { + "_embedded": [ + { + "id": "00002C0B0009", + "type": "offers" + }, + { + "id": "00002E0C0009", + "type": "offers" + }, + { + "id": "0000300D0009", + "type": "offers" + }, + { + "id": "0000340F0009", + "type": "offers" + }, + { + "id": "000036100009", + "type": "offers" + }, + { + "id": "00003E140009", + "type": "offers" + } + ] + }, + "areas": { + "_embedded": [ + { + "id": "6", + "type": "areas" + }, + { + "id": "11", + "type": "areas" + }, + { + "id": "12", + "type": "areas" + } + ] + } + } + }, + { + "id": "3", + "type": "price-zones", + "attributes": { + "currency": "USD", + "name": "Price Level 3" + }, + "relationships": { + "offers": { + "_embedded": [ + { + "id": "00002C0B0009", + "type": "offers" + }, + { + "id": "00002E0C0009", + "type": "offers" + }, + { + "id": "0000300D0009", + "type": "offers" + }, + { + "id": "0000340F0009", + "type": "offers" + }, + { + "id": "000036100009", + "type": "offers" + }, + { + "id": "00003E140009", + "type": "offers" + } + ] + }, + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "9", + "type": "areas" + }, + { + "id": "10", + "type": "areas" + } + ] + } + } + }, + { + "id": "4", + "type": "price-zones", + "attributes": { + "currency": "USD", + "name": "Price Level 4" + }, + "relationships": { + "offers": { + "_embedded": [ + { + "id": "00002C0B0009", + "type": "offers" + }, + { + "id": "00002E0C0009", + "type": "offers" + }, + { + "id": "0000300D0009", + "type": "offers" + }, + { + "id": "0000340F0009", + "type": "offers" + }, + { + "id": "000036100009", + "type": "offers" + }, + { + "id": "00003E140009", + "type": "offers" + } + ] + }, + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "6", + "type": "areas" + }, + { + "id": "8", + "type": "areas" + }, + { + "id": "9", + "type": "areas" + }, + { + "id": "10", + "type": "areas" + } + ] + } + } + }, + { + "id": "5", + "type": "price-zones", + "attributes": { + "currency": "USD", + "name": "Price Level 5" + }, + "relationships": { + "offers": { + "_embedded": [ + { + "id": "00002C0B0009", + "type": "offers" + }, + { + "id": "00002E0C0009", + "type": "offers" + }, + { + "id": "0000300D0009", + "type": "offers" + }, + { + "id": "0000340F0009", + "type": "offers" + }, + { + "id": "000036100009", + "type": "offers" + }, + { + "id": "00003E140009", + "type": "offers" + } + ] + }, + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "6", + "type": "areas" + }, + { + "id": "9", + "type": "areas" + }, + { + "id": "10", + "type": "areas" + }, + { + "id": "11", + "type": "areas" + }, + { + "id": "12", + "type": "areas" + } + ] + } + } + } + ] + }, + "areas": { + "_embedded": [ + { + "id": "8", + "type": "areas", + "attributes": { + "rank": 0, + "name": "CENTER", + "areaType": "AREA" + }, + "relationships": { + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "6", + "type": "areas" + } + ] + }, + "offers": { + "_embedded": [ + { + "id": "00002C0B0009", + "type": "offers" + }, + { + "id": "00002E0C0009", + "type": "offers" + }, + { + "id": "0000300D0009", + "type": "offers" + }, + { + "id": "0000340F0009", + "type": "offers" + }, + { + "id": "000036100009", + "type": "offers" + }, + { + "id": "00003E140009", + "type": "offers" + } + ] + }, + "priceZones": { + "_embedded": [ + { + "id": "1", + "type": "price-zones" + }, + { + "id": "2", + "type": "price-zones" + }, + { + "id": "4", + "type": "price-zones" + } + ] + } + } + }, + { + "id": "10", + "type": "areas", + "attributes": { + "rank": 1, + "name": "LC", + "areaType": "AREA" + }, + "relationships": { + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "6", + "type": "areas" + } + ] + }, + "offers": { + "_embedded": [ + { + "id": "00002C0B0009", + "type": "offers" + }, + { + "id": "00002E0C0009", + "type": "offers" + }, + { + "id": "0000300D0009", + "type": "offers" + }, + { + "id": "0000340F0009", + "type": "offers" + }, + { + "id": "000036100009", + "type": "offers" + }, + { + "id": "00003E140009", + "type": "offers" + } + ] + }, + "priceZones": { + "_embedded": [ + { + "id": "1", + "type": "price-zones" + }, + { + "id": "2", + "type": "price-zones" + }, + { + "id": "3", + "type": "price-zones" + }, + { + "id": "4", + "type": "price-zones" + }, + { + "id": "5", + "type": "price-zones" + } + ] + } + } + }, + { + "id": "12", + "type": "areas", + "attributes": { + "rank": 2, + "name": "LEFT", + "areaType": "AREA" + }, + "relationships": { + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "6", + "type": "areas" + } + ] + }, + "offers": { + "_embedded": [ + { + "id": "00002C0B0009", + "type": "offers" + }, + { + "id": "00002E0C0009", + "type": "offers" + }, + { + "id": "0000300D0009", + "type": "offers" + }, + { + "id": "0000340F0009", + "type": "offers" + }, + { + "id": "000036100009", + "type": "offers" + }, + { + "id": "00003E140009", + "type": "offers" + } + ] + }, + "priceZones": { + "_embedded": [ + { + "id": "5", + "type": "price-zones" + }, + { + "id": "13", + "type": "price-zones" + } + ] + } + } + }, + { + "id": "6", + "type": "areas", + "attributes": { + "rank": 3, + "name": "MEZZ", + "areaType": "AREA" + }, + "relationships": { + "areas": { + "_embedded": [ + { + "id": "8", + "type": "areas" + }, + { + "id": "9", + "type": "areas" + }, + { + "id": "10", + "type": "areas" + }, + { + "id": "11", + "type": "areas" + }, + { + "id": "12", + "type": "areas" + } + ] + }, + "offers": { + "_embedded": [ + { + "id": "00002C0B0009", + "type": "offers" + }, + { + "id": "00002E0C0009", + "type": "offers" + }, + { + "id": "0000300D0009", + "type": "offers" + }, + { + "id": "0000340F0009", + "type": "offers" + }, + { + "id": "000036100009", + "type": "offers" + }, + { + "id": "00003E140009", + "type": "offers" + } + ] + }, + "priceZones": { + "_embedded": [ + { + "id": "4", + "type": "price-zones" + }, + { + "id": "5", + "type": "price-zones" + }, + { + "id": "13", + "type": "price-zones" + } + ] + } + } + }, + { + "id": "0", + "type": "areas", + "attributes": { + "rank": 4, + "name": "ORCH", + "areaType": "AREA" + }, + "relationships": { + "areas": { + "_embedded": [ + { + "id": "8", + "type": "areas" + }, + { + "id": "9", + "type": "areas" + }, + { + "id": "10", + "type": "areas" + }, + { + "id": "11", + "type": "areas" + }, + { + "id": "12", + "type": "areas" + } + ] + }, + "offers": { + "_embedded": [ + { + "id": "00002C0B0009", + "type": "offers" + }, + { + "id": "00002E0C0009", + "type": "offers" + }, + { + "id": "0000300D0009", + "type": "offers" + }, + { + "id": "0000340F0009", + "type": "offers" + }, + { + "id": "000036100009", + "type": "offers" + }, + { + "id": "00003E140009", + "type": "offers" + } + ] + }, + "priceZones": { + "_embedded": [ + { + "id": "1", + "type": "price-zones" + }, + { + "id": "2", + "type": "price-zones" + }, + { + "id": "3", + "type": "price-zones" + }, + { + "id": "4", + "type": "price-zones" + }, + { + "id": "5", + "type": "price-zones" + } + ] + } + } + }, + { + "id": "9", + "type": "areas", + "attributes": { + "rank": 5, + "name": "RC", + "areaType": "AREA" + }, + "relationships": { + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "6", + "type": "areas" + } + ] + }, + "offers": { + "_embedded": [ + { + "id": "00002C0B0009", + "type": "offers" + }, + { + "id": "00002E0C0009", + "type": "offers" + }, + { + "id": "0000300D0009", + "type": "offers" + }, + { + "id": "0000340F0009", + "type": "offers" + }, + { + "id": "000036100009", + "type": "offers" + }, + { + "id": "00003E140009", + "type": "offers" + } + ] + }, + "priceZones": { + "_embedded": [ + { + "id": "1", + "type": "price-zones" + }, + { + "id": "2", + "type": "price-zones" + }, + { + "id": "3", + "type": "price-zones" + }, + { + "id": "4", + "type": "price-zones" + }, + { + "id": "5", + "type": "price-zones" + } + ] + } + } + }, + { + "id": "11", + "type": "areas", + "attributes": { + "rank": 6, + "name": "RIGHT", + "areaType": "AREA" + }, + "relationships": { + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "6", + "type": "areas" + } + ] + }, + "offers": { + "_embedded": [ + { + "id": "00002C0B0009", + "type": "offers" + }, + { + "id": "00002E0C0009", + "type": "offers" + }, + { + "id": "0000300D0009", + "type": "offers" + }, + { + "id": "0000340F0009", + "type": "offers" + }, + { + "id": "000036100009", + "type": "offers" + }, + { + "id": "00003E140009", + "type": "offers" + } + ] + }, + "priceZones": { + "_embedded": [ + { + "id": "5", + "type": "price-zones" + }, + { + "id": "13", + "type": "price-zones" + } + ] + } + } + } + ] + }, + "_embedded": [ + { + "id": "00002C0B0009", + "type": "offers", + "attributes": { + "name": "275", + "description": "Standard Ticket", + "rank": 0, + "offerType": "SPECIAL", + "currency": "USD", + "prices": [ + { + "priceZone": "1", + "value": "272.00", + "total": "303.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "25.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "13", + "value": "272.00", + "total": "303.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "25.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "2", + "value": "272.00", + "total": "303.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "25.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "3", + "value": "272.00", + "total": "303.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "25.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "4", + "value": "272.00", + "total": "303.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "25.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "5", + "value": "272.00", + "total": "303.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "25.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + } + ], + "limit": { + "min": 1, + "max": 14, + "multiples": 1 + } + }, + "relationships": { + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "6", + "type": "areas" + }, + { + "id": "8", + "type": "areas" + }, + { + "id": "9", + "type": "areas" + }, + { + "id": "10", + "type": "areas" + }, + { + "id": "11", + "type": "areas" + }, + { + "id": "12", + "type": "areas" + } + ] + }, + "priceZones": { + "_embedded": [ + { + "id": "1", + "type": "price-zones" + }, + { + "id": "13", + "type": "price-zones" + }, + { + "id": "2", + "type": "price-zones" + }, + { + "id": "3", + "type": "price-zones" + }, + { + "id": "4", + "type": "price-zones" + }, + { + "id": "5", + "type": "price-zones" + } + ] + }, + "products": { + "_embedded": [ + { + "id": "0B004F62DCA224FE", + "type": "products" + } + ] + } + } + }, + { + "id": "00002E0C0009", + "type": "offers", + "attributes": { + "name": "250", + "description": "Standard Ticket", + "rank": 1, + "offerType": "SPECIAL", + "currency": "USD", + "prices": [ + { + "priceZone": "1", + "value": "247.00", + "total": "278.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "25.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "13", + "value": "247.00", + "total": "278.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "25.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "2", + "value": "247.00", + "total": "278.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "25.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "3", + "value": "247.00", + "total": "278.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "25.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "4", + "value": "247.00", + "total": "278.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "25.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "5", + "value": "247.00", + "total": "278.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "25.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + } + ], + "limit": { + "min": 1, + "max": 14, + "multiples": 1 + } + }, + "relationships": { + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "6", + "type": "areas" + }, + { + "id": "8", + "type": "areas" + }, + { + "id": "9", + "type": "areas" + }, + { + "id": "10", + "type": "areas" + }, + { + "id": "11", + "type": "areas" + }, + { + "id": "12", + "type": "areas" + } + ] + }, + "priceZones": { + "_embedded": [ + { + "id": "1", + "type": "price-zones" + }, + { + "id": "13", + "type": "price-zones" + }, + { + "id": "2", + "type": "price-zones" + }, + { + "id": "3", + "type": "price-zones" + }, + { + "id": "4", + "type": "price-zones" + }, + { + "id": "5", + "type": "price-zones" + } + ] + }, + "products": { + "_embedded": [ + { + "id": "0B004F62DCA224FE", + "type": "products" + } + ] + } + } + }, + { + "id": "0000300D0009", + "type": "offers", + "attributes": { + "name": "225", + "description": "Standard Ticket", + "rank": 2, + "offerType": "SPECIAL", + "currency": "USD", + "prices": [ + { + "priceZone": "1", + "value": "222.00", + "total": "250.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "22.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "13", + "value": "222.00", + "total": "250.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "22.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "2", + "value": "222.00", + "total": "250.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "22.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "3", + "value": "222.00", + "total": "250.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "22.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "4", + "value": "222.00", + "total": "250.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "22.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "5", + "value": "222.00", + "total": "250.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "22.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + } + ], + "limit": { + "min": 1, + "max": 14, + "multiples": 1 + } + }, + "relationships": { + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "6", + "type": "areas" + }, + { + "id": "8", + "type": "areas" + }, + { + "id": "9", + "type": "areas" + }, + { + "id": "10", + "type": "areas" + }, + { + "id": "11", + "type": "areas" + }, + { + "id": "12", + "type": "areas" + } + ] + }, + "priceZones": { + "_embedded": [ + { + "id": "1", + "type": "price-zones" + }, + { + "id": "13", + "type": "price-zones" + }, + { + "id": "2", + "type": "price-zones" + }, + { + "id": "3", + "type": "price-zones" + }, + { + "id": "4", + "type": "price-zones" + }, + { + "id": "5", + "type": "price-zones" + } + ] + }, + "products": { + "_embedded": [ + { + "id": "0B004F62DCA224FE", + "type": "products" + } + ] + } + } + }, + { + "id": "0000340F0009", + "type": "offers", + "attributes": { + "name": "175", + "description": "Standard Ticket", + "rank": 3, + "offerType": "SPECIAL", + "currency": "USD", + "prices": [ + { + "priceZone": "1", + "value": "172.00", + "total": "197.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "19.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "13", + "value": "172.00", + "total": "197.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "19.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "2", + "value": "172.00", + "total": "197.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "19.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "3", + "value": "172.00", + "total": "197.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "19.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "4", + "value": "172.00", + "total": "197.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "19.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "5", + "value": "172.00", + "total": "197.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "19.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + } + ], + "limit": { + "min": 1, + "max": 14, + "multiples": 1 + } + }, + "relationships": { + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "6", + "type": "areas" + }, + { + "id": "8", + "type": "areas" + }, + { + "id": "9", + "type": "areas" + }, + { + "id": "10", + "type": "areas" + }, + { + "id": "11", + "type": "areas" + }, + { + "id": "12", + "type": "areas" + } + ] + }, + "priceZones": { + "_embedded": [ + { + "id": "1", + "type": "price-zones" + }, + { + "id": "13", + "type": "price-zones" + }, + { + "id": "2", + "type": "price-zones" + }, + { + "id": "3", + "type": "price-zones" + }, + { + "id": "4", + "type": "price-zones" + }, + { + "id": "5", + "type": "price-zones" + } + ] + }, + "products": { + "_embedded": [ + { + "id": "0B004F62DCA224FE", + "type": "products" + } + ] + } + } + }, + { + "id": "000036100009", + "type": "offers", + "attributes": { + "name": "150", + "description": "Standard Ticket", + "rank": 4, + "offerType": "SPECIAL", + "currency": "USD", + "prices": [ + { + "priceZone": "1", + "value": "147.00", + "total": "171.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "18.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "13", + "value": "147.00", + "total": "171.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "18.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "2", + "value": "147.00", + "total": "171.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "18.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "3", + "value": "147.00", + "total": "171.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "18.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "4", + "value": "147.00", + "total": "171.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "18.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "5", + "value": "147.00", + "total": "171.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "18.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + } + ], + "limit": { + "min": 1, + "max": 14, + "multiples": 1 + } + }, + "relationships": { + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "6", + "type": "areas" + }, + { + "id": "8", + "type": "areas" + }, + { + "id": "9", + "type": "areas" + }, + { + "id": "10", + "type": "areas" + }, + { + "id": "11", + "type": "areas" + }, + { + "id": "12", + "type": "areas" + } + ] + }, + "priceZones": { + "_embedded": [ + { + "id": "1", + "type": "price-zones" + }, + { + "id": "13", + "type": "price-zones" + }, + { + "id": "2", + "type": "price-zones" + }, + { + "id": "3", + "type": "price-zones" + }, + { + "id": "4", + "type": "price-zones" + }, + { + "id": "5", + "type": "price-zones" + } + ] + }, + "products": { + "_embedded": [ + { + "id": "0B004F62DCA224FE", + "type": "products" + } + ] + } + } + }, + { + "id": "00003E140009", + "type": "offers", + "attributes": { + "name": "50", + "description": "Standard Ticket", + "rank": 5, + "offerType": "SPECIAL", + "currency": "USD", + "prices": [ + { + "priceZone": "1", + "value": "47.00", + "total": "64.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "11.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "13", + "value": "47.00", + "total": "64.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "11.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "2", + "value": "47.00", + "total": "64.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "11.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "3", + "value": "47.00", + "total": "64.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "11.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "4", + "value": "47.00", + "total": "64.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "11.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + }, + { + "priceZone": "5", + "value": "47.00", + "total": "64.00", + "fees": [ + { + "value": "0.00", + "label": "Distance", + "type": "distance" + }, + { + "value": "3.00", + "label": "Facility", + "type": "facility" + }, + { + "value": "11.00", + "label": "Service", + "type": "service" + } + ], + "taxes": [ + { + "value": "0.00", + "label": "Face Value Tax", + "type": "face_value_tax" + }, + { + "value": "0.00", + "label": "Service Tax", + "type": "service_tax" + }, + { + "value": "0.00", + "label": "Service Tax 2", + "type": "service_tax2" + } + ] + } + ], + "limit": { + "min": 1, + "max": 14, + "multiples": 1 + } + }, + "relationships": { + "areas": { + "_embedded": [ + { + "id": "0", + "type": "areas" + }, + { + "id": "6", + "type": "areas" + }, + { + "id": "8", + "type": "areas" + }, + { + "id": "9", + "type": "areas" + }, + { + "id": "10", + "type": "areas" + }, + { + "id": "11", + "type": "areas" + }, + { + "id": "12", + "type": "areas" + } + ] + }, + "priceZones": { + "_embedded": [ + { + "id": "1", + "type": "price-zones" + }, + { + "id": "13", + "type": "price-zones" + }, + { + "id": "2", + "type": "price-zones" + }, + { + "id": "3", + "type": "price-zones" + }, + { + "id": "4", + "type": "price-zones" + }, + { + "id": "5", + "type": "price-zones" + } + ] + }, + "products": { + "_embedded": [ + { + "id": "0B004F62DCA224FE", + "type": "products" + } + ] + } + } + } + ] + } + } +] \ No newline at end of file diff --git a/test/fixtures/commerce/v2/offer/find-500.json b/test/fixtures/commerce/v2/offer/find-500.json new file mode 100644 index 0000000..049694f --- /dev/null +++ b/test/fixtures/commerce/v2/offer/find-500.json @@ -0,0 +1,26 @@ +[ + + { + "scope": "https://app.ticketmaster.com", + "method": "GET", + "path": "/commerce/v2/events/unknown-id/offers?apikey=mock-api-key", + "status": 500, + "headers": { + "Date": "Sat, 25 Jun 2016 20:55:35 GMT", + "Content-Length": "88", + "X-Application-Context": "application:default,jetson4", + "Connection": "keep-alive", + "Content-Type": "application/json;charset=utf-8", + "Server": "Apache-Coyote/1.1" + }, + "response": { + "errors": [ + { + "status": "500", + "detail": "Invalid Event - event not found.", + "code": "40001" + } + ] + } + } +] diff --git a/test/fixtures/discovery/v1/event/all-200.json b/test/fixtures/discovery/v1/event/all-200.json index 0a66f75..cc30ca3 100644 --- a/test/fixtures/discovery/v1/event/all-200.json +++ b/test/fixtures/discovery/v1/event/all-200.json @@ -2,7 +2,7 @@ { "scope": "https://app.ticketmaster.com", "method": "GET", - "path": "/discovery/v1/events/?apikey=mock-api-key", + "path": "/discovery/v1/events?apikey=mock-api-key", "status": 200, "headers": { "Access-Control-Allow-Headers": "origin, x-requested-with, accept", diff --git a/test/fixtures/discovery/v2/attraction/all-200.json b/test/fixtures/discovery/v2/attraction/all-200.json new file mode 100644 index 0000000..80c09f2 --- /dev/null +++ b/test/fixtures/discovery/v2/attraction/all-200.json @@ -0,0 +1,2082 @@ +[ + { + "scope": "https://app.ticketmaster.com", + "method": "GET", + "path": "/discovery/v2/attractions?apikey=mock-api-key", + "status": 200, + "headers": { + "Access-Control-Allow-Headers": "origin, x-requested-with, accept", + "Access-Control-Allow-Origin": "*", + "Date": "Sat, 16 Jan 2016 18:41:27 GMT", + "Content-Length": "3488", + "Access-Control-Max-Age": "3628800", + "Access-Control-Allow-Methods": "GET, PUT, POST, DELETE", + "X-Application-Context": "application:default,jetson4", + "Connection": "keep-alive", + "Content-Type": "application/json;charset=utf-8", + "Server": "Apache-Coyote/1.1" + }, + "response": { + "_links": { + "self": { + "href": "/discovery/v2/attractions?view=null{&page,size,sort}", + "templated": true + }, + "next": { + "href": "/discovery/v2/attractions?view=null&page=1&size=20{&sort}", + "templated": true + } + }, + "_embedded": { + "attractions": [ + { + "name": "!!!", + "type": "attraction", + "id": "K8vZ9175BhV", + "test": false, + "url": "http://ticketmaster.com/artist/919340", + "locale": "en-us", + "images": [ + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/a/418/aa73b994-9912-4535-ba21-4865ae93a418_41291_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": false + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/a/418/aa73b994-9912-4535-ba21-4865ae93a418_41291_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": false + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/a/418/aa73b994-9912-4535-ba21-4865ae93a418_41291_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": false + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/a/418/aa73b994-9912-4535-ba21-4865ae93a418_41291_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": false + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/a/418/aa73b994-9912-4535-ba21-4865ae93a418_41291_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": false + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/a/418/aa73b994-9912-4535-ba21-4865ae93a418_41291_EVENT_DETAIL_PAGE_16_9.jpg", + "width": 205, + "height": 115, + "fallback": false + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/a/418/aa73b994-9912-4535-ba21-4865ae93a418_41291_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": false + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/a/418/aa73b994-9912-4535-ba21-4865ae93a418_41291_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": false + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/a/418/aa73b994-9912-4535-ba21-4865ae93a418_41291_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": false + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/a/418/aa73b994-9912-4535-ba21-4865ae93a418_41291_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": false + } + ], + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7nJ", + "name": "Music" + }, + "genre": { + "id": "KnvZfZ7vAeA", + "name": "Rock" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7v6F1", + "name": "Pop" + } + } + ], + "_links": { + "self": { + "href": "/discovery/v2/attractions/K8vZ9175BhV?locale=en-us" + } + } + }, + { + "name": "!Hero", + "type": "attraction", + "id": "K8vZ9175jtV", + "test": false, + "url": "http://ticketmaster.com/artist/883184", + "locale": "en-us", + "images": [ + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/MUSIC_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_EVENT_DETAIL_PAGE_16_9.jpg", + "width": 205, + "height": 115, + "fallback": true + } + ], + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7nJ", + "name": "Music" + }, + "genre": { + "id": "KnvZfZ7vAe7", + "name": "Religious" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7v6ea", + "name": "Gospel" + } + } + ], + "_links": { + "self": { + "href": "/discovery/v2/attractions/K8vZ9175jtV?locale=en-us" + } + } + }, + { + "name": "!Tang", + "type": "attraction", + "id": "K8vZ9172oD0", + "test": false, + "url": "http://ticketmaster.com/artist/1673094", + "locale": "en-us", + "images": [ + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/MUSIC_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_EVENT_DETAIL_PAGE_16_9.jpg", + "width": 205, + "height": 115, + "fallback": true + } + ], + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7nJ", + "name": "Music" + }, + "genre": { + "id": "KnvZfZ7vAee", + "name": "R&B" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7vknE", + "name": "Soul" + } + } + ], + "_links": { + "self": { + "href": "/discovery/v2/attractions/K8vZ9172oD0?locale=en-us" + } + } + }, + { + "name": "!Women Art Revolution", + "type": "attraction", + "id": "K8vZ917CXDf", + "test": false, + "url": "http://ticketmaster.com/artist/1643423", + "locale": "en-us", + "images": [ + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MISC_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MISC_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MISC_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MISC_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MISC_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MISC_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/MISC_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MISC_EVENT_DETAIL_PAGE_16_9.jpg", + "width": 205, + "height": 115, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MISC_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MISC_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + } + ], + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7nn", + "name": "Film" + }, + "genre": { + "id": "KnvZfZ7vAka", + "name": "Miscellaneous" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7vFln", + "name": "Miscellaneous" + } + } + ], + "_links": { + "self": { + "href": "/discovery/v2/attractions/K8vZ917CXDf?locale=en-us" + } + } + }, + { + "name": "\"Maljanne, Herra Kreivi\"", + "type": "attraction", + "id": "K8vZ917ffVV", + "test": false, + "url": "http://ticketmaster.com/artist/2210914", + "locale": "en-us", + "images": [ + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/MUSIC_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_EVENT_DETAIL_PAGE_16_9.jpg", + "width": 205, + "height": 115, + "fallback": true + } + ], + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7nJ", + "name": "Music" + }, + "genre": { + "id": "KnvZfZ7vAev", + "name": "Pop" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7vk1l", + "name": "Adult Contemporary" + } + } + ], + "_links": { + "self": { + "href": "/discovery/v2/attractions/K8vZ917ffVV?locale=en-us" + } + } + }, + { + "name": "\"The Coach\" Tom Whiteley", + "type": "attraction", + "id": "K8vZ917GDc0", + "test": false, + "url": "http://ticketmaster.com/artist/1486679", + "locale": "en-us", + "images": [ + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/ARTS_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/ARTS_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/ARTS_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/ARTS_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/ARTS_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/ARTS_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/ARTS_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/ARTS_EVENT_DETAIL_PAGE_16_9.jpg", + "width": 205, + "height": 115, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/ARTS_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/ARTS_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + } + ], + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7na", + "name": "Arts & Theatre" + }, + "genre": { + "id": "KnvZfZ7vAe1", + "name": "Comedy" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7vF17", + "name": "Comedy" + } + } + ], + "_links": { + "self": { + "href": "/discovery/v2/attractions/K8vZ917GDc0?locale=en-us" + } + } + }, + { + "name": "#1 Hits of the 60's", + "type": "attraction", + "id": "K8vZ917GFT7", + "test": false, + "url": "http://ticketmaster.com/artist/1206286", + "locale": "en-us", + "images": [ + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/MUSIC_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + }, + { + "ratio": "16_9", + "url": "https://s1.ticketm.net/dbimages/20416a.gif", + "width": 205, + "height": 115, + "fallback": false + } + ], + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7nJ", + "name": "Music" + }, + "genre": { + "id": "KnvZfZ7vAeA", + "name": "Rock" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7v6F1", + "name": "Pop" + } + } + ], + "_links": { + "self": { + "href": "/discovery/v2/attractions/K8vZ917GFT7?locale=en-us" + } + } + }, + { + "name": "#140conf", + "type": "attraction", + "id": "K8vZ917C6V0", + "test": false, + "url": "http://ticketmaster.com/artist/1564289", + "locale": "en-us", + "images": [ + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MISC_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MISC_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MISC_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MISC_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MISC_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MISC_EVENT_DETAIL_PAGE_16_9.jpg", + "width": 205, + "height": 115, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MISC_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/MISC_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MISC_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MISC_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + } + ], + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7n1", + "name": "Miscellaneous" + }, + "genre": { + "id": "KnvZfZ7v7ll", + "name": "Undefined" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7vAv1", + "name": "Undefined" + } + } + ], + "_links": { + "self": { + "href": "/discovery/v2/attractions/K8vZ917C6V0?locale=en-us" + } + } + }, + { + "name": "#Amg", + "type": "attraction", + "id": "K8vZ9178ry0", + "test": false, + "url": "http://ticketmaster.com/artist/742549", + "locale": "en-us", + "images": [ + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/MUSIC_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_EVENT_DETAIL_PAGE_16_9.jpg", + "width": 205, + "height": 115, + "fallback": true + } + ], + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7nJ", + "name": "Music" + }, + "genre": { + "id": "KnvZfZ7vAv1", + "name": "Hip-Hop/Rap" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7vkdA", + "name": "Urban" + } + } + ], + "_links": { + "self": { + "href": "/discovery/v2/attractions/K8vZ9178ry0?locale=en-us" + } + } + }, + { + "name": "#Been#Trill", + "type": "attraction", + "id": "K8vZ9172cbf", + "test": false, + "url": "http://ticketmaster.com/artist/1722703", + "locale": "en-us", + "images": [ + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/MUSIC_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_EVENT_DETAIL_PAGE_16_9.jpg", + "width": 205, + "height": 115, + "fallback": true + } + ], + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7nJ", + "name": "Music" + }, + "genre": { + "id": "KnvZfZ7vAv1", + "name": "Hip-Hop/Rap" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7vkdA", + "name": "Urban" + } + } + ], + "_links": { + "self": { + "href": "/discovery/v2/attractions/K8vZ9172cbf?locale=en-us" + } + } + }, + { + "name": "#Hobrox", + "type": "attraction", + "id": "K8vZ917u2EV", + "test": false, + "url": "http://ticketmaster.com/artist/1501778", + "locale": "en-us", + "images": [ + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + }, + { + "ratio": "16_9", + "url": "https://s1.ticketm.net/dbimages/65571a.jpg", + "width": 205, + "height": 115, + "fallback": false + }, + { + "ratio": "4_3", + "url": "https://s1.ticketm.net/dbimages/65572a.jpg", + "width": 305, + "height": 225, + "fallback": false + } + ], + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7nJ", + "name": "Music" + }, + "genre": { + "id": "KnvZfZ7vAeA", + "name": "Rock" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7v6F1", + "name": "Pop" + } + } + ], + "_links": { + "self": { + "href": "/discovery/v2/attractions/K8vZ917u2EV?locale=en-us" + } + } + }, + { + "name": "#SummersEND Music Festival", + "type": "attraction", + "id": "K8vZ9171ya0", + "test": false, + "url": "http://ticketmaster.com/artist/899742", + "locale": "en-us", + "images": [ + { + "ratio": "16_9", + "url": "https://s1.ticketm.net/dbimages/147984a.jpg", + "width": 205, + "height": 115, + "fallback": false + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "4_3", + "url": "https://s1.ticketm.net/dbimages/147983a.jpg", + "width": 305, + "height": 225, + "fallback": false + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + } + ], + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7nJ", + "name": "Music" + }, + "genre": { + "id": "KnvZfZ7vAvF", + "name": "Dance/Electronic" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7vAJ1", + "name": "Club Dance" + } + } + ], + "_links": { + "self": { + "href": "/discovery/v2/attractions/K8vZ9171ya0?locale=en-us" + } + } + }, + { + "name": "#Trashtag", + "type": "attraction", + "id": "K8vZ917oyh0", + "test": false, + "url": "http://ticketmaster.com/artist/1932567", + "locale": "en-us", + "images": [ + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/ARTS_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/ARTS_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/ARTS_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/ARTS_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/ARTS_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/ARTS_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/ARTS_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/ARTS_EVENT_DETAIL_PAGE_16_9.jpg", + "width": 205, + "height": 115, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/ARTS_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/ARTS_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + } + ], + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7na", + "name": "Arts & Theatre" + }, + "genre": { + "id": "KnvZfZ7v7l6", + "name": "Performance Art" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7v7l1", + "name": "Performance Art" + } + } + ], + "_links": { + "self": { + "href": "/discovery/v2/attractions/K8vZ917oyh0?locale=en-us" + } + } + }, + { + "name": "#Ukggold", + "type": "attraction", + "id": "K8vZ917K7dV", + "test": false, + "url": "http://ticketmaster.com/artist/2070732", + "locale": "en-us", + "images": [ + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/MUSIC_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_EVENT_DETAIL_PAGE_16_9.jpg", + "width": 205, + "height": 115, + "fallback": true + } + ], + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7nJ", + "name": "Music" + }, + "genre": { + "id": "KnvZfZ7vAv1", + "name": "Hip-Hop/Rap" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7vkdA", + "name": "Urban" + } + } + ], + "_links": { + "self": { + "href": "/discovery/v2/attractions/K8vZ917K7dV?locale=en-us" + } + } + }, + { + "name": "#Yolo", + "type": "attraction", + "id": "K8vZ9178ytV", + "test": false, + "url": "http://ticketmaster.com/artist/1837389", + "locale": "en-us", + "images": [ + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/MUSIC_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_EVENT_DETAIL_PAGE_16_9.jpg", + "width": 205, + "height": 115, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + } + ], + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7nJ", + "name": "Music" + }, + "genre": { + "id": "KnvZfZ7vAeA", + "name": "Rock" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7v6F1", + "name": "Pop" + } + } + ], + "_links": { + "self": { + "href": "/discovery/v2/attractions/K8vZ9178ytV?locale=en-us" + } + } + }, + { + "name": "$#*! My Mayor Says", + "type": "attraction", + "id": "K8vZ917uUgV", + "test": false, + "url": "http://ticketmaster.com/artist/1542031", + "locale": "en-us", + "images": [ + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/ARTS_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/ARTS_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/ARTS_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/ARTS_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/ARTS_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/ARTS_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/ARTS_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/ARTS_EVENT_DETAIL_PAGE_16_9.jpg", + "width": 205, + "height": 115, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/ARTS_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/ARTS_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + } + ], + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7na", + "name": "Arts & Theatre" + }, + "genre": { + "id": "KnvZfZ7vAe1", + "name": "Comedy" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7vF17", + "name": "Comedy" + } + } + ], + "_links": { + "self": { + "href": "/discovery/v2/attractions/K8vZ917uUgV?locale=en-us" + } + } + }, + { + "name": "$3 Throwdown", + "type": "attraction", + "id": "K8vZ917GIgV", + "test": false, + "url": "http://ticketmaster.com/artist/1283833", + "locale": "en-us", + "images": [ + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/MUSIC_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_EVENT_DETAIL_PAGE_16_9.jpg", + "width": 205, + "height": 115, + "fallback": true + } + ], + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7nJ", + "name": "Music" + }, + "genre": { + "id": "KnvZfZ7vAeA", + "name": "Rock" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7v6F1", + "name": "Pop" + } + } + ], + "_links": { + "self": { + "href": "/discovery/v2/attractions/K8vZ917GIgV?locale=en-us" + } + } + }, + { + "name": "$4 Wednesdays At 4th and B", + "type": "attraction", + "id": "K8vZ9178h5f", + "test": false, + "url": "http://ticketmaster.com/artist/1791413", + "locale": "en-us", + "images": [ + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/MUSIC_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_EVENT_DETAIL_PAGE_16_9.jpg", + "width": 205, + "height": 115, + "fallback": true + } + ], + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7nJ", + "name": "Music" + }, + "genre": { + "id": "KnvZfZ7vAe6", + "name": "Undefined" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7v6JI", + "name": "Undefined" + } + } + ], + "_links": { + "self": { + "href": "/discovery/v2/attractions/K8vZ9178h5f?locale=en-us" + } + } + }, + { + "name": "$5 Fine", + "type": "attraction", + "id": "K8vZ917C32f", + "test": false, + "url": "http://ticketmaster.com/artist/1579021", + "locale": "en-us", + "images": [ + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "4_3", + "url": "https://s1.ticketm.net/dbimages/79078a.jpg", + "width": 305, + "height": 225, + "fallback": false + }, + { + "ratio": "16_9", + "url": "https://s1.ticketm.net/dbimages/79079a.jpg", + "width": 205, + "height": 115, + "fallback": false + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + } + ], + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7nJ", + "name": "Music" + }, + "genre": { + "id": "KnvZfZ7vAv6", + "name": "Country" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7vAFa", + "name": "Country" + } + } + ], + "_links": { + "self": { + "href": "/discovery/v2/attractions/K8vZ917C32f?locale=en-us" + } + } + }, + { + "name": "$kinny", + "type": "attraction", + "id": "K8vZ917fFB7", + "test": false, + "url": "http://ticketmaster.com/artist/2185781", + "locale": "en-us", + "images": [ + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/MUSIC_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/MUSIC_EVENT_DETAIL_PAGE_16_9.jpg", + "width": 205, + "height": 115, + "fallback": true + } + ], + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7nJ", + "name": "Music" + }, + "genre": { + "id": "KnvZfZ7vAv1", + "name": "Hip-Hop/Rap" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7vkvl", + "name": "Hip-Hop/Rap" + } + } + ], + "_links": { + "self": { + "href": "/discovery/v2/attractions/K8vZ917fFB7?locale=en-us" + } + } + } + ] + }, + "page": { + "size": 20, + "totalElements": 170867, + "totalPages": 8544, + "number": 0 + } + } + } +] diff --git a/test/fixtures/discovery/v2/classification/all-200.json b/test/fixtures/discovery/v2/classification/all-200.json new file mode 100644 index 0000000..7518b43 --- /dev/null +++ b/test/fixtures/discovery/v2/classification/all-200.json @@ -0,0 +1,10902 @@ +[ + { + "scope": "https://app.ticketmaster.com", + "method": "GET", + "path": "/discovery/v2/classifications?apikey=mock-api-key", + "status": 200, + "headers": { + "Access-Control-Allow-Headers": "origin, x-requested-with, accept", + "Access-Control-Allow-Origin": "*", + "Date": "Sat, 16 Jan 2016 18:41:27 GMT", + "Content-Length": "3488", + "Access-Control-Max-Age": "3628800", + "Access-Control-Allow-Methods": "GET, PUT, POST, DELETE", + "X-Application-Context": "application:default,jetson4", + "Connection": "keep-alive", + "Content-Type": "application/json;charset=utf-8", + "Server": "Apache-Coyote/1.1" + }, + "response": { + "_links": { + "self": { + "href": "/discovery/v2/classifications?view=null{&page,size,sort}", + "templated": true + } + }, + "_embedded": { + "classifications": [ + { + "_links": { + "self": { + "href": "/discovery/v2/classifications/KZFzniwnSyZfZ7v7na?locale=en-us" + } + }, + "segment": { + "id": "KZFzniwnSyZfZ7v7na", + "name": "Arts & Theatre", + "_links": { + "self": { + "href": "/discovery/v2/classifications/segments/KZFzniwnSyZfZ7v7na?locale=en-us" + } + }, + "_embedded": { + "genres": [ + { + "id": "KnvZfZ7v7lv", + "name": "Magic & Illusion", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7lv?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7l7", + "name": "Magic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7l7?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAe1", + "name": "Comedy", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAe1?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vF17", + "name": "Comedy", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF17?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7nJ", + "name": "Classical", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7nJ?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7nI", + "name": "Symphonic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7nI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v7nE", + "name": "Classical/Vocal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7nE?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7lJ", + "name": "Variety", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7lJ?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vAvA", + "name": "Variety", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAvA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAv7", + "name": "Cabaret", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAv7?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7nI", + "name": "Dance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7nI?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7nn", + "name": "Ballet", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7nn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v7nl", + "name": "Dance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7nl?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7nE", + "name": "Cultural", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7nE?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7nt", + "name": "Cultural", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7nt?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7nn", + "name": "Fashion", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7nn?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7le", + "name": "Fashion", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7le?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7nt", + "name": "Espectaculo", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7nt?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7lv", + "name": "Espectaculo", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7lv?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7nl", + "name": "Fine Art", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7nl?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7ld", + "name": "Fine Art", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7ld?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7n1", + "name": "Circus & Specialty Acts", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7n1?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7nJ", + "name": "Pantomime", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7nJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v7n1", + "name": "Circus", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7n1?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7na", + "name": "Children's Theatre", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7na?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7na", + "name": "Children's Theatre", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7na?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7l1", + "name": "Theatre", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7l1?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7lI", + "name": "Comedy", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7lI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAvd", + "name": "Mystery", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAvd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v7ll", + "name": "Miscellaneous", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7ll?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAve", + "name": "Musical", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAve?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v7ln", + "name": "Horror", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7ln?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v7lt", + "name": "Drama", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7lt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAvv", + "name": "Monologue", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAvv?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7ld", + "name": "Miscellaneous Theatre", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7ld?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7lk", + "name": "Miscellaneous Theatre", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7lk?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7le", + "name": "Miscellaneous", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7le?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vF1k", + "name": "Miscellaneous", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF1k?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7lA", + "name": "Music", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7lA?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7lF", + "name": "Chamber Music", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7lF?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7l7", + "name": "Multimedia", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7l7?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7l6", + "name": "Multimedia", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7l6?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7l6", + "name": "Performance Art", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7l6?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7l1", + "name": "Performance Art", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7l1?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7lk", + "name": "Opera", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7lk?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7la", + "name": "Opera", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7la?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7la", + "name": "Spectacular", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7la?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7lE", + "name": "Spectacular", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7lE?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7lF", + "name": "Puppetry", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7lF?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7lJ", + "name": "Puppet Show", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7lJ?locale=en-us" + } + } + } + ] + } + } + ] + } + } + }, + { + "_links": { + "self": { + "href": "/discovery/v2/classifications/KZFzniwnSyZfZ7v7nn?locale=en-us" + } + }, + "segment": { + "id": "KZFzniwnSyZfZ7v7nn", + "name": "Film", + "_links": { + "self": { + "href": "/discovery/v2/classifications/segments/KZFzniwnSyZfZ7v7nn?locale=en-us" + } + }, + "_embedded": { + "genres": [ + { + "id": "KnvZfZ7vAka", + "name": "Miscellaneous", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAka?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFll", + "name": "Classic/Reissue", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFll?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFln", + "name": "Miscellaneous", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFln?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAkF", + "name": "Family", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAkF?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFlt", + "name": "Miscellaneous", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFlt?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAk1", + "name": "Foreign", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAk1?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vavv", + "name": "Foreign", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vavv?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAkd", + "name": "Animation", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAkd?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFla", + "name": "Animation", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFla?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAkE", + "name": "Urban", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAkE?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vavd", + "name": "Urban", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vavd?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAke", + "name": "Action/Adventure", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAke?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFlF", + "name": "Action/Adventure", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFlF?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAkJ", + "name": "Music", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAkJ?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vave", + "name": "Music", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vave?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAkA", + "name": "Comedy", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAkA?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFlJ", + "name": "Comedy", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFlJ?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAk7", + "name": "Arthouse", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAk7?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFl1", + "name": "Arthouse", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFl1?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAk6", + "name": "Drama", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAk6?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFlI", + "name": "Drama", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFlI?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAkk", + "name": "Documentary", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAkk?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFlE", + "name": "Documentary", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFlE?locale=en-us" + } + } + } + ] + } + } + ] + } + } + }, + { + "_links": { + "self": { + "href": "/discovery/v2/classifications/KZFzniwnSyZfZ7v7n1?locale=en-us" + } + }, + "segment": { + "id": "KZFzniwnSyZfZ7v7n1", + "name": "Miscellaneous", + "_links": { + "self": { + "href": "/discovery/v2/classifications/segments/KZFzniwnSyZfZ7v7n1?locale=en-us" + } + }, + "_embedded": { + "genres": [ + { + "id": "KnvZfZ7vAAF", + "name": "Multimedia", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAAF?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFnI", + "name": "Multimedia", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFnI?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAA1", + "name": "Comedy", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAA1?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFnn", + "name": "Comedy", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFnn?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAAa", + "name": "Casino/Gaming", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAAa?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFnt", + "name": "Casino/Gaming", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFnt?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7lE", + "name": "Community/Cultural", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7lE?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vAvk", + "name": "Public Skating", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAvk?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7lt", + "name": "Special Interest/Hobby", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7lt?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vAvF", + "name": "Flower & Garden", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAvF?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7lI", + "name": "Ice Shows", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7lI?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vAv6", + "name": "Ice Shows", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAv6?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7ll", + "name": "Undefined", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7ll?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vAv1", + "name": "Undefined", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAv1?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAAl", + "name": "Health/Wellness", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAAl?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFlk", + "name": "Health/Wellness", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFlk?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAAJ", + "name": "Hobby/Special Interest Expos", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAAJ?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFnl", + "name": "Hobby/Special Interest Expos", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFnl?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vA1n", + "name": "Family", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vA1n?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vaav", + "name": "Other", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vaav?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAAI", + "name": "Food & Drink", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAAI?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFle", + "name": "Food & Drink", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFle?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFld", + "name": "Restaurant", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFld?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAAE", + "name": "Community/Civic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAAE?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFlv", + "name": "Community/Civic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFlv?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAeE", + "name": "Fairs & Festivals", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAeE?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vF1F", + "name": "Undefined", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF1F?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAAn", + "name": "Psychics/Mediums/Hypnotists", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAAn?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFlA", + "name": "Psychics/Mediums/Hypnotists", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFlA?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAAt", + "name": "Holiday", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAAt?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFl7", + "name": "Holiday", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFl7?locale=en-us" + } + } + } + ] + } + } + ] + } + } + }, + { + "_links": { + "self": { + "href": "/discovery/v2/classifications/KZFzniwnSyZfZ7v7nJ?locale=en-us" + } + }, + "segment": { + "id": "KZFzniwnSyZfZ7v7nJ", + "name": "Music", + "_links": { + "self": { + "href": "/discovery/v2/classifications/segments/KZFzniwnSyZfZ7v7nJ?locale=en-us" + } + }, + "_embedded": { + "genres": [ + { + "id": "KnvZfZ7vAeA", + "name": "Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAeA?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v6Aa", + "name": "Doom Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Aa?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6dE", + "name": "Acid Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6dE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6dI", + "name": "Adult Contemporary", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6dI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6dn", + "name": "Alternative Roots", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6dn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v666", + "name": "Instrumental Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v666?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v61A", + "name": "Shred", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v61A?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v67t", + "name": "British Punk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v67t?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Ja", + "name": "Worldbeat", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Ja?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v661", + "name": "Kraut Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v661?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v66n", + "name": "Mod Revival", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v66n?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6a6", + "name": "Punk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6a6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6kd", + "name": "Freakbeat", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6kd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Fk", + "name": "No Wave", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Fk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6FF", + "name": "Oi!", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6FF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Ft", + "name": "Post-Hardcore", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Ft?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v61e", + "name": "Roots Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v61e?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Ae", + "name": "Christian Punk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Ae?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6A1", + "name": "Early British Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6A1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v61I", + "name": "Straight-Edge", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v61I?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v67F", + "name": "Boogie Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v67F?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v611", + "name": "Sophisti-Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v611?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6a1", + "name": "Punk Revival", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6a1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v61n", + "name": "Surf Guitar", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v61n?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6k6", + "name": "Garage Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6k6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Fd", + "name": "New Wave", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Fd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v61E", + "name": "Stoner Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v61E?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6AE", + "name": "Electronic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6AE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v67k", + "name": "Bar Band", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v67k?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Fn", + "name": "Post-Punk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Fn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v66e", + "name": "Heartland Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v66e?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Ad", + "name": "Christian Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Ad?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v61d", + "name": "Scandinavian Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v61d?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6kA", + "name": "Fusion", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6kA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v67n", + "name": "Canterbury Scene", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v67n?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Jd", + "name": "Symphonic Black Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Jd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Av", + "name": "Celtic Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Av?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6aA", + "name": "Psychedelic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6aA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6ae", + "name": "Progressive Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6ae?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v66I", + "name": "Merseybeat", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v66I?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v66F", + "name": "Japanese Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v66F?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6FA", + "name": "New York Punk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6FA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6J7", + "name": "Teen Idol", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6J7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6dJ", + "name": "Acid Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6dJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v67v", + "name": "Anarchist Punk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v67v?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6F7", + "name": "New Wave Of British Heavy Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6F7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v67d", + "name": "Art Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v67d?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6A6", + "name": "Detroit Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6A6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v61k", + "name": "Ska Revival", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v61k?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6An", + "name": "European Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6An?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6FE", + "name": "Pop Punk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6FE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6A7", + "name": "Classic Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6A7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6aa", + "name": "Punk Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6aa?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6AJ", + "name": "Early Rock & Roll", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6AJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6dl", + "name": "American Punk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6dl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v61J", + "name": "Southern Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v61J?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Jk", + "name": "Thrash & Speed Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Jk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6kt", + "name": "Guitar Virtuoso", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6kt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v66v", + "name": "Hardcore Punk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v66v?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6a7", + "name": "Proto-Punk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6a7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v61F", + "name": "Sludge Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v61F?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6d1", + "name": "Aboriginal Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6d1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v67I", + "name": "British Psychedelia", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v67I?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6ak", + "name": "Pub Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6ak?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Jv", + "name": "Surf Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Jv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6ke", + "name": "Frat Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6ke?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v66J", + "name": "L.A. Punk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v66J?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v66A", + "name": "Indie Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v66A?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6aE", + "name": "Rap-Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6aE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v66E", + "name": "Latin Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v66E?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v67A", + "name": "Avant-Garde Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v67A?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v67l", + "name": "Celebrity", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v67l?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6kv", + "name": "Folk Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6kv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6kE", + "name": "Grindcore", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6kE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6kF", + "name": "Garage Rock Revival", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6kF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v617", + "name": "Screamo", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v617?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v66l", + "name": "Neo-Classical Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v66l?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v61a", + "name": "Soft Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v61a?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Al", + "name": "Experimental Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Al?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6at", + "name": "Retro Rock Revival", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6at?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v61v", + "name": "Rockabilly Revival", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v61v?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v676", + "name": "Blues-Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v676?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6kJ", + "name": "Goth Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6kJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6k1", + "name": "Glam", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6k1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Fl", + "name": "Power Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Fl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v67e", + "name": "Arena Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v67e?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v616", + "name": "Skiffle", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v616?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v671", + "name": "British Folk-Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v671?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6al", + "name": "Rockabilly", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6al?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6dt", + "name": "Alternative Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6dt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6AI", + "name": "Emo", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6AI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6kl", + "name": "Hard Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6kl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6aF", + "name": "Punk Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6aF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Je", + "name": "Swedish Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Je?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6J6", + "name": "Traditional Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6J6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6aJ", + "name": "Rap-Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6aJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v66t", + "name": "Mod", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v66t?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6F6", + "name": "Obscuro", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6F6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6FJ", + "name": "Pop Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6FJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v61l", + "name": "Surf Revival", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v61l?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6da", + "name": "Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6da?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vavA", + "name": "Oldies & Classics", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vavA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6an", + "name": "Rock & Roll", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6an?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6JA", + "name": "Tex-Mex", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6JA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Fe", + "name": "New Romantic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Fe?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6ka", + "name": "Girl Group", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6ka?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6kk", + "name": "Garage Punk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6kk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6F1", + "name": "Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6F1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v61t", + "name": "Surf", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v61t?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6av", + "name": "Power Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6av?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Fv", + "name": "Neo-Prog", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Fv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v67E", + "name": "British Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v67E?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Ak", + "name": "Death Metal/ Black Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Ak?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6ad", + "name": "Progressive Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6ad?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6JF", + "name": "World Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6JF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v67J", + "name": "British Invasion", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v67J?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6k7", + "name": "Funk-Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6k7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6kI", + "name": "Guitar Gods", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6kI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6AF", + "name": "Doo Wop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6AF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v667", + "name": "Hot Rod Revival", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v667?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v67a", + "name": "British D416", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v67a?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v66k", + "name": "Industrial Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v66k?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6kn", + "name": "Hair Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6kn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v677", + "name": "Aussie Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v677?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v66a", + "name": "Jazz-Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v66a?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v66d", + "name": "Hot Rod", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v66d?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6At", + "name": "European Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6At?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAvd", + "name": "Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAvd?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vA6E", + "name": "St. Louis Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA6E?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAAE", + "name": "Delta Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAAE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAkI", + "name": "Modern Delta Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAkI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA6n", + "name": "Traditional Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA6n?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA6A", + "name": "Prewar Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA6A?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA6J", + "name": "Soul-Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA6J?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA6F", + "name": "Prewar-Country Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA6F?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA6a", + "name": "Prewar-Gospel Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA6a?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAF7", + "name": "British Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAF7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAFv", + "name": "Vocal Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAFv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA6I", + "name": "Swamp Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA6I?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAA6", + "name": "Blues Revival", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAA6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAka", + "name": "Jump Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAka?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAA7", + "name": "Acoustic Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAA7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAke", + "name": "Electric Blues Guitar", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAke?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAkF", + "name": "Juke Joint Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAkF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAkd", + "name": "Electric Harmonica Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAkd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAk7", + "name": "Finger-Picked Guitar", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAk7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAAk", + "name": "Blues Gospel", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAAk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAkv", + "name": "Electric Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAkv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAk1", + "name": "Louisiana Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAk1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAAa", + "name": "Contemporary Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAAa?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAk6", + "name": "Jazz Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAk6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAA1", + "name": "Country Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAA1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAkk", + "name": "Harmonica Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAkk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAFe", + "name": "West Coast Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAFe?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAAd", + "name": "Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAAd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA6t", + "name": "Texas Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA6t?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAAF", + "name": "Chicago Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAAF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAAI", + "name": "Detroit Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAAI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA6v", + "name": "New Orleans Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA6v?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA67", + "name": "Piedmont Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA67?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA61", + "name": "Slide Guitar", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA61?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAkt", + "name": "Modern Electric Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAkt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAAt", + "name": "Dirty Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAAt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA6d", + "name": "Piano Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA6d?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAAA", + "name": "Avant-Garde Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAAA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAkA", + "name": "Folk-Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAkA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA6e", + "name": "New York Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA6e?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAAn", + "name": "Early American Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAAn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAkl", + "name": "Modern Electric Texas Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAkl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAAl", + "name": "East Coast Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAAl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAkJ", + "name": "Memphis Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAkJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vav7", + "name": "Modern Electric D618", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vav7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAkE", + "name": "Modern Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAkE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA6l", + "name": "Vaudeville Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA6l?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAkn", + "name": "Modern Electric Chicago Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAkn?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAe7", + "name": "Religious", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAe7?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v6e6", + "name": "Country Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6e6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6eJ", + "name": "Hymns", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6eJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6el", + "name": "Jewish Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6el?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6de", + "name": "Latin Contemporary Christian", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6de?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6ek", + "name": "Contemporary Christian", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6ek?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6eA", + "name": "Christian Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6eA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6e1", + "name": "Gospel Choir", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6e1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6eF", + "name": "Country Gospel", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6eF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6eI", + "name": "Instrumental Gospel", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6eI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6d7", + "name": "Reggae Gospel", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6d7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6dA", + "name": "Scriptures", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6dA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6e7", + "name": "Christian Rap", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6e7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6ev", + "name": "Blues Gospel", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6ev?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6d6", + "name": "Spirituals", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6d6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6dk", + "name": "Southern Gospel", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6dk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6eE", + "name": "Inspirational", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6eE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6ee", + "name": "Celtic Gospel", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6ee?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6dF", + "name": "Traditional", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6dF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6vt", + "name": "Alternative Christian", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6vt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6et", + "name": "Jesus Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6et?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6ea", + "name": "Gospel", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6ea?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6en", + "name": "Jewish & Yiddish Music", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6en?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6vl", + "name": "Bluegrass-Gospel", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6vl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6vI", + "name": "Religious", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6vI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6dv", + "name": "Latin Christian", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6dv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6dd", + "name": "Praise & Worship", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6dd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6ed", + "name": "Christian Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6ed?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAvk", + "name": "Children's Music", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAvk?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vAFF", + "name": "Children's Music", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAFF?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAe6", + "name": "Undefined", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAe6?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v6JI", + "name": "Undefined", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6JI?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAvA", + "name": "Chanson Francaise", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAvA?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vAFk", + "name": "Chanson Francaise", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAFk?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAvF", + "name": "Dance/Electronic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAvF?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vAEA", + "name": "Electro-Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAEA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAIJ", + "name": "Jazz-House", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAIJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAIl", + "name": "Microsound", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAIl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAt1", + "name": "Techno", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAt1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAJF", + "name": "Big Beat", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAJF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA1l", + "name": "Acid Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA1l?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA1t", + "name": "2-Step/British Garage", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA1t?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAIn", + "name": "Microhouse", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAIn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAta", + "name": "Tech-House", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAta?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAJE", + "name": "Dance-Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAJE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAJd", + "name": "Ambient Breakbeat", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAJd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAEt", + "name": "Freestyle", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAEt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAJe", + "name": "Ambient", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAJe?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAJl", + "name": "Downbeat", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAJl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA1E", + "name": "Dance/Electronic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA1E?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAE1", + "name": "Experimental Dub", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAE1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAIe", + "name": "Goa Trance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAIe?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAII", + "name": "Latin Electronica", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAII?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAJJ", + "name": "Dance Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAJJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAt7", + "name": "Nu Breaks", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAt7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAE6", + "name": "Electronica Mainstream", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAE6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAEl", + "name": "Gabba", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAEl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAEe", + "name": "Drill'n'bass", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAEe?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAtv", + "name": "Minimal Techno", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAtv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA1I", + "name": "2-Step", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA1I?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAJk", + "name": "Ambient Techno", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAJk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAIt", + "name": "Left-Field House", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAIt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAtl", + "name": "Trip Hop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAtl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAnv", + "name": "Turntablists", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAnv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAJn", + "name": "Disco", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAJn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAtt", + "name": "Trance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAtt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAIA", + "name": "Hardcore Techno", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAIA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAEI", + "name": "Experimental Techno", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAEI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAIE", + "name": "Jungle/Drum 'n' Bass", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAIE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAEd", + "name": "Drum 'n' Bass", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAEd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAJa", + "name": "Broken Beat", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAJa?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAIF", + "name": "Illbient", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAIF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAtd", + "name": "Newbeat", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAtd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAJt", + "name": "Detroit Techno", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAJt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAne", + "name": "U.K. Garage", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAne?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAtn", + "name": "Tribal-House", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAtn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAEk", + "name": "Electro-Techno", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAEk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAEa", + "name": "Experimental Ambient", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAEa?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAI1", + "name": "Intelligent Dance Music", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAI1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAEF", + "name": "Euro-Dance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAEF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAIv", + "name": "Glitch", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAIv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAEJ", + "name": "Experimental Electro", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAEJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAtA", + "name": "Post-Disco", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAtA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAtk", + "name": "Progressive House", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAtk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAIa", + "name": "Industrial Drum'n'Bass", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAIa?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAtE", + "name": "Techno-Dub", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAtE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAte", + "name": "Neo-Electro", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAte?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAJ7", + "name": "Ambient Electronica", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAJ7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAtJ", + "name": "Techno Bass", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAtJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAEv", + "name": "Downtempo", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAEv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAJv", + "name": "Acid Techno", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAJv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAJI", + "name": "Dark Ambient", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAJI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAId", + "name": "Grime", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAId?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAtI", + "name": "Techno-House", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAtI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAt6", + "name": "Progressive Trance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAt6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAJA", + "name": "Ambient House", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAJA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAEE", + "name": "Experimental Jungle", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAEE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAnd", + "name": "World Dance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAnd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAJ1", + "name": "Club Dance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAJ1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA1n", + "name": "Acid House", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA1n?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAE7", + "name": "Dub Electronica", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAE7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAI6", + "name": "House", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAI6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAIk", + "name": "Hi-NRG", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAIk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAtF", + "name": "Rave", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAtF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAI7", + "name": "Happy Hardcore", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAI7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAJ6", + "name": "Avant-Garde", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAJ6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAEn", + "name": "Funky Breaks", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAEn?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAeF", + "name": "World", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAeF?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v6Iv", + "name": "Asian Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Iv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6tJ", + "name": "Celtic Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6tJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFd7", + "name": "Kenya", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFd7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFea", + "name": "Islamic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFea?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6te", + "name": "Brazil", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6te?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF7F", + "name": "Latin Soul", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF7F?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFek", + "name": "Indonesia", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFek?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFv1", + "name": "Gypsy", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFv1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF6A", + "name": "Qawwali", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF6A?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6IJ", + "name": "Big Band Latino", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6IJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6It", + "name": "Bolivia", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6It?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF66", + "name": "Rai", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF66?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFFk", + "name": "Sudan", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFFk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6EA", + "name": "Afro Peruvian", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6EA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6En", + "name": "Armenian", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6En?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFev", + "name": "Highlife", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFev?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6lI", + "name": "Europe", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6lI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Ek", + "name": "Afro-Beat", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Ek?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6le", + "name": "Cuban Rhumba", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6le?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6na", + "name": "Contemporary Flamenco", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6na?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6I6", + "name": "Belly Dancing", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6I6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Ee", + "name": "African Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Ee?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6t7", + "name": "Brazilian Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6t7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFAn", + "name": "Middle East", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFAn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFkA", + "name": "New York Salsa", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFkA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFdv", + "name": "Jibaro", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFdv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFFF", + "name": "Swedish Pop/Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFFF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6I7", + "name": "Bahamas", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6I7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF6k", + "name": "Raga", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF6k?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6tA", + "name": "British Punk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6tA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFAk", + "name": "Merengue", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFAk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Jn", + "name": "Aborginal Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Jn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFal", + "name": "Zaire & Congo", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFal?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF77", + "name": "Latin Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF77?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFa7", + "name": "Traditional Middle Eastern Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFa7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFAl", + "name": "Mini Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFAl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFee", + "name": "Hula", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFee?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF1e", + "name": "Zouk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF1e?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF76", + "name": "Latin Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF76?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFde", + "name": "Jit", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFde?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Ie", + "name": "Australasia", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Ie?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFk1", + "name": "Omutibo", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFk1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFFE", + "name": "Taiwan", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFFE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFvt", + "name": "Hawaiian Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFvt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFan", + "name": "Worldbeat", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFan?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6nd", + "name": "China", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6nd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFk7", + "name": "New Age", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFk7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFad", + "name": "Traditional Celtic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFad?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6lJ", + "name": "Ethiopia", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6lJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFkl", + "name": "Pipe Bands", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFkl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFaI", + "name": "Vietnam", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFaI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFFA", + "name": "South Pacific", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFFA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6nI", + "name": "Cuban", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6nI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFAe", + "name": "Mbaqanga", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFAe?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFel", + "name": "Japanese Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFel?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Jt", + "name": "World", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Jt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFA6", + "name": "Merenhouse", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFA6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFkt", + "name": "Panama", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFkt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFka", + "name": "Nueva Trova", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFka?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFvI", + "name": "Hawaiian", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFvI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF6n", + "name": "Slack Key Guitar", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF6n?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6EF", + "name": "Afro-Cuban Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6EF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6lt", + "name": "European Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6lt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFkI", + "name": "Pakistan", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFkI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFFn", + "name": "Thailand", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFFn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6tt", + "name": "Cha-Cha", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6tt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Ev", + "name": "African", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Ev?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6E6", + "name": "Afro-Cuban", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6E6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFvJ", + "name": "Haiti", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFvJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFAI", + "name": "Mexican Ranchera", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFAI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFF1", + "name": "Taarab", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFF1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFk6", + "name": "Nigeria", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFk6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFvE", + "name": "Hapa-Haole", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFvE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFdJ", + "name": "Latin", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFdJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6t6", + "name": "Cambodia", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6t6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFAv", + "name": "Mbalax", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFAv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6l7", + "name": "Danzon", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6l7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFdE", + "name": "Latin Children's", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFdE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Ik", + "name": "Beguine Moderne", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Ik?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFkJ", + "name": "Onda Grupera", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFkJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6tE", + "name": "Celtic/ British Isles", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6tE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6In", + "name": "Bollywood", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6In?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF6t", + "name": "Senegal & Gambia", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF6t?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFAa", + "name": "Mexican Cumbia", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFAa?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF6d", + "name": "Puerto Rico", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF6d?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6tI", + "name": "Central Europe", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6tI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFaA", + "name": "Trinidad", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFaA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6la", + "name": "Eastern Europe", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6la?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Et", + "name": "Argentina", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Et?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF6E", + "name": "Scandinavia", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF6E?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF71", + "name": "Madagascar", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF71?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFaE", + "name": "Venezuela", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFaE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6nv", + "name": "Chile", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6nv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFdF", + "name": "Laika", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFdF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6E1", + "name": "Andalus Classical", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6E1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6ne", + "name": "Chimurenga", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6ne?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFd1", + "name": "Laos", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFd1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFeF", + "name": "Iraq", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFeF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF7e", + "name": "Latin Freestyle", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF7e?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF6a", + "name": "Russia", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF6a?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFkd", + "name": "Native American", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFkd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6IF", + "name": "Benin", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6IF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6II", + "name": "Bolero", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6II?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFe7", + "name": "Indian Classical", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFe7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFA1", + "name": "Mexican Duranguense", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFA1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF7l", + "name": "Mariachi", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF7l?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6ta", + "name": "Cape Verde", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6ta?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFv7", + "name": "Fusion", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFv7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6td", + "name": "Brazilian Folk And Dance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6td?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFFI", + "name": "Tango", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFFI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6tF", + "name": "Cameroon", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6tF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFvv", + "name": "French Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFvv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFak", + "name": "Trova", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFak?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6ll", + "name": "Forro", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6ll?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFva", + "name": "Guinea", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFva?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6tl", + "name": "Chassidic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6tl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFFe", + "name": "Sonero", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFFe?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6nt", + "name": "Cuban Big Band", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6nt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFaJ", + "name": "Vallenato", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFaJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFvk", + "name": "Georgian Choir", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFvk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF7k", + "name": "Latin Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF7k?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFkn", + "name": "Peru", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFkn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF7v", + "name": "Latin Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF7v?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6tk", + "name": "Burundi", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6tk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6ln", + "name": "Flamenco", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6ln?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFF7", + "name": "South Africa", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFF7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6lA", + "name": "Dhrupad", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6lA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFdt", + "name": "Latin Contemporary Christian", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFdt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6lE", + "name": "Euro-Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6lE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF6e", + "name": "Polynesian Music", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF6e?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Il", + "name": "Boogaloo", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Il?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Id", + "name": "Bachata", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Id?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6t1", + "name": "Carnatic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6t1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFFa", + "name": "Syria", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFFa?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF7n", + "name": "Marabi", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF7n?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFaF", + "name": "Uganda", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFaF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFFJ", + "name": "Tahiti", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFFJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6n6", + "name": "Conjunto", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6n6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6nF", + "name": "Contemporary Celtic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6nF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFve", + "name": "French Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFve?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFen", + "name": "Japanese Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFen?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFed", + "name": "India & Pakistan", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFed?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFa6", + "name": "Turkey", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFa6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFFl", + "name": "Throat Singing", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFFl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6El", + "name": "Asia", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6El?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6lv", + "name": "Cuban Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6lv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6I1", + "name": "Bhutan", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6I1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFvA", + "name": "Gabon", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFvA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Ia", + "name": "Bhangra", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Ia?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFkk", + "name": "Nicaragua", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFkk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF67", + "name": "Pygmy", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF67?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6EJ", + "name": "Andes", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6EJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6EE", + "name": "Appalachian", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6EE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Ed", + "name": "African Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Ed?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6EI", + "name": "Arabic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6EI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFe6", + "name": "Iran", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFe6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFkF", + "name": "North America", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFkF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6n1", + "name": "Continental Europe", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6n1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6nn", + "name": "Cuban Calypso", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6nn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF6I", + "name": "Scandinavian Joik", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF6I?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Jl", + "name": "Afghanistan", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Jl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6ld", + "name": "Cumbia", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6ld?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6l1", + "name": "Egypt", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6l1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFdk", + "name": "Kora", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFdk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6lF", + "name": "Drinking Songs", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6lF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFvl", + "name": "Hebrew", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFvl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF7t", + "name": "Mantras", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF7t?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFet", + "name": "Japan", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFet?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF6v", + "name": "Plena", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF6v?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFAA", + "name": "Mediterranean", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFAA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFkE", + "name": "Pachanga", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFkE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFFd", + "name": "Soukous", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFFd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFeI", + "name": "Jamaica", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFeI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFFv", + "name": "Son", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFFv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6nJ", + "name": "Corrido", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6nJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFke", + "name": "Musette", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFke?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6n7", + "name": "Christmas", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6n7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF7I", + "name": "Mambo", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF7I?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFF6", + "name": "Swedish Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFF6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFvF", + "name": "Guaguancó", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFvF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF61", + "name": "Salsa", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF61?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6l6", + "name": "Dominican Republic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6l6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFdn", + "name": "Latin Dance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFdn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6IE", + "name": "Bikutsi", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6IE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFv6", + "name": "Ghana", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFv6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6nl", + "name": "Cuban Charanga", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6nl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFe1", + "name": "Israel", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFe1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF6J", + "name": "Samba", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF6J?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFdA", + "name": "Klezmer", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFdA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFat", + "name": "Western Europe", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFat?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6nA", + "name": "Colombia", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6nA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6nk", + "name": "Compas", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6nk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFeA", + "name": "Indian Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFeA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF7a", + "name": "Lebanon", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF7a?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFAE", + "name": "Mexican Grupero", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFAE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFaa", + "name": "Ukelele", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFaa?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFAd", + "name": "Mbira", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFAd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFvn", + "name": "Hawaiian R&B & Hip-Hop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFvn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFAJ", + "name": "Mexican Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFAJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF6l", + "name": "Soca", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF6l?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFvd", + "name": "Fuji", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFvd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFeJ", + "name": "Italian Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFeJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF1v", + "name": "Zimbabwe", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF1v?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFda", + "name": "Lambada", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFda?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF7J", + "name": "Makossa", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF7J?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFA7", + "name": "Mbube", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFA7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFdl", + "name": "Latin Electronica", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFdl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6IA", + "name": "Beguine", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6IA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFdI", + "name": "Latin Christian", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFdI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6tv", + "name": "Botswana", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6tv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6E7", + "name": "Afro Brazilian", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6E7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFd6", + "name": "Korea", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFd6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFkv", + "name": "Morocco", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFkv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF7E", + "name": "Mali", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF7E?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF6F", + "name": "Rock en Español", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF6F?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFae", + "name": "Township Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFae?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFFt", + "name": "Tanzania", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFFt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFdd", + "name": "Juju", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFdd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6tn", + "name": "Chant", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6tn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFAF", + "name": "Mexican Banda", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFAF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFav", + "name": "Tibet", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFav?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF7d", + "name": "Latin Hip-hop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF7d?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6lk", + "name": "Djabdong", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6lk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6Ea", + "name": "Algeria", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6Ea?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6nE", + "name": "Costa Rica", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6nE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFAt", + "name": "Mexican Sierreno", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFAt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFa1", + "name": "Uruguay", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFa1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFeE", + "name": "Ivory Coast", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFeE?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAv6", + "name": "Country", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAv6?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vAa7", + "name": "Country Gospel", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAa7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAaa", + "name": "Instrumental", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAaa?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA17", + "name": "Traditional Bluegrass", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA17?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA1e", + "name": "Square Dance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA1e?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA1A", + "name": "Traditional Country", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA1A?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAFn", + "name": "Classic Country", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAFn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAaJ", + "name": "Nashville Sound", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAaJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAal", + "name": "Roadhouse Country", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAal?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA1v", + "name": "Songster", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA1v?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAae", + "name": "Contemporary Country", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAae?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAa1", + "name": "Jug Band", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAa1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAad", + "name": "Country Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAad?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA1F", + "name": "Western Swing & Country Boogie", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA1F?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAat", + "name": "Outlaw Country", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAat?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA11", + "name": "Work Songs", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA11?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAFa", + "name": "Country", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAFa?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAFI", + "name": "Bluegrass", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAFI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA1J", + "name": "Yodeling", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA1J?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAaI", + "name": "Old-time Country", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAaI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAF1", + "name": "Alternative Country", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAF1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAav", + "name": "Contemporary Bluegrass", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAav?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAaA", + "name": "Country Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAaA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAak", + "name": "Country Soul", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAak?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAFJ", + "name": "Avant-Garde Country", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAFJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA1a", + "name": "Western Swing Revival", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA1a?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAaE", + "name": "Neo-Traditional Country", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAaE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAFE", + "name": "Bakersfield Sound", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAFE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA1k", + "name": "Truck Driving Country", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA1k?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAan", + "name": "Progressive Country", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAan?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAaF", + "name": "Honky Tonk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAaF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA1d", + "name": "String Dance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA1d?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA16", + "name": "Urban Cowboy", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA16?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAFt", + "name": "Bluegrass-Gospel", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAFt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAFl", + "name": "Close Harmony", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAFl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAa6", + "name": "Cowboy", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAa6?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAv1", + "name": "Hip-Hop/Rap", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAv1?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vkdd", + "name": "Turntablism", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkdd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkev", + "name": "Alternative Rap", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkev?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vket", + "name": "Party Rap", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vket?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vke1", + "name": "Latin Hip-Hop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vke1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vken", + "name": "Political Rap", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vken?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vke7", + "name": "Dirty Rap", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vke7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkdv", + "name": "Reggaeton", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkdv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkea", + "name": "Jazz-Rap", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkea?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkeF", + "name": "Hardcore Rap", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkeF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkdA", + "name": "Urban", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkdA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkde", + "name": "Southern Rap", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkde?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkek", + "name": "Electro", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkek?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkeE", + "name": "Midwestern Rap", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkeE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkee", + "name": "British Rap", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkee?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkel", + "name": "Rap-Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkel?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkd7", + "name": "Underground Rap", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkd7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkvl", + "name": "Hip-Hop/Rap", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkvl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkeI", + "name": "Old School Rap", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkeI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vked", + "name": "Christian Rap", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vked?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkdk", + "name": "West Coast Rap", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkdk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkeA", + "name": "East Coast Rap", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkeA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkeJ", + "name": "Latin Rap", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkeJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vke6", + "name": "Gangsta Rap", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vke6?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAva", + "name": "Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAva?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vAlA", + "name": "Folk Revival", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAlA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAlJ", + "name": "Irish Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAlJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAnF", + "name": "Alternative Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAnF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAll", + "name": "Mediterranean", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAll?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkv6", + "name": "Scottish Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkv6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAna", + "name": "Americana", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAna?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAnI", + "name": "British Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAnI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAl1", + "name": "Hungarian Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAl1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkvF", + "name": "Sea Shanties", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkvF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAnn", + "name": "Celtic Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAnn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAl7", + "name": "Folk Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAl7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkvv", + "name": "Mexican Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkvv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkvA", + "name": "Political Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkvA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAnJ", + "name": "Anti-Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAnJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAn6", + "name": "Acid Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAn6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAlF", + "name": "Folksongs", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAlF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAlt", + "name": "Latin America", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAlt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAln", + "name": "Latin Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAln?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAnA", + "name": "A Cappella", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAnA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAlv", + "name": "Contemporary Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAlv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAnl", + "name": "Central European Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAnl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAlI", + "name": "Klezmer", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAlI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkvt", + "name": "Urban Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkvt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAlE", + "name": "Jewish Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAlE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkve", + "name": "Middle Eastern", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkve?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkvI", + "name": "Traditional Scottish Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkvI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkvk", + "name": "Revival", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkvk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAld", + "name": "Field Recordings", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAld?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAla", + "name": "Greek Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAla?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkv7", + "name": "New Acoustic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkv7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAnk", + "name": "Acadian", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAnk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAn7", + "name": "Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAn7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAlk", + "name": "Folk Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAlk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkvE", + "name": "Traditional Middle Eastern Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkvE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAnt", + "name": "Bulgarian Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAnt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkvd", + "name": "Neo-Traditional Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkvd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkv1", + "name": "Traditional Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkv1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAl6", + "name": "Folk-Blues", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAl6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAnE", + "name": "Appalachian Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAnE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkvn", + "name": "Zydeco", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkvn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAn1", + "name": "Andean Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAn1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkvJ", + "name": "Traditional Irish Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkvJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAle", + "name": "Creole", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAle?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkva", + "name": "Traditional Cajun", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkva?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAev", + "name": "Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAev?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vkIe", + "name": "Power Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkIe?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkI7", + "name": "Rembetika", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkI7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkEJ", + "name": "Latin Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkEJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6JJ", + "name": "Brill Building Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6JJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkJd", + "name": "Asian Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkJd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkEd", + "name": "French Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkEd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkEa", + "name": "Japanese Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkEa?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkEl", + "name": "Pop Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkEl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkJA", + "name": "Bossa Nova", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkJA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkIa", + "name": "Synth Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkIa?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkJl", + "name": "European Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkJl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkEE", + "name": "Música Popular Brasileira", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkEE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkIJ", + "name": "Teen Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkIJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkE1", + "name": "Korean K-Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkE1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkEn", + "name": "Nueva Cancion", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkEn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk1t", + "name": "Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk1t?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkEt", + "name": "Norteno", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkEt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkI6", + "name": "Sunshine Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkI6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkI1", + "name": "Taiwanese Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkI1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkJI", + "name": "Dance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkJI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkJn", + "name": "Euro Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkJn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkJt", + "name": "Dream Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkJt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkJe", + "name": "Afro-Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkJe?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkJE", + "name": "Cuban Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkJE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkEF", + "name": "Italian Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkEF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkJJ", + "name": "Chinese Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkJJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkId", + "name": "Ranchera", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkId?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkJF", + "name": "Bubblegum & Sunshine Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkJF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkJa", + "name": "Canto-Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkJa?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkEk", + "name": "Indie Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkEk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkIA", + "name": "Shibuya-Kei", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkIA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkJv", + "name": "African Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkJv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkIE", + "name": "Tejano", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkIE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk1l", + "name": "Adult Contemporary", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk1l?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkIk", + "name": "Singer-Songwriter", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkIk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkJ7", + "name": "Banda", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkJ7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkEe", + "name": "French Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkEe?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk1n", + "name": "Adult Alternative Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk1n?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkJ6", + "name": "British Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkJ6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkJ1", + "name": "Celtic Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkJ1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkIv", + "name": "Pop Vocal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkIv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkE7", + "name": "Hawaiian Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkE7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkE6", + "name": "International Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkE6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkJk", + "name": "Brazilian Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkJk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkII", + "name": "Thai Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkII?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkEA", + "name": "Hong Kong Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkEA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkEI", + "name": "New Wave", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkEI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkIF", + "name": "Swamp Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkIF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkEv", + "name": "Fado", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkEv?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAve", + "name": "Ballads/Romantic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAve?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vAAe", + "name": "Ballads/Romantic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAAe?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAed", + "name": "Reggae", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAed?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vklk", + "name": "Chouval Bwa", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vklk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkll", + "name": "Mento", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkll?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vklA", + "name": "Carribbean", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vklA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6vv", + "name": "Nyahbinghi", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6vv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vklI", + "name": "Gwo Ka", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vklI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkld", + "name": "Cadence", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkld?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkln", + "name": "Lovers Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkln?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6ve", + "name": "Party Soca", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6ve?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkl7", + "name": "Calypso", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkl7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkl1", + "name": "Dancehall Reggae", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkl1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6vE", + "name": "Steel Band", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6vE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vklF", + "name": "Contemporary Reggae", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vklF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vklJ", + "name": "Dub", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vklJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6vF", + "name": "Rock Steady", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6vF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6vd", + "name": "Political Reggae", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6vd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vklE", + "name": "Dub Poetry", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vklE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6vA", + "name": "Rapso", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6vA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vknl", + "name": "Reggae", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vknl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkla", + "name": "DJ", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkla?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6vJ", + "name": "Spouge", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6vJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6vk", + "name": "Reggae Gospel", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6vk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6v7", + "name": "Ragga", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6v7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6v1", + "name": "Smooth Reggae", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6v1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vklv", + "name": "Belair", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vklv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6va", + "name": "Roots Reggae", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6va?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkle", + "name": "Bluebeat", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkle?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v6v6", + "name": "Reggae-Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v6v6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkl6", + "name": "Classic Ska", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkl6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vklt", + "name": "Junkanoo", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vklt?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAvv", + "name": "Alternative", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAvv?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vAdF", + "name": "Math Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAdF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA7k", + "name": "Riot Grrrl", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA7k?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAee", + "name": "Americana", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAee?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA7v", + "name": "Post-Punk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA7v?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAde", + "name": "Indie Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAde?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA7n", + "name": "Twee Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA7n?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAd1", + "name": "Neo-Psychedelia", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAd1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAeE", + "name": "Electro-Industrial", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAeE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA7E", + "name": "Slowcore", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA7E?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAd7", + "name": "Industrial Dance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAd7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAvJ", + "name": "Alternative", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAvJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA7t", + "name": "Third Wave Ska Revival", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA7t?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAda", + "name": "Neo-Glam", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAda?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAek", + "name": "C-86", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAek?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAdl", + "name": "Post-Grunge", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAdl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAe7", + "name": "British Alternative", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAe7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAea", + "name": "College Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAea?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAdI", + "name": "Noise Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAdI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA7A", + "name": "Queercore", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA7A?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAdA", + "name": "Jangle Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAdA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA7a", + "name": "Ska", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA7a?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAed", + "name": "Baroque Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAed?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAdE", + "name": "New Zealand Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAdE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAd6", + "name": "Madchester", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAd6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAdd", + "name": "Industrial", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAdd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAeJ", + "name": "Dream Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAeJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAet", + "name": "Funk Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAet?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA77", + "name": "Psychobilly", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA77?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAvI", + "name": "Alternative Dance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAvI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAdk", + "name": "Lo-Fi", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAdk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAeI", + "name": "Electronic Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAeI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAeF", + "name": "Cocktail", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAeF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA71", + "name": "Ska Punk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA71?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAdn", + "name": "Pop Underground", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAdn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAdt", + "name": "Paisley Underground", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAdt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAe6", + "name": "Chamber Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAe6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA7l", + "name": "Urban Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA7l?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAvt", + "name": "Alternative Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAvt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA76", + "name": "Sadcore", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA76?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAvn", + "name": "Alternative Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAvn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAvl", + "name": "Ambient Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAvl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAen", + "name": "Goth", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAen?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAdv", + "name": "Indie Pop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAdv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA7F", + "name": "Shoegaze", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA7F?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA7d", + "name": "Post-Rock/Experimental", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA7d?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAel", + "name": "Grunge", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAel?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAeA", + "name": "British Ska", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAeA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAvE", + "name": "Adult Alternative Pop/Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAvE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA7e", + "name": "Post-Punk Revival", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA7e?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA7I", + "name": "Space Rock", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA7I?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAdJ", + "name": "Neo-Traditional Folk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAdJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAev", + "name": "American Alternative", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAev?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vA7J", + "name": "Skatepunk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vA7J?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAe1", + "name": "Cowpunk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAe1?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAee", + "name": "R&B", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAee?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vkIn", + "name": "Beach", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkIn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkte", + "name": "Chicago Soul", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkte?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vknI", + "name": "Southern Soul", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vknI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vknJ", + "name": "Smooth Soul", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vknJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vktd", + "name": "Classic R&B", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vktd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vktF", + "name": "Deep Funk Revival", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vktF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkne", + "name": "Neo-Soul", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkne?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vknF", + "name": "Psychedelic Soul", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vknF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vktt", + "name": "Jazz Funk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vktt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkIt", + "name": "R&B", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkIt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vktE", + "name": "Funk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vktE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkta", + "name": "Deep Soul", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkta?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkn6", + "name": "Pop-Soul", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkn6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkna", + "name": "Quiet Storm", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkna?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vknv", + "name": "Motown", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vknv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vktA", + "name": "Contemporary R&B", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vktA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vktn", + "name": "Latin Soul", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vktn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkt6", + "name": "Deep Funk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkt6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vktl", + "name": "Memphis Soul", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vktl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vknk", + "name": "Philly Soul", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vknk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vknA", + "name": "Northern Soul", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vknA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vknE", + "name": "Soul", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vknE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkIl", + "name": "Blue-Eyed Soul", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkIl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vktJ", + "name": "Free Funk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vktJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkt1", + "name": "Doo Wop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkt1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkn7", + "name": "New Orleans R&B", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkn7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkn1", + "name": "Retro-Soul", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkn1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vknd", + "name": "New Jack Swing", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vknd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vknn", + "name": "Urban Adult Contemporary", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vknn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vktk", + "name": "Country Soul", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vktk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vktI", + "name": "Hawaiian R&B & Hip-Hop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vktI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vknt", + "name": "Uptown Soul", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vknt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vktv", + "name": "Brown-Eyed Soul", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vktv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkt7", + "name": "Classic Soul", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkt7?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAvI", + "name": "Medieval/Renaissance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAvI?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vk61", + "name": "Medieval/Renaissance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk61?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk6J", + "name": "Middle Age", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk6J?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAvE", + "name": "Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAvE?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vk7a", + "name": "Contemporary Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk7a?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkkE", + "name": "Society Dance Band", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkkE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk6v", + "name": "Swing", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk6v?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk66", + "name": "Vocalese", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk66?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk6a", + "name": "World Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk6a?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk7F", + "name": "Contemporary Big Band", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk7F?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkAd", + "name": "European Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkAd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk67", + "name": "Traditional Jazz & Ragtime", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk67?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkA7", + "name": "Experimental Big Band", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkA7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk6k", + "name": "Vocal Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk6k?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkdE", + "name": "Afro-Cuban Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkdE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkA6", + "name": "Fusion", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkA6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkAt", + "name": "M-Base", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkAt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkkk", + "name": "Post-Bop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkkk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkkJ", + "name": "Smooth Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkkJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkdn", + "name": "Ballroom Dance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkdn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk71", + "name": "Continental Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk71?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkAv", + "name": "Dixieland", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkAv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkk6", + "name": "Progressive Big Band", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkk6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkdt", + "name": "Ballads", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkdt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkAF", + "name": "Hard Bop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkAF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk7I", + "name": "Crossover Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk7I?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkA1", + "name": "Jazz Standards", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkA1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkkA", + "name": "Orchestral Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkkA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk7l", + "name": "Dance Bands", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk7l?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk6e", + "name": "Swing Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk6e?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkka", + "name": "Ragtime", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkka?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkAI", + "name": "Latin Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkAI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkAl", + "name": "Modern Creative", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkAl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk6A", + "name": "Vintage Dance Bands", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk6A?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkkI", + "name": "Soul Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkkI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk7n", + "name": "Cuban Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk7n?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkk1", + "name": "Retro Swing", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkk1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkk7", + "name": "Novelty Ragtime", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkk7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk6d", + "name": "Third Stream", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk6d?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk7d", + "name": "Boogie-Woogie", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk7d?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk76", + "name": "Classic Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk76?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkAa", + "name": "Jazz Funk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkAa?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk7E", + "name": "Cool Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk7E?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkkl", + "name": "Sweet Bands", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkkl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk6F", + "name": "West Coast Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk6F?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkAe", + "name": "Early Creative", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkAe?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkAJ", + "name": "Jive", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkAJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkdI", + "name": "Avant-Garde Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkdI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkke", + "name": "New Orleans Brass Bands", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkke?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkAE", + "name": "Jive Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkAE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk7J", + "name": "Cool", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk7J?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkAk", + "name": "Free Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkAk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk7t", + "name": "Cuban Big Band", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk7t?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkAn", + "name": "Modern Big Band", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkAn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkda", + "name": "Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkda?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkdl", + "name": "Bebop", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkdl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkkv", + "name": "Modern Free", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkkv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkkd", + "name": "New Orleans Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkkd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk7e", + "name": "Big Band/Swing", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk7e?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkd1", + "name": "Acid Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkd1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk77", + "name": "Brazilian Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk77?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkkF", + "name": "Progressive Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkkF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkkt", + "name": "Soul-Jazz & Boogaloo", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkkt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkdJ", + "name": "African Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkdJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkAA", + "name": "Free Funk", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkAA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk7v", + "name": "Big Band", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk7v?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk7A", + "name": "British Dance Bands", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk7A?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk7k", + "name": "Classic Big Band", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk7k?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkkn", + "name": "Stride Piano", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkkn?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAvn", + "name": "New Age", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAvn?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vkaa", + "name": "Electronic & Space Music", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkaa?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkal", + "name": "Neo-Classical", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkal?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk1v", + "name": "New Acoustic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk1v?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkaF", + "name": "Electro-Acoustic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkaF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk11", + "name": "Techno-Tribal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk11?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk17", + "name": "Progressive Electronic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk17?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkaJ", + "name": "Ethnic Fusion", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkaJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkae", + "name": "Adult Alternative", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkae?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vka1", + "name": "Environmental", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vka1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk1a", + "name": "Spiritual", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk1a?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkad", + "name": "Ambient", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkad?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkat", + "name": "Minimalism", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkat?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkak", + "name": "Chamber Jazz", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkak?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk16", + "name": "Solo Instrumental", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk16?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk1A", + "name": "Relaxation", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk1A?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk1J", + "name": "World Dance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk1J?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkav", + "name": "New Age", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkav?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkaA", + "name": "Celtic New Age", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkaA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk1e", + "name": "New Age World Music", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk1e?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkaI", + "name": "Meditation", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkaI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vka6", + "name": "Contemporary Instrumental", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vka6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk1d", + "name": "Progressive Alternative", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk1d?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkan", + "name": "Nature", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkan?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk1F", + "name": "Space", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk1F?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkaE", + "name": "Healing", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkaE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vka7", + "name": "Celtic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vka7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk1k", + "name": "Self-Help", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk1k?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAvt", + "name": "Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAvt?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vkFI", + "name": "Speed Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkFI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkFk", + "name": "New Wave Of British Heavy Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkFk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk6E", + "name": "Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk6E?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkFn", + "name": "Symphonic Black Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkFn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkF6", + "name": "Pop Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkF6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk6I", + "name": "Christian Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk6I?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkFe", + "name": "Hair Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkFe?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkF7", + "name": "Industrial Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkF7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkFv", + "name": "Goth Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkFv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkFd", + "name": "Heavy Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkFd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkF1", + "name": "Rap-Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkF1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk6t", + "name": "Death Metal/Black Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk6t?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkFF", + "name": "Power Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkFF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkFt", + "name": "Stoner Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkFt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkFl", + "name": "Thrash & Speed", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkFl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkFJ", + "name": "Scandinavian Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkFJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkFE", + "name": "Sludge Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkFE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk6n", + "name": "Doom Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk6n?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vk6l", + "name": "Funk Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk6l?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkFA", + "name": "Neo-Classical Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkFA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkFa", + "name": "Punk Metal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkFa?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAvl", + "name": "Other", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAvl?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vk1I", + "name": "Other", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vk1I?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAvJ", + "name": "Holiday", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAvJ?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vkdF", + "name": "Christmas Music", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkdF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vkd6", + "name": "Holiday", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vkd6?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAeJ", + "name": "Classical", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAeJ?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vF1A", + "name": "Classical/Vocal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF1A?locale=en-us" + } + } + } + ] + } + } + ] + } + } + }, + { + "_links": { + "self": { + "href": "/discovery/v2/classifications/KZFzniwnSyZfZ7v7nE?locale=en-us" + } + }, + "segment": { + "id": "KZFzniwnSyZfZ7v7nE", + "name": "Sports", + "_links": { + "self": { + "href": "/discovery/v2/classifications/segments/KZFzniwnSyZfZ7v7nE?locale=en-us" + } + }, + "_embedded": { + "genres": [ + { + "id": "KnvZfZ7vA76", + "name": "Netball", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vA76?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFtA", + "name": "Netball", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFtA?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vA7k", + "name": "Motorsports/Racing", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vA7k?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFt7", + "name": "Motorsports/Racing", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFt7?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vA7a", + "name": "Roller Hockey", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vA7a?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFtF", + "name": "Roller Hockey", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFtF?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAea", + "name": "Rodeo", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAea?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFtk", + "name": "Bullriding", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFtk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF1d", + "name": "Rodeo", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF1d?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vA71", + "name": "Rugby", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vA71?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFta", + "name": "Rugby", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFta?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFt1", + "name": "Rugby League", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFt1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFtJ", + "name": "Rugby Union", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFtJ?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vA7v", + "name": "Ice Skating", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vA7v?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFIF", + "name": "Ice Skating", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFIF?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vA7d", + "name": "Martial Arts", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vA7d?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFIJ", + "name": "Kickboxing", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFIJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFI1", + "name": "Karate", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFI1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFIE", + "name": "Mixed Martial Arts", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFIE?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vA7e", + "name": "Indoor Soccer", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vA7e?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFIa", + "name": "Indoor Soccer", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFIa?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vA7A", + "name": "Miscellaneous", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vA7A?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFtv", + "name": "High School", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFtv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFIl", + "name": "GAA", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFIl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFIt", + "name": "Miscellaneous", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFIt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFte", + "name": "College", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFte?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFtd", + "name": "Minor League", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFtd?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vA77", + "name": "Lacrosse", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vA77?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFII", + "name": "Lacrosse", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFII?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAet", + "name": "Athletic Races", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAet?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vF11", + "name": "Athletic Races", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF11?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vA7l", + "name": "Table Tennis", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vA7l?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFne", + "name": "Table Tennis", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFne?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAeI", + "name": "Aquatics", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAeI?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vF1a", + "name": "Aquatics", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF1a?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vA7n", + "name": "Swimming", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vA7n?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFnv", + "name": "Swimming", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFnv?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAel", + "name": "Bandy", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAel?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vF1E", + "name": "Bandy", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF1E?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAen", + "name": "Badminton", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAen?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vF1J", + "name": "Badminton", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF1J?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vA7E", + "name": "Soccer", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vA7E?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFtI", + "name": "MLS", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFtI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFtt", + "name": "Soccer", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFtt?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vA7J", + "name": "Ski Jumping", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vA7J?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFtE", + "name": "Ski Jumping", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFtE?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vA7t", + "name": "Surfing", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vA7t?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFtl", + "name": "Surfing", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFtl?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vA7I", + "name": "Squash", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vA7I?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFtn", + "name": "Squash", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFtn?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAdk", + "name": "Cricket", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAdk?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFJE", + "name": "Cricket", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFJE?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAdA", + "name": "Boxing", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAdA?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFJJ", + "name": "Boxing", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFJJ?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAdF", + "name": "Curling", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAdF?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFJl", + "name": "Curling", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFJl?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAd6", + "name": "Skiing", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAd6?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFJI", + "name": "Cross Country", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFJI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFJt", + "name": "Nordic Combined", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFJt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFJn", + "name": "Skiing", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFJn?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAd1", + "name": "Equestrian", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAd1?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFEe", + "name": "Dressage", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFEe?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFEd", + "name": "Equestrian", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFEd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFE7", + "name": "Horse Racing", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFE7?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAda", + "name": "Cycling", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAda?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFEv", + "name": "Cycling", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFEv?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAAe", + "name": "Toros", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAAe?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFn7", + "name": "Toros", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFn7?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAAv", + "name": "Tennis", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAAv?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFnd", + "name": "Tennis", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFnd?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAde", + "name": "Basketball", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAde?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFJ6", + "name": "Men Professional", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFJ6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFJ7", + "name": "NBDL", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFJ7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFJd", + "name": "Minor League", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFJd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFJA", + "name": "NBA", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFJA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFJF", + "name": "WNBA", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFJF?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFJv", + "name": "College", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFJv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFJe", + "name": "High School", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFJe?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFJk", + "name": "NBL", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFJk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFn1", + "name": "NBA D League", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFn1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFnJ", + "name": "Women Professional", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFnJ?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAA7", + "name": "Volleyball", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAA7?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFnk", + "name": "Minor League", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFnk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFn6", + "name": "Volleyball", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFn6?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAdv", + "name": "Baseball", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAdv?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vF1t", + "name": "Minor League", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF1t?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF1l", + "name": "Professional", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF1l?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF1I", + "name": "College", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF1I?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vF1n", + "name": "MLB", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF1n?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAAd", + "name": "Track & Field", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAAd?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFnA", + "name": "Track & Field", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFnA?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAd7", + "name": "Body Building", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAd7?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFJ1", + "name": "Body Building", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFJ1?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAAk", + "name": "Wrestling", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAAk?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFna", + "name": "Wrestling", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFna?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAdd", + "name": "Biathlon", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAdd?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFJa", + "name": "Biathlon", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFJa?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAAA", + "name": "Waterpolo", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAAA?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFnF", + "name": "Waterpolo", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFnF?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAdn", + "name": "Gymnastics", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAdn?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFIk", + "name": "Gymnastics", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFIk?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAdt", + "name": "Golf", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAdt?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFI7", + "name": "PGA Tour", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFI7?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFId", + "name": "PGA B-Tour", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFId?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFIv", + "name": "Golf", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFIv?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFIe", + "name": "LPGA", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFIe?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFIA", + "name": "PGA Senior Tour", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFIA?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAdl", + "name": "Handball", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAdl?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFI6", + "name": "Handball", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFI6?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAdJ", + "name": "Extreme", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAdJ?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFEA", + "name": "Extreme", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFEA?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAdI", + "name": "Hockey", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAdI?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFEl", + "name": "Ice Hockey", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFEl?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFEE", + "name": "NHL", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFEE?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFEI", + "name": "College", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFEI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFEt", + "name": "Minor League", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFEt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFEn", + "name": "Professional", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFEn?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAdE", + "name": "Football", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAdE?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vFEk", + "name": "AFL", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFEk?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFE1", + "name": "NFL", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFE1?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFEa", + "name": "High School", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFEa?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFE6", + "name": "College", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFE6?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFEJ", + "name": "Professional", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFEJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vFEF", + "name": "International Rules", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vFEF?locale=en-us" + } + } + } + ] + } + } + ] + } + } + }, + { + "_links": { + "self": { + "href": "/discovery/v2/classifications/KZFzniwnSyZfZ7v7nl?locale=en-us" + } + }, + "segment": { + "id": "KZFzniwnSyZfZ7v7nl", + "name": "Undefined", + "_links": { + "self": { + "href": "/discovery/v2/classifications/segments/KZFzniwnSyZfZ7v7nl?locale=en-us" + } + }, + "_embedded": { + "genres": [ + { + "id": "KnvZfZ7vAkI", + "name": "Undefined", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAkI?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vavk", + "name": "Undefined", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vavk?locale=en-us" + } + } + } + ] + } + } + ] + } + } + } + ] + }, + "page": { + "size": 20, + "totalElements": 6, + "totalPages": 1, + "number": 0 + } + } + } +] diff --git a/test/fixtures/discovery/v2/classification/find-200.json b/test/fixtures/discovery/v2/classification/find-200.json new file mode 100644 index 0000000..f801dc9 --- /dev/null +++ b/test/fixtures/discovery/v2/classification/find-200.json @@ -0,0 +1,570 @@ +[ + { + "scope": "https://app.ticketmaster.com", + "method": "GET", + "path": "/discovery/v2/classifications/KZFzniwnSyZfZ7v7na?apikey=mock-api-key", + "status": 200, + "headers": { + "Access-Control-Allow-Headers": "origin, x-requested-with, accept", + "Access-Control-Allow-Origin": "*", + "Date": "Sat, 16 Jan 2016 18:41:27 GMT", + "Content-Length": "3488", + "Access-Control-Max-Age": "3628800", + "Access-Control-Allow-Methods": "GET, PUT, POST, DELETE", + "X-Application-Context": "application:default,jetson4", + "Connection": "keep-alive", + "Content-Type": "application/json;charset=utf-8", + "Server": "Apache-Coyote/1.1" + }, + "response": { + "_links": { + "self": { + "href": "/discovery/v2/classifications/KZFzniwnSyZfZ7v7na?locale=en-us" + } + }, + "segment": { + "id": "KZFzniwnSyZfZ7v7na", + "name": "Arts & Theatre", + "_links": { + "self": { + "href": "/discovery/v2/classifications/segments/KZFzniwnSyZfZ7v7na?locale=en-us" + } + }, + "_embedded": { + "genres": [ + { + "id": "KnvZfZ7v7lv", + "name": "Magic & Illusion", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7lv?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7l7", + "name": "Magic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7l7?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7vAe1", + "name": "Comedy", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7vAe1?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vF17", + "name": "Comedy", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF17?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7nJ", + "name": "Classical", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7nJ?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7nI", + "name": "Symphonic", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7nI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v7nE", + "name": "Classical/Vocal", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7nE?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7lJ", + "name": "Variety", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7lJ?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vAvA", + "name": "Variety", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAvA?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAv7", + "name": "Cabaret", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAv7?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7nI", + "name": "Dance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7nI?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7nn", + "name": "Ballet", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7nn?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v7nl", + "name": "Dance", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7nl?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7nE", + "name": "Cultural", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7nE?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7nt", + "name": "Cultural", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7nt?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7nn", + "name": "Fashion", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7nn?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7le", + "name": "Fashion", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7le?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7nt", + "name": "Espectaculo", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7nt?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7lv", + "name": "Espectaculo", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7lv?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7nl", + "name": "Fine Art", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7nl?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7ld", + "name": "Fine Art", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7ld?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7n1", + "name": "Circus & Specialty Acts", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7n1?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7nJ", + "name": "Pantomime", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7nJ?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v7n1", + "name": "Circus", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7n1?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7na", + "name": "Children's Theatre", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7na?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7na", + "name": "Children's Theatre", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7na?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7l1", + "name": "Theatre", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7l1?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7lI", + "name": "Comedy", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7lI?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAvd", + "name": "Mystery", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAvd?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v7ll", + "name": "Miscellaneous", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7ll?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAve", + "name": "Musical", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAve?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v7ln", + "name": "Horror", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7ln?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7v7lt", + "name": "Drama", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7lt?locale=en-us" + } + } + }, + { + "id": "KZazBEonSMnZfZ7vAvv", + "name": "Monologue", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vAvv?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7ld", + "name": "Miscellaneous Theatre", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7ld?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7lk", + "name": "Miscellaneous Theatre", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7lk?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7le", + "name": "Miscellaneous", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7le?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7vF1k", + "name": "Miscellaneous", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7vF1k?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7lA", + "name": "Music", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7lA?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7lF", + "name": "Chamber Music", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7lF?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7l7", + "name": "Multimedia", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7l7?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7l6", + "name": "Multimedia", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7l6?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7l6", + "name": "Performance Art", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7l6?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7l1", + "name": "Performance Art", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7l1?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7lk", + "name": "Opera", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7lk?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7la", + "name": "Opera", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7la?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7la", + "name": "Spectacular", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7la?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7lE", + "name": "Spectacular", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7lE?locale=en-us" + } + } + } + ] + } + }, + { + "id": "KnvZfZ7v7lF", + "name": "Puppetry", + "_links": { + "self": { + "href": "/discovery/v2/classifications/genres/KnvZfZ7v7lF?locale=en-us" + } + }, + "_embedded": { + "subgenres": [ + { + "id": "KZazBEonSMnZfZ7v7lJ", + "name": "Puppet Show", + "_links": { + "self": { + "href": "/discovery/v2/classifications/subgenres/KZazBEonSMnZfZ7v7lJ?locale=en-us" + } + } + } + ] + } + } + ] + } + } + } + } +] diff --git a/test/fixtures/discovery/v2/event/all-200-options.json b/test/fixtures/discovery/v2/event/all-200-options.json new file mode 100644 index 0000000..ecc6d9e --- /dev/null +++ b/test/fixtures/discovery/v2/event/all-200-options.json @@ -0,0 +1,1008 @@ +[ + { + "scope": "https://app.ticketmaster.com", + "method": "GET", + "path": "/discovery/v2/events?apikey=mock-api-key&page=2&size=5&sort=name%2Cdesc", + "status": 200, + "headers": { + "Access-Control-Allow-Headers": "origin, x-requested-with, accept", + "Access-Control-Allow-Origin": "*", + "Date": "Sat, 16 Jan 2016 18:41:27 GMT", + "Content-Length": "3488", + "Access-Control-Max-Age": "3628800", + "Access-Control-Allow-Methods": "GET, PUT, POST, DELETE", + "X-Application-Context": "application:default,jetson4", + "Connection": "keep-alive", + "Content-Type": "application/json;charset=utf-8", + "Server": "Apache-Coyote/1.1" + }, + "response": { + "_links": { + "self": { + "href": "/discovery/v2/events?size=5&sort=name%2Cdesc&page=2" + }, + "next": { + "href": "/discovery/v2/events?page=3&size=5&sort=name,desc" + }, + "prev": { + "href": "/discovery/v2/events?page=1&size=5&sort=name,desc" + } + }, + "_embedded": { + "events": [ + { + "name": "¿Qué tan altos son los edificios de Nueva York?", + "type": "event", + "id": "17AZv8G6CnMcD1x", + "test": false, + "url": "http://ticketmaster.com.mx/event/140050EAB7B7B2A2", + "locale": "en-us", + "images": [ + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dbimages/252338a.jpg", + "width": 205, + "height": 115, + "fallback": false + } + ], + "sales": { + "public": { + "startDateTime": "2016-07-20T15:00:00Z", + "startTBD": false, + "endDateTime": "2016-08-24T23:30:00Z" + } + }, + "dates": { + "start": { + "localDate": "2016-08-24", + "localTime": "20:30:00", + "dateTime": "2016-08-25T01:30:00Z", + "dateTBD": false, + "dateTBA": false, + "timeTBA": false, + "noSpecificTime": false + }, + "timezone": "America/Mexico_City", + "status": { + "code": "onsale" + } + }, + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7na", + "name": "Arts & Theatre" + }, + "genre": { + "id": "KnvZfZ7v7nt", + "name": "Espectaculo" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7v7lv", + "name": "Espectaculo" + } + } + ], + "promoter": { + "id": "3324", + "name": "MONDIAL PRICE 2", + "description": "MONDIAL PRICE 2 / NTL / MXC" + }, + "info": "Sinopsis:Tan sólo entre 2013 y 2014 se calcula que en México fueron asesinadas diariamente siete mujeres. ¿Qué tan altos son los edificios en Nueva York? desnuda el abismo social, jurisdiccional e incluso psíquico que se delinea a la par de una frontera y muro de contención por los cuales transitan insondables historias que muchas veces quedan sepultadas en las inagotables arenas del desierto Elenco:Pilar Couto Américo del Río* Leticia Pedrajo Estela Rivera Javier Sáncehez Medín Villatoro *Beneficiario del Programa de Creadores Escénicos 2015 del Fondo Nacional para la Cultura y las Artes", + "pleaseNote": "Conoce nuestras políticas de entrega. Límite de edad: Mayores de 16 años Pagan boleto a partir de: 16 años. Restricciones: No introducir alimentos ni bebidas,No tomar fotografía ni video Límite de acceso: Se recomienda llegar 15 minutos antes del evento Servicios: convenio con el estacionamiento del monumento a la madre presentando tu boleto de estacionamiento en la taquilla del teatro Duración aproximada: 60min. Página oficial: www.cultura.df.gob.mx/www.teatros.cultutra.df.gob.mx", + "priceRanges": [ + { + "type": "standard", + "currency": "MXN", + "min": 136.0, + "max": 136.0 + } + ], + "_links": { + "self": { + "href": "/discovery/v2/events/17AZv8G6CnMcD1x?locale=en-us" + }, + "venues": [ + { + "href": "/discovery/v2/venues/KovZpZAd1taA?locale=en-us" + } + ] + }, + "_embedded": { + "venues": [ + { + "name": "Teatro Benito Juárez", + "type": "venue", + "id": "KovZpZAd1taA", + "test": false, + "url": "http://ticketmaster.com.mx/venue/164154", + "locale": "en-us", + "postalCode": "08400", + "timezone": "America/Mexico_City", + "city": { + "name": "México" + }, + "state": { + "name": "Distrito Federal", + "stateCode": "DF" + }, + "country": { + "name": "Mexico", + "countryCode": "MX" + }, + "address": { + "line1": "Villalongin No. 15, Col. Cuauhtémoc" + }, + "markets": [ + { + "id": "401" + }, + { + "id": "402" + } + ], + "dmas": [ + { + "id": 801 + }, + { + "id": 802 + } + ], + "_links": { + "self": { + "href": "/discovery/v2/venues/KovZpZAd1taA?locale=en-us" + } + } + } + ] + } + }, + { + "name": "¿Qué tan altos son los edificios de Nueva York?", + "type": "event", + "id": "17AZv8G6CnMcD1G", + "test": false, + "url": "http://ticketmaster.com.mx/event/140050EAB7B7B28C", + "locale": "en-us", + "images": [ + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dbimages/252338a.jpg", + "width": 205, + "height": 115, + "fallback": false + } + ], + "sales": { + "public": { + "startDateTime": "2016-07-20T15:00:00Z", + "startTBD": false, + "endDateTime": "2016-08-23T23:30:00Z" + } + }, + "dates": { + "start": { + "localDate": "2016-08-23", + "localTime": "20:30:00", + "dateTime": "2016-08-24T01:30:00Z", + "dateTBD": false, + "dateTBA": false, + "timeTBA": false, + "noSpecificTime": false + }, + "timezone": "America/Mexico_City", + "status": { + "code": "onsale" + } + }, + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7na", + "name": "Arts & Theatre" + }, + "genre": { + "id": "KnvZfZ7v7nt", + "name": "Espectaculo" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7v7lv", + "name": "Espectaculo" + } + } + ], + "promoter": { + "id": "3324", + "name": "MONDIAL PRICE 2", + "description": "MONDIAL PRICE 2 / NTL / MXC" + }, + "info": "Sinopsis:Tan sólo entre 2013 y 2014 se calcula que en México fueron asesinadas diariamente siete mujeres. ¿Qué tan altos son los edificios en Nueva York? desnuda el abismo social, jurisdiccional e incluso psíquico que se delinea a la par de una frontera y muro de contención por los cuales transitan insondables historias que muchas veces quedan sepultadas en las inagotables arenas del desierto Elenco:Pilar Couto Américo del Río* Leticia Pedrajo Estela Rivera Javier Sáncehez Medín Villatoro *Beneficiario del Programa de Creadores Escénicos 2015 del Fondo Nacional para la Cultura y las Artes", + "pleaseNote": "Conoce nuestras políticas de entrega. Límite de edad: Mayores de 16 años Pagan boleto a partir de: 16 años. Restricciones: No introducir alimentos ni bebidas,No tomar fotografía ni video Límite de acceso: Se recomienda llegar 15 minutos antes del evento Servicios: convenio con el estacionamiento del monumento a la madre presentando tu boleto de estacionamiento en la taquilla del teatro Duración aproximada: 60min. Página oficial: www.cultura.df.gob.mx/www.teatros.cultutra.df.gob.mx", + "priceRanges": [ + { + "type": "standard", + "currency": "MXN", + "min": 136.0, + "max": 136.0 + } + ], + "_links": { + "self": { + "href": "/discovery/v2/events/17AZv8G6CnMcD1G?locale=en-us" + }, + "venues": [ + { + "href": "/discovery/v2/venues/KovZpZAd1taA?locale=en-us" + } + ] + }, + "_embedded": { + "venues": [ + { + "name": "Teatro Benito Juárez", + "type": "venue", + "id": "KovZpZAd1taA", + "test": false, + "url": "http://ticketmaster.com.mx/venue/164154", + "locale": "en-us", + "postalCode": "08400", + "timezone": "America/Mexico_City", + "city": { + "name": "México" + }, + "state": { + "name": "Distrito Federal", + "stateCode": "DF" + }, + "country": { + "name": "Mexico", + "countryCode": "MX" + }, + "address": { + "line1": "Villalongin No. 15, Col. Cuauhtémoc" + }, + "markets": [ + { + "id": "401" + }, + { + "id": "402" + } + ], + "dmas": [ + { + "id": 801 + }, + { + "id": 802 + } + ], + "_links": { + "self": { + "href": "/discovery/v2/venues/KovZpZAd1taA?locale=en-us" + } + } + } + ] + } + }, + { + "name": "¿Qué tan altos son los edificios de Nueva York?", + "type": "event", + "id": "17AZv8G6CnMsh1T", + "test": false, + "url": "http://ticketmaster.com.mx/event/140050EAB7C5B2BF", + "locale": "en-us", + "images": [ + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dbimages/252338a.jpg", + "width": 205, + "height": 115, + "fallback": false + } + ], + "sales": { + "public": { + "startDateTime": "2016-07-20T15:00:00Z", + "startTBD": false, + "endDateTime": "2016-09-14T23:30:00Z" + } + }, + "dates": { + "start": { + "localDate": "2016-09-14", + "localTime": "20:30:00", + "dateTime": "2016-09-15T01:30:00Z", + "dateTBD": false, + "dateTBA": false, + "timeTBA": false, + "noSpecificTime": false + }, + "timezone": "America/Mexico_City", + "status": { + "code": "onsale" + } + }, + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7na", + "name": "Arts & Theatre" + }, + "genre": { + "id": "KnvZfZ7v7nt", + "name": "Espectaculo" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7v7lv", + "name": "Espectaculo" + } + } + ], + "promoter": { + "id": "3324", + "name": "MONDIAL PRICE 2", + "description": "MONDIAL PRICE 2 / NTL / MXC" + }, + "info": "Sinopsis:Tan sólo entre 2013 y 2014 se calcula que en México fueron asesinadas diariamente siete mujeres. ¿Qué tan altos son los edificios en Nueva York? desnuda el abismo social, jurisdiccional e incluso psíquico que se delinea a la par de una frontera y muro de contención por los cuales transitan insondables historias que muchas veces quedan sepultadas en las inagotables arenas del desierto Elenco:Pilar Couto Américo del Río* Leticia Pedrajo Estela Rivera Javier Sáncehez Medín Villatoro *Beneficiario del Programa de Creadores Escénicos 2015 del Fondo Nacional para la Cultura y las Artes", + "pleaseNote": "Conoce nuestras políticas de entrega. Límite de edad: Mayores de 16 años Pagan boleto a partir de: 16 años. Restricciones: No introducir alimentos ni bebidas,No tomar fotografía ni video Límite de acceso: Se recomienda llegar 15 minutos antes del evento Servicios: convenio con el estacionamiento del monumento a la madre presentando tu boleto de estacionamiento en la taquilla del teatro Duración aproximada: 60min. Página oficial: www.cultura.df.gob.mx/www.teatros.cultutra.df.gob.mx", + "priceRanges": [ + { + "type": "standard", + "currency": "MXN", + "min": 136.0, + "max": 136.0 + } + ], + "_links": { + "self": { + "href": "/discovery/v2/events/17AZv8G6CnMsh1T?locale=en-us" + }, + "venues": [ + { + "href": "/discovery/v2/venues/KovZpZAd1taA?locale=en-us" + } + ] + }, + "_embedded": { + "venues": [ + { + "name": "Teatro Benito Juárez", + "type": "venue", + "id": "KovZpZAd1taA", + "test": false, + "url": "http://ticketmaster.com.mx/venue/164154", + "locale": "en-us", + "postalCode": "08400", + "timezone": "America/Mexico_City", + "city": { + "name": "México" + }, + "state": { + "name": "Distrito Federal", + "stateCode": "DF" + }, + "country": { + "name": "Mexico", + "countryCode": "MX" + }, + "address": { + "line1": "Villalongin No. 15, Col. Cuauhtémoc" + }, + "markets": [ + { + "id": "401" + }, + { + "id": "402" + } + ], + "dmas": [ + { + "id": 801 + }, + { + "id": 802 + } + ], + "_links": { + "self": { + "href": "/discovery/v2/venues/KovZpZAd1taA?locale=en-us" + } + } + } + ] + } + }, + { + "name": "¿Qué tan altos son los edificios de Nueva York?", + "type": "event", + "id": "17AZv8G6CnMmh1g", + "test": false, + "url": "http://ticketmaster.com.mx/event/140050EAB7B9B2B5", + "locale": "en-us", + "images": [ + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dbimages/252338a.jpg", + "width": 205, + "height": 115, + "fallback": false + } + ], + "sales": { + "public": { + "startDateTime": "2016-07-20T15:00:00Z", + "startTBD": false, + "endDateTime": "2016-09-07T23:30:00Z" + } + }, + "dates": { + "start": { + "localDate": "2016-09-07", + "localTime": "20:30:00", + "dateTime": "2016-09-08T01:30:00Z", + "dateTBD": false, + "dateTBA": false, + "timeTBA": false, + "noSpecificTime": false + }, + "timezone": "America/Mexico_City", + "status": { + "code": "onsale" + } + }, + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7na", + "name": "Arts & Theatre" + }, + "genre": { + "id": "KnvZfZ7v7nt", + "name": "Espectaculo" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7v7lv", + "name": "Espectaculo" + } + } + ], + "promoter": { + "id": "3324", + "name": "MONDIAL PRICE 2", + "description": "MONDIAL PRICE 2 / NTL / MXC" + }, + "info": "Sinopsis:Tan sólo entre 2013 y 2014 se calcula que en México fueron asesinadas diariamente siete mujeres. ¿Qué tan altos son los edificios en Nueva York? desnuda el abismo social, jurisdiccional e incluso psíquico que se delinea a la par de una frontera y muro de contención por los cuales transitan insondables historias que muchas veces quedan sepultadas en las inagotables arenas del desierto Elenco:Pilar Couto Américo del Río* Leticia Pedrajo Estela Rivera Javier Sáncehez Medín Villatoro *Beneficiario del Programa de Creadores Escénicos 2015 del Fondo Nacional para la Cultura y las Artes", + "pleaseNote": "Conoce nuestras políticas de entrega. Límite de edad: Mayores de 16 años Pagan boleto a partir de: 16 años. Restricciones: No introducir alimentos ni bebidas,No tomar fotografía ni video Límite de acceso: Se recomienda llegar 15 minutos antes del evento Servicios: convenio con el estacionamiento del monumento a la madre presentando tu boleto de estacionamiento en la taquilla del teatro Duración aproximada: 60min. Página oficial: www.cultura.df.gob.mx/www.teatros.cultutra.df.gob.mx", + "priceRanges": [ + { + "type": "standard", + "currency": "MXN", + "min": 136.0, + "max": 136.0 + } + ], + "_links": { + "self": { + "href": "/discovery/v2/events/17AZv8G6CnMmh1g?locale=en-us" + }, + "venues": [ + { + "href": "/discovery/v2/venues/KovZpZAd1taA?locale=en-us" + } + ] + }, + "_embedded": { + "venues": [ + { + "name": "Teatro Benito Juárez", + "type": "venue", + "id": "KovZpZAd1taA", + "test": false, + "url": "http://ticketmaster.com.mx/venue/164154", + "locale": "en-us", + "postalCode": "08400", + "timezone": "America/Mexico_City", + "city": { + "name": "México" + }, + "state": { + "name": "Distrito Federal", + "stateCode": "DF" + }, + "country": { + "name": "Mexico", + "countryCode": "MX" + }, + "address": { + "line1": "Villalongin No. 15, Col. Cuauhtémoc" + }, + "markets": [ + { + "id": "401" + }, + { + "id": "402" + } + ], + "dmas": [ + { + "id": 801 + }, + { + "id": 802 + } + ], + "_links": { + "self": { + "href": "/discovery/v2/venues/KovZpZAd1taA?locale=en-us" + } + } + } + ] + } + }, + { + "name": "¿Qué tan altos son los edificios de Nueva York?", + "type": "event", + "id": "17AZv8G6CnMmh1m", + "test": false, + "url": "http://ticketmaster.com.mx/event/140050EAB7B9B2AE", + "locale": "en-us", + "images": [ + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dbimages/252338a.jpg", + "width": 205, + "height": 115, + "fallback": false + } + ], + "sales": { + "public": { + "startDateTime": "2016-07-20T15:00:00Z", + "startTBD": false, + "endDateTime": "2016-09-06T23:30:00Z" + } + }, + "dates": { + "start": { + "localDate": "2016-09-06", + "localTime": "20:30:00", + "dateTime": "2016-09-07T01:30:00Z", + "dateTBD": false, + "dateTBA": false, + "timeTBA": false, + "noSpecificTime": false + }, + "timezone": "America/Mexico_City", + "status": { + "code": "onsale" + } + }, + "classifications": [ + { + "primary": true, + "segment": { + "id": "KZFzniwnSyZfZ7v7na", + "name": "Arts & Theatre" + }, + "genre": { + "id": "KnvZfZ7v7nt", + "name": "Espectaculo" + }, + "subGenre": { + "id": "KZazBEonSMnZfZ7v7lv", + "name": "Espectaculo" + } + } + ], + "promoter": { + "id": "3324", + "name": "MONDIAL PRICE 2", + "description": "MONDIAL PRICE 2 / NTL / MXC" + }, + "info": "Sinopsis:Tan sólo entre 2013 y 2014 se calcula que en México fueron asesinadas diariamente siete mujeres. ¿Qué tan altos son los edificios en Nueva York? desnuda el abismo social, jurisdiccional e incluso psíquico que se delinea a la par de una frontera y muro de contención por los cuales transitan insondables historias que muchas veces quedan sepultadas en las inagotables arenas del desierto Elenco:Pilar Couto Américo del Río* Leticia Pedrajo Estela Rivera Javier Sáncehez Medín Villatoro *Beneficiario del Programa de Creadores Escénicos 2015 del Fondo Nacional para la Cultura y las Artes", + "pleaseNote": "Conoce nuestras políticas de entrega. Límite de edad: Mayores de 16 años Pagan boleto a partir de: 16 años. Restricciones: No introducir alimentos ni bebidas,No tomar fotografía ni video Límite de acceso: Se recomienda llegar 15 minutos antes del evento Servicios: convenio con el estacionamiento del monumento a la madre presentando tu boleto de estacionamiento en la taquilla del teatro Duración aproximada: 60min. Página oficial: www.cultura.df.gob.mx/www.teatros.cultutra.df.gob.mx", + "priceRanges": [ + { + "type": "standard", + "currency": "MXN", + "min": 136.0, + "max": 136.0 + } + ], + "_links": { + "self": { + "href": "/discovery/v2/events/17AZv8G6CnMmh1m?locale=en-us" + }, + "venues": [ + { + "href": "/discovery/v2/venues/KovZpZAd1taA?locale=en-us" + } + ] + }, + "_embedded": { + "venues": [ + { + "name": "Teatro Benito Juárez", + "type": "venue", + "id": "KovZpZAd1taA", + "test": false, + "url": "http://ticketmaster.com.mx/venue/164154", + "locale": "en-us", + "postalCode": "08400", + "timezone": "America/Mexico_City", + "city": { + "name": "México" + }, + "state": { + "name": "Distrito Federal", + "stateCode": "DF" + }, + "country": { + "name": "Mexico", + "countryCode": "MX" + }, + "address": { + "line1": "Villalongin No. 15, Col. Cuauhtémoc" + }, + "markets": [ + { + "id": "401" + }, + { + "id": "402" + } + ], + "dmas": [ + { + "id": 801 + }, + { + "id": 802 + } + ], + "_links": { + "self": { + "href": "/discovery/v2/venues/KovZpZAd1taA?locale=en-us" + } + } + } + ] + } + } + ] + }, + "page": { + "size": 5, + "totalElements": 112624, + "totalPages": 22525, + "number": 2 + } + } + } +] diff --git a/test/fixtures/discovery/v2/event/all-200.json b/test/fixtures/discovery/v2/event/all-200.json index 4d5c9d3..5fefa10 100644 --- a/test/fixtures/discovery/v2/event/all-200.json +++ b/test/fixtures/discovery/v2/event/all-200.json @@ -2,7 +2,7 @@ { "scope": "https://app.ticketmaster.com", "method": "GET", - "path": "/discovery/v2/events/?apikey=mock-api-key", + "path": "/discovery/v2/events?apikey=mock-api-key", "status": 200, "headers": { "Access-Control-Allow-Headers": "origin, x-requested-with, accept", diff --git a/test/fixtures/discovery/v2/event/findImages-200.json b/test/fixtures/discovery/v2/event/findImages-200.json new file mode 100644 index 0000000..ebad858 --- /dev/null +++ b/test/fixtures/discovery/v2/event/findImages-200.json @@ -0,0 +1,113 @@ +[ + { + "scope": "https://app.ticketmaster.com", + "method": "GET", + "path": "/discovery/v2/events/vv17FZfdGkSrrMju/images?apikey=mock-api-key", + "status": 200, + "headers": { + "Access-Control-Allow-Headers": "origin, x-requested-with, accept", + "Access-Control-Allow-Methods": "GET, PUT, POST, DELETE", + "Access-Control-Allow-Origin": "*", + "Access-Control-Max-Age": 3628800, + "Content-Type": "application/hal+json;charset=utf-8", + "Date": "Sat, 30 Jul 2016 17:11:07 GMT", + "Rate-Limit": 5000, + "Rate-Limit-Available": 4990, + "Rate-Limit-Over": 0, + "Rate-Limit-Reset": 1469920563443, + "Server": "Apache-Coyote/1.1", + "X-Application-Context": "application:local,default,jphx1:8080", + "X-TM-GTM-Origin": "uapi-us-phx2", + "Content-Length": 1932, + "Connection": "Close" + }, + "response": { + "type": "event", + "id": "Z1lMVSyiJynZ177dJa", + "images": [ + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_ARTIST_PAGE_3_2.jpg", + "width": 305, + "height": 203, + "fallback": true + }, + { + "ratio": "4_3", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_CUSTOM.jpg", + "width": 305, + "height": 225, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RETINA_PORTRAIT_16_9.jpg", + "width": 640, + "height": 360, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RETINA_PORTRAIT_3_2.jpg", + "width": 640, + "height": 427, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RECOMENDATION_16_9.jpg", + "width": 100, + "height": 56, + "fallback": true + }, + { + "ratio": "3_2", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_TABLET_LANDSCAPE_3_2.jpg", + "width": 1024, + "height": 683, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_RETINA_LANDSCAPE_16_9.jpg", + "width": 1136, + "height": 639, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_TABLET_LANDSCAPE_16_9.jpg", + "width": 1024, + "height": 576, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_TABLET_LANDSCAPE_LARGE_16_9.jpg", + "width": 2048, + "height": 1152, + "fallback": true + }, + { + "ratio": "16_9", + "url": "http://s1.ticketm.net/dam/c/8cf/a6653880-7899-4f67-8067-1f95f4d158cf_124761_EVENT_DETAIL_PAGE_16_9.jpg", + "width": 205, + "height": 115, + "fallback": true + }, + { + "ratio": "3_2", + "url": "https://static-label.frontgatetickets.com/common/events/92970.jpg", + "width": 120, + "height": 80, + "fallback": false + } + ], + "_links": { + "self": { + "href": "/discovery/v2/events/Z1lMVSyiJynZ177dJa/images?locale=en-us" + } + } + } + } +] diff --git a/test/globals.js b/test/globals.js new file mode 100644 index 0000000..2ad049a --- /dev/null +++ b/test/globals.js @@ -0,0 +1 @@ +global.should = require('chai').should(); diff --git a/test/mocha.opts b/test/mocha.opts new file mode 100644 index 0000000..51e3f77 --- /dev/null +++ b/test/mocha.opts @@ -0,0 +1,4 @@ +--require ./test/globals +--compilers js:babel-register +--recursive +--check-leaks