如何从MusicBrainz获取艺人专辑、封面及时长?端点数据解析求助
获取艺人专辑列表(含封面与总时长)的MusicBrainz API方案
首先得理清你当前遇到的问题:你用的recording端点返回的是**单首录音(歌曲)**的数据,而非按专辑组织的内容,这就是数据看起来混乱的核心原因。另外length字段的值是毫秒数,比如203000换算成常规时长就是3分23秒(203000 ÷ 1000 ÷ 60 ≈ 3.38分钟),这个是MusicBrainz统一的计时单位,并非数据异常。
接下来给你一套可行的解决方案,分步骤拆解:
1. 正确获取按专辑组织的数据
要拿到结构化的专辑列表,你需要切换到MusicBrainz的release端点,而不是recording。比如查询Queen的专辑,请求地址应该是:
http://musicbrainz.org/ws/2/release?query=artist:"Queen" AND type:album&fmt=json&inc=recordings
这里的inc=recordings参数非常关键——它会让API同时返回每个专辑下的所有录音(歌曲)数据,省去后续单独请求的麻烦,方便直接计算专辑总时长。
返回的数据里,每个release条目对应一张专辑,包含专辑名称、发行日期、MBID(唯一标识符)等核心信息,同时嵌套了recordings数组,里面是每首歌的详情(包括length字段)。
2. 计算专辑总时长
MusicBrainz不会直接返回专辑的总时长,需要你自行累加计算:
- 遍历每个专辑下的
recordings数组 - 把每个录音的
length(毫秒)累加求和 - 最后转换成你需要的格式(比如
分钟:秒或总分钟数)
举个简单的计算逻辑(伪代码):
total_ms = sum(recording['length'] for recording in release['recordings']) total_seconds = total_ms // 1000 minutes = total_seconds // 60 seconds = total_seconds % 60 album_duration = f"{minutes}:{seconds:02d}"
3. 获取专辑封面链接
MusicBrainz本身不存储封面图片,但可以通过Cover Art Archive的服务获取,只需用专辑的MBID构造请求地址:
- 封面的标准构造格式为:
coverartarchive.org/release/{release_mbid}/front - 其中
{release_mbid}就是你从release条目里拿到的id字段值
这个地址会直接返回专辑的封面图片(若该专辑有收录封面的话)。
补充:解析你当前的recording端点数据
你之前调用的recording端点返回的是所有匹配Queen的专辑类录音,每一条都是单独的歌曲:
length:单首歌的时长(毫秒),转换方式前面已经说明- 如果想从这些数据关联到专辑,需要查看每个
recording里的releases数组,里面包含了这首歌所属的专辑信息,但这种方式需要自行聚合数据,效率远不如直接用release端点。
内容的提问来源于stack exchange,提问作者NotoriousWebmaster
相关产品推荐
相关产品推荐

