Pergunta

Estou tentando recuperar informações de lançamento do banco de dados MusicBrainz usando um script PHP em meu servidor.Tenho uma lista de músicas, com título e nome do artista, e estou tentando recuperar a data do primeiro lançamento dessa música, junto com outras informações sobre esse lançamento.

Sei que a pesquisa nem sempre será 100% precisa, mas a lista consiste em músicas bastante raras e únicas, por isso deveria pelo menos me colocar em um bom caminho.

Cheguei bastante longe com meu script, ele retorna resultados e tudo mais, mas não tenho certeza de como escrever exatamente a consulta.A documentação é bastante confusa e não apresenta um exemplo onde você procura o título da música e o artista.

Este é o meu código:

// 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;

No começo eu tentei rawurlencode() o $artist e $song_title, mas, curiosamente, isso não retornou nenhum resultado, então resolvi deixá-lo como uma string simples.A consulta retorna resultados, mas eles estão realmente errados e tenho a sensação de que apenas parte da consulta está sendo selecionada (por exemplo, apenas o título da música e não o artista).

Alguém sabe a maneira certa de fazer isso?

Foi útil?

Solução

A consulta criada pelo seu código de exemplo é esta:http://musicbrainz.org/ws/2/recording?query=It%27s%20only%20Love%20ANDartist:ZZTop

Os problemas são:

  • ANDartist: deveria estar AND artist:
  • ZZTop deveria estar "ZZ Top", caso contrário o artista não será encontrado.Você pode adicionar um alias `ZZTop se você realmente acha que é assim que muitas pessoas o escrevem
  • Você pode querer usar frases ("...") para pesquisar títulos completos.Caso contrário, MB procura títulos incluindo (It's ou only ou Love) e `artista:"ZZ TOP".No entanto, os resultados contendo todas as palavras vai ser avaliado mais alto e aparecer no topo.Então isso é opcional.

Portanto, a consulta correta/precisa a ser usada seria:http://musicbrainz.org/ws/2/recording?query=%22It%27s%20only%20Love%22%20AND%20artist:%22ZZ%20Top%22 (2 resultados)

Uma consulta mais difusa que funcionasse seria:http://musicbrainz.org/ws/2/recording?query=It%27s%20only%20Love%20AND%20artist:%28ZZ%20Top%29 (80 resultados, usando artist:(ZZ Top) procurar por ZZ ou Top artistas)

Veja o Documentação de pesquisa do MusicBrainz e Sintaxe de pesquisa Lucene para detalhes.

Este código funciona para mim (no PHP 5.5.13) em vez da sua linha:

$mb_query = 'http://www.musicbrainz.org/ws/2/recording?query="'.$song_title.'"'
            .' AND artist:"'.$artist.'"';

O Documentação PHP diga que você só precisa usar rawurlencode() antes do PHP 5.1.0.

Além disso, você pode querer usar uma biblioteca pré-fabricada para trabalhar com o MusicBrainz Web Service mais facilmente.Existe um Biblioteca PHP para WS/2 listado no Documentação MB.Eu ainda não tentei.


bônus:

Se você tiver problemas para encontrar gravações porque o artista está escrito de forma diferente, você pode pesquisar o artista (incluindo aliases) primeiro e depois usar o ID do artista para a pesquisa de gravação.Observe que você não pode usar o alias diretamente em uma pesquisa de gravação.

Esta consulta irá procurar ZZTop nos nomes dos artistas, apelidos dos artistas e nome de classificação do artista:http://musicbrainz.org/ws/2/artist?query=%22ZZTop%22(Veja o documentação do campo de pesquisa do artista).

Com essa pesquisa você obtém um ID exclusivo: a81259a0-a2f5-464b-866e-71220f2739f1.Observe que você pode obter vários resultados, então você pode querer salvar uma lista com resultados com pontuação alta e tentar outras entradas quando não conseguir encontrar a gravação na próxima etapa.

Agora você pode usar o ID em vez do nome na pesquisa de gravação:http://musicbrainz.org/ws/2/recording?query=%22I%27ts%20only%20Love%22%20AND%20arid:a81259a0-a2f5-464b-866e-71220f2739f1

Você também pode usar arid:(... OR ...) quando você obteve vários resultados para a consulta do artista.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top