通过artist_id过滤browse_release_groups的结果以获得唱片,python

时间:2017-02-01 15:21:41

标签: python musicbrainz

我试图检索各种艺术家的唱片。维基百科和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_似乎是我想要的,所以我首先尝试了这一点,特别是当搜索到python示例中的文本,而不是我已经拥有的mb_id时。

当我执行browse_release_groups(artist = artist_id ,,,)时,我得到了一个发布组列表,每个发布组都包含我想要的数据,即专辑标题,类型和年份。但是,我还有大量其他发布组不会出现在他们的手动网页结果中(例如The Rolling Stones)https://musicbrainz.org/artist/b071f9fa-14b0-4217-8e97-eb41da73f598

似乎没有任何方法可以在查询中过滤status ='官方',或者将状态包含在结果中,以便我可以手动过滤。

在回答这个问题时,Wieland建议我使用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发布组(标题,日期,类型,状态)。如果我浏览,我会收到日期,但不能包含或按状态过滤。如果我搜索,我可以按状态过滤,但不能获取日期。如何在一个查询中同时获得两者?

1 个答案:

答案 0 :(得分:1)

我不完全确定您的问题是什么,但发布组的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服务调用中无法表达这种情况。但是,您可以使用搜索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字段。关于它有一个open ticket,但它不会在不久的将来修复。