共计 3169 个字符,预计需要花费 8 分钟才能阅读完成。
MusicBrainz 没有/没有/没有 复杂的 OAuth 认证,直接访问即可!
MusicBrainz WebAPI
目前 Musicbrainz 提供两种 WebAPI:
XML Web Service
JSON Web Service (Beta)
Rate Limiting
MusicBrainz 的 API 一般都无用户权限认证,允许任何匿名访问,直接打开浏览器访问即可。
但是,如果为了增加访问限制的数量,官方建议在 request 请求的头部加上 user-agent。
参考:Rate Limiting
格式如下:
User-Agent: <AppName>/<version> (contact-email)
or
User-Agent: <AppName>/<version> (contact-url)
etc.,
User-Agent: MyAwesomeTagger/1.2.0 (http://myawesometagger.example.com)
User-Agent: MyAwesomeTagger/1.2.0 (me@example.com)
根据 user-agent 的种类,限制情况如下:
使用 python-musicbrainz/0.7.3 库访问:限制 50 次/秒。
完全匿名访问:限制 50 次/秒。
其它访问:
Source IP address:取决于访问速率,一旦过高,将被完全限制,直到速度降为到 1 次/秒。
Global:300 次/秒。
MusicBrainz XML API
Musicbrainz 的 WebAPI 是 XML 格式的。目前 v1 版本正准备被淘汰,v2 版本也很好用。
参考官方:Development / XML Web Service / Version 2
查询格式:
http://musicbrainz.org/ws/2/< 资源 >/?query=< 属性 1 >:< 值 > AND < 属性 2 >:< 值 >&limit=< 显示数 >
如,搜索 artist:
http://musicbrainz.org/ws/2/artist/?query=name:bigbang%20AND%20country:NO&limit=10
如,搜索 album:
http://musicbrainz.org/ws/2/release/?query=name:edendale
如,搜索 track:
http://musicbrainz.org/ws/2/recording/?query=name:pristine
具体查询详细参考:Development / XML Web Service / Version 2 / Search
关于 XML 解析
Python:
xmltodict
lxml
xpat
…
经过试用,目前尚未找到能“正确”解析的工具,总是出现一些问题。
MusicBrainz JSON API (Beta)
参考官方:Development/JSON Web Service
Musicbrainz 提供了一个正在 beta 开发中的 JSON API,要远方便与 XML。因为 XML 的解析实在是太麻烦了。
具体的方法是:在 v2 版本的 API 上加上一个 fmt 参数即可。
格式为:..&fmt=json
示例:
http://musicbrainz.org/ws/2/artist/?query=name:bigbang&fmt=json
注意:目前 JSON API 正在开发中,所以是 unstable 的。
inc 参数
参考:inc – Development / XML Web Service / Version 2
当你 request API 的时候,默认返回的数据很多都是不全的。MusicBrainz 可以让你有选择性的增加返回的数据。需要用到的就是 url 里的 inc 参数。
格式为 …&inc=AAA+BBB+CCC
示例:
http://musicbrainz.org/ws/2/recording/?query=bigbang&inc=artist-credits+isrcs+releases&fmt=json
score 属性
在我们请求 WebAPI 搜索的时候,每个返回的搜索结果都会有一个 score 属性。这个是匹配度的值,100 分,99 分,65 分等等。如果搜索的信息完全匹配,则为 100。这个搜索算法,是 Lucene 引擎的算法。
参考:More information on the“Score”attribute in the search of musicbrainz 参考:Lucene scoring not accurate
MusicBrainz Python SDK
注意:目前 python-musicbrainz 项目是调用的 v1 版本 API,显示的数据不是很全。
参考官方 Github:alastair/python-musicbrainzngs 参考官方 API 文档:musicbrainzngs 0.6 documentation »参考官方示例:Usage
安装:
pip install musicbrainzngs
登录:
import musicbrainzngs as mb
# 登录
mb.auth(“ 用户名 ”, “ 密码 ”)
# 随便写个 app 信息
mb.set_useragent(“Example music app”, “0.1”, “http://example.com/music”)
# [可选] 指定查询服务器
mb.set_hostname(“beta.musicbrainz.org”)
就是这么简单,没有复杂的 Oauth 验证。
常用操作:
# 搜索一个 artist
artists = mb.search_artists(artist=”big bang”, type=”group”, country=”Norway”)
MusicBrainz Database 数据库下载使用
MusicBrainz 的数据库是完全免费公开下载使用的。
参考官方说明:MusicBrainz Database 参考官方说明:MusicBrainz Database/Download 参考官方说明:MusicBrainz Database / Schema
MusicBrainz 数据库结构图 (关系型):
使用方法有很多种:
Virtual Machine 虚拟机
JSON 文件
Postgresql 数据库
安装 Postgresql 数据库
参考官方:Database Installation
下载数据库的方式有 http、ftp、rsync 等,其中最方便的是 http。下载地址一般为:http://ftp.musicbrainz.org/pu…
要查看最新日期为什么,可以直接到 http://ftp.musicbrainz.org/pub/musicbrainz/data/fullexport 查看下面的子目录有哪些。
Postgresql 数据库下载使用:
# 下载最新日期的数据库文件 “mbdump.tar.bz2″ 大约 2.7GB
wget http://ftp.eu.metabrainz.org/pub/musicbrainz/data/fullexport/20181205-001547/mbdump.tar.bz2
tar -xjvf mbdump.tar.bz2
cd mbdump/
mkdir ../finished
# 创建空数据库
createdb -U postgres –owner=postgres –encoding=UNICODE db_musicbrainz
# 登录数据库
psql -U postgres db_musicbrainz
\i admin/sql/CreateTables.sql
BEGIN
\q
# 导入数据
for FILE in * ; do
cmd=”\\copy $FILE from ./$FILE”
echo $cmd | psql -U postgres db_musicbrainz && mv $FILE ../finished/
done
echo `date` Done
cd ..