1

我正在尝试检索各种艺术家的唱片。对于我检查过的艺术家来说,维基百科和 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 的发行组(标题、日期、类型、状态)。如果我浏览,我会得到日期,但不能包含或按状态过滤。如果我搜索,我可以按状态过滤,但没有日期。如何在一个查询中同时获取两者?

4

1 回答 1

1

我不完全确定您的问题是什么,但是find_by_artist发布组的方法(来源此处)是为艺术家页面过滤发布组的方法,特别是:

     # Show only RGs with official releases by default, plus all-status-less ones so people fix the status
    unless ($show_all) {
    push @$conditions, "(EXISTS (SELECT 1 FROM release where release.release_group = rg.id AND release.status = '1') OR
                        NOT EXISTS (SELECT 1 FROM release where release.release_group = rg.id AND release.status IS NOT NULL))";
    }

不幸的是,我认为不可能在正常的 Web 服务调用中表达这种情况。但是,您可以使用搜索 Web 服务按包含至少一个“官方”版本的滚石筛选版本组:http://musicbrainz.org/ws/2/release-group/?query=arid: b071f9fa-14b0-4217-8e97-eb41da73f598%20AND%20status:official&offset=0。在 python-musicbrainzngs 中,对此的调用是

search_release_groups(arid="b071f9fa-14b0-4217-8e97-eb41da73f598", status="official", strict=True)

不幸的是,搜索结果不包括该first-release-date字段。有一张关于它的公开票,但它不会在不久的将来修复。

于 2017-02-02T08:05:37.020 回答