一篇文章玩轉全網音樂信息庫MusicBrainz API

image

MusicBrainz 沒有/沒有/沒有 複雜的OAuth認證,直接訪問便可!

MusicBrainz WebAPI

目前Musicbrainz提供兩種WebAPI:python

  • XML Web Service
  • JSON Web Service (Beta)

Rate Limiting

MusicBrainz 的API通常都無用戶權限認證,容許任何匿名訪問,直接打開瀏覽器訪問便可。git

可是,若是爲了增長訪問限制的數量,官方建議在request請求的頭部加上user-agentgithub

參考:Rate Limiting算法

格式以下:sql

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次/秒。
  • 其它訪問:json

    • Source IP address:取決於訪問速率,一旦太高,將被徹底限制,直到速度降爲到1次/秒。
    • Global: 300次/秒。

MusicBrainz XML API

Musicbrainz的WebAPI是XML格式的。目前v1版本正準備被淘汰,v2版本也很好用。api

參考官方: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數據庫結構圖(關係型):
image

使用方法有不少種:

  • 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 ..
相關文章
相關標籤/搜索