? MusicBrainz API 數(shù)據(jù)查詢獲取

image

MusicBrainz 沒(méi)有/沒(méi)有/沒(méi)有 復(fù)雜的OAuth認(rèn)證,直接訪問(wèn)即可!

MusicBrainz WebAPI

目前Musicbrainz提供兩種WebAPI:

  • XML Web Service
  • JSON Web Service (Beta)

Rate Limiting

MusicBrainz 的API一般都無(wú)用戶權(quán)限認(rèn)證,允許任何匿名訪問(wèn),直接打開(kāi)瀏覽器訪問(wèn)即可。

但是,如果為了增加訪問(wèn)限制的數(shù)量,官方建議在request請(qǐng)求的頭部加上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 )

根據(jù)user-agent的種類,限制情況如下:

  • 使用python-musicbrainz/0.7.3庫(kù)訪問(wèn):限制50次/秒。
  • 完全匿名訪問(wèn):限制50次/秒。
  • 其它訪問(wèn):
    • Source IP address:取決于訪問(wèn)速率,一旦過(guò)高,將被完全限制,直到速度降為到1次/秒。
    • Global: 300次/秒。

MusicBrainz XML API

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

參考官方:Development / XML Web Service / Version 2

查詢格式:

http://musicbrainz.org/ws/2/<資源>/?query=<屬性1>:<值> AND <屬性2>:<值>&limit=<顯示數(shù)>

如,搜索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

具體查詢?cè)敿?xì)參考:Development / XML Web Service / Version 2 / Search

關(guān)于XML解析

Python:

  • xmltodict
  • lxml
  • xpat
  • ...

經(jīng)過(guò)試用,目前尚未找到能“正確”解析的工具,總是出現(xiàn)一些問(wèn)題。

MusicBrainz JSON API (Beta)

參考官方:Development/JSON Web Service

Musicbrainz提供了一個(gè)正在beta開(kāi)發(fā)中的JSON API,要遠(yuǎn)方便與XML。因?yàn)閄ML的解析實(shí)在是太麻煩了。

具體的方法是:在v2版本的API上加上一個(gè)fmt參數(shù)即可。

格式為:..&fmt=json

示例:

http://musicbrainz.org/ws/2/artist/?query=name:bigbang&fmt=json

注意:目前JSON API正在開(kāi)發(fā)中,所以是unstable的。

inc參數(shù)

參考:inc - Development / XML Web Service / Version 2

當(dāng)你request API的時(shí)候,默認(rèn)返回的數(shù)據(jù)很多都是不全的。MusicBrainz可以讓你有選擇性的增加返回的數(shù)據(jù)。需要用到的就是url里的inc參數(shù)。

格式為...&inc=AAA+BBB+CCC

示例:

http://musicbrainz.org/ws/2/recording/?query=bigbang&inc=artist-credits+isrcs+releases&fmt=json

score屬性

在我們請(qǐng)求WebAPI搜索的時(shí)候,每個(gè)返回的搜索結(jié)果都會(huì)有一個(gè)score屬性。這個(gè)是匹配度的值,100分,99分,65分等等。如果搜索的信息完全匹配,則為100。
這個(gè)搜索算法,是Lucene引擎的算法。

參考:More information on the “Score” attribute in the search of musicbrainz
參考:Lucene scoring not accurate

MusicBrainz Python SDK

注意:目前python-musicbrainz項(xiàng)目是調(diào)用的v1版本API,顯示的數(shù)據(jù)不是很全。

參考官方Github:alastair/python-musicbrainzngs
參考官方API文檔:musicbrainzngs 0.6 documentation ?
參考官方示例:Usage

安裝:

pip install musicbrainzngs

登錄:

import musicbrainzngs as mb

# 登錄
mb.auth("用戶名", "密碼")

# 隨便寫(xiě)個(gè)app信息
mb.set_useragent("Example music app", "0.1", "http://example.com/music")

# [可選] 指定查詢服務(wù)器
mb.set_hostname("beta.musicbrainz.org")

就是這么簡(jiǎn)單,沒(méi)有復(fù)雜的Oauth驗(yàn)證。

常用操作:

# 搜索一個(gè)artist
artists = mb.search_artists(artist="big bang", type="group", country="Norway")

MusicBrainz Database 數(shù)據(jù)庫(kù)下載使用

MusicBrainz的數(shù)據(jù)庫(kù)是完全免費(fèi)公開(kāi)下載使用的。

參考官方說(shuō)明:MusicBrainz Database
參考官方說(shuō)明:MusicBrainz Database/Download
參考官方說(shuō)明:MusicBrainz Database / Schema

MusicBrainz數(shù)據(jù)庫(kù)結(jié)構(gòu)圖(關(guān)系型):


image

使用方法有很多種:

  • Virtual Machine 虛擬機(jī)
  • JSON文件
  • Postgresql數(shù)據(jù)庫(kù)

安裝Postgresql數(shù)據(jù)庫(kù)

參考官方:Database Installation

下載數(shù)據(jù)庫(kù)的方式有http、ftp、rsync等,其中最方便的是http。
下載地址一般為:
http://ftp.musicbrainz.org/pub/musicbrainz/data/fullexport/最新日期/mbdump.tar.bz2

要查看最新日期為什么,可以直接到http://ftp.musicbrainz.org/pub/musicbrainz/data/fullexport查看下面的子目錄有哪些。

Postgresql數(shù)據(jù)庫(kù)下載使用:

# 下載最新日期的數(shù)據(jù)庫(kù)文件 "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

# 創(chuàng)建空數(shù)據(jù)庫(kù)
createdb -U postgres --owner=postgres --encoding=UNICODE db_musicbrainz

# 登錄數(shù)據(jù)庫(kù)
psql -U postgres db_musicbrainz
\i admin/sql/CreateTables.sql
BEGIN
\q

# 導(dǎo)入數(shù)據(jù)
for FILE in * ; do 
    cmd="\\copy $FILE from ./$FILE"
    echo $cmd | psql -U postgres db_musicbrainz && mv $FILE ../finished/
done 
echo `date` Done
cd ..
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容