Pregunta

Estoy intentando recuperar información de la versión de la base de datos de MusicBrainz usando un script PHP en mi servidor.Tengo una lista de canciones, con el título de la canción y el nombre del artista, y estoy intentando recuperar la fecha del primer lanzamiento de esa canción, junto con otra información sobre ese lanzamiento.

Me doy cuenta de que la búsqueda no siempre será 100% precisa, pero la lista consta de canciones bastante raras y únicas, por lo que al menos debería llevarme por el buen camino.

He llegado bastante lejos con mi script, devuelve resultados y todo, pero no estoy seguro de cómo escribir la consulta exactamente.La documentación es bastante confusa y no incluye un ejemplo en el que se busque tanto el título de la canción como el artista.

Este es mi 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;

Al principio he intentado rawurlencode() el $artist y $song_title, pero, curiosamente, eso no arrojó ningún resultado, así que pensé en dejarlo como una cadena simple.La consulta arroja resultados, pero realmente no son correctos y tengo la sensación de que solo se responde una parte de la consulta (por ejemplo, solo el título de la canción y no el artista).

¿Alguien sabe la forma correcta de hacer esto?

¿Fue útil?

Solución

La consulta creada por su código de ejemplo es esta:http://musicbrainz.org/ws/2/recording?query=It%27s%20only%20Love%20ANDartist:ZZTop

Los problemas son:

  • ANDartist: debiera ser AND artist:
  • ZZTop debiera ser "ZZ Top", de lo contrario no se encuentra el artista.Puedes agregar un alias `ZZTop si realmente crees que así es como muchas personas lo deletrean.
  • Es posible que desee utilizar frases ("...") para buscar títulos completos.De lo contrario, MB busca títulos que incluyan (It's o only o Love) y `artista:"ZZ TOP".Sin embargo, los resultados que contienen todas las palabras voluntad ser calificado más alto y aparecer en la cima.Entonces esto es opcional.

Entonces la consulta correcta/precisa a utilizar sería:http://musicbrainz.org/ws/2/recording?query=%22It%27s%20only%20Love%22%20AND%20artist:%22ZZ%20Top%22 (2 resultados)

Una consulta más difusa que funciona sería:http://musicbrainz.org/ws/2/recording?query=It%27s%20only%20Love%20AND%20artist:%28ZZ%20Top%29 (80 resultados, usando artist:(ZZ Top) buscar ZZ o Top artistas)

Ver el MusicBrainz Buscar documentación y Sintaxis de búsqueda de Lucene para detalles.

Este código me funciona (en PHP 5.5.13) en lugar de su línea:

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

El Documentación PHP decir que solo necesitas usar rawurlencode() antes de PHP 5.1.0.

Además, es posible que desee utilizar una biblioteca prefabricada para trabajar con el servicio web MusicBrainz más fácilmente.Hay un Biblioteca PHP para WS/2 listado en el Documentación MB.Aunque no lo he probado yo mismo.


prima:

Si tiene problemas para encontrar grabaciones porque el artista se escribe de manera diferente, puede buscar el artista (incluidos los alias) primero y luego usar la identificación del artista para la búsqueda de grabaciones.Tenga en cuenta que no puede utilizar el alias directamente en una búsqueda de grabación.

Esta consulta buscará ZZTop en los nombres de los artistas, los alias de los artistas y el nombre del artista:http://musicbrainz.org/ws/2/artist?query=%22ZZTop%22(ver el documentación del campo de búsqueda de artistas).

Con esa búsqueda obtienes una identificación única: a81259a0-a2f5-464b-866e-71220f2739f1.Tenga en cuenta que es posible que obtenga varios resultados, por lo que es posible que desee guardar una lista con resultados con una puntuación alta y probar otras entradas cuando no pueda encontrar la grabación en el siguiente paso.

Ahora puedes usar el ID en lugar del nombre en la búsqueda de grabaciones:http://musicbrainz.org/ws/2/recording?query=%22I%27ts%20only%20Love%22%20AND%20arid:a81259a0-a2f5-464b-866e-71220f2739f1

También puedes usar arid:(... OR ...) cuando obtuviste varios resultados para la consulta del artista.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top