我正在尝试使用我服务器上的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;
首先我尝试rawurlencode()
$artist
和$song_title
,但有趣的是,这并没有返回任何结果,所以我想我只是留下它一个纯字符串。查询返回结果,但它们确实关闭了,我感觉只有部分查询被拾取(例如只有歌曲标题而不是艺术家)。
有谁知道正确的方法吗?
答案 0 :(得分: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
)和`艺术家: " ZZ TOP"。但是,包含所有单词 的结果将被评为更高并显示在顶部。所以这是可选的。因此使用的正确/精确查询将是: 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)
搜索ZZ
或Top
艺术家)
有关详细信息,请参阅MusicBrainz Search Documentation和Lucene Search Syntax。
此代码适用于我(在PHP 5.5.13上)而不是您的行:
$mb_query = 'http://www.musicbrainz.org/ws/2/recording?query="'.$song_title.'"'
.' AND artist:"'.$artist.'"';
PHP Documentation表示您只需要在PHP 5.1.0之前使用rawurlencode()
。
此外,您可能希望使用预制库来更轻松地使用MusicBrainz Web服务。 PHP Library for WS/2上列出了MB Documentation。我自己还没试过。
<强>奖金强>:
如果您在查找录音时遇到问题,因为艺术家拼写不同,您可以先搜索艺术家(包括别名),然后使用艺术家的ID进行录制搜索。请注意,您无法直接在录制搜索中使用别名。
此查询将在艺术家姓名,艺术家别名和艺术家排名中搜索ZZTop
:
http://musicbrainz.org/ws/2/artist?query=%22ZZTop%22
(见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 ...)
。