Question

Je suis en train de récupérer la libération d'infos à partir de la base de données MusicBrainz à l'aide d'un script PHP sur mon serveur.J'ai une liste de chansons, avec le titre de la chanson et le nom de l'artiste, et je suis en train de récupérer la date de la première version de cette chanson, ainsi que d'autres infos sur cette release.

Je me rends compte que la recherche ne sera pas toujours être précis à 100%, mais la liste comprend assez rare et unique de chansons donc il devrait au moins me faire une bonne piste.

J'ai obtenu assez loin avec mon script, il renvoie des résultats et tout et tout, mais je n'en suis pas sûr à propos de la façon d'écrire la requête exactement.La documentation est assez déroutant, et n'a pas un exemple où vous rechercher à la fois le titre de la chanson et de l'artiste.

C'est mon code:

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

Au début, j'ai essayé de rawurlencode() l' $artist et $song_title, mais curieusement, cela n'a pas renvoyé aucun résultat, alors j'ai pensé que je venais de quitter comme une chaîne simple.La requête renvoie des résultats, mais ils sont vraiment hors et j'ai le sentiment que seule une partie de la requête est d'obtenir ramassé (par exemple, seul le titre de la chanson et pas l'artiste).

Quelqu'un sait-il la bonne façon de le faire?

Était-ce utile?

La solution

La requête créée par votre exemple de code est ceci:http://musicbrainz.org/ws/2/recording?query=It%27s%20only%20Love%20ANDartist:ZZTop

Les problèmes sont:

  • ANDartist: devrait être AND artist:
  • ZZTop devrait être "ZZ Top", sinon l'artiste n'est pas trouvé.Vous pouvez ajouter un alias " ZZTop si vous pensez vraiment que c'est la façon dont beaucoup de gens, il sort
  • Vous pouvez utiliser des phrases ("...") à la recherche de plein de titres.Sinon MO recherches pour les titres, y compris (It's ou only ou Love) et `nom de l'artiste:"ZZ TOP".Cependant, les résultats contenant tous les mots va être classé plus haut et de montrer sur le dessus.C'est donc facultatif.

Donc la bonne/précis de la requête à utiliser serait:http://musicbrainz.org/ws/2/recording?query=%22It%27s%20only%20Love%22%20AND%20artist:%22ZZ%20Top%22 (2 résultats)

Un plus floue requête qui fonctionne serait:http://musicbrainz.org/ws/2/recording?query=It%27s%20only%20Love%20AND%20artist:%28ZZ%20Top%29 (80 résultats, à l'aide de artist:(ZZ Top) à la recherche pour ZZ ou Top les artistes)

Voir la MusicBrainz La Documentation De Recherche et La Syntaxe De Recherche Lucene pour plus de Détails.

Ce code fonctionne pour moi (sur PHP 5.5.13) à la place de votre ligne:

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

L' La Documentation PHP dire que vous ne devez utiliser rawurlencode() avant PHP 5.1.0.

En outre, vous pourriez vouloir utiliser un pré-faites la bibliothèque pour travailler avec les MusicBrainz Service Web plus facilement.Il y a un Bibliothèque PHP pour WS/2 figurant sur la MO Documentation.Je n'ai pas essayé moi-même bien que.


bonus:

Si vous avez des problèmes à trouver des enregistrements, parce que l'artiste est orthographié différemment sur votre fin, vous pouvez rechercher l'artiste (y compris les alias) d'abord, puis utiliser l'id de l'artiste pour l'enregistrement de la recherche.Notez que vous ne pouvez pas utiliser l'alias dans un enregistrement de recherche directement.

Cette requête de recherche pour ZZTop dans les noms d'artiste, artiste alias et artiste sortname:http://musicbrainz.org/ws/2/artist?query=%22ZZTop%22 (voir la artiste champ de recherche de la documentation).

Avec cette recherche, vous obtenez un numéro d'identification unique: a81259a0-a2f5-464b-866e-71220f2739f1.Notez que vous pourriez obtenir plusieurs résultats, de sorte que vous voudrez peut-être enregistrer une liste de résultats avec un score élevé et d'essayer d'autres entrées lorsque vous ne pouvez pas trouver l'enregistrement à l'étape suivante.

Maintenant, vous pouvez utiliser l'ID au lieu du nom de l'enregistrement de la recherche:http://musicbrainz.org/ws/2/recording?query=%22I%27ts%20only%20Love%22%20AND%20arid:a81259a0-a2f5-464b-866e-71220f2739f1

Vous pouvez également utiliser arid:(... OR ...) quand vous avez obtenu plusieurs résultats de la requête pour l'artiste.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top