我正在尝试检索各种艺术家的唱片。对于我检查过的艺术家来说,维基百科和 MusicBrainz.org 的手动网络界面似乎就组成这张专辑的内容达成了一致。我的第一个想法是尝试筛选这些资源中的任何一个,但这看起来很难正确完成。
对 musicbrainz 数据的直接查询似乎提供了一种获取干净数据的更快方法。理想情况下,我会构建这样的请求...
data = get_release_groups(artist=mbid,
primary_type='Album',
status='Official',
includes=['first_release_date',
'title',
'secondary_type_list'])
我选择使用 python 包装器 musicbrainsngs,因为我对 python 相当有经验。它让我可以选择三种方法,get_、search_ 和 browse_。Get_ 不会返回足够的记录。Browse_ 似乎是我想要的,所以我首先尝试了它,特别是因为 search_ 记录了在 python 示例中查找文本,而不是我已经拥有的 mb_id。
当我执行browse_release_groups(artist=artist_id,,,)时,我得到了一个发布组列表,每个组都包含我想要的数据,即专辑名称、类型和年份。但是,我还有大量其他版本组没有出现在他们的手动网络结果中(例如滚石乐队)https://musicbrainz.org/artist/b071f9fa-14b0-4217-8e97-eb41da73f598
似乎没有任何方法可以在查询中过滤 status='official',或者将状态作为结果的一部分包含在内,以便我可以手动过滤。
针对这个问题,维兰德建议我使用 search_ 查询。我已经测试了 search_release_groups(arid=mbid, status='official', primarytype='Album', strict=True, limit=...) 并且返回的版本组要少得多。就录音室专辑而言,它匹配 1:1。编译中仍有一些细微的差异,我可以忍受。但是,这个查询没有返回第一个发布日期,到目前为止,它一直在阻止我试图找到如何包含它。我注意到在链接到每个查询的服务器搜索代码中都开始操作 rgm.first_release_date_year 等,但不清楚如何/何时从查询中返回。
我突然想到我可以同时使用 browse_ 和 search_ ,因为它们一起为我提供了所有信息。所以我有一个工作,但感觉相当农业。
TL;DR我想要按艺术家 ID 的发行组(标题、日期、类型、状态)。如果我浏览,我会得到日期,但不能包含或按状态过滤。如果我搜索,我可以按状态过滤,但没有日期。如何在一个查询中同时获取两者?