通过PHP脚本查询MusicBrainz搜索API

Pim*_*Pim 0 php xml musicbrainz

我正在尝试使用我服务器上的PHP脚本从MusicBrainz数据库中检索发布信息.我有一个歌曲列表,歌曲标题和艺术家名称,我正在尝试检索该歌曲的第一个版本的日期,以及有关该版本的其他信息.

我意识到,搜索不会永远是100%准确,但该列表包括相当罕见和独特的歌曲,所以应该至少让我在良好的轨道.

我的脚本已经相当远,它会返回结果和所有内容,但我不确定如何准确地编写查询.该文档非常混乱,并没有以搜索歌曲标题和艺术家为例的示例.

这是我的代码:

// this info is normally fetched from my DB, but just as a simple example (as it is returned):
$artist = "ZZTop"; 
$song_title = "It's only Love";

// I'm having trouble with this part:
$mb_query = 'http://www.musicbrainz.org/ws/2/recording?query=' . $song_title .' ANDartist:' . $artist ;

$xml = simplexml_load_file($mb_query);

$releasedate = $xml->{'recording-list'}->recording[0]->{'release-list'}->release[0]->date;
Run Code Online (Sandbox Code Playgroud)

起初,我已经尽力rawurlencode()$artist$song_title,但有趣的是,这并不会返回任何结果,所以我想我只是把它作为一个普通的字符串.查询返回结果,但它们确实关闭了,我感觉只有部分查询被拾取(例如只有歌曲标题而不是艺术家).

有谁知道这样做的正确方法?

Jon*_*yJD 6

您的示例代码创建的查询是:http://musicbrainz.org/ws/2/recording? query = It%27s%20only%20Love%20andartist: ZZTop

问题是:

  • ANDartist: 应该 AND artist:
  • ZZTop应该是"ZZ Top",否则找不到艺术家.你可以添加别名`ZZTop,如果你真的认为有多少人拼写它
  • 您可能希望使用短语("...")来搜索完整标题.否则MB搜索包括(It's only Love) `artist:"ZZ TOP"的标题.但是,包含所有单词的结果被评为更高并显示在顶部.所以这是可选的.

所以使用的正确/精确查询将是:http://musicbrainz.org/ws/2/recording? query =%22It%27s%20only%20Love%22% 20 %%20artist:% 22ZZ%20Top%22(2结果)

一个更模糊的查询有效:http://musicbrainz.org/ws/2/recording? query = It%27s%20only%20Love%20AND%20artist:% 28ZZ%20Top%29(80结果,artist:(ZZ Top)用于搜索对于ZZTop艺术家)

有关详细信息,请参阅MusicBrainz搜索文档Lucene搜索语法.

此代码适用于我(在PHP 5.5.13上)而不是您的行:

$mb_query = 'http://www.musicbrainz.org/ws/2/recording?query="'.$song_title.'"'
            .' AND artist:"'.$artist.'"';
Run Code Online (Sandbox Code Playgroud)

PHP文件说,你只需要使用rawurlencode()之前,PHP 5.1.0.

此外,您可能希望使用预制库来更轻松地使用MusicBrainz Web服务.MB文档中列出了一个用于WS/2PHP库.我自己没试过.


奖金:

如果您在查找录音时遇到问题,因为艺术家拼写不同,您可以先搜索艺术家(包括别名),然后使用艺术家的ID进行录制搜索.请注意,您无法直接在录制搜索中使用别名.

此查询将搜索ZZTop艺术家姓名,艺术家别名和艺术家排序名:http://musicbrainz.org/ws/2/artist?query =%22ZZTop%22 (请参阅艺术家搜索字段文档).

通过该搜索,您将获得一个唯一的ID : a81259a0-a2f5-464b-866e-71220f2739f1. 请注意,您可能会获得多个结果,因此您可能希望保存包含高分结果的列表,并在下一步中找不到录制时尝试其他条目.

现在您可以在录制搜索中使用ID而不是名称:http://musicbrainz.org/ws/2/recording?query =%22I%27ts%20only%20Love%22%20and%20arid: a81259a0-a2f5- 464B-866e-71220f2739f1

arid:(... OR ...)当您为艺术家的查询获得多个结果时,您也可以使用.