문제

내 서버의 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%20ANDartist: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%20artist:%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 웹 서비스를 보다 쉽게 ​​사용하기 위해 미리 만들어진 라이브러리를 사용할 수도 있습니다.이있다 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