Abfrage der MusicBrainz-Such-API per PHP-Skript
-
21-12-2019 - |
Frage
Ich versuche, mithilfe eines PHP-Skripts auf meinem Server Veröffentlichungsinformationen aus der MusicBrainz-Datenbank abzurufen.Ich habe eine Liste von Songs mit Songtitel und Künstlernamen und versuche, das Datum der ersten Veröffentlichung dieses Songs sowie weitere Informationen zu dieser Veröffentlichung abzurufen.
Mir ist klar, dass die Suche nicht immer 100 % genau sein wird, aber die Liste besteht aus ziemlich seltenen und einzigartigen Songs, sodass ich zumindest auf eine gute Spur gelangen sollte.
Ich bin mit meinem Skript ziemlich weit gekommen, es gibt Ergebnisse zurück und alles, aber ich bin mir nicht sicher, wie ich die Abfrage genau schreiben soll.Die Dokumentation ist ziemlich verwirrend und enthält kein Beispiel, in dem Sie sowohl nach Songtitel als auch nach Interpret suchen.
Das ist mein 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;
Zuerst habe ich es versucht rawurlencode()
Die $artist
Und $song_title
, aber lustigerweise lieferte das keine Ergebnisse, also dachte ich, ich würde es einfach als einfache Zeichenfolge belassen.Die Abfrage gibt zwar Ergebnisse zurück, aber sie stimmen wirklich nicht überein und ich habe das Gefühl, dass nur ein Teil der Abfrage erfasst wird (z. B. nur der Songtitel und nicht der Künstler).
Weiß jemand, wie man das richtig macht?
Lösung
Die von Ihrem Beispielcode erstellte Abfrage lautet wie folgt:http://musicbrainz.org/ws/2/recording?query=It%27s%20only%20Love%20ANDartist:ZZTop
Die Probleme sind:
ANDartist:
sollte seinAND artist:
ZZTop
sollte sein"ZZ Top"
, sonst wird der Künstler nicht gefunden.Sie können den Alias „ZZTop“ hinzufügen, wenn Sie wirklich glauben, dass es von vielen Leuten so geschrieben wird- Möglicherweise möchten Sie Phrasen verwenden (
"..."
), um nach vollständigen Titeln zu suchen.Andernfalls sucht MB nach Titeln einschließlich (It's
oderonly
oderLove
) Und `Künstler: „ZZ TOP“.Allerdings Ergebnisse, die alle Wörter enthalten Wille höher bewertet werden und oben angezeigt werden.Das ist also optional.
Die richtige/genaue Abfrage wäre also:http://musicbrainz.org/ws/2/recording?query=%22It%27s%20only%20Love%22%20AND%20artist:%22ZZ%20Top%22 (2 Ergebnisse)
Eine Fuzzy-Abfrage, die funktioniert, wäre:http://musicbrainz.org/ws/2/recording?query=It%27s%20only%20Love%20AND%20artist:%28ZZ%20Top%29 (80 Ergebnisse, mit artist:(ZZ Top)
suchen nach ZZ
oder Top
Künstler)
Siehe die MusicBrainz-Suchdokumentation Und Lucene-Suchsyntax für Details.
Dieser Code funktioniert bei mir (auf PHP 5.5.13) anstelle Ihrer Zeile:
$mb_query = 'http://www.musicbrainz.org/ws/2/recording?query="'.$song_title.'"'
.' AND artist:"'.$artist.'"';
Der PHP-Dokumentation Sagen Sie, Sie müssen nur verwenden rawurlencode()
vor PHP 5.1.0.
Darüber hinaus möchten Sie möglicherweise eine vorgefertigte Bibliothek verwenden, um einfacher mit dem MusicBrainz-Webdienst arbeiten zu können.Da ist ein PHP-Bibliothek für WS/2 aufgeführt auf der MB-Dokumentation.Allerdings habe ich es selbst noch nicht ausprobiert.
Bonus:
Wenn Sie Probleme beim Auffinden von Aufnahmen haben, weil der Künstler bei Ihnen anders geschrieben ist, können Sie zuerst nach dem Künstler (einschließlich Aliasnamen) suchen und dann die ID des Künstlers für die Aufnahmesuche verwenden.Beachten Sie, dass Sie den Alias nicht direkt in einer Aufnahmesuche verwenden können.
Mit dieser Abfrage wird gesucht ZZTop
in den Künstlernamen, Künstleraliasnamen und Künstlersortierungsnamen:http://musicbrainz.org/ws/2/artist?query=%22ZZTop%22(siehe die Dokumentation des Künstlersuchfelds).
Mit dieser Suche erhalten Sie eine eindeutige ID: a81259a0-a2f5-464b-866e-71220f2739f1
.Beachten Sie, dass Sie möglicherweise mehrere Ergebnisse erhalten. Speichern Sie daher möglicherweise eine Liste mit Ergebnissen mit einer hohen Punktzahl und versuchen Sie es mit anderen Einträgen, wenn Sie die Aufzeichnung im nächsten Schritt nicht finden können.
Jetzt können Sie bei der Aufnahmesuche die ID anstelle des Namens verwenden:http://musicbrainz.org/ws/2/recording?query=%22I%27ts%20only%20Love%22%20AND%20arid:a81259a0-a2f5-464b-866e-71220f2739f1
Sie können auch verwenden arid:(... OR ...)
wenn Sie mehrere Ergebnisse für die Abfrage nach dem Künstler erhalten haben.