按艺术家id筛选来自浏览发布组的结果,以获得目录、python

按艺术家id筛选来自浏览发布组的结果,以获得目录、python,python,musicbrainz,Python,Musicbrainz,我正在为不同的艺术家检索唱片。维基百科和MusicBrainz.org的手动网络界面似乎就我所检查的艺术家的专辑组成达成了一致。我的第一个想法是尝试筛选这些资源中的任何一个,但这看起来很难做到 直接查询musicbrainz数据似乎提供了获取干净数据的更快方法。我会理想地构造一个这样的请求 data = get_release_groups(artist=mbid, primary_type='Album',

我正在为不同的艺术家检索唱片。维基百科和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_u将不会返回足够的记录。Browse_uu似乎是我想要的,所以我先尝试了一下,尤其是当search_uu在python示例中查找文本时,而不是我已经拥有的mb_id

当我浏览发行组(艺术家=艺术家id,,,,)时,我得到了发行组的列表,每个发行组都包含我想要的数据,即专辑标题、类型和年份。然而,我也得到了大量其他发布组,这些发布组没有出现在他们的手动web结果中(例如滚石乐队)

在status='official'的查询中,似乎没有任何方法进行筛选,也没有任何方法将状态作为结果的一部分包含在内,以便我可以手动筛选

为了回答这个问题,Wieland建议我使用搜索查询。我已经测试了search\u release\u组(andry=mbid,status='official',primarytype='Album',strict=True,limit=…),这将返回更少的发布组。就录音室专辑而言,它符合1:1。汇编中还有一些小的差异,我可以接受。然而,这个查询并没有返回第一个发布日期,到目前为止,我一直无法找到如何包含它。我注意到在链接到的服务器搜索代码中,每个查询都是从操作rgm.first\u release\u date\u year等开始的,但不清楚如何/何时从查询中返回

我刚刚想到,我可以同时使用浏览和搜索,因为它们一起为我提供了所有信息。所以我有一份工作,但感觉很农业


TL;DR我希望按艺术家ID列出发布组(标题、日期、类型、状态)。如果我浏览,我会得到日期,但不能按状态包含或筛选。如果我搜索,我可以按状态筛选,但不获取日期。如何在一个查询中同时获得这两个信息?

我不完全确定您的问题是什么,但发布组的
查找方法(源代码)是对艺术家页面的发布组进行过滤的方法,特别是:

     # 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服务按滚石乐队筛选至少包含一个“官方”版本的版本组:。在python musicbrainzngs中,对这一点的调用是

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

不幸的是,搜索结果不包括
首次发布日期
字段。有一个关于它的问题,但在不久的将来它不会被修复。

谢谢您的搜索建议。我已经试过了,并相应地更新了我的OP。python文档太糟糕了,我想知道直接破解xml是否更好?我已经更新了我的答案。如果您确实需要第一个发布日期,您可以自己使用浏览请求和筛选。谢谢您的帮助。我很高兴有一张公开票,其他人也有这个问题。以我的理想查询为例,我想我所要求的是一个通用的DB查询,作为get_uu请求中参数的结果来构建和执行。我不认为这是不安全的,如果限制为只读,当然也只在数据表的范围内操作。允许请求中的所有include=[,]将在很大程度上达到目的。但是你帮我找到的工作只是两个查询,仍然比屏幕抓取容易得多。再次感谢。