首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过PHP查询MusicBrainz搜索API

通过PHP查询MusicBrainz搜索API
EN

Stack Overflow用户
提问于 2014-06-04 18:42:26
回答 1查看 3.1K关注 0票数 1

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

我意识到搜索并不总是100%准确,但是这个列表包含了非常罕见和独特的歌曲,所以它至少应该让我走上一个好的轨道。

我已经用我的脚本做了相当多的工作,它返回结果和所有内容,但是我不确定如何准确地编写查询。文档非常混乱,没有搜索歌曲标题和艺术家的示例。

这是我的密码:

代码语言:javascript
复制
// 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;

起初,我尝试过rawurlencode() $artist$song_title,但很有趣的是,它没有返回任何结果,所以我想我应该把它作为一个简单的字符串。查询返回结果,但它们实际上是关闭的,我觉得只有一部分查询被选中(例如,只有歌曲标题,而不是艺术家)。

有人知道怎么做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-15 11:05:11

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

问题是:

  • ANDartist:应该是AND artist:
  • ZZTop应该是"ZZ Top",否则找不到艺术家。您可以添加一个别名“`ZZTop”,如果您真的认为这是多少人拼写的话
  • 您可能需要使用短语("...")来搜索完整的标题。否则,MB搜索的标题包括(It'sonlyLove)和‘艺术家:“ZZ顶部。但是,包含所有单词的结果将被评为更高,并显示在顶部。所以这是可选的。

所以要使用的正确/精确的查询是:http://musicbrainz.org/ws/2/recording?query=%22It%27s%20only%20Love%22%20AND%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 Search DocumentationLucene Search Syntax

这段代码适用于我( PHP 5.5.13),而不是您的行:

代码语言:javascript
复制
$mb_query = 'http://www.musicbrainz.org/ws/2/recording?query="'.$song_title.'"'
            .' AND artist:"'.$artist.'"';

PHP Documentation说您只需要在PHP5.1.0之前使用rawurlencode()

此外,您可能希望使用预先创建的库来更容易地使用MusicBrainz Web。在PHP Library for WS/2上列出了一个MB Documentation。不过我自己还没试过呢。

奖金

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

此查询将在艺术家名称、艺术家别名和艺术家排序名称:ZZTop (参见artist search field documentation)中搜索artist search field documentation

通过搜索,您将得到一个唯一的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 ...)

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24045166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档