如何使用偏移量和限制参数向 musicBrainz api 发出浏览请求
How to make a browse request to the musicBrainz api with the offset and limit arguments
在 musicbrainz 文档中,据说:
“任何浏览请求都支持 'offset=' 参数以获得更多结果。浏览请求还支持 'limit=':默认限制为 25,您可以将其增加到 100。”
所以我尝试将限制增加到 100 并像这样获取每个偏移量的结果:
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function main() {
let mbid = "9c9f1380-2516-4fc9-a3e6-f9f61941d090";
let releases = [];
let response = await fetch(`https://musicbrainz.org/ws/2/release?artist=${mbid}&inc=recordings+release-groups+ratings&limit=100&fmt=json`);
let jsonResponse = await response.json();
releases.push(jsonResponse.releases);
let releaseCount = jsonResponse["release-count"];
for (let offset = 100; offset < releaseCount; offset += 100) {
await sleep(1000);
let response = await fetch(`https://musicbrainz.org/ws/2/release?artist=${mbid}&inc=recordings+release-groups+ratings&offset=${offset}&limit=100&fmt=json`);
let jsonResponse = await response.json();
releases.push(jsonResponse.releases);
}
if(releases.flat(1).length == releaseCount){
console.log("All releases were fetched");
}else{
console.log("Problem: some releases were not fetched");
}
console.log(releases);
}
main();
问题是我从 api 获得的版本不等于版本计数。如果我将限制设置为 25(默认值)并以 25 而不是 100 的增量循环偏移量,则不会出现此问题。
如何按照 musicbrainz api 文档中的说明使用限制为 100 的分页并获取所有版本,而不仅仅是其中的一个子集?
这似乎是 MusicBrainz 服务器中的错误。我是这样报告的:https://tickets.metabrainz.org/browse/MBS-11892
如果您从包含列表中删除“recordings”,您的代码应该可以工作。或者,正如您已经发现的那样,使用较小的偏移限制似乎也有效。
在 musicbrainz 文档中,据说:
“任何浏览请求都支持 'offset=' 参数以获得更多结果。浏览请求还支持 'limit=':默认限制为 25,您可以将其增加到 100。”
所以我尝试将限制增加到 100 并像这样获取每个偏移量的结果:
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function main() {
let mbid = "9c9f1380-2516-4fc9-a3e6-f9f61941d090";
let releases = [];
let response = await fetch(`https://musicbrainz.org/ws/2/release?artist=${mbid}&inc=recordings+release-groups+ratings&limit=100&fmt=json`);
let jsonResponse = await response.json();
releases.push(jsonResponse.releases);
let releaseCount = jsonResponse["release-count"];
for (let offset = 100; offset < releaseCount; offset += 100) {
await sleep(1000);
let response = await fetch(`https://musicbrainz.org/ws/2/release?artist=${mbid}&inc=recordings+release-groups+ratings&offset=${offset}&limit=100&fmt=json`);
let jsonResponse = await response.json();
releases.push(jsonResponse.releases);
}
if(releases.flat(1).length == releaseCount){
console.log("All releases were fetched");
}else{
console.log("Problem: some releases were not fetched");
}
console.log(releases);
}
main();
问题是我从 api 获得的版本不等于版本计数。如果我将限制设置为 25(默认值)并以 25 而不是 100 的增量循环偏移量,则不会出现此问题。
如何按照 musicbrainz api 文档中的说明使用限制为 100 的分页并获取所有版本,而不仅仅是其中的一个子集?
这似乎是 MusicBrainz 服务器中的错误。我是这样报告的:https://tickets.metabrainz.org/browse/MBS-11892
如果您从包含列表中删除“recordings”,您的代码应该可以工作。或者,正如您已经发现的那样,使用较小的偏移限制似乎也有效。