Domanda

Sto cercando di recuperare le informazioni sulla versione dal database MusicBrainz utilizzando uno script PHP sul mio server.Ho un elenco di brani, con titolo del brano e nome dell'artista, e sto cercando di recuperare la data della prima uscita di quella canzone, insieme ad altre informazioni su quella uscita.

Mi rendo conto che la ricerca non sarà sempre accurata al 100%, ma l'elenco è composto da brani abbastanza rari e unici, quindi dovrebbe almeno portarmi su una buona strada.

Sono andato abbastanza lontano con il mio script, restituisce risultati e tutto, ma non sono sicuro di come scrivere esattamente la query.La documentazione è piuttosto confusa e non presenta un esempio in cui si cercano sia il titolo del brano che l'artista.

Questo è il mio codice:

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

All'inizio ci ho provato rawurlencode() IL $artist E $song_title, ma, stranamente, non ha restituito alcun risultato, quindi ho pensato di lasciarlo semplicemente come una stringa semplice.La query restituisce risultati, ma sono davvero errati e ho la sensazione che venga raccolta solo una parte della query (ad esempio solo il titolo del brano e non l'artista).

Qualcuno conosce il modo giusto per farlo?

È stato utile?

Soluzione

La query creata dal codice di esempio è questa:http://musicbrainz.org/ws/2/recording?query=It%27s%20only%20Love%20ANDartista:ZZTop

I problemi sono:

  • ANDartist: dovrebbe essere AND artist:
  • ZZTop dovrebbe essere "ZZ Top", altrimenti l'artista non viene trovato.Puoi aggiungere un alias `ZZTop se pensi davvero che sia il numero di persone che lo scrivono
  • Potresti voler utilizzare le frasi ("...") per cercare i titoli completi.Altrimenti MB cerca i titoli tra cui (It's O only O Love) E `artista:"ZZ TOP".Tuttavia, i risultati contengono tutte le parole Volere essere valutato più in alto e apparire in alto.Quindi questo è facoltativo.

Quindi la query corretta/precisa da utilizzare sarebbe:http://musicbrainz.org/ws/2/recording?query=%22It%27s%20only%20Love%22%20AND%20artist:%22ZZ%20Top%22 (2 risultati)

Una query più confusa che funzioni sarebbe:http://musicbrainz.org/ws/2/recording?query=It%27s%20only%20Love%20AND%20artist:%28ZZ%20Top%29 (80 risultati, utilizzando artist:(ZZ Top) cercare ZZ O Top artisti)

Vedi il Documentazione di ricerca di MusicBrainz E Sintassi di ricerca Lucene per dettagli.

Questo codice funziona per me (su PHP 5.5.13) invece della tua riga:

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

IL Documentazione PHP dire che devi solo usare rawurlencode() prima di PHP 5.1.0.

Inoltre potresti voler utilizzare una libreria predefinita per lavorare più facilmente con il servizio Web MusicBrainz.C'è un Libreria PHP per WS/2 elencato su Documentazione MB.Non l'ho provato personalmente però.


bonus:

Se hai problemi a trovare le registrazioni perché l'artista è scritto in modo diverso dal tuo computer, puoi prima cercare l'artista (inclusi gli alias) e poi utilizzare l'ID dell'artista per la ricerca della registrazione.Tieni presente che non puoi utilizzare direttamente l'alias nella ricerca di una registrazione.

Questa query cercherà ZZTop nei nomi degli artisti, negli alias degli artisti e nel nome dell'artista:http://musicbrainz.org/ws/2/artist?query=%22ZZTop%22(vedi il documentazione sul campo di ricerca dell'artista).

Con quella ricerca ottieni un ID univoco: a81259a0-a2f5-464b-866e-71220f2739f1.Tieni presente che potresti ottenere più risultati, quindi potresti voler salvare un elenco con risultati con un punteggio elevato e provare altre voci quando non riesci a trovare la registrazione nel passaggio successivo.

Ora puoi utilizzare l'ID invece del nome nella ricerca delle registrazioni:http://musicbrainz.org/ws/2/recording?query=%22I%27ts%20only%20Love%22%20AND%20arid:a81259a0-a2f5-464b-866e-71220f2739f1

Puoi anche usare arid:(... OR ...) quando hai ottenuto più risultati per la query relativa all'artista.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top