如何使用偏移量和限制参数向 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”,您的代码应该可以工作。或者,正如您已经发现的那样,使用较小的偏移限制似乎也有效。