質問

サーバー上の PHP スクリプトを使用して、MusicBrainz データベースからリリース情報を取得しようとしています。曲のタイトルとアーティスト名が記載された曲のリストがあり、その曲の最初のリリース日と、そのリリースに関するその他の情報を取得しようとしています。

検索が常に 100% 正確であるとは限らないことは承知していますが、リストはかなりレアでユニークな曲で構成されているため、少なくとも良い方向に進むはずです。

スクリプトはかなりのところまで進み、結果などすべてが返されますが、クエリを正確に記述する方法がわかりません。ドキュメントは非常にわかりにくく、曲名とアーティストの両方を検索する例はありません。

これは私のコードです:

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

最初に私はしようとしました rawurlencode()$artist そして $song_title, しかし面白いことに、結果が何も返されなかったので、プレーンな文字列のままにしておこうと思いました。クエリは結果を返しますが、それらは実際にはずれており、クエリの一部だけが取得されているように感じます (たとえば、アーティストではなく曲のタイトルのみ)。

誰かこれを行う正しい方法を知っていますか?

役に立ちましたか?

解決

サンプルコードによって作成されたクエリは次のとおりです。http://musicbrainz.org/ws/2/recording?query=It%27s%20only%20Love%20ANDアーティスト:ZZTop

問題は次のとおりです。

  • ANDartist: あるべきです AND artist:
  • ZZTop あるべきです "ZZ Top", そうでない場合、アーティストは見つかりません。本当に多くの人がそう綴っていると思う場合は、エイリアス「ZZTop」を追加できます
  • フレーズ ("...") 完全なタイトルを検索します。それ以外の場合、MB は (It's または only または Love) そして `アーティスト:「ZZ TOP」。ただし、すべての単語を含む結果 意思 より高い評価を受け、上位に表示されます。したがって、これはオプションです。

したがって、使用する正しい/正確なクエリは次のようになります。http://musicbrainz.org/ws/2/recording?query=%22It%27s%20only%20Love%22%20AND%20アーティスト:%22ZZ%20Top%22 (2件の結果)

機能するよりあいまいなクエリは次のようになります。http://musicbrainz.org/ws/2/recording?query=It%27s%20only%20Love%20AND%20artist:%28ZZ%20Top%29 (80 件の結果、使用 artist:(ZZ Top) 探す ZZ または Top アーティスト)

を参照してください。 MusicBrainz 検索ドキュメント そして Lucene 検索構文 詳細については。

このコードは、あなたの行の代わりに(PHP 5.5.13で)機能します。

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

PHP ドキュメント 使うだけでいいと言う rawurlencode() PHP 5.1.0 より前。

さらに、MusicBrainz Web サービスをより簡単に操作するために、既製のライブラリを使用することもできます。があります WS/2用PHPライブラリ にリストされている MB ドキュメント. 。私自身試したことはありませんが。


ボーナス:

アーティストのスペルがユーザー側で異なるため、レコーディングの検索に問題がある場合は、最初にアーティスト (エイリアスを含む) を検索してから、アーティストの ID をレコーディングの検索に使用できます。録音検索ではエイリアスを直接使用できないことに注意してください。

このクエリは次のものを検索します ZZTop アーティスト名、アーティストのエイリアス、アーティストのソート名:http://musicbrainz.org/ws/2/artist?query=%22ZZTop%22(を参照してください。 アーティスト検索フィールドのドキュメント).

この検索により、一意の ID が取得されます。 a81259a0-a2f5-464b-866e-71220f2739f1. 。複数の結果が得られる可能性があるため、スコアの高い結果のリストを保存し、次の手順で記録が見つからない場合は他のエントリを試してみることをお勧めします。

録音検索で名前の代わりに ID を使用できるようになりました。http://musicbrainz.org/ws/2/recording?query=%22I%27ts%20only%20Love%22%20AND%20arid:a81259a0-a2f5-464b-866e-71220f2739f1

も使用できます arid:(... OR ...) アーティストのクエリに対して複数の結果が得られた場合。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top