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?

War es hilfreich?

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 sein AND 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 oder only oder Love) 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top