Bump dependencies, update schemas (#72)

This commit is contained in:
Brian Beck 2018-08-04 12:04:19 -07:00 committed by GitHub
parent 4768d2f359
commit 9f0172ba9d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
771 changed files with 7549 additions and 6262 deletions

View file

@ -1,6 +1,15 @@
{ {
"presets": ["es2015", "stage-2"], "presets": [
"plugins": ["transform-runtime"], [
"env",
{
"targets": {
"node": "8.10"
}
}
]
],
"plugins": ["transform-runtime", "syntax-object-rest-spread"],
"only": ["scripts/**", "src/**", "test/helpers/**"], "only": ["scripts/**", "src/**", "test/helpers/**"],
"env": { "env": {
"test": { "test": {

View file

@ -4,6 +4,9 @@ module.exports = {
es6: true, es6: true,
node: true node: true
}, },
parserOptions: {
ecmaVersion: 6
},
plugins: ['prettier'], plugins: ['prettier'],
rules: { rules: {
'prettier/prettier': [ 'prettier/prettier': [

View file

@ -1,9 +1,9 @@
language: node_js language: node_js
node_js: node_js:
- '6'
- '7'
- '8' - '8'
- '9'
- '10'
# Use container-based Travis infrastructure. # Use container-based Travis infrastructure.
sudo: false sudo: false

View file

@ -136,8 +136,7 @@ A free-text comment left for the image.
#### CoverArtArchiveImageThumbnails #### CoverArtArchiveImageThumbnails
URLs for thumbnails of different sizes for a particular piece of URLs for thumbnails of different sizes for a particular piece of cover art.
cover art.
<table> <table>
<thead> <thead>
@ -193,14 +192,14 @@ as well as a summary of what artwork is available.
<td valign="top"><a href="../types.md#urlstring">URLString</a></td> <td valign="top"><a href="../types.md#urlstring">URLString</a></td>
<td> <td>
The URL of an image depicting the album cover or “main front” of the release, The URL of an image depicting the album cover or “main front” of the release,
i.e. the front of the packaging of the audio recording (or in the case of a i.e. the front of the packaging of the audio recording (or in the case of a
digital release, the image associated with it in a digital media store). digital release, the image associated with it in a digital media store).
In the MusicBrainz schema, this field is a Boolean value indicating the In the MusicBrainz schema, this field is a Boolean value indicating the
presence of a front image, whereas here the value is the URL for the image presence of a front image, whereas here the value is the URL for the image
itself if one exists. You can check for null if you just want to determine itself if one exists. You can check for null if you just want to determine
the presence of an image. the presence of an image.
</td> </td>
</tr> </tr>
@ -220,13 +219,13 @@ retrieved as well.
<td valign="top"><a href="../types.md#urlstring">URLString</a></td> <td valign="top"><a href="../types.md#urlstring">URLString</a></td>
<td> <td>
The URL of an image depicting the “main back” of the release, i.e. the back The URL of an image depicting the “main back” of the release, i.e. the back
of the packaging of the audio recording. of the packaging of the audio recording.
In the MusicBrainz schema, this field is a Boolean value indicating the In the MusicBrainz schema, this field is a Boolean value indicating the
presence of a back image, whereas here the value is the URL for the image presence of a back image, whereas here the value is the URL for the image
itself. You can check for null if you just want to determine the presence of itself. You can check for null if you just want to determine the presence of
an image. an image.
</td> </td>
</tr> </tr>

View file

@ -188,7 +188,7 @@ A review of the album.
</tr> </tr>
<tr> <tr>
<td colspan="2" valign="top"><strong>salesCount</strong></td> <td colspan="2" valign="top"><strong>salesCount</strong></td>
<td valign="top"><a href="../types.md#int">Int</a></td> <td valign="top"><a href="../types.md#float">Float</a></td>
<td> <td>
The worldwide sales figure. The worldwide sales figure.
@ -206,7 +206,7 @@ The albums rating as determined by user votes, out of 10.
</tr> </tr>
<tr> <tr>
<td colspan="2" valign="top"><strong>scoreVotes</strong></td> <td colspan="2" valign="top"><strong>scoreVotes</strong></td>
<td valign="top"><a href="../types.md#int">Int</a></td> <td valign="top"><a href="../types.md#float">Float</a></td>
<td> <td>
The number of users who voted to determine the albums score. The number of users who voted to determine the albums score.
@ -548,7 +548,7 @@ The size of the images to retrieve.
</tr> </tr>
<tr> <tr>
<td colspan="2" valign="top"><strong>viewCount</strong></td> <td colspan="2" valign="top"><strong>viewCount</strong></td>
<td valign="top"><a href="../types.md#int">Int</a></td> <td valign="top"><a href="../types.md#float">Float</a></td>
<td> <td>
The number of views the video has received at the given URL. This will rarely The number of views the video has received at the given URL. This will rarely
@ -558,7 +558,7 @@ be up to date, so use cautiously.
</tr> </tr>
<tr> <tr>
<td colspan="2" valign="top"><strong>likeCount</strong></td> <td colspan="2" valign="top"><strong>likeCount</strong></td>
<td valign="top"><a href="../types.md#int">Int</a></td> <td valign="top"><a href="../types.md#float">Float</a></td>
<td> <td>
The number of likes the video has received at the given URL. This will rarely The number of likes the video has received at the given URL. This will rarely
@ -568,7 +568,7 @@ be up to date, so use cautiously.
</tr> </tr>
<tr> <tr>
<td colspan="2" valign="top"><strong>dislikeCount</strong></td> <td colspan="2" valign="top"><strong>dislikeCount</strong></td>
<td valign="top"><a href="../types.md#int">Int</a></td> <td valign="top"><a href="../types.md#float">Float</a></td>
<td> <td>
The number of dislikes the video has received at the given URL. This will The number of dislikes the video has received at the given URL. This will
@ -578,7 +578,7 @@ rarely be up to date, so use cautiously.
</tr> </tr>
<tr> <tr>
<td colspan="2" valign="top"><strong>commentCount</strong></td> <td colspan="2" valign="top"><strong>commentCount</strong></td>
<td valign="top"><a href="../types.md#int">Int</a></td> <td valign="top"><a href="../types.md#float">Float</a></td>
<td> <td>
The number of comments the video has received at the given URL. This will The number of comments the video has received at the given URL. This will
@ -678,7 +678,7 @@ The tracks rating as determined by user votes, out of 10.
</tr> </tr>
<tr> <tr>
<td colspan="2" valign="top"><strong>scoreVotes</strong></td> <td colspan="2" valign="top"><strong>scoreVotes</strong></td>
<td valign="top"><a href="../types.md#int">Int</a></td> <td valign="top"><a href="../types.md#float">Float</a></td>
<td> <td>
The number of users who voted to determine the albums score. The number of users who voted to determine the albums score.

File diff suppressed because it is too large Load diff

View file

@ -16,8 +16,8 @@
"yarn.lock" "yarn.lock"
], ],
"engines": { "engines": {
"node": ">=6.0.0", "node": ">=8.10.0",
"npm": ">=3.8.0" "npm": ">=5.2.0"
}, },
"scripts": { "scripts": {
"build": "npm run build:lib && npm run update-schema && npm run build:docs", "build": "npm run build:lib && npm run update-schema && npm run build:docs",
@ -70,53 +70,53 @@
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"babel-runtime": "^6.25.0", "babel-runtime": "^6.25.0",
"compression": "^1.7.0", "compression": "^1.7.3",
"cors": "^2.8.4", "cors": "^2.8.4",
"dashify": "^1.0.0", "dashify": "^1.0.0",
"dataloader": "^1.3.0", "dataloader": "^1.4.0",
"debug": "^3.0.0", "debug": "^3.0.0",
"dotenv": "^4.0.0", "dotenv": "^6.0.0",
"es6-error": "^4.0.2", "es6-error": "^4.1.1",
"express": "^4.16.2", "express": "^4.16.3",
"express-graphql": "^0.6.7", "express-graphql": "^0.6.12",
"graphql": "^0.11.7", "graphql": "^0.13.2",
"graphql-relay": "^0.5.4", "graphql-relay": "^0.5.5",
"graphql-tools": "^2.12.0", "graphql-tools": "^3.1.1",
"lru-cache": "^4.1.1", "lru-cache": "^4.1.3",
"pascalcase": "^0.1.1", "pascalcase": "^0.1.1",
"postinstall-build": "^5.0.1", "postinstall-build": "^5.0.1",
"qs": "^6.5.0", "qs": "^6.5.2",
"request": "^2.81.0", "request": "^2.87.0",
"retry": "^0.10.1" "retry": "^0.12.0"
}, },
"devDependencies": { "devDependencies": {
"ava": "^0.24.0", "ava": "^0.25.0",
"babel-cli": "^6.24.1", "babel-cli": "^6.24.1",
"babel-eslint": "^8.0.3", "babel-eslint": "^8.2.6",
"babel-plugin-istanbul": "^4.1.4", "babel-plugin-istanbul": "^4.1.6",
"babel-plugin-syntax-object-rest-spread": "^6.13.0",
"babel-plugin-transform-runtime": "^6.23.0", "babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-es2015": "^6.24.1", "babel-preset-env": "^1.7.0",
"babel-preset-stage-2": "^6.24.1",
"babel-register": "^6.24.1", "babel-register": "^6.24.1",
"coveralls": "^3.0.0", "coveralls": "^3.0.2",
"cross-env": "^5.1.1", "cross-env": "^5.2.0",
"doctoc": "^1.3.0", "doctoc": "^1.3.1",
"eslint": "^4.13.0", "eslint": "^5.3.0",
"eslint-config-prettier": "^2.9.0", "eslint-config-prettier": "^2.9.0",
"eslint-config-standard": "^10.2.1", "eslint-config-standard": "^11.0.0",
"eslint-plugin-import": "^2.8.0", "eslint-plugin-import": "^2.13.0",
"eslint-plugin-markdown": "^1.0.0-beta.6", "eslint-plugin-markdown": "^1.0.0-beta.6",
"eslint-plugin-node": "^5.2.1", "eslint-plugin-node": "^7.0.1",
"eslint-plugin-prettier": "^2.3.1", "eslint-plugin-prettier": "^2.6.2",
"eslint-plugin-promise": "^3.6.0", "eslint-plugin-promise": "^3.8.0",
"eslint-plugin-standard": "^3.0.1", "eslint-plugin-standard": "^3.1.0",
"graphql-markdown": "^3.2.0", "graphql-markdown": "^4.0.0-0",
"nodemon": "^1.12.5", "nodemon": "^1.18.3",
"nyc": "^11.3.0", "nyc": "^12.0.2",
"prettier": "^1.9.1", "prettier": "^1.14.0",
"replayer": "^2.2.3",
"rimraf": "^2.6.1", "rimraf": "^2.6.1",
"sepia": "^2.0.2", "sinon": "^6.1.4"
"sinon": "^4.1.3"
}, },
"standard": { "standard": {
"parser": "babel-eslint" "parser": "babel-eslint"

View file

@ -28,28 +28,26 @@ export class ClientError extends ExtendableError {
} }
export default class Client { export default class Client {
constructor( constructor({
{ baseURL,
baseURL, userAgent = `${pkg.name}/${pkg.version} ` +
userAgent = `${pkg.name}/${pkg.version} ` + `( ${pkg.homepage || pkg.author.url || pkg.author.email} )`,
`( ${pkg.homepage || pkg.author.url || pkg.author.email} )`, extraHeaders = {},
extraHeaders = {}, errorClass = ClientError,
errorClass = ClientError, timeout = 60000,
timeout = 60000, limit = 1,
limit = 1, period = 1000,
period = 1000, concurrency = 10,
concurrency = 10, retries = 10,
retries = 10, // It's OK for `retryDelayMin` to be less than one second, even 0, because
// It's OK for `retryDelayMin` to be less than one second, even 0, because // `RateLimit` will already make sure we don't exceed the API rate limit.
// `RateLimit` will already make sure we don't exceed the API rate limit. // We're not doing exponential backoff because it will help with being
// We're not doing exponential backoff because it will help with being // rate limited, but rather to be chill in case MusicBrainz is returning
// rate limited, but rather to be chill in case MusicBrainz is returning // some other error or our network is failing.
// some other error or our network is failing. retryDelayMin = 100,
retryDelayMin = 100, retryDelayMax = 60000,
retryDelayMax = 60000, randomizeRetry = true
randomizeRetry = true } = {}) {
} = {}
) {
this.baseURL = baseURL this.baseURL = baseURL
this.userAgent = userAgent this.userAgent = userAgent
this.extraHeaders = extraHeaders this.extraHeaders = extraHeaders

View file

@ -4,22 +4,20 @@ import Client, { ClientError } from './client'
export class MusicBrainzError extends ClientError {} export class MusicBrainzError extends ClientError {}
export default class MusicBrainz extends Client { export default class MusicBrainz extends Client {
constructor( constructor({
{ baseURL = process.env.MUSICBRAINZ_BASE_URL ||
baseURL = process.env.MUSICBRAINZ_BASE_URL || 'http://musicbrainz.org/ws/2/',
'http://musicbrainz.org/ws/2/', errorClass = MusicBrainzError,
errorClass = MusicBrainzError, // MusicBrainz API requests are limited to an *average* of 1 req/sec.
// MusicBrainz API requests are limited to an *average* of 1 req/sec. // That means if, for example, we only need to make a few API requests to
// That means if, for example, we only need to make a few API requests to // fulfill a query, we might as well make them all at once - as long as
// fulfill a query, we might as well make them all at once - as long as // we then wait a few seconds before making more. In practice this can
// we then wait a few seconds before making more. In practice this can // seemingly be set to about 5 requests every 5 seconds before we're
// seemingly be set to about 5 requests every 5 seconds before we're // considered to exceed the rate limit.
// considered to exceed the rate limit. limit = 5,
limit = 5, period = 5500,
period = 5500, ...options
...options } = {}) {
} = {}
) {
super({ baseURL, errorClass, limit, period, ...options }) super({ baseURL, errorClass, limit, period, ...options })
} }

View file

@ -1,15 +1,13 @@
import Client from '../../api/client' import Client from '../../api/client'
export default class CoverArtArchiveClient extends Client { export default class CoverArtArchiveClient extends Client {
constructor( constructor({
{ baseURL = process.env.COVER_ART_ARCHIVE_BASE_URL ||
baseURL = process.env.COVER_ART_ARCHIVE_BASE_URL || 'http://coverartarchive.org/',
'http://coverartarchive.org/', limit = 10,
limit = 10, period = 1000,
period = 1000, ...options
...options } = {}) {
} = {}
) {
super({ baseURL, limit, period, ...options }) super({ baseURL, limit, period, ...options })
} }

View file

@ -55,6 +55,7 @@ export default function createLoaders(options) {
) )
}, },
{ {
batch: false,
cacheKeyFn: ([entityType, id, type, size]) => { cacheKeyFn: ([entityType, id, type, size]) => {
const key = `${entityType}/${id}/${type}` const key = `${entityType}/${id}/${type}`
return size ? `${key}-${size}` : key return size ? `${key}-${size}` : key

View file

@ -1,121 +1,176 @@
import gql from '../../tag' import gql from '../../tag'
export default gql` export default gql`
# An individual piece of album artwork from the [Cover Art Archive](https://musicbrainz.org/doc/Cover_Art_Archive). """
An individual piece of album artwork from the [Cover Art Archive](https://musicbrainz.org/doc/Cover_Art_Archive).
"""
type CoverArtArchiveImage { type CoverArtArchiveImage {
# The Internet Archives internal file ID for the image. """
The Internet Archives internal file ID for the image.
"""
fileID: String! fileID: String!
# The URL at which the image can be found. """
The URL at which the image can be found.
"""
image: URLString! image: URLString!
# A set of thumbnails for the image. """
A set of thumbnails for the image.
"""
thumbnails: CoverArtArchiveImageThumbnails! thumbnails: CoverArtArchiveImageThumbnails!
# Whether this image depicts the main front of the release. """
Whether this image depicts the main front of the release.
"""
front: Boolean! front: Boolean!
# Whether this image depicts the main back of the release. """
Whether this image depicts the main back of the release.
"""
back: Boolean! back: Boolean!
# A list of [image types](https://musicbrainz.org/doc/Cover_Art/Types) """
# describing what part(s) of the release the image includes. A list of [image types](https://musicbrainz.org/doc/Cover_Art/Types)
describing what part(s) of the release the image includes.
"""
types: [String]! types: [String]!
# The MusicBrainz edit ID. """
The MusicBrainz edit ID.
"""
edit: Int edit: Int
# Whether the image was approved by the MusicBrainz edit system. """
Whether the image was approved by the MusicBrainz edit system.
"""
approved: Boolean approved: Boolean
# A free-text comment left for the image. """
A free-text comment left for the image.
"""
comment: String comment: String
} }
# The image sizes that may be requested at the [Cover Art Archive](https://musicbrainz.org/doc/Cover_Art_Archive). """
The image sizes that may be requested at the [Cover Art Archive](https://musicbrainz.org/doc/Cover_Art_Archive).
"""
enum CoverArtArchiveImageSize { enum CoverArtArchiveImageSize {
# A maximum dimension of 250px. """
A maximum dimension of 250px.
"""
SMALL SMALL
# A maximum dimension of 500px. """
A maximum dimension of 500px.
"""
LARGE LARGE
# The images original dimensions, with no maximum. """
The images original dimensions, with no maximum.
"""
FULL FULL
} }
# URLs for thumbnails of different sizes for a particular piece of """
# cover art. URLs for thumbnails of different sizes for a particular piece of cover art.
"""
type CoverArtArchiveImageThumbnails { type CoverArtArchiveImageThumbnails {
# The URL of a small version of the cover art, where the maximum dimension is """
# 250px. The URL of a small version of the cover art, where the maximum dimension is
250px.
"""
small: URLString small: URLString
# The URL of a large version of the cover art, where the maximum dimension is """
# 500px. The URL of a large version of the cover art, where the maximum dimension is
500px.
"""
large: URLString large: URLString
} }
# An object containing a list of the cover art images for a release obtained """
# from the [Cover Art Archive](https://musicbrainz.org/doc/Cover_Art_Archive), An object containing a list of the cover art images for a release obtained
# as well as a summary of what artwork is available. from the [Cover Art Archive](https://musicbrainz.org/doc/Cover_Art_Archive),
as well as a summary of what artwork is available.
"""
type CoverArtArchiveRelease { type CoverArtArchiveRelease {
# The URL of an image depicting the album cover or main front of the release, """
# i.e. the front of the packaging of the audio recording (or in the case of a The URL of an image depicting the album cover or main front of the release,
# digital release, the image associated with it in a digital media store). i.e. the front of the packaging of the audio recording (or in the case of a
# digital release, the image associated with it in a digital media store).
# In the MusicBrainz schema, this field is a Boolean value indicating the
# presence of a front image, whereas here the value is the URL for the image In the MusicBrainz schema, this field is a Boolean value indicating the
# itself if one exists. You can check for null if you just want to determine presence of a front image, whereas here the value is the URL for the image
# the presence of an image. itself if one exists. You can check for null if you just want to determine
the presence of an image.
"""
front( front(
# The size of the image to retrieve. By default, the returned image will """
# have its full original dimensions, but certain thumbnail sizes may be The size of the image to retrieve. By default, the returned image will
# retrieved as well. have its full original dimensions, but certain thumbnail sizes may be
retrieved as well.
"""
size: CoverArtArchiveImageSize = FULL size: CoverArtArchiveImageSize = FULL
): URLString ): URLString
# The URL of an image depicting the main back of the release, i.e. the back """
# of the packaging of the audio recording. The URL of an image depicting the main back of the release, i.e. the back
# of the packaging of the audio recording.
# In the MusicBrainz schema, this field is a Boolean value indicating the
# presence of a back image, whereas here the value is the URL for the image In the MusicBrainz schema, this field is a Boolean value indicating the
# itself. You can check for null if you just want to determine the presence of presence of a back image, whereas here the value is the URL for the image
# an image. itself. You can check for null if you just want to determine the presence of
an image.
"""
back( back(
# The size of the image to retrieve. By default, the returned image will """
# have its full original dimensions, but certain thumbnail sizes may be The size of the image to retrieve. By default, the returned image will
# retrieved as well. have its full original dimensions, but certain thumbnail sizes may be
retrieved as well.
"""
size: CoverArtArchiveImageSize = FULL size: CoverArtArchiveImageSize = FULL
): URLString ): URLString
# A list of images depicting the different sides and surfaces of a releases """
# media and packaging. A list of images depicting the different sides and surfaces of a releases
media and packaging.
"""
images: [CoverArtArchiveImage]! images: [CoverArtArchiveImage]!
# Whether there is artwork present for this release. """
Whether there is artwork present for this release.
"""
artwork: Boolean! artwork: Boolean!
# The number of artwork images present for this release. """
The number of artwork images present for this release.
"""
count: Int! count: Int!
# The particular release shown in the returned cover art. """
The particular release shown in the returned cover art.
"""
release: Release release: Release
} }
extend type Release { extend type Release {
# An object containing a list and summary of the cover art images that are """
# present for this release from the [Cover Art Archive](https://musicbrainz.org/doc/Cover_Art_Archive). An object containing a list and summary of the cover art images that are
# This field is provided by the Cover Art Archive extension. present for this release from the [Cover Art Archive](https://musicbrainz.org/doc/Cover_Art_Archive).
This field is provided by the Cover Art Archive extension.
"""
coverArtArchive: CoverArtArchiveRelease coverArtArchive: CoverArtArchiveRelease
} }
extend type ReleaseGroup { extend type ReleaseGroup {
# The cover art for a release in the release group, obtained from the """
# [Cover Art Archive](https://musicbrainz.org/doc/Cover_Art_Archive). A The cover art for a release in the release group, obtained from the
# release in the release group will be chosen as representative of the release [Cover Art Archive](https://musicbrainz.org/doc/Cover_Art_Archive). A
# group. release in the release group will be chosen as representative of the release
# This field is provided by the Cover Art Archive extension. group.
This field is provided by the Cover Art Archive extension.
"""
coverArtArchive: CoverArtArchiveRelease coverArtArchive: CoverArtArchiveRelease
} }
` `

View file

@ -1,16 +1,13 @@
import Client from '../../api/client' import Client from '../../api/client'
export default class FanArtClient extends Client { export default class FanArtClient extends Client {
constructor( constructor({
{ apiKey = process.env.FANART_API_KEY,
apiKey = process.env.FANART_API_KEY, baseURL = process.env.FANART_BASE_URL || 'http://webservice.fanart.tv/v3/',
baseURL = process.env.FANART_BASE_URL || limit = 10,
'http://webservice.fanart.tv/v3/', period = 1000,
limit = 10, ...options
period = 1000, } = {}) {
...options
} = {}
) {
super({ baseURL, limit, period, ...options }) super({ baseURL, limit, period, ...options })
this.apiKey = apiKey this.apiKey = apiKey
} }

View file

@ -54,6 +54,7 @@ export default function createLoader(options) {
) )
}, },
{ {
batch: false,
cacheKeyFn: ([entityType, id]) => `${entityType}/${id}`, cacheKeyFn: ([entityType, id]) => `${entityType}/${id}`,
cacheMap: cache cacheMap: cache
} }

View file

@ -1,127 +1,197 @@
import gql from '../../tag' import gql from '../../tag'
export default gql` export default gql`
# The image sizes that may be requested at [fanart.tv](https://fanart.tv/). """
The image sizes that may be requested at [fanart.tv](https://fanart.tv/).
"""
enum FanArtImageSize { enum FanArtImageSize {
# The images full original dimensions. """
The images full original dimensions.
"""
FULL FULL
# A maximum dimension of 200px. """
A maximum dimension of 200px.
"""
PREVIEW PREVIEW
} }
# A single image from [fanart.tv](https://fanart.tv/). """
A single image from [fanart.tv](https://fanart.tv/).
"""
type FanArtImage { type FanArtImage {
# The ID of the image on fanart.tv. """
The ID of the image on fanart.tv.
"""
imageID: ID imageID: ID
# The URL of the image. """
The URL of the image.
"""
url( url(
# The size of the image to retrieve. """
The size of the image to retrieve.
"""
size: FanArtImageSize = FULL size: FanArtImageSize = FULL
): URLString ): URLString
# The number of likes the image has received by fanart.tv users. """
The number of likes the image has received by fanart.tv users.
"""
likeCount: Int likeCount: Int
} }
# A disc image from [fanart.tv](https://fanart.tv/). """
A disc image from [fanart.tv](https://fanart.tv/).
"""
type FanArtDiscImage { type FanArtDiscImage {
# The ID of the image on fanart.tv. """
The ID of the image on fanart.tv.
"""
imageID: ID imageID: ID
# The URL of the image. """
The URL of the image.
"""
url( url(
# The size of the image to retrieve. """
The size of the image to retrieve.
"""
size: FanArtImageSize = FULL size: FanArtImageSize = FULL
): URLString ): URLString
# The number of likes the image has received by fanart.tv users. """
The number of likes the image has received by fanart.tv users.
"""
likeCount: Int likeCount: Int
# The disc number. """
The disc number.
"""
discNumber: Int discNumber: Int
# The width and height of the (square) disc image. """
The width and height of the (square) disc image.
"""
size: Int size: Int
} }
# A music label image from [fanart.tv](https://fanart.tv/). """
A music label image from [fanart.tv](https://fanart.tv/).
"""
type FanArtLabelImage { type FanArtLabelImage {
# The ID of the image on fanart.tv. """
The ID of the image on fanart.tv.
"""
imageID: ID imageID: ID
# The URL of the image. """
The URL of the image.
"""
url( url(
# The size of the image to retrieve. """
The size of the image to retrieve.
"""
size: FanArtImageSize = FULL size: FanArtImageSize = FULL
): URLString ): URLString
# The number of likes the image has received by fanart.tv users. """
The number of likes the image has received by fanart.tv users.
"""
likeCount: Int likeCount: Int
# The type of color content in the image (usually white or colour). """
The type of color content in the image (usually white or colour).
"""
color: String color: String
} }
# An object containing lists of the different types of artist images from """
# [fanart.tv](https://fanart.tv/). An object containing lists of the different types of artist images from
[fanart.tv](https://fanart.tv/).
"""
type FanArtArtist { type FanArtArtist {
# A list of 1920x1080 JPG images picturing the artist, suitable for use as """
# backgrounds. A list of 1920x1080 JPG images picturing the artist, suitable for use as
backgrounds.
"""
backgrounds: [FanArtImage] backgrounds: [FanArtImage]
# A list of 1000x185 JPG images containing the artist and their logo or name. """
A list of 1000x185 JPG images containing the artist and their logo or name.
"""
banners: [FanArtImage] banners: [FanArtImage]
# A list of 400x155 PNG images containing the artists logo or name, with """
# transparent backgrounds. A list of 400x155 PNG images containing the artists logo or name, with
transparent backgrounds.
"""
logos: [FanArtImage] logos: [FanArtImage]
# A list of 800x310 PNG images containing the artists logo or name, with """
# transparent backgrounds. A list of 800x310 PNG images containing the artists logo or name, with
transparent backgrounds.
"""
logosHD: [FanArtImage] logosHD: [FanArtImage]
# A list of 1000x1000 JPG thumbnail images picturing the artist (usually """
# containing every member of a band). A list of 1000x1000 JPG thumbnail images picturing the artist (usually
containing every member of a band).
"""
thumbnails: [FanArtImage] thumbnails: [FanArtImage]
} }
# An object containing lists of the different types of label images from """
# [fanart.tv](https://fanart.tv/). An object containing lists of the different types of label images from
[fanart.tv](https://fanart.tv/).
"""
type FanArtLabel { type FanArtLabel {
# A list of 400x270 PNG images containing the labels logo. There will """
# usually be a black version, a color version, and a white version, all with A list of 400x270 PNG images containing the labels logo. There will
# transparent backgrounds. usually be a black version, a color version, and a white version, all with
transparent backgrounds.
"""
logos: [FanArtLabelImage] logos: [FanArtLabelImage]
} }
# An object containing lists of the different types of release group images from """
# [fanart.tv](https://fanart.tv/). An object containing lists of the different types of release group images from
[fanart.tv](https://fanart.tv/).
"""
type FanArtAlbum { type FanArtAlbum {
# A list of 1000x1000 JPG images of the cover artwork of the release group. """
A list of 1000x1000 JPG images of the cover artwork of the release group.
"""
albumCovers: [FanArtImage] albumCovers: [FanArtImage]
# A list of 1000x1000 PNG images of the physical disc media for the release """
# group, with transparent backgrounds. A list of 1000x1000 PNG images of the physical disc media for the release
group, with transparent backgrounds.
"""
discImages: [FanArtDiscImage] discImages: [FanArtDiscImage]
} }
extend type Artist { extend type Artist {
# Images of the artist from [fanart.tv](https://fanart.tv/). """
# This field is provided by the fanart.tv extension. Images of the artist from [fanart.tv](https://fanart.tv/).
This field is provided by the fanart.tv extension.
"""
fanArt: FanArtArtist fanArt: FanArtArtist
} }
extend type Label { extend type Label {
# Images of the label from [fanart.tv](https://fanart.tv/). """
# This field is provided by the fanart.tv extension. Images of the label from [fanart.tv](https://fanart.tv/).
This field is provided by the fanart.tv extension.
"""
fanArt: FanArtLabel fanArt: FanArtLabel
} }
extend type ReleaseGroup { extend type ReleaseGroup {
# Images of the release group from [fanart.tv](https://fanart.tv/). """
# This field is provided by the fanart.tv extension. Images of the release group from [fanart.tv](https://fanart.tv/).
This field is provided by the fanart.tv extension.
"""
fanArt: FanArtAlbum fanArt: FanArtAlbum
} }
` `

View file

@ -25,7 +25,7 @@ export default class MediaWikiClient extends Client {
pathname: '/w/api.php', pathname: '/w/api.php',
query: { query: {
action: 'query', action: 'query',
titles: pageURL.pathname.slice(6), titles: decodeURI(pageURL.pathname.slice(6)),
prop: 'imageinfo', prop: 'imageinfo',
iiprop: 'url|size|canonicaltitle|user|extmetadata', iiprop: 'url|size|canonicaltitle|user|extmetadata',
format: 'json' format: 'json'
@ -39,6 +39,11 @@ export default class MediaWikiClient extends Client {
`Query returned multiple pages: [${pageIDs.join(', ')}]` `Query returned multiple pages: [${pageIDs.join(', ')}]`
) )
} }
if (pageIDs[0] === '-1') {
throw new ClientError(
body.query.pages['-1'].invalidreason || 'Unknown error'
)
}
const imageInfo = body.query.pages[pageIDs[0]].imageinfo const imageInfo = body.query.pages[pageIDs[0]].imageinfo
if (imageInfo.length !== 1) { if (imageInfo.length !== 1) {
throw new ClientError( throw new ClientError(

View file

@ -20,6 +20,6 @@ export default function createLoader(options) {
keys => { keys => {
return Promise.all(keys.map(key => client.imageInfo(key))) return Promise.all(keys.map(key => client.imageInfo(key)))
}, },
{ cacheMap: cache } { batch: false, cacheMap: cache }
) )
} }

View file

@ -1,109 +1,167 @@
import gql from '../../tag' import gql from '../../tag'
export default gql` export default gql`
# An object describing various properties of an image stored on a MediaWiki """
# server. The information comes the [MediaWiki imageinfo API](https://www.mediawiki.org/wiki/API:Imageinfo). An object describing various properties of an image stored on a MediaWiki
server. The information comes the [MediaWiki imageinfo API](https://www.mediawiki.org/wiki/API:Imageinfo).
"""
type MediaWikiImage { type MediaWikiImage {
# The URL of the actual image file. """
The URL of the actual image file.
"""
url: URLString! url: URLString!
# The URL of the wiki page describing the image. """
The URL of the wiki page describing the image.
"""
descriptionURL: URLString descriptionURL: URLString
# The user who uploaded the file. """
The user who uploaded the file.
"""
user: String user: String
# The size of the file in bytes. """
The size of the file in bytes.
"""
size: Int size: Int
# The pixel width of the image. """
The pixel width of the image.
"""
width: Int width: Int
# The pixel height of the image. """
The pixel height of the image.
"""
height: Int height: Int
# The canonical title of the file. """
The canonical title of the file.
"""
canonicalTitle: String canonicalTitle: String
# The image title, brief description, or file name. """
The image title, brief description, or file name.
"""
objectName: String objectName: String
# A description of the image, potentially containing HTML. """
A description of the image, potentially containing HTML.
"""
descriptionHTML: String descriptionHTML: String
# The original date of creation of the image. May be a description rather than """
# a parseable timestamp, and may contain HTML. The original date of creation of the image. May be a description rather than
a parseable timestamp, and may contain HTML.
"""
originalDateTimeHTML: String originalDateTimeHTML: String
# A list of the categories of the image. """
A list of the categories of the image.
"""
categories: [String]! categories: [String]!
# The name of the image author, potentially containing HTML. """
The name of the image author, potentially containing HTML.
"""
artistHTML: String artistHTML: String
# The source of the image, potentially containing HTML. """
The source of the image, potentially containing HTML.
"""
creditHTML: String creditHTML: String
# A short human-readable license name. """
A short human-readable license name.
"""
licenseShortName: String licenseShortName: String
# A web address where the license is described. """
A web address where the license is described.
"""
licenseURL: URLString licenseURL: URLString
# The full list of values in the \`extmetadata\` field. """
The full list of values in the \`extmetadata\` field.
"""
metadata: [MediaWikiImageMetadata]! metadata: [MediaWikiImageMetadata]!
} }
# An entry in the \`extmetadata\` field of a MediaWiki image file. """
An entry in the \`extmetadata\` field of a MediaWiki image file.
"""
type MediaWikiImageMetadata { type MediaWikiImageMetadata {
# The name of the metadata field. """
The name of the metadata field.
"""
name: String! name: String!
# The value of the metadata field. All values will be converted to strings. """
The value of the metadata field. All values will be converted to strings.
"""
value: String value: String
# The source of the value. """
The source of the value.
"""
source: String source: String
} }
extend type Artist { extend type Artist {
# Artist images found at MediaWiki URLs in the artists URL relationships. """
# Defaults to URL relationships with the type image. Artist images found at MediaWiki URLs in the artists URL relationships.
# This field is provided by the MediaWiki extension. Defaults to URL relationships with the type image.
This field is provided by the MediaWiki extension.
"""
mediaWikiImages( mediaWikiImages(
# The type of URL relationship that will be selected to find images. See """
# the possible [Artist-URL relationship types](https://musicbrainz.org/relationships/artist-url). The type of URL relationship that will be selected to find images. See
the possible [Artist-URL relationship types](https://musicbrainz.org/relationships/artist-url).
"""
type: String = "image" type: String = "image"
): [MediaWikiImage]! ): [MediaWikiImage]!
} }
extend type Instrument { extend type Instrument {
# Instrument images found at MediaWiki URLs in the instruments URL """
# relationships. Defaults to URL relationships with the type image. Instrument images found at MediaWiki URLs in the instruments URL
# This field is provided by the MediaWiki extension. relationships. Defaults to URL relationships with the type image.
This field is provided by the MediaWiki extension.
"""
mediaWikiImages( mediaWikiImages(
# The type of URL relationship that will be selected to find images. See the """
# possible [Instrument-URL relationship types](https://musicbrainz.org/relationships/instrument-url). The type of URL relationship that will be selected to find images. See the
possible [Instrument-URL relationship types](https://musicbrainz.org/relationships/instrument-url).
"""
type: String = "image" type: String = "image"
): [MediaWikiImage]! ): [MediaWikiImage]!
} }
extend type Label { extend type Label {
# Label images found at MediaWiki URLs in the labels URL relationships. """
# Defaults to URL relationships with the type logo. Label images found at MediaWiki URLs in the labels URL relationships.
# This field is provided by the MediaWiki extension. Defaults to URL relationships with the type logo.
This field is provided by the MediaWiki extension.
"""
mediaWikiImages( mediaWikiImages(
# The type of URL relationship that will be selected to find images. See the """
# possible [Label-URL relationship types](https://musicbrainz.org/relationships/label-url). The type of URL relationship that will be selected to find images. See the
possible [Label-URL relationship types](https://musicbrainz.org/relationships/label-url).
"""
type: String = "logo" type: String = "logo"
): [MediaWikiImage]! ): [MediaWikiImage]!
} }
extend type Place { extend type Place {
# Place images found at MediaWiki URLs in the places URL relationships. """
# Defaults to URL relationships with the type image. Place images found at MediaWiki URLs in the places URL relationships.
# This field is provided by the MediaWiki extension. Defaults to URL relationships with the type image.
This field is provided by the MediaWiki extension.
"""
mediaWikiImages( mediaWikiImages(
# The type of URL relationship that will be selected to find images. See the """
# possible [Place-URL relationship types](https://musicbrainz.org/relationships/place-url). The type of URL relationship that will be selected to find images. See the
possible [Place-URL relationship types](https://musicbrainz.org/relationships/place-url).
"""
type: String = "image" type: String = "image"
): [MediaWikiImage]! ): [MediaWikiImage]!
} }

View file

@ -1,16 +1,14 @@
import Client from '../../api/client' import Client from '../../api/client'
export default class TheAudioDBClient extends Client { export default class TheAudioDBClient extends Client {
constructor( constructor({
{ apiKey = process.env.THEAUDIODB_API_KEY,
apiKey = process.env.THEAUDIODB_API_KEY, baseURL = process.env.THEAUDIODB_BASE_URL ||
baseURL = process.env.THEAUDIODB_BASE_URL || 'https://www.theaudiodb.com/api/v1/json/',
'http://www.theaudiodb.com/api/v1/json/', limit = 10,
limit = 10, period = 1000,
period = 1000, ...options
...options } = {}) {
} = {}
) {
super({ baseURL, limit, period, ...options }) super({ baseURL, limit, period, ...options })
this.apiKey = apiKey this.apiKey = apiKey
} }
@ -22,7 +20,13 @@ export default class TheAudioDBClient extends Client {
new ClientError('No API key was configured for TheAudioDB client.') new ClientError('No API key was configured for TheAudioDB client.')
) )
} }
return super.get(`${this.apiKey}/${path}`, { json: true, ...options }) return super.get(`${this.apiKey}/${path}`, {
json: true,
// FIXME: TheAudioDB's SSL terminator seems to be broken and only works
// by forcing TLS 1.0.
agentOptions: { secureProtocol: 'TLSv1_method' },
...options
})
} }
entity(entityType, mbid) { entity(entityType, mbid) {

View file

@ -26,6 +26,7 @@ export default function createLoader(options) {
) )
}, },
{ {
batch: false,
cacheKeyFn: ([entityType, id]) => `${entityType}/${id}`, cacheKeyFn: ([entityType, id]) => `${entityType}/${id}`,
cacheMap: cache cacheMap: cache
} }

View file

@ -1,232 +1,372 @@
import gql from '../../tag' import gql from '../../tag'
export default gql` export default gql`
# The image sizes that may be requested at [TheAudioDB](http://www.theaudiodb.com/). """
The image sizes that may be requested at [TheAudioDB](http://www.theaudiodb.com/).
"""
enum TheAudioDBImageSize { enum TheAudioDBImageSize {
# The images full original dimensions. """
The images full original dimensions.
"""
FULL FULL
# A maximum dimension of 200px. """
A maximum dimension of 200px.
"""
PREVIEW PREVIEW
} }
# An artist on [TheAudioDB](http://www.theaudiodb.com/). """
An artist on [TheAudioDB](http://www.theaudiodb.com/).
"""
type TheAudioDBArtist { type TheAudioDBArtist {
# TheAudioDB ID of the artist. """
TheAudioDB ID of the artist.
"""
artistID: ID artistID: ID
# A biography of the artist, often available in several languages. """
A biography of the artist, often available in several languages.
"""
biography( biography(
# The two-letter code for the language in which to retrieve the biography. """
The two-letter code for the language in which to retrieve the biography.
"""
lang: String = "en" lang: String = "en"
): String ): String
# The number of members in the musical group, if applicable. """
The number of members in the musical group, if applicable.
"""
memberCount: Int memberCount: Int
# A 1000x185 JPG banner image containing the artist and their logo or name. """
A 1000x185 JPG banner image containing the artist and their logo or name.
"""
banner( banner(
# The size of the image to retrieve. """
The size of the image to retrieve.
"""
size: TheAudioDBImageSize = FULL size: TheAudioDBImageSize = FULL
): URLString ): URLString
# A list of 1280x720 or 1920x1080 JPG images depicting the artist. """
A list of 1280x720 or 1920x1080 JPG images depicting the artist.
"""
fanArt( fanArt(
# The size of the images to retrieve. """
The size of the images to retrieve.
"""
size: TheAudioDBImageSize = FULL size: TheAudioDBImageSize = FULL
): [URLString]! ): [URLString]!
# A 400x155 PNG image containing the artists logo or name, with a transparent """
# background. A 400x155 PNG image containing the artists logo or name, with a transparent
background.
"""
logo( logo(
# The size of the image to retrieve. """
The size of the image to retrieve.
"""
size: TheAudioDBImageSize = FULL size: TheAudioDBImageSize = FULL
): URLString ): URLString
# A 1000x1000 JPG thumbnail image picturing the artist (usually containing """
# every member of a band). A 1000x1000 JPG thumbnail image picturing the artist (usually containing
every member of a band).
"""
thumbnail( thumbnail(
# The size of the image to retrieve. """
The size of the image to retrieve.
"""
size: TheAudioDBImageSize = FULL size: TheAudioDBImageSize = FULL
): URLString ): URLString
# The primary musical genre of the artist (e.g. Alternative Rock). """
The primary musical genre of the artist (e.g. Alternative Rock).
"""
genre: String genre: String
# The primary musical mood of the artist (e.g. Sad). """
The primary musical mood of the artist (e.g. Sad).
"""
mood: String mood: String
# The primary musical style of the artist (e.g. Rock/Pop). """
The primary musical style of the artist (e.g. Rock/Pop).
"""
style: String style: String
} }
# An album on [TheAudioDB](http://www.theaudiodb.com/) corresponding with a """
# MusicBrainz Release Group. An album on [TheAudioDB](http://www.theaudiodb.com/) corresponding with a
MusicBrainz Release Group.
"""
type TheAudioDBAlbum { type TheAudioDBAlbum {
# TheAudioDB ID of the album. """
TheAudioDB ID of the album.
"""
albumID: ID albumID: ID
# TheAudioDB ID of the artist who released the album. """
TheAudioDB ID of the artist who released the album.
"""
artistID: ID artistID: ID
# A description of the album, often available in several languages. """
A description of the album, often available in several languages.
"""
description( description(
# The two-letter code for the language in which to retrieve the biography. """
The two-letter code for the language in which to retrieve the biography.
"""
lang: String = "en" lang: String = "en"
): String ): String
# A review of the album. """
A review of the album.
"""
review: String review: String
# The worldwide sales figure. """
salesCount: Int The worldwide sales figure.
"""
salesCount: Float
# The albums rating as determined by user votes, out of 10. """
The albums rating as determined by user votes, out of 10.
"""
score: Float score: Float
# The number of users who voted to determine the albums score. """
scoreVotes: Int The number of users who voted to determine the albums score.
"""
scoreVotes: Float
# An image of the physical disc media for the album. """
An image of the physical disc media for the album.
"""
discImage( discImage(
# The size of the image to retrieve. """
The size of the image to retrieve.
"""
size: TheAudioDBImageSize = FULL size: TheAudioDBImageSize = FULL
): URLString ): URLString
# An image of the spine of the album packaging. """
An image of the spine of the album packaging.
"""
spineImage( spineImage(
# The size of the image to retrieve. """
The size of the image to retrieve.
"""
size: TheAudioDBImageSize = FULL size: TheAudioDBImageSize = FULL
): URLString ): URLString
# An image of the front of the album packaging. """
An image of the front of the album packaging.
"""
frontImage( frontImage(
# The size of the image to retrieve. """
The size of the image to retrieve.
"""
size: TheAudioDBImageSize = FULL size: TheAudioDBImageSize = FULL
): URLString ): URLString
# An image of the back of the album packaging. """
An image of the back of the album packaging.
"""
backImage( backImage(
# The size of the image to retrieve. """
The size of the image to retrieve.
"""
size: TheAudioDBImageSize = FULL size: TheAudioDBImageSize = FULL
): URLString ): URLString
# The primary musical genre of the album (e.g. Alternative Rock). """
The primary musical genre of the album (e.g. Alternative Rock).
"""
genre: String genre: String
# The primary musical mood of the album (e.g. Sad). """
The primary musical mood of the album (e.g. Sad).
"""
mood: String mood: String
# The primary musical style of the album (e.g. Rock/Pop). """
The primary musical style of the album (e.g. Rock/Pop).
"""
style: String style: String
# A rough description of the primary musical speed of the album (e.g. Medium). """
A rough description of the primary musical speed of the album (e.g. Medium).
"""
speed: String speed: String
# The primary musical theme of the album (e.g. In Love). """
The primary musical theme of the album (e.g. In Love).
"""
theme: String theme: String
} }
# A track on [TheAudioDB](http://www.theaudiodb.com/) corresponding with a """
# MusicBrainz Recording. A track on [TheAudioDB](http://www.theaudiodb.com/) corresponding with a
MusicBrainz Recording.
"""
type TheAudioDBTrack { type TheAudioDBTrack {
# TheAudioDB ID of the track. """
TheAudioDB ID of the track.
"""
trackID: ID trackID: ID
# TheAudioDB ID of the album on which the track appears. """
TheAudioDB ID of the album on which the track appears.
"""
albumID: ID albumID: ID
# TheAudioDB ID of the artist who released the track. """
TheAudioDB ID of the artist who released the track.
"""
artistID: ID artistID: ID
# A description of the track. """
A description of the track.
"""
description( description(
# The two-letter code for the language in which to retrieve the description. """
The two-letter code for the language in which to retrieve the description.
"""
lang: String = "en" lang: String = "en"
): String ): String
# A thumbnail image for the track. """
A thumbnail image for the track.
"""
thumbnail( thumbnail(
# The size of the image to retrieve. """
The size of the image to retrieve.
"""
size: TheAudioDBImageSize = FULL size: TheAudioDBImageSize = FULL
): URLString ): URLString
# The tracks rating as determined by user votes, out of 10. """
The tracks rating as determined by user votes, out of 10.
"""
score: Float score: Float
# The number of users who voted to determine the albums score. """
scoreVotes: Int The number of users who voted to determine the albums score.
"""
scoreVotes: Float
# The track number of the song on the album. """
The track number of the song on the album.
"""
trackNumber: Int trackNumber: Int
# The official music video for the track. """
The official music video for the track.
"""
musicVideo: TheAudioDBMusicVideo musicVideo: TheAudioDBMusicVideo
# The primary musical genre of the track (e.g. Alternative Rock). """
The primary musical genre of the track (e.g. Alternative Rock).
"""
genre: String genre: String
# The primary musical mood of the track (e.g. Sad). """
The primary musical mood of the track (e.g. Sad).
"""
mood: String mood: String
# The primary musical style of the track (e.g. Rock/Pop). """
The primary musical style of the track (e.g. Rock/Pop).
"""
style: String style: String
# The primary musical theme of the track (e.g. In Love). """
The primary musical theme of the track (e.g. In Love).
"""
theme: String theme: String
} }
# Details of a music video associated with a track on [TheAudioDB](http://www.theaudiodb.com/). """
Details of a music video associated with a track on [TheAudioDB](http://www.theaudiodb.com/).
"""
type TheAudioDBMusicVideo { type TheAudioDBMusicVideo {
# The URL where the music video can be found. """
The URL where the music video can be found.
"""
url: URLString url: URLString
# The video production company of the music video. """
The video production company of the music video.
"""
companyName: String companyName: String
# The director of the music video. """
The director of the music video.
"""
directorName: String directorName: String
# A list of still images from the music video. """
A list of still images from the music video.
"""
screenshots( screenshots(
# The size of the images to retrieve. """
The size of the images to retrieve.
"""
size: TheAudioDBImageSize = FULL size: TheAudioDBImageSize = FULL
): [URLString]! ): [URLString]!
# The number of views the video has received at the given URL. This will rarely """
# be up to date, so use cautiously. The number of views the video has received at the given URL. This will rarely
viewCount: Int be up to date, so use cautiously.
"""
viewCount: Float
# The number of likes the video has received at the given URL. This will rarely """
# be up to date, so use cautiously. The number of likes the video has received at the given URL. This will rarely
likeCount: Int be up to date, so use cautiously.
"""
likeCount: Float
# The number of dislikes the video has received at the given URL. This will """
# rarely be up to date, so use cautiously. The number of dislikes the video has received at the given URL. This will
dislikeCount: Int rarely be up to date, so use cautiously.
"""
dislikeCount: Float
# The number of comments the video has received at the given URL. This will """
# rarely be up to date, so use cautiously. The number of comments the video has received at the given URL. This will
commentCount: Int rarely be up to date, so use cautiously.
"""
commentCount: Float
} }
extend type Artist { extend type Artist {
# Data about the artist from [TheAudioDB](http://www.theaudiodb.com/), a good """
# source of biographical information and images. Data about the artist from [TheAudioDB](http://www.theaudiodb.com/), a good
# This field is provided by TheAudioDB extension. source of biographical information and images.
This field is provided by TheAudioDB extension.
"""
theAudioDB: TheAudioDBArtist theAudioDB: TheAudioDBArtist
} }
extend type Recording { extend type Recording {
# Data about the recording from [TheAudioDB](http://www.theaudiodb.com/). """
# This field is provided by TheAudioDB extension. Data about the recording from [TheAudioDB](http://www.theaudiodb.com/).
This field is provided by TheAudioDB extension.
"""
theAudioDB: TheAudioDBTrack theAudioDB: TheAudioDBTrack
} }
extend type ReleaseGroup { extend type ReleaseGroup {
# Data about the release group from [TheAudioDB](http://www.theaudiodb.com/), """
# a good source of descriptive information, reviews, and images. Data about the release group from [TheAudioDB](http://www.theaudiodb.com/),
# This field is provided by TheAudioDB extension. a good source of descriptive information, reviews, and images.
This field is provided by TheAudioDB extension.
"""
theAudioDB: TheAudioDBAlbum theAudioDB: TheAudioDBAlbum
} }
` `

View file

@ -19,15 +19,13 @@ export const defaultExtensions = [
require.resolve('./extensions/the-audio-db') require.resolve('./extensions/the-audio-db')
] ]
const middleware = ( const middleware = ({
{ client = new MusicBrainz(),
client = new MusicBrainz(), extensions = process.env.GRAPHBRAINZ_EXTENSIONS
extensions = process.env.GRAPHBRAINZ_EXTENSIONS ? JSON.parse(process.env.GRAPHBRAINZ_EXTENSIONS)
? JSON.parse(process.env.GRAPHBRAINZ_EXTENSIONS) : defaultExtensions,
: defaultExtensions, ...middlewareOptions
...middlewareOptions } = {}) => {
} = {}
) => {
const options = { client, extensions, ...middlewareOptions } const options = { client, extensions, ...middlewareOptions }
const DEV = process.env.NODE_ENV !== 'production' const DEV = process.env.NODE_ENV !== 'production'
const graphiql = DEV || process.env.GRAPHBRAINZ_GRAPHIQL === 'true' const graphiql = DEV || process.env.GRAPHBRAINZ_GRAPHIQL === 'true'

View file

@ -36,6 +36,7 @@ export default function createLoaders(client) {
) )
}, },
{ {
batch: false,
cacheKeyFn: key => client.getLookupURL(...key), cacheKeyFn: key => client.getLookupURL(...key),
cacheMap: cache cacheMap: cache
} }
@ -58,6 +59,7 @@ export default function createLoaders(client) {
) )
}, },
{ {
batch: false,
cacheKeyFn: key => client.getBrowseURL(...key), cacheKeyFn: key => client.getBrowseURL(...key),
cacheMap: cache cacheMap: cache
} }
@ -80,6 +82,7 @@ export default function createLoaders(client) {
) )
}, },
{ {
batch: false,
cacheKeyFn: key => client.getSearchURL(...key), cacheKeyFn: key => client.getSearchURL(...key),
cacheMap: cache cacheMap: cache
} }

View file

@ -1,14 +1,12 @@
const debug = require('debug')('graphbrainz:rate-limit') const debug = require('debug')('graphbrainz:rate-limit')
export default class RateLimit { export default class RateLimit {
constructor( constructor({
{ limit = 1,
limit = 1, period = 1000,
period = 1000, concurrency = limit || 1,
concurrency = limit || 1, defaultPriority = 1
defaultPriority = 1 } = {}) {
} = {}
) {
this.limit = limit this.limit = limit
this.period = period this.period = period
this.defaultPriority = defaultPriority this.defaultPriority = defaultPriority

View file

@ -21,7 +21,7 @@ export function applyExtension(extension, schema, options = {}) {
return extendSchema(updatedSchema, extensionSchema) return extendSchema(updatedSchema, extensionSchema)
}, outputSchema) }, outputSchema)
if (resolvers) { if (resolvers) {
addResolveFunctionsToSchema(outputSchema, resolvers) addResolveFunctionsToSchema({ schema: outputSchema, resolvers })
} }
} else if (typeof extension.extendSchema === 'function') { } else if (typeof extension.extendSchema === 'function') {
debug( debug(

View file

@ -9,7 +9,7 @@ function createScalar(config) {
if (ast.kind === Kind.STRING) { if (ast.kind === Kind.STRING) {
return ast.value return ast.value
} }
return null return undefined
}, },
...config ...config
}) })
@ -92,7 +92,7 @@ export const Duration = createScalar({
if (ast.kind === Kind.INT) { if (ast.kind === Kind.INT) {
return validatePositive(parseInt(ast.value, 10)) return validatePositive(parseInt(ast.value, 10))
} }
return null return undefined
} }
}) })
@ -140,7 +140,7 @@ export const Locale = createScalar({
if (ast.kind === Kind.STRING) { if (ast.kind === Kind.STRING) {
return validateLocale(ast.value) return validateLocale(ast.value)
} }
return null return undefined
} }
}) })
@ -154,7 +154,7 @@ export const MBID = createScalar({
if (ast.kind === Kind.STRING) { if (ast.kind === Kind.STRING) {
return validateMBID(ast.value) return validateMBID(ast.value)
} }
return null return undefined
} }
}) })
@ -172,6 +172,6 @@ export const URLString = createScalar({
if (ast.kind === Kind.STRING) { if (ast.kind === Kind.STRING) {
return validateURL(ast.value) return validateURL(ast.value)
} }
return null return undefined
} }
}) })

View file

@ -9,7 +9,7 @@ const schema = schemas[TEST_SCHEMA]
function testData(t, query, handler) { function testData(t, query, handler) {
return graphql(schema, query, null, context).then(result => { return graphql(schema, query, null, context).then(result => {
if (result.errors !== undefined) { if (result.errors !== undefined) {
console.log(result.errors) result.errors.forEach(error => t.log(error))
} }
t.is(result.errors, undefined) t.is(result.errors, undefined)
return handler(t, result.data) return handler(t, result.data)
@ -24,11 +24,6 @@ function testError(t, query, handler) {
}) })
} }
function testThrows(t, query, handler) {
const error = t.throws(graphql(schema, query, null, context))
return handler(t, error)
}
test( test(
'schema has a node field', 'schema has a node field',
testData, testData,
@ -287,10 +282,9 @@ test(
} }
) )
// FIXME: https://github.com/graphql/graphql-js/issues/910
test( test(
'throws an error if given a malformed MBID', 'throws an error if given a malformed MBID',
testThrows, testError,
` `
{ {
lookup { lookup {
@ -300,10 +294,8 @@ test(
} }
} }
`, `,
async (t, promise) => { (t, errors) => {
const err = await promise t.regex(errors[0].message, /Malformed MBID: ABC123/)
t.true(err instanceof TypeError)
t.is(err.message, 'Malformed MBID: ABC123')
} }
) )
@ -674,7 +666,7 @@ test(
`, `,
(t, data) => { (t, data) => {
const { work } = data.lookup const { work } = data.lookup
t.is(work.title, 'Song of the French Partisan') t.is(work.title, 'The Partisan')
t.deepEqual(work.iswcs, ['T-900.755.682-3']) t.deepEqual(work.iswcs, ['T-900.755.682-3'])
} }
) )
@ -699,10 +691,9 @@ test(
} }
) )
// FIXME: https://github.com/graphql/graphql-js/issues/910
test( test(
'throws an error if given a malformed resource URL', 'throws an error if given a malformed resource URL',
testThrows, testError,
` `
{ {
lookup { lookup {
@ -713,10 +704,8 @@ test(
} }
} }
`, `,
async (t, promise) => { (t, errors) => {
const err = await promise t.regex(errors[0].message, /Malformed URL: http:foo/)
t.true(err instanceof TypeError)
t.is(err.message, 'Malformed URL: http:foo')
} }
) )
@ -846,8 +835,7 @@ test(
(t, data) => { (t, data) => {
const { recording, release, releaseGroup } = data.lookup const { recording, release, releaseGroup } = data.lookup
t.deepEqual(recording.artistCredit, [ t.deepEqual(recording.artistCredit, [
{ name: 'Holly Golightly', joinPhrase: ' & ' }, { name: 'Holly Golightly & The Brokeoffs', joinPhrase: '' }
{ name: 'The Brokeoffs', joinPhrase: '' }
]) ])
t.deepEqual(recording.artistCredits, recording.artistCredit) t.deepEqual(recording.artistCredits, recording.artistCredit)
@ -946,9 +934,7 @@ test(
(t, data) => { (t, data) => {
const works = data.browse.works.edges.map(edge => edge.node) const works = data.browse.works.edges.map(edge => edge.node)
t.is(data.browse.works.totalCount, 1) t.is(data.browse.works.totalCount, 1)
t.deepEqual(works, [ t.deepEqual(works, [{ title: 'The Partisan', iswcs: ['T-900.755.682-3'] }])
{ title: 'Song of the French Partisan', iswcs: ['T-900.755.682-3'] }
])
} }
) )
@ -1307,7 +1293,8 @@ test(
} }
) )
test( // FIXME: API seems to have changed, potentially a bug in MusicBrainz.
test.skip(
'disc queries can be deeply nested', 'disc queries can be deeply nested',
testData, testData,
` `

View file

@ -10,7 +10,7 @@ const context = extension.extendContext(baseContext)
function testData(t, query, handler) { function testData(t, query, handler) {
return graphql(schema, query, null, context).then(result => { return graphql(schema, query, null, context).then(result => {
if (result.errors !== undefined) { if (result.errors !== undefined) {
console.log(result.errors) result.errors.forEach(error => t.log(error))
} }
t.is(result.errors, undefined) t.is(result.errors, undefined)
return handler(t, result.data) return handler(t, result.data)
@ -170,11 +170,9 @@ test(
`, `,
(t, data) => { (t, data) => {
const { coverArtArchive } = data.lookup.releaseGroup const { coverArtArchive } = data.lookup.releaseGroup
const { front } = coverArtArchive
t.true(coverArtArchive.artwork) t.true(coverArtArchive.artwork)
t.is( t.snapshot({ front })
coverArtArchive.front,
'http://coverartarchive.org/release/25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27/1675312275.jpg'
)
t.is(coverArtArchive.release.mbid, '25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27') t.is(coverArtArchive.release.mbid, '25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27')
t.is(coverArtArchive.release.title, 'The Dark Side of the Moon') t.is(coverArtArchive.release.title, 'The Dark Side of the Moon')
t.is(coverArtArchive.images.length, 1) t.is(coverArtArchive.images.length, 1)
@ -199,14 +197,8 @@ test(
`, `,
(t, data) => { (t, data) => {
const { coverArtArchive } = data.lookup.releaseGroup const { coverArtArchive } = data.lookup.releaseGroup
t.is( const { small, large } = coverArtArchive
coverArtArchive.small, t.snapshot({ small, large })
'http://coverartarchive.org/release/25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27/1675312275-250.jpg'
)
t.is(
coverArtArchive.large,
'http://coverartarchive.org/release/25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27/1675312275-500.jpg'
)
} }
) )

View file

@ -0,0 +1,22 @@
# Snapshot report for `test/extensions/cover-art-archive/schema.js`
The actual snapshot is saved in `schema.js.snap`.
Generated by [AVA](https://ava.li).
## release groups have a front cover art image
> Snapshot 1
{
front: 'http://coverartarchive.org/release/25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27/18974521469.jpg',
}
## release groups have different cover art sizes available
> Snapshot 1
{
large: 'http://coverartarchive.org/release/25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27/18974521469-500.jpg',
small: 'http://coverartarchive.org/release/25fbfbb4-b1ee-4448-aadf-ae3bc2e2dd27/18974521469-250.jpg',
}

View file

@ -10,7 +10,7 @@ const context = extension.extendContext(baseContext)
function testData(t, query, handler) { function testData(t, query, handler) {
return graphql(schema, query, null, context).then(result => { return graphql(schema, query, null, context).then(result => {
if (result.errors !== undefined) { if (result.errors !== undefined) {
console.log(result.errors) result.errors.forEach(error => t.log(error))
} }
t.is(result.errors, undefined) t.is(result.errors, undefined)
return handler(t, result.data) return handler(t, result.data)

View file

@ -13,78 +13,78 @@ Generated by [AVA](https://ava.li).
artist: { artist: {
fanArt: { fanArt: {
backgrounds: [ backgrounds: [
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-52c91734c39dd.jpg',
imageID: '108996',
likeCount: 7,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-52c91734c39dd.jpg',
},
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-4ddaf131354a8.jpg', fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-4ddaf131354a8.jpg',
imageID: '2539', imageID: '2539',
likeCount: 7, likeCount: 9,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-4ddaf131354a8.jpg', url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-4ddaf131354a8.jpg',
}, },
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-524daf0607406.jpg', fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-524daf0607406.jpg',
imageID: '99990', imageID: '99990',
likeCount: 6, likeCount: 8,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-524daf0607406.jpg', url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-524daf0607406.jpg',
}, },
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-4de90b913b2a1.jpg', fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-52c91734c39dd.jpg',
imageID: '4153', imageID: '108996',
likeCount: 3, likeCount: 8,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-4de90b913b2a1.jpg', url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-52c91734c39dd.jpg',
},
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-54dc843050470.jpg',
imageID: '151698',
likeCount: 3,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-54dc843050470.jpg',
},
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-52c917ac71459.jpg',
imageID: '108997',
likeCount: 3,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-52c917ac71459.jpg',
},
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-55baa96c8c47f.jpg',
imageID: '172578',
likeCount: 2,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-55baa96c8c47f.jpg',
}, },
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-500187e32be79.jpg', fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-500187e32be79.jpg',
imageID: '42530', imageID: '42530',
likeCount: 2, likeCount: 4,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-500187e32be79.jpg', url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-500187e32be79.jpg',
}, },
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-4de90b913b2a1.jpg',
imageID: '4153',
likeCount: 4,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-4de90b913b2a1.jpg',
},
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-56d0287053099.jpg', fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-56d0287053099.jpg',
imageID: '190330', imageID: '190330',
likeCount: 2, likeCount: 4,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-56d0287053099.jpg', url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-56d0287053099.jpg',
}, },
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-56d02870536ef.jpg', fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-56d02870536ef.jpg',
imageID: '190331', imageID: '190331',
likeCount: 2, likeCount: 4,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-56d02870536ef.jpg', url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-56d02870536ef.jpg',
}, },
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-54dc845f81d1b.jpg', fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-54dc843050470.jpg',
imageID: '151699', imageID: '151698',
likeCount: 2, likeCount: 4,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-54dc845f81d1b.jpg', url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-54dc843050470.jpg',
}, },
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-524daf0607e44.jpg', fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-524daf0607e44.jpg',
imageID: '99991', imageID: '99991',
likeCount: 2, likeCount: 4,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-524daf0607e44.jpg', url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-524daf0607e44.jpg',
}, },
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-52c917ac71459.jpg',
imageID: '108997',
likeCount: 4,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-52c917ac71459.jpg',
},
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-55baa96c8c47f.jpg',
imageID: '172578',
likeCount: 3,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-55baa96c8c47f.jpg',
},
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-54dc845f81d1b.jpg',
imageID: '151699',
likeCount: 3,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-54dc845f81d1b.jpg',
},
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-54ac79e578054.jpg', fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistbackground/nirvana-54ac79e578054.jpg',
imageID: '146472', imageID: '146472',
@ -93,24 +93,24 @@ Generated by [AVA](https://ava.li).
}, },
], ],
banners: [ banners: [
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/musicbanner/nirvana-515f7e1a6f50b.jpg',
imageID: '78008',
likeCount: 2,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/musicbanner/nirvana-515f7e1a6f50b.jpg',
},
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/musicbanner/nirvana-591789a12da78.jpg', fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/musicbanner/nirvana-591789a12da78.jpg',
imageID: '218845', imageID: '218845',
likeCount: 2, likeCount: 4,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/musicbanner/nirvana-591789a12da78.jpg', url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/musicbanner/nirvana-591789a12da78.jpg',
}, },
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/musicbanner/nirvana-515f7e1a6f50b.jpg',
imageID: '78008',
likeCount: 3,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/musicbanner/nirvana-515f7e1a6f50b.jpg',
},
], ],
logos: [ logos: [
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/musiclogo/nirvana-4e4b9bc06dcc4.png', fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/musiclogo/nirvana-4e4b9bc06dcc4.png',
imageID: '8957', imageID: '8957',
likeCount: 4, likeCount: 5,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/musiclogo/nirvana-4e4b9bc06dcc4.png', url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/musiclogo/nirvana-4e4b9bc06dcc4.png',
}, },
], ],
@ -124,71 +124,71 @@ Generated by [AVA](https://ava.li).
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-518a696cda12f.png', fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-518a696cda12f.png',
imageID: '81480', imageID: '81480',
likeCount: 4, likeCount: 5,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-518a696cda12f.png', url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-518a696cda12f.png',
}, },
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-518ada7d98805.png', fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-518ada7d98805.png',
imageID: '81521', imageID: '81521',
likeCount: 3, likeCount: 5,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-518ada7d98805.png', url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-518ada7d98805.png',
}, },
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-518a696c1ab0b.png', fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-518a696c1ab0b.png',
imageID: '81479', imageID: '81479',
likeCount: 2, likeCount: 3,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-518a696c1ab0b.png', url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-518a696c1ab0b.png',
}, },
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-561900ee87f11.png', fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-561900ee87f11.png',
imageID: '181150', imageID: '181150',
likeCount: 2, likeCount: 3,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-561900ee87f11.png', url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-561900ee87f11.png',
}, },
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-561900db6b999.png',
imageID: '181149',
likeCount: 2,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-561900db6b999.png',
},
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-5619010106ffb.png',
imageID: '181151',
likeCount: 2,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-5619010106ffb.png',
},
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-59039625adb45.png', fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-59039625adb45.png',
imageID: '217621', imageID: '217621',
likeCount: 1, likeCount: 1,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-59039625adb45.png', url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-59039625adb45.png',
}, },
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-561900db6b999.png',
imageID: '181149',
likeCount: 1,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-561900db6b999.png',
},
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-5619010106ffb.png',
imageID: '181151',
likeCount: 1,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/hdmusiclogo/nirvana-5619010106ffb.png',
},
], ],
thumbnails: [ thumbnails: [
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistthumb/nirvana-4fb61ff40a15a.jpg', fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistthumb/nirvana-4fb61ff40a15a.jpg',
imageID: '31455', imageID: '31455',
likeCount: 4, likeCount: 5,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistthumb/nirvana-4fb61ff40a15a.jpg', url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistthumb/nirvana-4fb61ff40a15a.jpg',
}, },
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistthumb/nirvana-4fb6205204d6e.jpg',
imageID: '31456',
likeCount: 4,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistthumb/nirvana-4fb6205204d6e.jpg',
},
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistthumb/nirvana-515ddb61b444b.jpg',
imageID: '77828',
likeCount: 3,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistthumb/nirvana-515ddb61b444b.jpg',
},
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistthumb/nirvana-4fb61fd2f3204.jpg', fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistthumb/nirvana-4fb61fd2f3204.jpg',
imageID: '31454', imageID: '31454',
likeCount: 3, likeCount: 3,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistthumb/nirvana-4fb61fd2f3204.jpg', url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistthumb/nirvana-4fb61fd2f3204.jpg',
}, },
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistthumb/nirvana-4fb6205204d6e.jpg',
imageID: '31456',
likeCount: 3,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistthumb/nirvana-4fb6205204d6e.jpg',
},
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistthumb/nirvana-515ddb61b444b.jpg',
imageID: '77828',
likeCount: 2,
url: 'https://assets.fanart.tv/preview/music/5b11f4ce-a62d-471e-81fc-a69a8278c7da/artistthumb/nirvana-515ddb61b444b.jpg',
},
], ],
}, },
}, },
@ -221,7 +221,7 @@ Generated by [AVA](https://ava.li).
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/83d91898-7763-47d7-b03b-b92132375c47/albumcover/the-dark-side-of-the-moon-4decb408b6604.jpg', fullSizeURL: 'https://assets.fanart.tv/fanart/music/83d91898-7763-47d7-b03b-b92132375c47/albumcover/the-dark-side-of-the-moon-4decb408b6604.jpg',
imageID: '4417', imageID: '4417',
likeCount: 11, likeCount: 12,
url: 'https://assets.fanart.tv/preview/music/83d91898-7763-47d7-b03b-b92132375c47/albumcover/the-dark-side-of-the-moon-4decb408b6604.jpg', url: 'https://assets.fanart.tv/preview/music/83d91898-7763-47d7-b03b-b92132375c47/albumcover/the-dark-side-of-the-moon-4decb408b6604.jpg',
}, },
{ {
@ -254,6 +254,18 @@ Generated by [AVA](https://ava.li).
likeCount: 2, likeCount: 2,
url: 'https://assets.fanart.tv/preview/music/83d91898-7763-47d7-b03b-b92132375c47/albumcover/the-dark-side-of-the-moon-53cf470795637.jpg', url: 'https://assets.fanart.tv/preview/music/83d91898-7763-47d7-b03b-b92132375c47/albumcover/the-dark-side-of-the-moon-53cf470795637.jpg',
}, },
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/83d91898-7763-47d7-b03b-b92132375c47/albumcover/the-dark-side-of-the-moon-59a82b1a7c6cd.jpg',
imageID: '225420',
likeCount: 1,
url: 'https://assets.fanart.tv/preview/music/83d91898-7763-47d7-b03b-b92132375c47/albumcover/the-dark-side-of-the-moon-59a82b1a7c6cd.jpg',
},
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/83d91898-7763-47d7-b03b-b92132375c47/albumcover/the-dark-side-of-the-moon-59a82d31adb2f.jpg',
imageID: '225421',
likeCount: 1,
url: 'https://assets.fanart.tv/preview/music/83d91898-7763-47d7-b03b-b92132375c47/albumcover/the-dark-side-of-the-moon-59a82d31adb2f.jpg',
},
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/83d91898-7763-47d7-b03b-b92132375c47/albumcover/the-dark-side-of-the-moon-55c4af535f7e9.jpg', fullSizeURL: 'https://assets.fanart.tv/fanart/music/83d91898-7763-47d7-b03b-b92132375c47/albumcover/the-dark-side-of-the-moon-55c4af535f7e9.jpg',
imageID: '173720', imageID: '173720',
@ -266,18 +278,6 @@ Generated by [AVA](https://ava.li).
likeCount: 1, likeCount: 1,
url: 'https://assets.fanart.tv/preview/music/83d91898-7763-47d7-b03b-b92132375c47/albumcover/the-dark-side-of-the-moon-55cbdf80ef05c.jpg', url: 'https://assets.fanart.tv/preview/music/83d91898-7763-47d7-b03b-b92132375c47/albumcover/the-dark-side-of-the-moon-55cbdf80ef05c.jpg',
}, },
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/83d91898-7763-47d7-b03b-b92132375c47/albumcover/the-dark-side-of-the-moon-59a82b1a7c6cd.jpg',
imageID: '225420',
likeCount: 0,
url: 'https://assets.fanart.tv/preview/music/83d91898-7763-47d7-b03b-b92132375c47/albumcover/the-dark-side-of-the-moon-59a82b1a7c6cd.jpg',
},
{
fullSizeURL: 'https://assets.fanart.tv/fanart/music/83d91898-7763-47d7-b03b-b92132375c47/albumcover/the-dark-side-of-the-moon-59a82d31adb2f.jpg',
imageID: '225421',
likeCount: 0,
url: 'https://assets.fanart.tv/preview/music/83d91898-7763-47d7-b03b-b92132375c47/albumcover/the-dark-side-of-the-moon-59a82d31adb2f.jpg',
},
{ {
fullSizeURL: 'https://assets.fanart.tv/fanart/music/83d91898-7763-47d7-b03b-b92132375c47/albumcover/the-dark-side-of-the-moon-59a31c7ad5931.jpg', fullSizeURL: 'https://assets.fanart.tv/fanart/music/83d91898-7763-47d7-b03b-b92132375c47/albumcover/the-dark-side-of-the-moon-59a31c7ad5931.jpg',
imageID: '225172', imageID: '225172',

View file

@ -10,7 +10,7 @@ const context = extension.extendContext(baseContext)
function testData(t, query, handler) { function testData(t, query, handler) {
return graphql(schema, query, null, context).then(result => { return graphql(schema, query, null, context).then(result => {
if (result.errors !== undefined) { if (result.errors !== undefined) {
console.log(result.errors) result.errors.forEach(error => t.log(error))
} }
t.is(result.errors, undefined) t.is(result.errors, undefined)
return handler(t, result.data) return handler(t, result.data)

View file

@ -13,10 +13,11 @@ Generated by [AVA](https://ava.li).
artist: { artist: {
mediaWikiImages: [ mediaWikiImages: [
{ {
artistHTML: '<a rel="nofollow" class="external text" href="http://www.flickr.com/people/77758445@N00">P.B. Rage</a> from USA', artistHTML: '<a rel="nofollow" class="external text" href="https://www.flickr.com/people/77758445@N00">P.B. Rage</a> from USA',
canonicalTitle: 'File:Nirvana around 1992.jpg', canonicalTitle: 'File:Nirvana around 1992.jpg',
categories: [ categories: [
'1992 in California', '1992 events in California',
'1992 in Los Angeles',
'1992 in television', '1992 in television',
'Fashion in 1992', 'Fashion in 1992',
'Flickr images reviewed by trusted users', 'Flickr images reviewed by trusted users',
@ -26,9 +27,10 @@ Generated by [AVA](https://ava.li).
'Music events in 1992', 'Music events in 1992',
'Nirvana (band)', 'Nirvana (band)',
'Pauley Pavilion', 'Pauley Pavilion',
'Photographs taken on 1992-09-09',
'September 1992 in the United States', 'September 1992 in the United States',
], ],
creditHTML: '<a rel="nofollow" class="external text" href="http://www.flickr.com/photos/77758445@N00/11295743/">More Kurt -- too rad</a>', creditHTML: '<a rel="nofollow" class="external text" href="https://www.flickr.com/photos/77758445@N00/11295743/">More Kurt -- too rad</a>',
descriptionHTML: 'Kurt Cobain (front) and Krist Novoselic (left) live at the 1992 <a href="//commons.wikimedia.org/wiki/MTV_Video_Music_Awards" class="mw-redirect" title="MTV Video Music Awards">MTV Video Music Awards</a>.', descriptionHTML: 'Kurt Cobain (front) and Krist Novoselic (left) live at the 1992 <a href="//commons.wikimedia.org/wiki/MTV_Video_Music_Awards" class="mw-redirect" title="MTV Video Music Awards">MTV Video Music Awards</a>.',
descriptionURL: 'https://commons.wikimedia.org/wiki/File:Nirvana_around_1992.jpg', descriptionURL: 'https://commons.wikimedia.org/wiki/File:Nirvana_around_1992.jpg',
height: 346, height: 346,
@ -53,7 +55,7 @@ Generated by [AVA](https://ava.li).
{ {
name: 'Categories', name: 'Categories',
source: 'commons-categories', source: 'commons-categories',
value: '1992 in California|1992 in television|Fashion in 1992|Flickr images reviewed by trusted users|Krist Novoselic|Kurt Cobain|MTV Video Music Awards|Music events in 1992|Nirvana (band)|Pauley Pavilion|September 1992 in the United States', value: '1992 events in California|1992 in Los Angeles|1992 in television|Fashion in 1992|Flickr images reviewed by trusted users|Krist Novoselic|Kurt Cobain|MTV Video Music Awards|Music events in 1992|Nirvana (band)|Pauley Pavilion|Photographs taken on 1992-09-09|September 1992 in the United States',
}, },
{ {
name: 'Assessments', name: 'Assessments',
@ -73,12 +75,12 @@ Generated by [AVA](https://ava.li).
{ {
name: 'Credit', name: 'Credit',
source: 'commons-desc-page', source: 'commons-desc-page',
value: '<a rel="nofollow" class="external text" href="http://www.flickr.com/photos/77758445@N00/11295743/">More Kurt -- too rad</a>', value: '<a rel="nofollow" class="external text" href="https://www.flickr.com/photos/77758445@N00/11295743/">More Kurt -- too rad</a>',
}, },
{ {
name: 'Artist', name: 'Artist',
source: 'commons-desc-page', source: 'commons-desc-page',
value: '<a rel="nofollow" class="external text" href="http://www.flickr.com/people/77758445@N00">P.B. Rage</a> from USA', value: '<a rel="nofollow" class="external text" href="https://www.flickr.com/people/77758445@N00">P.B. Rage</a> from USA',
}, },
{ {
name: 'LicenseShortName', name: 'LicenseShortName',
@ -136,57 +138,6 @@ Generated by [AVA](https://ava.li).
search: { search: {
instruments: { instruments: {
nodes: [ nodes: [
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{ {
mediaWikiImages: [], mediaWikiImages: [],
}, },
@ -296,6 +247,289 @@ Generated by [AVA](https://ava.li).
}, },
], ],
}, },
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [
{
artistHTML: `<ul>
<li>
<a href="//commons.wikimedia.org/wiki/File:M2676_-_gitarr_-_Matteo_Seelos_-_f%C3%B6re_1653_-_foto_Olav_Nyhus.jpg" title="File:M2676 - gitarr - Matteo Seelos - före 1653 - foto Olav Nyhus.jpg">M2676_-_gitarr_-_Matteo_Seelos_-_före_1653_-_foto_Olav_Nyhus.jpg</a>: <a href="//commons.wikimedia.org/w/index.php?title=User:MTM_Malin&amp;action=edit&amp;redlink=1" class="new" title="User:MTM Malin (page does not exist)">Musik- och teatermuseet</a>
</li>
<li>derivative work: <a href="//commons.wikimedia.org/wiki/User:Clusternote" title="User:Clusternote">Clusternote</a>
</li>
</ul>`,
canonicalTitle: 'File:M2676 - gitarr - Matteo Seelos - före 1653 - foto Olav Nyhus (clip).jpg',
categories: [
'1653 instrument productions',
'5 double courses guitars',
'Baroque guitars',
'Files uploaded by User:Clusternote',
'Matteo Seelos (luthier)',
'Multi-tier rosettes (string instrument)',
'Retouched pictures',
'Self-published work',
'Swedish Performing Arts Agency',
'Uploaded with derivativeFX',
],
creditHTML: 'This file was derived from: <a href="//commons.wikimedia.org/wiki/File:M2676_-_gitarr_-_Matteo_Seelos_-_f%C3%B6re_1653_-_foto_Olav_Nyhus.jpg" title="File:M2676 - gitarr - Matteo Seelos - före 1653 - foto Olav Nyhus.jpg">M2676 - gitarr - Matteo Seelos - före 1653 - foto Olav Nyhus.jpg</a>: <a href="//commons.wikimedia.org/wiki/File:M2676_-_gitarr_-_Matteo_Seelos_-_f%C3%B6re_1653_-_foto_Olav_Nyhus.jpg" class="image"><img alt="M2676 - gitarr - Matteo Seelos - före 1653 - foto Olav Nyhus.jpg" src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/b6/M2676_-_gitarr_-_Matteo_Seelos_-_f%C3%B6re_1653_-_foto_Olav_Nyhus.jpg/50px-M2676_-_gitarr_-_Matteo_Seelos_-_f%C3%B6re_1653_-_foto_Olav_Nyhus.jpg" width="50" height="38" srcset="https://upload.wikimedia.org/wikipedia/commons/thumb/b/b6/M2676_-_gitarr_-_Matteo_Seelos_-_f%C3%B6re_1653_-_foto_Olav_Nyhus.jpg/75px-M2676_-_gitarr_-_Matteo_Seelos_-_f%C3%B6re_1653_-_foto_Olav_Nyhus.jpg 1.5x, https://upload.wikimedia.org/wikipedia/commons/thumb/b/b6/M2676_-_gitarr_-_Matteo_Seelos_-_f%C3%B6re_1653_-_foto_Olav_Nyhus.jpg/100px-M2676_-_gitarr_-_Matteo_Seelos_-_f%C3%B6re_1653_-_foto_Olav_Nyhus.jpg 2x" data-file-width="3008" data-file-height="2256"></a><br>',
descriptionHTML: 'Gitarr, tillverkare Matteo Seelos, före 1653. Foto Olav Nyhus. Ingår i <a href="https://sv.wikipedia.org/wiki/Musik-_och_teatermuseet" class="extiw" title="sv:Musik- och teatermuseet">Musik- och teatermuseets</a> instrumentsamling.',
descriptionURL: 'https://commons.wikimedia.org/wiki/File:M2676_-_gitarr_-_Matteo_Seelos_-_f%C3%B6re_1653_-_foto_Olav_Nyhus_(clip).jpg',
height: 1236,
licenseShortName: 'CC BY-SA 3.0',
licenseURL: 'https://creativecommons.org/licenses/by-sa/3.0',
metadata: [
{
name: 'DateTime',
source: 'mediawiki-metadata',
value: '2013-11-28 09:55:59',
},
{
name: 'ObjectName',
source: 'mediawiki-metadata',
value: 'M2676 - gitarr - Matteo Seelos - före 1653 - foto Olav Nyhus (clip)',
},
{
name: 'CommonsMetadataExtension',
source: 'extension',
value: '1.2',
},
{
name: 'Categories',
source: 'commons-categories',
value: '1653 instrument productions|5 double courses guitars|Baroque guitars|Files uploaded by User:Clusternote|Matteo Seelos (luthier)|Multi-tier rosettes (string instrument)|Retouched pictures|Self-published work|Swedish Performing Arts Agency|Uploaded with derivativeFX',
},
{
name: 'Assessments',
source: 'commons-categories',
value: '',
},
{
name: 'ImageDescription',
source: 'commons-desc-page',
value: 'Gitarr, tillverkare Matteo Seelos, före 1653. Foto Olav Nyhus. Ingår i <a href="https://sv.wikipedia.org/wiki/Musik-_och_teatermuseet" class="extiw" title="sv:Musik- och teatermuseet">Musik- och teatermuseets</a> instrumentsamling.',
},
{
name: 'DateTimeOriginal',
source: 'commons-desc-page',
value: '2013-11-28 09:53',
},
{
name: 'Credit',
source: 'commons-desc-page',
value: 'This file was derived from: <a href="//commons.wikimedia.org/wiki/File:M2676_-_gitarr_-_Matteo_Seelos_-_f%C3%B6re_1653_-_foto_Olav_Nyhus.jpg" title="File:M2676 - gitarr - Matteo Seelos - före 1653 - foto Olav Nyhus.jpg">M2676 - gitarr - Matteo Seelos - före 1653 - foto Olav Nyhus.jpg</a>: <a href="//commons.wikimedia.org/wiki/File:M2676_-_gitarr_-_Matteo_Seelos_-_f%C3%B6re_1653_-_foto_Olav_Nyhus.jpg" class="image"><img alt="M2676 - gitarr - Matteo Seelos - före 1653 - foto Olav Nyhus.jpg" src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/b6/M2676_-_gitarr_-_Matteo_Seelos_-_f%C3%B6re_1653_-_foto_Olav_Nyhus.jpg/50px-M2676_-_gitarr_-_Matteo_Seelos_-_f%C3%B6re_1653_-_foto_Olav_Nyhus.jpg" width="50" height="38" srcset="https://upload.wikimedia.org/wikipedia/commons/thumb/b/b6/M2676_-_gitarr_-_Matteo_Seelos_-_f%C3%B6re_1653_-_foto_Olav_Nyhus.jpg/75px-M2676_-_gitarr_-_Matteo_Seelos_-_f%C3%B6re_1653_-_foto_Olav_Nyhus.jpg 1.5x, https://upload.wikimedia.org/wikipedia/commons/thumb/b/b6/M2676_-_gitarr_-_Matteo_Seelos_-_f%C3%B6re_1653_-_foto_Olav_Nyhus.jpg/100px-M2676_-_gitarr_-_Matteo_Seelos_-_f%C3%B6re_1653_-_foto_Olav_Nyhus.jpg 2x" data-file-width="3008" data-file-height="2256"></a><br>',
},
{
name: 'Artist',
source: 'commons-desc-page',
value: `<ul>
<li>
<a href="//commons.wikimedia.org/wiki/File:M2676_-_gitarr_-_Matteo_Seelos_-_f%C3%B6re_1653_-_foto_Olav_Nyhus.jpg" title="File:M2676 - gitarr - Matteo Seelos - före 1653 - foto Olav Nyhus.jpg">M2676_-_gitarr_-_Matteo_Seelos_-_före_1653_-_foto_Olav_Nyhus.jpg</a>: <a href="//commons.wikimedia.org/w/index.php?title=User:MTM_Malin&amp;action=edit&amp;redlink=1" class="new" title="User:MTM Malin (page does not exist)">Musik- och teatermuseet</a>
</li>
<li>derivative work: <a href="//commons.wikimedia.org/wiki/User:Clusternote" title="User:Clusternote">Clusternote</a>
</li>
</ul>`,
},
{
name: 'LicenseShortName',
source: 'commons-desc-page',
value: 'CC BY-SA 3.0',
},
{
name: 'UsageTerms',
source: 'commons-desc-page',
value: 'Creative Commons Attribution-Share Alike 3.0',
},
{
name: 'AttributionRequired',
source: 'commons-desc-page',
value: 'true',
},
{
name: 'LicenseUrl',
source: 'commons-desc-page',
value: 'https://creativecommons.org/licenses/by-sa/3.0',
},
{
name: 'Copyrighted',
source: 'commons-desc-page',
value: 'True',
},
{
name: 'Restrictions',
source: 'commons-desc-page',
value: '',
},
{
name: 'License',
source: 'commons-templates',
value: 'cc-by-sa-3.0',
},
],
objectName: 'M2676 - gitarr - Matteo Seelos - före 1653 - foto Olav Nyhus (clip)',
originalDateTimeHTML: '2013-11-28 09:53',
size: 1547933,
url: 'https://upload.wikimedia.org/wikipedia/commons/1/1a/M2676_-_gitarr_-_Matteo_Seelos_-_f%C3%B6re_1653_-_foto_Olav_Nyhus_%28clip%29.jpg',
user: 'Clusternote',
width: 2613,
},
],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [
{
artistHTML: '<a href="//commons.wikimedia.org/w/index.php?title=User:Patlaff&amp;action=edit&amp;redlink=1" class="new" title="User:Patlaff (page does not exist)">Patlaff</a>',
canonicalTitle: 'File:Steel guitar.jpg',
categories: [
'Dobro-guitars',
'Frankilin Pedal Steel Guitar Co.',
'Lap steel guitars',
'Pedal steel guitars',
'Resonator guitars',
'Self-published work',
'Steel guitars',
'Unidentified guitar brands',
],
creditHTML: '<span class="int-own-work" lang="en">Own work</span>',
descriptionHTML: 'steel guitar',
descriptionURL: 'https://commons.wikimedia.org/wiki/File:Steel_guitar.jpg',
height: 4752,
licenseShortName: 'CC BY-SA 3.0',
licenseURL: 'https://creativecommons.org/licenses/by-sa/3.0',
metadata: [
{
name: 'DateTime',
source: 'mediawiki-metadata',
value: '2012-11-18 20:09:45',
},
{
name: 'ObjectName',
source: 'mediawiki-metadata',
value: 'Steel guitar',
},
{
name: 'CommonsMetadataExtension',
source: 'extension',
value: '1.2',
},
{
name: 'Categories',
source: 'commons-categories',
value: 'Dobro-guitars|Frankilin Pedal Steel Guitar Co.|Lap steel guitars|Pedal steel guitars|Resonator guitars|Self-published work|Steel guitars|Unidentified guitar brands',
},
{
name: 'Assessments',
source: 'commons-categories',
value: '',
},
{
name: 'ImageDescription',
source: 'commons-desc-page',
value: 'steel guitar',
},
{
name: 'DateTimeOriginal',
source: 'commons-desc-page',
value: '2012-01-21 12:18:59',
},
{
name: 'Credit',
source: 'commons-desc-page',
value: '<span class="int-own-work" lang="en">Own work</span>',
},
{
name: 'Artist',
source: 'commons-desc-page',
value: '<a href="//commons.wikimedia.org/w/index.php?title=User:Patlaff&amp;action=edit&amp;redlink=1" class="new" title="User:Patlaff (page does not exist)">Patlaff</a>',
},
{
name: 'LicenseShortName',
source: 'commons-desc-page',
value: 'CC BY-SA 3.0',
},
{
name: 'UsageTerms',
source: 'commons-desc-page',
value: 'Creative Commons Attribution-Share Alike 3.0',
},
{
name: 'AttributionRequired',
source: 'commons-desc-page',
value: 'true',
},
{
name: 'LicenseUrl',
source: 'commons-desc-page',
value: 'https://creativecommons.org/licenses/by-sa/3.0',
},
{
name: 'Copyrighted',
source: 'commons-desc-page',
value: 'True',
},
{
name: 'Restrictions',
source: 'commons-desc-page',
value: '',
},
{
name: 'License',
source: 'commons-templates',
value: 'cc-by-sa-3.0',
},
],
objectName: 'Steel guitar',
originalDateTimeHTML: '2012-01-21 12:18:59',
size: 1405577,
url: 'https://upload.wikimedia.org/wikipedia/commons/3/37/Steel_guitar.jpg',
user: 'Patlaff',
width: 3168,
},
],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
{
mediaWikiImages: [],
},
], ],
}, },
}, },

View file

@ -10,7 +10,7 @@ const context = extension.extendContext(baseContext)
function testData(t, query, handler) { function testData(t, query, handler) {
return graphql(schema, query, null, context).then(result => { return graphql(schema, query, null, context).then(result => {
if (result.errors !== undefined) { if (result.errors !== undefined) {
console.log(result.errors) result.errors.forEach(error => t.log(error))
} }
t.is(result.errors, undefined) t.is(result.errors, undefined)
return handler(t, result.data) return handler(t, result.data)

View file

@ -13,8 +13,8 @@ Generated by [AVA](https://ava.li).
artist: { artist: {
theAudioDB: { theAudioDB: {
artistID: '111319', artistID: '111319',
banner: 'http://www.theaudiodb.com/images/media/artist/banner/wppvrr1365966313.jpg', banner: 'https://www.theaudiodb.com/images/media/artist/banner/wppvrr1365966313.jpg',
bannerPreview: 'http://www.theaudiodb.com/images/media/artist/banner/wppvrr1365966313.jpg/preview', bannerPreview: 'https://www.theaudiodb.com/images/media/artist/banner/wppvrr1365966313.jpg/preview',
biography: `Nirvana was an American rock band that was formed by singer and guitarist Kurt Cobain and bassist Krist Novoselic in Aberdeen, Washington, in 1987. Nirvana went through a succession of drummers, the longest-lasting being Dave Grohl, who joined the band in 1990. Despite releasing only three full-length studio albums in their seven-year career, Nirvana has come to be regarded as one of the most influential and important rock bands of the modern era.␊ biography: `Nirvana was an American rock band that was formed by singer and guitarist Kurt Cobain and bassist Krist Novoselic in Aberdeen, Washington, in 1987. Nirvana went through a succession of drummers, the longest-lasting being Dave Grohl, who joined the band in 1990. Despite releasing only three full-length studio albums in their seven-year career, Nirvana has come to be regarded as one of the most influential and important rock bands of the modern era.␊
In the late 1980s Nirvana established itself as part of the Seattle grunge scene, releasing its first album Bleach for the independent record label Sub Pop in 1989. The band eventually came to develop a sound that relied on dynamic contrasts, often between quiet verses and loud, heavy choruses. After signing to major label DGC Records, Nirvana found unexpected success with "Smells Like Teen Spirit", the first single from the band's second album Nevermind (1991). Nirvana's sudden success widely popularized alternative rock as a whole, and the band's frontman Cobain found himself referred to in the media as the "spokesman of a generation", with Nirvana being considered the "flagship band" of Generation X. In response, Nirvana's third studio album, In Utero (1993), featured an abrasive, less-mainstream sound and challenged the group's audience. The album did not match the sales figures of Nevermind, but was still a commercial success and critically acclaimed.␊ In the late 1980s Nirvana established itself as part of the Seattle grunge scene, releasing its first album Bleach for the independent record label Sub Pop in 1989. The band eventually came to develop a sound that relied on dynamic contrasts, often between quiet verses and loud, heavy choruses. After signing to major label DGC Records, Nirvana found unexpected success with "Smells Like Teen Spirit", the first single from the band's second album Nevermind (1991). Nirvana's sudden success widely popularized alternative rock as a whole, and the band's frontman Cobain found himself referred to in the media as the "spokesman of a generation", with Nirvana being considered the "flagship band" of Generation X. In response, Nirvana's third studio album, In Utero (1993), featured an abrasive, less-mainstream sound and challenged the group's audience. The album did not match the sales figures of Nevermind, but was still a commercial success and critically acclaimed.␊
Nirvana's brief run ended following the death of Kurt Cobain in 1994, but various posthumous releases have been issued since, overseen by Novoselic, Grohl, and Cobain's widow Courtney Love. Since its debut, the band has sold over 25 million records in the United States alone, and over 75 million records worldwide, making them one of the best-selling bands of all time. Nirvana was inducted into the Rock and Roll Hall of Fame in 2014, in its first year of eligibility.`, Nirvana's brief run ended following the death of Kurt Cobain in 1994, but various posthumous releases have been issued since, overseen by Novoselic, Grohl, and Cobain's widow Courtney Love. Since its debut, the band has sold over 25 million records in the United States alone, and over 75 million records worldwide, making them one of the best-selling bands of all time. Nirvana was inducted into the Rock and Roll Hall of Fame in 2014, in its first year of eligibility.`,
@ -23,23 +23,23 @@ Generated by [AVA](https://ava.li).
全世界でのトータルセールスは、約7500万枚[1][2]。␊ 全世界でのトータルセールスは、約7500万枚[1][2]。␊
「ローリング・ストーンの選ぶ歴史上最も偉大な100組のアーティスト」において第30位。`, 「ローリング・ストーンの選ぶ歴史上最も偉大な100組のアーティスト」において第30位。`,
fanArt: [ fanArt: [
'http://media.theaudiodb.com/images/media/artist/fanart/nirvana-4ddaf131354a8.jpg', 'https://www.theaudiodb.com/images/media/artist/fanart/nirvana-4ddaf131354a8.jpg',
'http://media.theaudiodb.com/images/media/artist/fanart/ussvpr1342344599.jpg', 'https://www.theaudiodb.com/images/media/artist/fanart/ussvpr1342344599.jpg',
'http://media.theaudiodb.com/images/media/artist/fanart/uusxqw1342344614.jpg', 'https://www.theaudiodb.com/images/media/artist/fanart/uusxqw1342344614.jpg',
], ],
fanArtPreview: [ fanArtPreview: [
'http://media.theaudiodb.com/images/media/artist/fanart/nirvana-4ddaf131354a8.jpg/preview', 'https://www.theaudiodb.com/images/media/artist/fanart/nirvana-4ddaf131354a8.jpg/preview',
'http://media.theaudiodb.com/images/media/artist/fanart/ussvpr1342344599.jpg/preview', 'https://www.theaudiodb.com/images/media/artist/fanart/ussvpr1342344599.jpg/preview',
'http://media.theaudiodb.com/images/media/artist/fanart/uusxqw1342344614.jpg/preview', 'https://www.theaudiodb.com/images/media/artist/fanart/uusxqw1342344614.jpg/preview',
], ],
genre: 'Rock', genre: 'Rock',
logo: 'http://www.theaudiodb.com/images/media/artist/logo/xyryvu1363124407.png', logo: 'https://www.theaudiodb.com/images/media/artist/logo/swsxst1531993263.png',
logoPreview: 'http://www.theaudiodb.com/images/media/artist/logo/xyryvu1363124407.png/preview', logoPreview: 'https://www.theaudiodb.com/images/media/artist/logo/swsxst1531993263.png/preview',
memberCount: 3, memberCount: 3,
mood: 'Sad', mood: 'Sad',
style: 'Rock/Pop', style: 'Rock/Pop',
thumbnail: 'http://www.theaudiodb.com/images/media/artist/thumb/ryppyp1363124444.jpg', thumbnail: 'https://www.theaudiodb.com/images/media/artist/thumb/ryppyp1363124444.jpg',
thumbnailPreview: 'http://www.theaudiodb.com/images/media/artist/thumb/ryppyp1363124444.jpg/preview', thumbnailPreview: 'https://www.theaudiodb.com/images/media/artist/thumb/ryppyp1363124444.jpg/preview',
}, },
}, },
}, },
@ -62,22 +62,30 @@ Generated by [AVA](https://ava.li).
genre: 'Latin', genre: 'Latin',
mood: 'Sensual', mood: 'Sensual',
musicVideo: { musicVideo: {
commentCount: 1449046, commentCount: 2595618,
companyName: null, companyName: null,
directorName: 'Carlos Pérez', directorName: 'Carlos Pérez',
dislikeCount: 2168098, dislikeCount: 3379320,
likeCount: 21015918, likeCount: 29001634,
screenshots: [], screenshots: [
screenshotsPreview: [], 'https://www.theaudiodb.com/images/media/track/mvidscreen/qpxuvy1529928526.jpg',
'https://www.theaudiodb.com/images/media/track/mvidscreen/tqupsr1529928533.jpg',
'https://www.theaudiodb.com/images/media/track/mvidscreen/qtrtvr1529928541.jpg',
],
screenshotsPreview: [
'https://www.theaudiodb.com/images/media/track/mvidscreen/qpxuvy1529928526.jpg/preview',
'https://www.theaudiodb.com/images/media/track/mvidscreen/tqupsr1529928533.jpg/preview',
'https://www.theaudiodb.com/images/media/track/mvidscreen/qtrtvr1529928541.jpg/preview',
],
url: 'https://www.youtube.com/watch?v=kJQP7kiw5Fk', url: 'https://www.youtube.com/watch?v=kJQP7kiw5Fk',
viewCount: 2147483647, viewCount: 5353939593,
}, },
score: 10, score: 10,
scoreVotes: 1, scoreVotes: 3,
style: 'Latin', style: 'Latin',
theme: 'In Love', theme: 'In Love',
thumbnail: 'http://media.theaudiodb.com/images/media/track/thumb/vqqpry1506425784.jpg', thumbnail: 'https://www.theaudiodb.com/images/media/track/thumb/vqqpry1506425784.jpg',
thumbnailPreview: 'http://media.theaudiodb.com/images/media/track/thumb/vqqpry1506425784.jpg/preview', thumbnailPreview: 'https://www.theaudiodb.com/images/media/track/thumb/vqqpry1506425784.jpg/preview',
trackID: '34838814', trackID: '34838814',
trackNumber: 1, trackNumber: 1,
}, },
@ -104,10 +112,10 @@ Generated by [AVA](https://ava.li).
Random Access Memories hace un tributo a la música estadounidense de la época de los 1970s y la primera parte de los 1980s, particularmente al sonido de Los Ángeles durante esa época. Daft Punk grabó el álbum en gran parte con orquesta en vivo con sesiónes musicales y con un uso limitado de máquinas de percusión, sintetizador modular, y con una vendimia de vocoders. El álbum contiene un gran número de colaboradores, entre ellos se destácan: Panda Bear, Chilly Gonzales, DJ Falcon, Julian Casablancas, Todd Edwards, Paul Williams, Pharrell Williams, Nile Rodgers y Ghallmarck. El álbum fue recibido con críticas positivas.␊ Random Access Memories hace un tributo a la música estadounidense de la época de los 1970s y la primera parte de los 1980s, particularmente al sonido de Los Ángeles durante esa época. Daft Punk grabó el álbum en gran parte con orquesta en vivo con sesiónes musicales y con un uso limitado de máquinas de percusión, sintetizador modular, y con una vendimia de vocoders. El álbum contiene un gran número de colaboradores, entre ellos se destácan: Panda Bear, Chilly Gonzales, DJ Falcon, Julian Casablancas, Todd Edwards, Paul Williams, Pharrell Williams, Nile Rodgers y Ghallmarck. El álbum fue recibido con críticas positivas.␊
Durante la primera mitad de 2013, vendió 614 000 copias en los Estados Unidos, donde se convirtió en el décimo álbum más vendido durante dicho periodo.`, Durante la primera mitad de 2013, vendió 614 000 copias en los Estados Unidos, donde se convirtió en el décimo álbum más vendido durante dicho periodo.`,
discImage: 'http://www.theaudiodb.com/images/media/album/cdart/random-access-memories-5194a5974107d.png', discImage: 'https://www.theaudiodb.com/images/media/album/cdart/random-access-memories-5194a5974107d.png',
discImagePreview: 'http://www.theaudiodb.com/images/media/album/cdart/random-access-memories-5194a5974107d.png/preview', discImagePreview: 'https://www.theaudiodb.com/images/media/album/cdart/random-access-memories-5194a5974107d.png/preview',
frontImage: 'http://www.theaudiodb.com/images/media/album/thumb/random-access-memories-51764651042e5.jpg', frontImage: 'https://www.theaudiodb.com/images/media/album/thumb/random-access-memories-51764651042e5.jpg',
frontImagePreview: 'http://www.theaudiodb.com/images/media/album/thumb/random-access-memories-51764651042e5.jpg/preview', frontImagePreview: 'https://www.theaudiodb.com/images/media/album/thumb/random-access-memories-51764651042e5.jpg/preview',
genre: 'House', genre: 'House',
mood: 'Happy', mood: 'Happy',
review: null, review: null,

View file

@ -1,21 +1,20 @@
{ {
"statusCode": 307, "statusCode": 307,
"headers": { "headers": {
"date": "Tue, 20 Dec 2016 01:37:47 GMT", "date": "Sat, 04 Aug 2018 09:21:11 GMT",
"content-type": "text/plain; charset=utf-8", "content-type": "text/plain; charset=utf-8",
"content-length": "86", "content-length": "86",
"connection": "keep-alive", "connection": "keep-alive",
"keep-alive": "timeout=15", "keep-alive": "timeout=15",
"location": "http://archive.org/download/mbid-76df3287-6cda-33eb-8e9a-044b5e15ffdd/index.json", "location": "http://archive.org/download/mbid-76df3287-6cda-33eb-8e9a-044b5e15ffdd/index.json",
"access-control-allow-origin": "*", "access-control-allow-origin": "*"
"server": "4b4c084fb141"
}, },
"url": "http://coverartarchive.org:80/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd", "url": "http://coverartarchive.org:80/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd",
"time": 372, "time": 353,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "coverartarchive.org", "host": "coverartarchive.org",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json" "accept": "application/json"

Binary file not shown.

View file

@ -1,29 +0,0 @@
{
"statusCode": 200,
"headers": {
"date": "Thu, 15 Dec 2016 00:55:06 GMT",
"content-type": "application/json; charset=utf-8",
"transfer-encoding": "chunked",
"connection": "keep-alive",
"keep-alive": "timeout=15",
"vary": "Accept-Encoding",
"x-ratelimit-limit": "700",
"x-ratelimit-remaining": "187",
"x-ratelimit-reset": "1481763306",
"server": "Plack::Handler::Starlet",
"etag": "W/\"a7a5bbc296fd2d7f239134995661e4c4\"",
"access-control-allow-origin": "*",
"content-encoding": "gzip"
},
"url": "http://musicbrainz.org:80/ws/2/label/420a9402-0a87-4510-81a3-60f513a47466?inc=ratings&fmt=json",
"time": 491,
"request": {
"method": "GET",
"headers": {
"User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org",
"accept-encoding": "gzip, deflate",
"accept": "application/json"
}
}
}

View file

@ -2,22 +2,23 @@
"statusCode": 200, "statusCode": 200,
"headers": { "headers": {
"server": "nginx/1.4.6 (Ubuntu)", "server": "nginx/1.4.6 (Ubuntu)",
"date": "Tue, 20 Dec 2016 01:39:56 GMT", "date": "Sat, 04 Aug 2018 09:13:58 GMT",
"content-type": "application/json", "content-type": "application/json",
"content-length": "4829", "content-length": "4829",
"last-modified": "Fri, 04 Nov 2016 08:01:44 GMT", "last-modified": "Fri, 04 Nov 2016 08:01:44 GMT",
"connection": "keep-alive", "connection": "keep-alive",
"etag": "\"581c4068-12dd\"", "etag": "\"581c4068-12dd\"",
"expires": "Tue, 20 Dec 2016 07:39:56 GMT", "expires": "Sat, 04 Aug 2018 15:13:58 GMT",
"cache-control": "max-age=21600", "cache-control": "max-age=21600",
"access-control-allow-origin": "*",
"accept-ranges": "bytes" "accept-ranges": "bytes"
}, },
"url": "http://ia601203.us.archive.org:80/29/items/mbid-d5cdb7fd-c7e9-460a-9549-8a369655cc52/index.json", "url": "http://ia601203.us.archive.org:80/29/items/mbid-d5cdb7fd-c7e9-460a-9549-8a369655cc52/index.json",
"time": 155, "time": 141,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json", "accept": "application/json",
"referer": "http://archive.org/download/mbid-d5cdb7fd-c7e9-460a-9549-8a369655cc52/index.json", "referer": "http://archive.org/download/mbid-d5cdb7fd-c7e9-460a-9549-8a369655cc52/index.json",

View file

@ -1,21 +1,20 @@
{ {
"statusCode": 307, "statusCode": 307,
"headers": { "headers": {
"date": "Tue, 20 Dec 2016 01:39:55 GMT", "date": "Sat, 04 Aug 2018 09:21:07 GMT",
"content-type": "text/plain; charset=utf-8", "content-type": "text/plain; charset=utf-8",
"content-length": "86", "content-length": "86",
"connection": "keep-alive", "connection": "keep-alive",
"keep-alive": "timeout=15", "keep-alive": "timeout=15",
"location": "http://archive.org/download/mbid-dd15903e-0ee7-45ec-aba1-2fc7b3a44e19/index.json", "location": "http://archive.org/download/mbid-dd15903e-0ee7-45ec-aba1-2fc7b3a44e19/index.json",
"access-control-allow-origin": "*", "access-control-allow-origin": "*"
"server": "d6446ea62189"
}, },
"url": "http://coverartarchive.org:80/release/dd15903e-0ee7-45ec-aba1-2fc7b3a44e19", "url": "http://coverartarchive.org:80/release/dd15903e-0ee7-45ec-aba1-2fc7b3a44e19",
"time": 414, "time": 372,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "coverartarchive.org", "host": "coverartarchive.org",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json" "accept": "application/json"

View file

@ -0,0 +1 @@
{"sort-name":"Sony Music Associated Records","life-span":{"begin":"2001-10-01","ended":false,"end":null},"name":"Sony Music Associated Records","area":{"disambiguation":"","iso-3166-1-codes":["JP"],"id":"2db42837-c832-3c27-b4a3-08198f75693c","name":"Japan","sort-name":"Japan"},"label-code":null,"type":"Imprint","relations":[{"type":"discogs","target-credit":"","direction":"forward","target-type":"url","type-id":"5b987f87-25bc-4a2d-b3f1-3618795b8207","url":{"resource":"https://www.discogs.com/label/150168","id":"76aa9dab-a56f-4593-a020-79ea9fb69b7c"},"attributes":[],"ended":false,"attribute-values":{},"begin":null,"source-credit":"","end":null},{"type":"discogs","target-credit":"","direction":"forward","target-type":"url","type-id":"5b987f87-25bc-4a2d-b3f1-3618795b8207","url":{"resource":"https://www.discogs.com/label/878626","id":"168bc19f-09ba-4ae9-a79c-6d76fa59ced9"},"ended":false,"attributes":[],"attribute-values":{},"begin":null,"source-credit":"","end":null},{"type":"logo","target-credit":"","target-type":"url","direction":"forward","type-id":"b35f7822-bf3c-4148-b306-fb723c63ee8b","url":{"resource":"https://web.archive.org/web/20150416023558/https://pbs.twimg.com/profile_images/555963422437670912/sq8xcmVX.jpeg","id":"ab9cdf18-a863-4ef2-96c8-1bcac3a48867"},"ended":false,"attributes":[],"attribute-values":{},"begin":null,"source-credit":"","end":null},{"type":"vgmdb","type-id":"8a2d3e55-d291-4b99-87a0-c59c6b121762","target-type":"url","direction":"forward","target-credit":"","attributes":[],"url":{"id":"1788933b-dd28-42c6-81c7-bb25c64a3a11","resource":"https://vgmdb.net/org/187"},"ended":false,"attribute-values":{},"source-credit":"","begin":null,"end":null},{"end":null,"begin":null,"source-credit":"","attribute-values":{},"url":{"resource":"https://www.wikidata.org/wiki/Q11315207","id":"3d5cacd7-b84f-41c5-a99b-32855ec61c1f"},"ended":false,"attributes":[],"target-credit":"","direction":"forward","target-type":"url","type-id":"75d87e83-d927-4580-ba63-44dc76256f98","type":"wikidata"}],"type-id":"b6285b2a-3514-3d43-80df-fcf528824ded","country":"JP","id":"d766cf2e-d31e-4fad-9511-b27013594d7e","ipis":[],"isnis":[],"disambiguation":"imprint \"A∫R\""}

View file

@ -1,24 +1,25 @@
{ {
"statusCode": 200, "statusCode": 200,
"headers": { "headers": {
"date": "Sat, 04 Nov 2017 22:18:56 GMT", "date": "Sat, 04 Aug 2018 10:01:01 GMT",
"content-type": "application/json; charset=utf-8", "content-type": "application/json; charset=utf-8",
"content-length": "248", "transfer-encoding": "chunked",
"connection": "keep-alive", "connection": "keep-alive",
"keep-alive": "timeout=15", "keep-alive": "timeout=15",
"vary": "Accept-Encoding",
"x-ratelimit-limit": "1200", "x-ratelimit-limit": "1200",
"x-ratelimit-remaining": "1048", "x-ratelimit-remaining": "1048",
"x-ratelimit-reset": "1509833937", "x-ratelimit-reset": "1533376863",
"server": "Plack::Handler::Starlet", "server": "Plack::Handler::Starlet",
"etag": "\"82c22921587af20efc7bb9480993b28f\"", "etag": "W/\"4939ad82b59a75549e85f671b345aa13\"",
"access-control-allow-origin": "*" "access-control-allow-origin": "*"
}, },
"url": "http://musicbrainz.org:80/ws/2/area/85752fda-13c4-31a3-bee5-0e5cb1f51dad?fmt=json", "url": "http://musicbrainz.org:80/ws/2/label/d766cf2e-d31e-4fad-9511-b27013594d7e?inc=url-rels&fmt=json",
"time": 370, "time": 384,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/7.0.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org", "host": "musicbrainz.org",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json" "accept": "application/json"

Binary file not shown.

View file

@ -1,29 +0,0 @@
{
"statusCode": 200,
"headers": {
"date": "Thu, 15 Dec 2016 00:55:01 GMT",
"content-type": "application/json; charset=utf-8",
"transfer-encoding": "chunked",
"connection": "keep-alive",
"keep-alive": "timeout=15",
"vary": "Accept-Encoding",
"x-ratelimit-limit": "700",
"x-ratelimit-remaining": "555",
"x-ratelimit-reset": "1481763302",
"server": "Plack::Handler::Starlet",
"etag": "W/\"dbabcdc1b16a16f4fd57d66a0ed7c32f\"",
"access-control-allow-origin": "*",
"content-encoding": "gzip"
},
"url": "http://musicbrainz.org:80/ws/2/label/aeff6db2-1fc2-4c46-8218-c4ac52e0066c?inc=ratings&fmt=json",
"time": 493,
"request": {
"method": "GET",
"headers": {
"User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org",
"accept-encoding": "gzip, deflate",
"accept": "application/json"
}
}
}

Binary file not shown.

View file

@ -1,26 +1,25 @@
{ {
"statusCode": 200, "statusCode": 200,
"headers": { "headers": {
"date": "Thu, 15 Dec 2016 00:53:50 GMT", "date": "Sat, 04 Aug 2018 09:23:26 GMT",
"content-type": "application/json; charset=UTF-8", "content-type": "application/json",
"transfer-encoding": "chunked", "transfer-encoding": "chunked",
"connection": "keep-alive", "connection": "keep-alive",
"keep-alive": "timeout=15", "keep-alive": "timeout=15",
"vary": "Accept-Encoding", "vary": "Accept-Encoding",
"x-ratelimit-limit": "700", "x-ratelimit-limit": "1200",
"x-ratelimit-remaining": "590", "x-ratelimit-remaining": "1006",
"x-ratelimit-reset": "1481763232", "x-ratelimit-reset": "1533374604",
"last-modified": "Wed, 09 Nov 2016 23:43:24 GMT", "last-modified": "Sat, 04 Aug 2018 09:21:17 GMT",
"server": "Jetty(9.3.10.v20160621)", "etag": "W/\"NDc5NDYwMDAwMDAwMDAwMFNvbHI=\"",
"access-control-allow-origin": "*", "access-control-allow-origin": "*"
"content-encoding": "gzip"
}, },
"url": "http://musicbrainz.org:80/ws/2/recording?query=Burn%20the%20Witch&fmt=json", "url": "http://musicbrainz.org:80/ws/2/recording?query=Burn%20the%20Witch&fmt=json",
"time": 541, "time": 2720,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org", "host": "musicbrainz.org",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json" "accept": "application/json"

Binary file not shown.

View file

@ -1,26 +1,25 @@
{ {
"statusCode": 200, "statusCode": 200,
"headers": { "headers": {
"date": "Thu, 15 Dec 2016 00:54:19 GMT", "date": "Sat, 04 Aug 2018 09:23:56 GMT",
"content-type": "application/json; charset=utf-8", "content-type": "application/json; charset=utf-8",
"transfer-encoding": "chunked", "transfer-encoding": "chunked",
"connection": "keep-alive", "connection": "keep-alive",
"keep-alive": "timeout=15", "keep-alive": "timeout=15",
"vary": "Accept-Encoding", "vary": "Accept-Encoding",
"x-ratelimit-limit": "700", "x-ratelimit-limit": "1200",
"x-ratelimit-remaining": "444", "x-ratelimit-remaining": "842",
"x-ratelimit-reset": "1481763260", "x-ratelimit-reset": "1533374636",
"server": "Plack::Handler::Starlet", "server": "Plack::Handler::Starlet",
"etag": "W/\"e233950d837ef29d43e3cc145f6d54a8\"", "etag": "W/\"7ae206227f52916215d6997409b6ad76\"",
"access-control-allow-origin": "*", "access-control-allow-origin": "*"
"content-encoding": "gzip"
}, },
"url": "http://musicbrainz.org:80/ws/2/recording/07649758-09c8-4d70-bc6f-5c37ab36334d?inc=artist-credits&fmt=json", "url": "http://musicbrainz.org:80/ws/2/recording/07649758-09c8-4d70-bc6f-5c37ab36334d?inc=artist-credits&fmt=json",
"time": 480, "time": 383,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org", "host": "musicbrainz.org",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json" "accept": "application/json"

View file

@ -2,20 +2,21 @@
"statusCode": 302, "statusCode": 302,
"headers": { "headers": {
"server": "nginx/1.4.6 (Ubuntu)", "server": "nginx/1.4.6 (Ubuntu)",
"date": "Tue, 20 Dec 2016 01:37:47 GMT", "date": "Sat, 04 Aug 2018 09:21:11 GMT",
"content-type": "text/html; charset=UTF-8", "content-type": "text/html; charset=UTF-8",
"transfer-encoding": "chunked", "transfer-encoding": "chunked",
"connection": "keep-alive", "connection": "keep-alive",
"x-powered-by": "PHP/5.5.9-1ubuntu4.20", "access-control-allow-origin": "*",
"accept-ranges": "bytes", "accept-ranges": "bytes",
"location": "http://ia802607.us.archive.org/32/items/mbid-76df3287-6cda-33eb-8e9a-044b5e15ffdd/index.json" "location": "http://ia802607.us.archive.org/32/items/mbid-76df3287-6cda-33eb-8e9a-044b5e15ffdd/index.json",
"strict-transport-security": "max-age=604800"
}, },
"url": "http://archive.org:80/download/mbid-76df3287-6cda-33eb-8e9a-044b5e15ffdd/index.json", "url": "http://archive.org:80/download/mbid-76df3287-6cda-33eb-8e9a-044b5e15ffdd/index.json",
"time": 139, "time": 133,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json", "accept": "application/json",
"referer": "http://coverartarchive.org/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd", "referer": "http://coverartarchive.org/release/76df3287-6cda-33eb-8e9a-044b5e15ffdd",

Binary file not shown.

View file

@ -1,29 +0,0 @@
{
"statusCode": 200,
"headers": {
"date": "Tue, 20 Dec 2016 01:40:11 GMT",
"content-type": "application/json; charset=utf-8",
"transfer-encoding": "chunked",
"connection": "keep-alive",
"keep-alive": "timeout=15",
"vary": "Accept-Encoding",
"x-ratelimit-limit": "700",
"x-ratelimit-remaining": "577",
"x-ratelimit-reset": "1482198012",
"server": "Plack::Handler::Starlet",
"etag": "W/\"0c725784e392aef95ce4df262002a059\"",
"access-control-allow-origin": "*",
"content-encoding": "gzip"
},
"url": "http://musicbrainz.org:80/ws/2/release/3e2c779e-16e8-459e-8791-2da47a92dce6?fmt=json",
"time": 415,
"request": {
"method": "GET",
"headers": {
"User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org",
"accept-encoding": "gzip, deflate",
"accept": "application/json"
}
}
}

View file

@ -2,20 +2,21 @@
"statusCode": 302, "statusCode": 302,
"headers": { "headers": {
"server": "nginx/1.4.6 (Ubuntu)", "server": "nginx/1.4.6 (Ubuntu)",
"date": "Tue, 20 Dec 2016 01:39:57 GMT", "date": "Sat, 04 Aug 2018 09:21:08 GMT",
"content-type": "text/html; charset=UTF-8", "content-type": "text/html; charset=UTF-8",
"transfer-encoding": "chunked", "transfer-encoding": "chunked",
"connection": "keep-alive", "connection": "keep-alive",
"x-powered-by": "PHP/5.5.9-1ubuntu4.20", "access-control-allow-origin": "*",
"accept-ranges": "bytes", "accept-ranges": "bytes",
"location": "http://ia600509.us.archive.org/33/items/mbid-fb98043c-7ac8-4505-ba87-28576836a8d5/index.json" "location": "http://ia800509.us.archive.org/33/items/mbid-fb98043c-7ac8-4505-ba87-28576836a8d5/index.json",
"strict-transport-security": "max-age=604800"
}, },
"url": "http://archive.org:80/download/mbid-fb98043c-7ac8-4505-ba87-28576836a8d5/index.json", "url": "http://archive.org:80/download/mbid-fb98043c-7ac8-4505-ba87-28576836a8d5/index.json",
"time": 178, "time": 109,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json", "accept": "application/json",
"referer": "http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5", "referer": "http://coverartarchive.org/release/fb98043c-7ac8-4505-ba87-28576836a8d5",

Binary file not shown.

View file

@ -1,26 +1,25 @@
{ {
"statusCode": 200, "statusCode": 200,
"headers": { "headers": {
"date": "Thu, 19 Oct 2017 06:23:11 GMT", "date": "Sat, 04 Aug 2018 10:00:06 GMT",
"content-type": "application/json; charset=utf-8", "content-type": "application/json; charset=utf-8",
"transfer-encoding": "chunked", "transfer-encoding": "chunked",
"connection": "keep-alive", "connection": "keep-alive",
"keep-alive": "timeout=15", "keep-alive": "timeout=15",
"vary": "Accept-Encoding", "vary": "Accept-Encoding",
"x-ratelimit-limit": "1200", "x-ratelimit-limit": "1200",
"x-ratelimit-remaining": "843", "x-ratelimit-remaining": "812",
"x-ratelimit-reset": "1508394191", "x-ratelimit-reset": "1533376806",
"server": "Plack::Handler::Starlet", "server": "Plack::Handler::Starlet",
"etag": "W/\"bc0fd422eb415020ac9aba896844f774\"", "etag": "W/\"18f4b4e33f8c6592359deb1bee1ca584\"",
"access-control-allow-origin": "*", "access-control-allow-origin": "*"
"content-encoding": "gzip"
}, },
"url": "http://musicbrainz.org:80/ws/2/instrument/ba4705aa-ff1d-48d5-ae80-7b2046fb451e?inc=url-rels&fmt=json", "url": "http://musicbrainz.org:80/ws/2/instrument/ba4705aa-ff1d-48d5-ae80-7b2046fb451e?inc=url-rels&fmt=json",
"time": 358, "time": 373,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/6.1.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org", "host": "musicbrainz.org",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json" "accept": "application/json"

Binary file not shown.

View file

@ -1,26 +1,25 @@
{ {
"statusCode": 200, "statusCode": 200,
"headers": { "headers": {
"date": "Thu, 15 Dec 2016 00:54:18 GMT", "date": "Sat, 04 Aug 2018 09:23:55 GMT",
"content-type": "application/json; charset=utf-8", "content-type": "application/json; charset=utf-8",
"transfer-encoding": "chunked", "transfer-encoding": "chunked",
"connection": "keep-alive", "connection": "keep-alive",
"keep-alive": "timeout=15", "keep-alive": "timeout=15",
"vary": "Accept-Encoding", "vary": "Accept-Encoding",
"x-ratelimit-limit": "700", "x-ratelimit-limit": "1200",
"x-ratelimit-remaining": "575", "x-ratelimit-remaining": "918",
"x-ratelimit-reset": "1481763260", "x-ratelimit-reset": "1533374636",
"server": "Plack::Handler::Starlet", "server": "Plack::Handler::Starlet",
"etag": "W/\"f86eb48e9c24a7b43f332ef0f56d5c82\"", "etag": "W/\"8db00b0812d52fc6e6470f7a6d624a34\"",
"access-control-allow-origin": "*", "access-control-allow-origin": "*"
"content-encoding": "gzip"
}, },
"url": "http://musicbrainz.org:80/ws/2/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52?fmt=json", "url": "http://musicbrainz.org:80/ws/2/release/d5cdb7fd-c7e9-460a-9549-8a369655cc52?fmt=json",
"time": 492, "time": 362,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org", "host": "musicbrainz.org",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json" "accept": "application/json"

Binary file not shown.

Binary file not shown.

View file

@ -1,26 +1,25 @@
{ {
"statusCode": 200, "statusCode": 200,
"headers": { "headers": {
"date": "Thu, 15 Dec 2016 00:55:45 GMT", "date": "Sat, 04 Aug 2018 09:25:24 GMT",
"content-type": "application/json; charset=utf-8", "content-type": "application/json; charset=utf-8",
"transfer-encoding": "chunked", "transfer-encoding": "chunked",
"connection": "keep-alive", "connection": "keep-alive",
"keep-alive": "timeout=15", "keep-alive": "timeout=15",
"vary": "Accept-Encoding", "vary": "Accept-Encoding",
"x-ratelimit-limit": "700", "x-ratelimit-limit": "1200",
"x-ratelimit-remaining": "614", "x-ratelimit-remaining": "991",
"x-ratelimit-reset": "1481763346", "x-ratelimit-reset": "1533374724",
"server": "Plack::Handler::Starlet", "server": "Plack::Handler::Starlet",
"etag": "W/\"2f7ca8025cffd71a1e72f4d671dad0be\"", "etag": "W/\"ae034eada19ed3fc539b67fceaedae31\"",
"access-control-allow-origin": "*", "access-control-allow-origin": "*"
"content-encoding": "gzip"
}, },
"url": "http://musicbrainz.org:80/ws/2/discid/hcwQmxWsG3GdAQvfBa1SCpp4FuU-?fmt=json", "url": "http://musicbrainz.org:80/ws/2/discid/hcwQmxWsG3GdAQvfBa1SCpp4FuU-?fmt=json",
"time": 1138, "time": 435,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org", "host": "musicbrainz.org",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json" "accept": "application/json"

Binary file not shown.

View file

@ -1,29 +0,0 @@
{
"statusCode": 200,
"headers": {
"date": "Thu, 19 Oct 2017 06:35:18 GMT",
"content-type": "application/json; charset=utf-8",
"transfer-encoding": "chunked",
"connection": "keep-alive",
"keep-alive": "timeout=15",
"vary": "Accept-Encoding",
"x-ratelimit-limit": "1200",
"x-ratelimit-remaining": "1060",
"x-ratelimit-reset": "1508394919",
"server": "Plack::Handler::Starlet",
"etag": "W/\"952c89cf2a01358c9a3c8295a61c2d06\"",
"access-control-allow-origin": "*",
"content-encoding": "gzip"
},
"url": "http://musicbrainz.org:80/ws/2/label/d49fe768-e91c-404f-9542-3008c4ef9b51?inc=url-rels&fmt=json",
"time": 410,
"request": {
"method": "GET",
"headers": {
"User-Agent": "graphbrainz/6.1.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org",
"accept-encoding": "gzip, deflate",
"accept": "application/json"
}
}
}

Binary file not shown.

Binary file not shown.

View file

@ -1,26 +1,25 @@
{ {
"statusCode": 200, "statusCode": 200,
"headers": { "headers": {
"date": "Thu, 19 Oct 2017 06:35:46 GMT", "date": "Sat, 04 Aug 2018 10:00:01 GMT",
"content-type": "application/json; charset=utf-8", "content-type": "application/json; charset=utf-8",
"transfer-encoding": "chunked", "transfer-encoding": "chunked",
"connection": "keep-alive", "connection": "keep-alive",
"keep-alive": "timeout=15", "keep-alive": "timeout=15",
"vary": "Accept-Encoding", "vary": "Accept-Encoding",
"x-ratelimit-limit": "1200", "x-ratelimit-limit": "1200",
"x-ratelimit-remaining": "1059", "x-ratelimit-remaining": "1119",
"x-ratelimit-reset": "1508394947", "x-ratelimit-reset": "1533376802",
"server": "Plack::Handler::Starlet", "server": "Plack::Handler::Starlet",
"etag": "W/\"2bb8aa78cfd610c5e1a7b121b54efa8f\"", "etag": "W/\"e66d0ab77fbfb8bfdfdeac4c284c1944\"",
"access-control-allow-origin": "*", "access-control-allow-origin": "*"
"content-encoding": "gzip"
}, },
"url": "http://musicbrainz.org:80/ws/2/place/b5297256-8482-4cba-968a-25db61563faf?fmt=json", "url": "http://musicbrainz.org:80/ws/2/place/b5297256-8482-4cba-968a-25db61563faf?fmt=json",
"time": 327, "time": 383,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/6.1.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org", "host": "musicbrainz.org",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json" "accept": "application/json"

Binary file not shown.

View file

@ -1,26 +1,25 @@
{ {
"statusCode": 200, "statusCode": 200,
"headers": { "headers": {
"date": "Thu, 19 Oct 2017 06:34:56 GMT", "date": "Sat, 04 Aug 2018 10:00:28 GMT",
"content-type": "application/json; charset=utf-8", "content-type": "application/json; charset=utf-8",
"transfer-encoding": "chunked", "transfer-encoding": "chunked",
"connection": "keep-alive", "connection": "keep-alive",
"keep-alive": "timeout=15", "keep-alive": "timeout=15",
"vary": "Accept-Encoding", "vary": "Accept-Encoding",
"x-ratelimit-limit": "1200", "x-ratelimit-limit": "1200",
"x-ratelimit-remaining": "1040", "x-ratelimit-remaining": "822",
"x-ratelimit-reset": "1508394897", "x-ratelimit-reset": "1533376828",
"server": "Plack::Handler::Starlet", "server": "Plack::Handler::Starlet",
"etag": "W/\"15d3949951847ce0b26e10c0e96e96db\"", "etag": "W/\"2fb62cdbdad08970192ffe2678b431d1\"",
"access-control-allow-origin": "*", "access-control-allow-origin": "*"
"content-encoding": "gzip"
}, },
"url": "http://musicbrainz.org:80/ws/2/label/08f37a61-1c54-4257-b31d-810fa2ac5cd5?inc=url-rels&fmt=json", "url": "http://musicbrainz.org:80/ws/2/label/08f37a61-1c54-4257-b31d-810fa2ac5cd5?inc=url-rels&fmt=json",
"time": 378, "time": 381,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/6.1.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org", "host": "musicbrainz.org",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json" "accept": "application/json"

Binary file not shown.

View file

@ -1,26 +1,25 @@
{ {
"statusCode": 200, "statusCode": 200,
"headers": { "headers": {
"date": "Thu, 15 Dec 2016 00:54:23 GMT", "date": "Sat, 04 Aug 2018 09:23:56 GMT",
"content-type": "application/json; charset=utf-8", "content-type": "application/json; charset=utf-8",
"transfer-encoding": "chunked", "transfer-encoding": "chunked",
"connection": "keep-alive", "connection": "keep-alive",
"keep-alive": "timeout=15", "keep-alive": "timeout=15",
"vary": "Accept-Encoding", "vary": "Accept-Encoding",
"x-ratelimit-limit": "700", "x-ratelimit-limit": "1200",
"x-ratelimit-remaining": "515", "x-ratelimit-remaining": "843",
"x-ratelimit-reset": "1481763264", "x-ratelimit-reset": "1533374636",
"server": "Plack::Handler::Starlet", "server": "Plack::Handler::Starlet",
"etag": "W/\"5a1a587e543bd1c46c2d2400acbdd926\"", "etag": "W/\"b440e9e3667c13d84537c9fba2a2db8f\"",
"access-control-allow-origin": "*", "access-control-allow-origin": "*"
"content-encoding": "gzip"
}, },
"url": "http://musicbrainz.org:80/ws/2/release-group/53614893-6f25-4519-9cae-b1db904e2887?inc=artist-credits&fmt=json", "url": "http://musicbrainz.org:80/ws/2/release-group/53614893-6f25-4519-9cae-b1db904e2887?inc=artist-credits&fmt=json",
"time": 479, "time": 354,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org", "host": "musicbrainz.org",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json" "accept": "application/json"

View file

@ -0,0 +1 @@
{"images":[{"edit":43983930,"image":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/16110068623.jpg","thumbnails":{"large":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/16110068623-500.jpg","small":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/16110068623-250.jpg"},"front":true,"comment":"WB 2013","approved":true,"back":false,"types":["Front"],"id":16110068623},{"approved":true,"image":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436435354.jpg","edit":27985878,"front":false,"thumbnails":{"large":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436435354-500.jpg","small":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436435354-250.jpg"},"comment":"","back":false,"id":7436435354,"types":["Front"]},{"approved":true,"edit":27985879,"image":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436436976.jpg","front":false,"thumbnails":{"small":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436436976-250.jpg","large":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436436976-500.jpg"},"comment":"","back":true,"types":["Back"],"id":7436436976},{"edit":27985881,"image":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436437572.jpg","comment":"","thumbnails":{"large":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436437572-500.jpg","small":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436437572-250.jpg"},"front":false,"approved":true,"back":false,"types":["Medium"],"id":7436437572},{"back":false,"id":7436438250,"types":["Medium"],"approved":true,"image":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436438250.jpg","edit":27985882,"thumbnails":{"large":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436438250-500.jpg","small":"http://coverartarchive.org/release/22a1945f-185c-4d70-979e-f297b00b0c71/7436438250-250.jpg"},"front":false,"comment":""}],"release":"https://musicbrainz.org/release/22a1945f-185c-4d70-979e-f297b00b0c71"}

View file

@ -2,26 +2,27 @@
"statusCode": 200, "statusCode": 200,
"headers": { "headers": {
"server": "nginx/1.4.6 (Ubuntu)", "server": "nginx/1.4.6 (Ubuntu)",
"date": "Tue, 20 Dec 2016 01:39:57 GMT", "date": "Sat, 04 Aug 2018 09:21:07 GMT",
"content-type": "application/json", "content-type": "application/json",
"content-length": "1787", "content-length": "2213",
"last-modified": "Wed, 04 Jun 2014 14:48:40 GMT", "last-modified": "Sat, 11 Mar 2017 13:00:55 GMT",
"connection": "keep-alive", "connection": "keep-alive",
"etag": "\"538f31c8-6fb\"", "etag": "\"58c3f507-8a5\"",
"expires": "Tue, 20 Dec 2016 07:39:57 GMT", "expires": "Sat, 04 Aug 2018 15:21:07 GMT",
"cache-control": "max-age=21600", "cache-control": "max-age=21600",
"access-control-allow-origin": "*",
"accept-ranges": "bytes" "accept-ranges": "bytes"
}, },
"url": "http://ia902502.us.archive.org:80/29/items/mbid-22a1945f-185c-4d70-979e-f297b00b0c71/index.json", "url": "http://ia802502.us.archive.org:80/29/items/mbid-22a1945f-185c-4d70-979e-f297b00b0c71/index.json",
"time": 104, "time": 142,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json", "accept": "application/json",
"referer": "http://archive.org/download/mbid-22a1945f-185c-4d70-979e-f297b00b0c71/index.json", "referer": "http://archive.org/download/mbid-22a1945f-185c-4d70-979e-f297b00b0c71/index.json",
"host": "ia902502.us.archive.org" "host": "ia802502.us.archive.org"
} }
} }
} }

View file

@ -0,0 +1,26 @@
{
"statusCode": 302,
"headers": {
"server": "nginx/1.4.6 (Ubuntu)",
"date": "Sat, 04 Aug 2018 09:21:09 GMT",
"content-type": "text/html; charset=UTF-8",
"transfer-encoding": "chunked",
"connection": "keep-alive",
"access-control-allow-origin": "*",
"accept-ranges": "bytes",
"location": "http://ia800802.us.archive.org/16/items/mbid-4c7c6c6c-5b5b-4625-8b5a-87e44bd5a243/index.json",
"strict-transport-security": "max-age=604800"
},
"url": "http://archive.org:80/download/mbid-4c7c6c6c-5b5b-4625-8b5a-87e44bd5a243/index.json",
"time": 295,
"request": {
"method": "GET",
"headers": {
"User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"accept-encoding": "gzip, deflate",
"accept": "application/json",
"referer": "http://coverartarchive.org/release/4c7c6c6c-5b5b-4625-8b5a-87e44bd5a243",
"host": "archive.org"
}
}
}

Binary file not shown.

View file

@ -1,26 +1,25 @@
{ {
"statusCode": 200, "statusCode": 200,
"headers": { "headers": {
"date": "Sat, 04 Nov 2017 22:18:56 GMT", "date": "Sat, 04 Aug 2018 09:23:45 GMT",
"content-type": "application/json; charset=utf-8", "content-type": "application/json; charset=utf-8",
"transfer-encoding": "chunked", "transfer-encoding": "chunked",
"connection": "keep-alive", "connection": "keep-alive",
"keep-alive": "timeout=15", "keep-alive": "timeout=15",
"vary": "Accept-Encoding", "vary": "Accept-Encoding",
"x-ratelimit-limit": "1200", "x-ratelimit-limit": "1200",
"x-ratelimit-remaining": "1049", "x-ratelimit-remaining": "989",
"x-ratelimit-reset": "1509833937", "x-ratelimit-reset": "1533374626",
"server": "Plack::Handler::Starlet", "server": "Plack::Handler::Starlet",
"etag": "W/\"f3dbfd2359a7a02668094286e405c7d7\"", "etag": "W/\"f148990039ef31c75d01afd55b631673\"",
"access-control-allow-origin": "*", "access-control-allow-origin": "*"
"content-encoding": "gzip"
}, },
"url": "http://musicbrainz.org:80/ws/2/area/d907b0ac-2956-386f-a246-62d55779aae1?fmt=json", "url": "http://musicbrainz.org:80/ws/2/area/d907b0ac-2956-386f-a246-62d55779aae1?fmt=json",
"time": 355, "time": 352,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/7.0.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org", "host": "musicbrainz.org",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json" "accept": "application/json"

Binary file not shown.

View file

@ -1,29 +0,0 @@
{
"statusCode": 200,
"headers": {
"date": "Thu, 19 Oct 2017 06:35:40 GMT",
"content-type": "application/json; charset=utf-8",
"transfer-encoding": "chunked",
"connection": "keep-alive",
"keep-alive": "timeout=15",
"vary": "Accept-Encoding",
"x-ratelimit-limit": "1200",
"x-ratelimit-remaining": "1062",
"x-ratelimit-reset": "1508394941",
"server": "Plack::Handler::Starlet",
"etag": "W/\"59e4337aff496a685585c597d32fe368\"",
"access-control-allow-origin": "*",
"content-encoding": "gzip"
},
"url": "http://musicbrainz.org:80/ws/2/label/c82b5688-df49-4e21-935b-0b08d13ec98a?inc=url-rels&fmt=json",
"time": 360,
"request": {
"method": "GET",
"headers": {
"User-Agent": "graphbrainz/6.1.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org",
"accept-encoding": "gzip, deflate",
"accept": "application/json"
}
}
}

View file

@ -0,0 +1 @@
See: http://archive.org/download/mbid-35847092-d9f1-430a-aed7-f4ee93fb21a6/index.json

View file

@ -1,21 +1,20 @@
{ {
"statusCode": 307, "statusCode": 307,
"headers": { "headers": {
"date": "Tue, 20 Dec 2016 01:39:57 GMT", "date": "Sat, 04 Aug 2018 09:21:08 GMT",
"content-type": "text/plain; charset=utf-8", "content-type": "text/plain; charset=utf-8",
"content-length": "86", "content-length": "86",
"connection": "keep-alive", "connection": "keep-alive",
"keep-alive": "timeout=15", "keep-alive": "timeout=15",
"location": "http://archive.org/download/mbid-7aa99236-67d1-4996-b5ec-f6a517653fbe/index.json", "location": "http://archive.org/download/mbid-35847092-d9f1-430a-aed7-f4ee93fb21a6/index.json",
"access-control-allow-origin": "*", "access-control-allow-origin": "*"
"server": "4b4c084fb141"
}, },
"url": "http://coverartarchive.org:80/release/7aa99236-67d1-4996-b5ec-f6a517653fbe", "url": "http://coverartarchive.org:80/release/35847092-d9f1-430a-aed7-f4ee93fb21a6",
"time": 391, "time": 385,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "coverartarchive.org", "host": "coverartarchive.org",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json" "accept": "application/json"

Binary file not shown.

View file

@ -1,26 +1,25 @@
{ {
"statusCode": 200, "statusCode": 200,
"headers": { "headers": {
"date": "Thu, 15 Dec 2016 00:55:24 GMT", "date": "Sat, 04 Aug 2018 09:25:02 GMT",
"content-type": "application/json; charset=utf-8", "content-type": "application/json; charset=utf-8",
"transfer-encoding": "chunked", "transfer-encoding": "chunked",
"connection": "keep-alive", "connection": "keep-alive",
"keep-alive": "timeout=15", "keep-alive": "timeout=15",
"vary": "Accept-Encoding", "vary": "Accept-Encoding",
"x-ratelimit-limit": "700", "x-ratelimit-limit": "1200",
"x-ratelimit-remaining": "396", "x-ratelimit-remaining": "995",
"x-ratelimit-reset": "1481763324", "x-ratelimit-reset": "1533374702",
"server": "Plack::Handler::Starlet", "server": "Plack::Handler::Starlet",
"etag": "W/\"ee222d647e3b588110c01211979bd498\"", "etag": "W/\"285efd093a1d534288539360677cfd80\"",
"access-control-allow-origin": "*", "access-control-allow-origin": "*"
"content-encoding": "gzip"
}, },
"url": "http://musicbrainz.org:80/ws/2/discid/5JmJmTPkKkYLm2QFsIh1mpjIBsQ-?fmt=json", "url": "http://musicbrainz.org:80/ws/2/discid/5JmJmTPkKkYLm2QFsIh1mpjIBsQ-?fmt=json",
"time": 1117, "time": 449,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org", "host": "musicbrainz.org",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json" "accept": "application/json"

Binary file not shown.

View file

@ -1,26 +1,25 @@
{ {
"statusCode": 200, "statusCode": 200,
"headers": { "headers": {
"date": "Thu, 15 Dec 2016 00:54:45 GMT", "date": "Sat, 04 Aug 2018 09:24:23 GMT",
"content-type": "application/json; charset=utf-8", "content-type": "application/json; charset=utf-8",
"transfer-encoding": "chunked", "transfer-encoding": "chunked",
"connection": "keep-alive", "connection": "keep-alive",
"keep-alive": "timeout=15", "keep-alive": "timeout=15",
"vary": "Accept-Encoding", "vary": "Accept-Encoding",
"x-ratelimit-limit": "700", "x-ratelimit-limit": "1200",
"x-ratelimit-remaining": "484", "x-ratelimit-remaining": "1009",
"x-ratelimit-reset": "1481763286", "x-ratelimit-reset": "1533374664",
"server": "Plack::Handler::Starlet", "server": "Plack::Handler::Starlet",
"etag": "W/\"876fc8e97249059dfce0b268344bd797\"", "etag": "W/\"42a33c20cb78280509d6c2fd1d7c2999\"",
"access-control-allow-origin": "*", "access-control-allow-origin": "*"
"content-encoding": "gzip"
}, },
"url": "http://musicbrainz.org:80/ws/2/label/9d36ba13-e56a-47b7-9148-23f846374736?inc=ratings&fmt=json", "url": "http://musicbrainz.org:80/ws/2/label/9d36ba13-e56a-47b7-9148-23f846374736?inc=ratings&fmt=json",
"time": 479, "time": 457,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org", "host": "musicbrainz.org",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json" "accept": "application/json"

Binary file not shown.

View file

@ -1,26 +1,25 @@
{ {
"statusCode": 200, "statusCode": 200,
"headers": { "headers": {
"date": "Thu, 15 Dec 2016 00:55:12 GMT", "date": "Sat, 04 Aug 2018 09:24:50 GMT",
"content-type": "application/json; charset=utf-8", "content-type": "application/json; charset=utf-8",
"transfer-encoding": "chunked", "transfer-encoding": "chunked",
"connection": "keep-alive", "connection": "keep-alive",
"keep-alive": "timeout=15", "keep-alive": "timeout=15",
"vary": "Accept-Encoding", "vary": "Accept-Encoding",
"x-ratelimit-limit": "700", "x-ratelimit-limit": "1200",
"x-ratelimit-remaining": "310", "x-ratelimit-remaining": "1183",
"x-ratelimit-reset": "1481763312", "x-ratelimit-reset": "1533374692",
"server": "Plack::Handler::Starlet", "server": "Plack::Handler::Starlet",
"etag": "W/\"309c86dda9722cdb75072b4a1c0522d0\"", "etag": "W/\"f5ebcba850deda37f059a9ba0ee1023b\"",
"access-control-allow-origin": "*", "access-control-allow-origin": "*"
"content-encoding": "gzip"
}, },
"url": "http://musicbrainz.org:80/ws/2/release-group/abd672ff-6c87-44b5-8606-5b763215cbe7?inc=ratings&fmt=json", "url": "http://musicbrainz.org:80/ws/2/release-group/abd672ff-6c87-44b5-8606-5b763215cbe7?inc=ratings&fmt=json",
"time": 505, "time": 359,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org", "host": "musicbrainz.org",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json" "accept": "application/json"

Binary file not shown.

View file

@ -1,26 +1,24 @@
{ {
"statusCode": 200, "statusCode": 200,
"headers": { "headers": {
"date": "Thu, 15 Dec 2016 00:53:51 GMT", "date": "Sat, 04 Aug 2018 09:23:26 GMT",
"content-type": "application/json; charset=UTF-8", "content-type": "application/json",
"transfer-encoding": "chunked", "transfer-encoding": "chunked",
"connection": "keep-alive", "connection": "keep-alive",
"keep-alive": "timeout=15", "keep-alive": "timeout=15",
"vary": "Accept-Encoding", "x-ratelimit-limit": "1200",
"x-ratelimit-limit": "700", "x-ratelimit-remaining": "1174",
"x-ratelimit-remaining": "298", "x-ratelimit-reset": "1533374608",
"x-ratelimit-reset": "1481763232", "last-modified": "Sat, 04 Aug 2018 09:22:21 GMT",
"last-modified": "Thu, 15 Dec 2016 00:15:59 GMT", "etag": "\"OWMwMDAwMDAwMDAwMDBTb2xy\"",
"server": "Jetty(9.3.10.v20160621)", "access-control-allow-origin": "*"
"access-control-allow-origin": "*",
"content-encoding": "gzip"
}, },
"url": "http://musicbrainz.org:80/ws/2/label?limit=1&query=Apple%20Records&fmt=json", "url": "http://musicbrainz.org:80/ws/2/label?limit=1&query=Apple%20Records&fmt=json",
"time": 729, "time": 350,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org", "host": "musicbrainz.org",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json" "accept": "application/json"

View file

@ -0,0 +1 @@
{"id":"5888d65d-9d65-4d13-8454-3d68be9b3e55","name":"acoustic fretless guitar","type-id":"cc00f97f-cf3d-3ae2-9163-041cb1a0d726","disambiguation":"","type":"String instrument","relations":[],"description":"Acoustic guitar without frets."}

View file

@ -1,24 +1,24 @@
{ {
"statusCode": 200, "statusCode": 200,
"headers": { "headers": {
"date": "Sat, 04 Nov 2017 22:19:01 GMT", "date": "Sat, 04 Aug 2018 10:00:28 GMT",
"content-type": "application/json; charset=utf-8", "content-type": "application/json; charset=utf-8",
"content-length": "227", "content-length": "237",
"connection": "keep-alive", "connection": "keep-alive",
"keep-alive": "timeout=15", "keep-alive": "timeout=15",
"x-ratelimit-limit": "1200", "x-ratelimit-limit": "1200",
"x-ratelimit-remaining": "789", "x-ratelimit-remaining": "825",
"x-ratelimit-reset": "1509833941", "x-ratelimit-reset": "1533376828",
"server": "Plack::Handler::Starlet", "server": "Plack::Handler::Starlet",
"etag": "\"f003dc5379faf397737ab63975fcacab\"", "etag": "\"aacc40e18c388ba0521ace866dc3d050\"",
"access-control-allow-origin": "*" "access-control-allow-origin": "*"
}, },
"url": "http://musicbrainz.org:80/ws/2/area/36721201-bb7c-4dce-be68-0553b1131205?fmt=json", "url": "http://musicbrainz.org:80/ws/2/instrument/5888d65d-9d65-4d13-8454-3d68be9b3e55?inc=url-rels&fmt=json",
"time": 356, "time": 362,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/7.0.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org", "host": "musicbrainz.org",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json" "accept": "application/json"

View file

@ -0,0 +1 @@
{"error":"media is not a valid option for the inc parameter for the discid resource unless you specify one of the following other inc parameters: releases"}

View file

@ -0,0 +1,27 @@
{
"statusCode": 400,
"headers": {
"date": "Sat, 04 Aug 2018 10:32:25 GMT",
"content-type": "application/json; charset=utf-8",
"content-length": "156",
"connection": "keep-alive",
"keep-alive": "timeout=15",
"x-ratelimit-limit": "1200",
"x-ratelimit-remaining": "1008",
"x-ratelimit-reset": "1533378746",
"server": "Plack::Handler::Starlet",
"etag": "\"d8325e6c556c7c20f7b933ecc1070bec\"",
"access-control-allow-origin": "*"
},
"url": "http://musicbrainz.org:80/ws/2/discid/TMXdzZkTcc9Jq24PD0w5J9_AXms-?inc=media%2Bdiscids&fmt=json",
"time": 369,
"request": {
"method": "GET",
"headers": {
"User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org",
"accept-encoding": "gzip, deflate",
"accept": "application/json"
}
}
}

View file

@ -0,0 +1,11 @@
{
"url": "http://musicbrainz.org:80/ws/2/discid/TMXdzZkTcc9Jq24PD0w5J9_AXms-?inc=media%2Bdiscids&fmt=json",
"method": "GET",
"headers": {
"User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org",
"accept-encoding": "gzip, deflate",
"accept": "application/json"
},
"body": ""
}

Binary file not shown.

View file

@ -1,29 +0,0 @@
{
"statusCode": 200,
"headers": {
"date": "Tue, 20 Dec 2016 01:40:05 GMT",
"content-type": "application/json; charset=utf-8",
"transfer-encoding": "chunked",
"connection": "keep-alive",
"keep-alive": "timeout=15",
"vary": "Accept-Encoding",
"x-ratelimit-limit": "700",
"x-ratelimit-remaining": "423",
"x-ratelimit-reset": "1482198006",
"server": "Plack::Handler::Starlet",
"etag": "W/\"3467a86d0b1b88d5eccfdd5223cf828a\"",
"access-control-allow-origin": "*",
"content-encoding": "gzip"
},
"url": "http://musicbrainz.org:80/ws/2/release/3ee3723e-ed1e-4baa-a718-7f1d9ecb3bec?fmt=json",
"time": 518,
"request": {
"method": "GET",
"headers": {
"User-Agent": "graphbrainz/4.5.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org",
"accept-encoding": "gzip, deflate",
"accept": "application/json"
}
}
}

File diff suppressed because one or more lines are too long

View file

@ -1,26 +1,25 @@
{ {
"statusCode": 200, "statusCode": 200,
"headers": { "headers": {
"date": "Thu, 19 Oct 2017 06:35:07 GMT", "date": "Sat, 04 Aug 2018 09:24:07 GMT",
"content-type": "application/json; charset=utf-8", "content-type": "application/json; charset=utf-8",
"transfer-encoding": "chunked", "transfer-encoding": "chunked",
"connection": "keep-alive", "connection": "keep-alive",
"keep-alive": "timeout=15", "keep-alive": "timeout=15",
"vary": "Accept-Encoding", "vary": "Accept-Encoding",
"x-ratelimit-limit": "1200", "x-ratelimit-limit": "1200",
"x-ratelimit-remaining": "871", "x-ratelimit-remaining": "1144",
"x-ratelimit-reset": "1508394907", "x-ratelimit-reset": "1533374648",
"server": "Plack::Handler::Starlet", "server": "Plack::Handler::Starlet",
"etag": "W/\"87ba73bcb03c83b5125bb95855eb7cda\"", "etag": "W/\"4d71de9e84ecc12c5c60a53fb2d762c5\"",
"access-control-allow-origin": "*", "access-control-allow-origin": "*"
"content-encoding": "gzip"
}, },
"url": "http://musicbrainz.org:80/ws/2/label/1c6f3ffb-2749-4bec-9c1e-19ea5aa19140?inc=url-rels&fmt=json", "url": "http://musicbrainz.org:80/ws/2/artist?collection=48eaec0c-7088-4864-839b-12ea681f1b5d&fmt=json",
"time": 409, "time": 490,
"request": { "request": {
"method": "GET", "method": "GET",
"headers": { "headers": {
"User-Agent": "graphbrainz/6.1.0 ( https://github.com/exogen/graphbrainz )", "User-Agent": "graphbrainz/7.3.0 ( https://github.com/exogen/graphbrainz )",
"host": "musicbrainz.org", "host": "musicbrainz.org",
"accept-encoding": "gzip, deflate", "accept-encoding": "gzip, deflate",
"accept": "application/json" "accept": "application/json"

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show more