通过 artist_id 筛选来自 browse_release_groups 的结果以获取唱片,python
Filter results from browse_release_groups by artist_id to get discography, python
我正在尝试检索各种艺术家的唱片目录。对于我检查过的艺术家,维基百科和 MusicBrainz.org 的手动网络界面似乎都同意由哪些专辑组成。我的第一个想法是尝试 screen-scrape 这些资源中的任何一个,但要正确地做到这一点似乎很难。
直接查询 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_ 不会 return 足够的记录。 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=...) 和这个 returns 更少的版本团体。就录音室专辑而言,它匹配 1:1。汇编中仍然存在一些小差异,我可以接受。但是,这个查询没有 return first-release-date,到目前为止,我一直在尝试寻找如何包含它的尝试。我在服务器搜索代码中注意到每个查询都开始操纵 rgm.first_release_date_year 等,但不清楚 how/when 这是从查询中获取的 return。
我刚刚想到我可以同时使用 browse_ 和 search_ ,因为它们一起为我提供了所有信息。所以我有一个解决方法,但感觉很农业。
TL;DR 我想要按艺术家 ID 排列的发行组(标题、日期、类型、状态)。如果我浏览,我会得到日期,但不能包含或按状态过滤。如果我搜索,我可以按状态过滤,但不获取日期。我怎样才能在一次查询中同时获得两者?
我不完全确定你的问题是什么,但是发布组的 find_by_artist
方法(来源 here)正在为艺术家页面过滤发布组,特别是:
# 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 服务按至少包含一个 "official" 版本的滚石来筛选版本组: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
字段。有一个 open ticket 关于它,但它不会在不久的将来被修复。
我正在尝试检索各种艺术家的唱片目录。对于我检查过的艺术家,维基百科和 MusicBrainz.org 的手动网络界面似乎都同意由哪些专辑组成。我的第一个想法是尝试 screen-scrape 这些资源中的任何一个,但要正确地做到这一点似乎很难。
直接查询 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_ 不会 return 足够的记录。 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=...) 和这个 returns 更少的版本团体。就录音室专辑而言,它匹配 1:1。汇编中仍然存在一些小差异,我可以接受。但是,这个查询没有 return first-release-date,到目前为止,我一直在尝试寻找如何包含它的尝试。我在服务器搜索代码中注意到每个查询都开始操纵 rgm.first_release_date_year 等,但不清楚 how/when 这是从查询中获取的 return。
我刚刚想到我可以同时使用 browse_ 和 search_ ,因为它们一起为我提供了所有信息。所以我有一个解决方法,但感觉很农业。
TL;DR 我想要按艺术家 ID 排列的发行组(标题、日期、类型、状态)。如果我浏览,我会得到日期,但不能包含或按状态过滤。如果我搜索,我可以按状态过滤,但不获取日期。我怎样才能在一次查询中同时获得两者?
我不完全确定你的问题是什么,但是发布组的 find_by_artist
方法(来源 here)正在为艺术家页面过滤发布组,特别是:
# 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 服务按至少包含一个 "official" 版本的滚石来筛选版本组: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
字段。有一个 open ticket 关于它,但它不会在不久的将来被修复。