一篇文章玩转全网音乐信息库MusicBrainz API
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 ..
一篇文章玩转全网音乐信息库MusicBrainz API相关推荐
- java黄油刀_一篇文章玩转ButterKnife,让代码更简洁
前言 话说,Android开发的兄弟们都知道,每次初始化控件,设置相应的事件,写的那点过程多而且恶心.我们先一块回顾下不堪的曾经~那些年,我们是这样初始化控件: // 每次的习惯上来写一个initVi ...
- 一篇文章玩转 RNN 网络 原理
1. RNN的网络结构(展开) 图 1 RNN网络的基本运算单元 RNN 网络是由一个个的 cell 组成的,每一个 cell 都五脏俱全: 可以看出,沿着时间轴 t 每一个RNN的单元内都有一个输入 ...
- 借重新装系统之际,一篇文章带你玩透Windows 10从系统安装到软件选择
系统安装所需软件 Rufus 一个制作USB-ISO的免费软件,比微软官方工具好的地方在于除了可以制作windows 系统U盘,还可以制作linux 以及安卓X86的系统安装光盘. 借重新装系统之际, ...
- 五年程序员是如何玩转闲鱼无货源的,只看这一篇文章就够了
今天的内容方向主要是基础篇-进阶篇 ,优化了一下操作方法,尽量细化,让你看完这篇内容之后从入门到大神. 基础篇: 注册这些基础的之前说过,这次就不说了,这次说下如何养号. 完善个人资料(头像.昵称.简 ...
- Jetpack新成员,一篇文章带你玩转Hilt和依赖注入
本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每个工作日都有文章更新. 各位小伙伴们大家早上好. 终于要写这样一篇我自己都比较怕的文章了. 虽然今年的Google ...
- 8问8答,一篇文章读懂空间音效
近日,第一届网易集团创新奖评选落下帷幕,网易智企"逼近人耳极限-音频通话"项目从众多参赛作品中脱颖而出,荣获"0-1创新奖"三等奖. 此次获奖的项目诞生于网易智 ...
- ElasticSearch8.x.x 【一篇文章精通系列】【ES的基本操作,ES安装,ES head + Kibana】
ElasticSearch8.x.x [一篇文章精通系列][ES的基本操作,ES安装,ES head + Kibana] 一.ElasticSearch的安装 1.解压安装ES 2.熟悉目录 3.启动 ...
- 【区块链】周鸿祎:写区块链最好的一篇文章;曾鸣:大部分关于区块链未来伟大前景的讨论还只是猜想而已
区块链就是未来,也是一种回到互联网本来意义的方式. 文 | 机器之能 注:奇虎360创始人周鸿祎说,这是了解区块链最深入浅出的一篇文章. 以下正文: 这组词序并没有任何意义,真正让它们有价值的地方在于 ...
- 全面了解苹果WWDC2020,一篇文章足矣
WWDC2020已经落下帷幕,如果你想要了解昨夜究竟发生了什么,那么看这一篇文章就足够了!WWDC是苹果公司年度的开发者大会,从公司战略的层面来讲,其战略意义远胜于苹果秋季新品发布会.苹果的电子产品之 ...
最新文章
- 随机改变颜色返回#+...样式的值
- 【Android NDK 开发】JNI 方法解析 ( JNIEXPORT 与 JNICALL 宏定义作用 )
- 校招 | 第四范式 Plan1956 招募计划正式开启!
- 《大数据分析原理与实践》一一第3章 关联分析模型
- 转: 微博的多机房部署的实践(from infoq)
- 重构——解决过长参数列表(long parameter list)
- sqllite能连接mysql_SQLLite 可以通过SQL语言来访问的文件型SQL数据库
- php对象转换为字符串,php – 类的对象..无法转换为字符串
- Webappbuilder自定义widget模板
- 华为机试-字符串通配符
- c语言getch函数_在C / C ++中使用getch()函数
- rsem比对_基于二代测序的肿瘤新生抗原检测方法、装置和存储介质与流程
- The Expressive Power of Neural Networks: A View from the Width
- qt开源项目: tiled 瓦片 游戏地图编辑器
- win10商店的应用下载移植 注:.appx文件最好在win10使用 附win10商店UWP的安装包
- 计算机开不了机反复重启,电脑一直重启就是开不了机怎么样解决
- win10发现网络计算机,Win10如何启用网络发现?Win10启用网络发现的方法
- 国内网页设计网站网址大全[问题点数:0分,结帖人:beijin2008]
- 亚马逊婴儿围栏CPC认证标准要求
- 异构计算给我们带来了哪些思考?