【问题标题】:Getting a tracklist from MusicBrainz从 MusicBrainz 获取曲目列表
【发布时间】:2013-07-04 12:13:57
【问题描述】:

我正在尝试学习 Python,并认为我可以通过编写我实际使用的东西来学习。所以我正在尝试编写一个小脚本来翻录一些音乐 CD。

我正在使用 musicbrainzngs 包。我想获得 CD 的曲目列表。我目前的代码:

#! /usr/bin/env python

import argparse
import musicbrainzngs
import discid

musicbrainzngs.set_useragent("Audacious", "0.1", "https://github.com/jonnybarnes/audacious")

parser = argparse.ArgumentParser()
parser.add_argument("--cdrom", help="provide the source of the cd", default="/dev/cdrom")
args = parser.parse_args()

device = args.cdrom

print("device: %s" % device)
disc = discid.read(device)
print("id: %s" % disc.id)

try:
    result = musicbrainzngs.get_releases_by_discid(disc.id, includes=["artists"])
except musicbrainzngs.ResponseError:
    print("disc not found or bad response")
else:
    if result.get("disc"):
        print("artist:\t%s" %
            result["disc"]["release-list"][0]["artist-credit-phrase"])
        print("title:\t%s" % result["disc"]["release-list"][0]["title"])
    elif result.get("cdstub"):
        print("artist:\t" % result["cdstub"]["artist"])
        print("title:\t" % result["cdstub"]["title"])

如何获取曲目列表,查看返回的完整结果有一个 track-list 属性,但无论我尝试什么 CD,结果始终为空

【问题讨论】:

    标签: python musicbrainz


    【解决方案1】:

    通过 discid is a lookup 获取版本及其支持的“'inc=' 参数与earlier on that page 列出的版本查找请求相同”。要获得非空曲目列表,您只需添加“录音”包括:

    result = musicbrainzngs.get_releases_by_discid(disc.id, includes=["artists", "recordings"])
    

    【讨论】:

    • 是否可以通过搜索而不是查找来获取曲目列表/录音?类似 musicbrainzngs.search_releases(release=release,includes['recordings'])
    • 恐怕这是不可能的,因为(afaik)搜索服务器允许您添加任何包含以指定要检索的信息。
    • 稍微补充一下,一下子就有人派上用场了——一定有这样的API请求:/ws/2/release/#{release_id}?inc=artists+recordings&fmt=json
    【解决方案2】:

    这是一个使用 musicbrainzngs 获取专辑曲目列表的示例脚本

    #!/usr/bin/python3
    from __future__ import print_function
    from __future__ import unicode_literals
    import musicbrainzngs
    import sys
    
    musicbrainzngs.set_useragent(
        "python-musicbrainzngs-example",
        "0.1",
        "https://github.com/alastair/python-musicbrainzngs/",
    )
    
    def get_tracklist(artist, album):
        result = musicbrainzngs.search_releases(artist=artist, release=album, limit=1)
        id = result["release-list"][0]["id"]
        
        #### get tracklist
        new_result = musicbrainzngs.get_release_by_id(id, includes=["recordings"])
        t = (new_result["release"]["medium-list"][0]["track-list"])
        for x in range(len(t)):
            line = (t[x])
            print(f'{line["number"]}. {line["recording"]["title"]}')
    
    if __name__ == '__main__':
        ### get first release
        if len(sys.argv) > 1:
            artist, album = [sys.argv[1], sys.argv[2]]
            get_tracklist(artist, album)
        else:
            artist = input("Artist: ")
            album = input("Album: ")
            if not artist == "" and not album == "":
                get_tracklist(artist, album)
            else:
                print("Artist or Album missing")
        
    

    用法:

    python3 album_get_tracklist.py "滚石" "乞丐宴会"

    python3 album_get_tracklist.py

    它会询问艺术家和专辑

    【讨论】:

      猜你喜欢
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 2015-09-08
      • 2015-10-11
      • 1970-01-01
      • 2019-12-23
      相关资源
      最近更新 更多