博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一篇文章玩转全网音乐信息库MusicBrainz API
阅读量:5894 次
发布时间:2019-06-19

本文共 2959 字,大约阅读时间需要 9 分钟。

image

MusicBrainz 没有/没有/没有 复杂的OAuth认证,直接访问即可!

MusicBrainz WebAPI

目前Musicbrainz提供两种WebAPI:

  • XML Web Service
  • JSON Web Service (Beta)

Rate Limiting

MusicBrainz 的API一般都无用户权限认证,允许任何匿名访问,直接打开浏览器访问即可。

但是,如果为了增加访问限制的数量,官方建议在request请求的头部加上user-agent

格式如下:

User-Agent: 
/
( contact-email )or User-Agent:
/
( 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版本也很好用。

查询格式:

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

关于XML解析

Python:

  • xmltodict
  • lxml
  • xpat
  • ...

经过试用,目前尚未找到能“正确”解析的工具,总是出现一些问题。

MusicBrainz JSON API (Beta)

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参数

当你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引擎的算法。

MusicBrainz Python SDK

注意:目前
python-musicbrainz项目是调用的v1版本API,显示的数据不是很全。

安装:

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验证。

常用操作:

# 搜索一个artistartists = mb.search_artists(artist="big bang", type="group", country="Norway")

MusicBrainz Database 数据库下载使用

MusicBrainz的数据库是完全免费公开下载使用的。

MusicBrainz数据库结构图(关系型):

image

使用方法有很多种:

  • Virtual Machine 虚拟机
  • JSON文件
  • Postgresql数据库

安装Postgresql数据库

下载数据库的方式有http、ftp、rsync等,其中最方便的是http。

下载地址一般为:

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

Postgresql数据库下载使用:

# 下载最新日期的数据库文件 "mbdump.tar.bz2" 大约2.7GBwget http://ftp.eu.metabrainz.org/pub/musicbrainz/data/fullexport/20181205-001547/mbdump.tar.bz2tar -xjvf mbdump.tar.bz2cd mbdump/mkdir ../finished# 创建空数据库createdb -U postgres --owner=postgres --encoding=UNICODE db_musicbrainz# 登录数据库psql -U postgres db_musicbrainz\i admin/sql/CreateTables.sqlBEGIN\q# 导入数据for FILE in * ; do     cmd="\\copy $FILE from ./$FILE"    echo $cmd | psql -U postgres db_musicbrainz && mv $FILE ../finished/done echo `date` Donecd ..

转载地址:http://jvisx.baihongyu.com/

你可能感兴趣的文章
mysql5002_mysql新手进阶02
查看>>
python类 del_全面了解Python类的内置方法
查看>>
前后端传图片用base64好吗_前后端分离 前台传base64的图片 tp5.1.1进行处理
查看>>
java对象的排序_Java对象排序两种方法
查看>>
java jni 原理_使用JNI技术实现Java和C++的交互
查看>>
java 重写system.out_重写System.out.println(String x)方法
查看>>
mysql client命令行选项
查看>>
vc遍历网页表单并自动填写提交 .
查看>>
配置ORACLE 11g绿色版客户端和PLSQL远程连接环境
查看>>
ASP.NET中 DataList(数据列表)的使用前台绑定
查看>>
Linux学习之CentOS(八)--Linux系统的分区概念
查看>>
主域控制器的安装与配置步骤与方法
查看>>
JavaScript---事件
查看>>
Android NDK入门实例 计算斐波那契数列一生成jni头文件
查看>>
c/c++性能优化--I/O优化(上)
查看>>
将HTML特殊转义为实体字符的两种实现方式
查看>>
jquery 保留两个小数的方法
查看>>
网站架构设计的误区
查看>>
iis 故障导致网站无法访问
查看>>
C++ 基础笔记(一)
查看>>