Я пытаюсь получить дату первого релиза песни, используя Musicbrainz. Чтобы получить это, я использую библиотеку mikealmond musicBrainz.
У меня проблема в том, что когда я пытаюсь выполнить точно такой же код, как в этом примере (https://github.com/mikealmond/MusicBrainz/blob/master/examples/first-recording-search.phpЯ всегда получаю ошибку аутентификации.
Client error response [status code] 401 [reason phrase] Unauthorized [url] http://musicbrainz.org/ws/2/artist/0383dadf-2a4e-4d10-a46a-e9e041da8eb3?inc=releases+recordings+release-groups+user-ratings&fmt=json
Поэтому я попытался добавить свое имя пользователя и пароль к запросу:
$brainz = new MusicBrainz(new GuzzleHttpAdapter(new Client()),'myusername','mypassword');
$brainz->setUserAgent('myapplicationname', '0.2', 'http://localhost:443/');
Если я вызываю URL в сообщении об ошибке вручную и ввожу мое имя пользователя и пароль, я получаю ожидаемый массив.
У меня только что было открытие: если я удалю —"+ user - ratings"
— не требует аутентификации.
Поэтому я прокомментировал строки с "user - ratings"
в моем проекте
Теперь я думаю, что это работает, но производительность запроса очень плохая, и часто я получаю сообщение об ошибке 503 // Веб-сервер MusicBrainz в настоящее время занят. Пожалуйста, попробуйте позже. //
Это займет несколько секунд только для одной песни. Кто-то знает, нормально ли это или у меня все еще есть какая-то ошибка?
Мой код ….
//Create new MusicBrainz object
$brainz = new MusicBrainz(new GuzzleHttpAdapter(new Client()), 'username', 'password');
$brainz->setUserAgent('applicationname', '0.2', 'http://localhost:443/');
// set defaults
$artistId = null;
$songId = null;
$lastScore = null;
$firstRecording = array(
'releaseDate' => new DateTime()
);
// Set the search arguments to pass into the RecordingFilter
$args = array(
"recording" => 'we will rock you',
"artist" => 'Queen',
);
try {
// Find all the recordings that match the search and loop through them
$recordings = $brainz->search(new RecordingFilter($args));
/** @var $recording \MusicBrainz\Recording */
foreach ($recordings as $recording) {
// if the recording has a lower score than the previous recording, stop the loop.
// This is because scores less than 100 usually don't match the search well
if (null != $lastScore && $recording->getScore() < $lastScore) {
break;
}
$lastScore = $recording->getScore();
$releaseDates = $recording->getReleaseDates();
$oldestReleaseKey = key($releaseDates);
if (strtoupper($recording->getArtist()->getName()) == strtoupper($args['artist'])
&& $releaseDates[$oldestReleaseKey] < $firstRecording['releaseDate']
) {
$firstRecording = array(
'releaseDate' => $recording->releases[$oldestReleaseKey]->getReleaseDate()
);
}
}
pr($firstRecording);
} catch (Exception $e) {
pr($e->getMessage());
}
Задача ещё не решена.
Других решений пока нет …