Bonjour à tous,
J'ai un besoin de réaliser des requêtes sur MusicBrainz. Je le réalise en cURL. Ca se passe bien pour les informations directement sur ce site, mais pour récupérer les informations de pochettes il y a des redirections et ça plante.
Voilà le code en résumé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// URLS des sites à contacter
$mbApiUrl = 'https://musicbrainz.org/ws/2/';
$coverArchiveApiUrl = 'https://coverartarchive.org/release/';
// Fonction qui fait la requête et renvoie le résultat
function curl_get_contents($url, $avecInfos = false) {
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
	curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0');
	$data = curl_exec($ch);
	$info = curl_getinfo($ch);
	curl_close($ch);
	if ($avecInfos) return ['result' => $data, 'info' => $info];
	else return $data;
}
// Fonction qui demande le JSON d'information sur un album
function getMbJson($entity, $id = '', $inc = '', $query = '') {
	$mbResult = curl_get_contents($this->mbApiUrl.$entity.(empty($id) ? '' : "/$id")."?fmt=json".(empty($inc) ? '' : "&inc=$inc").(empty($query) ? '' : '&query='.urlencode($query)));
	if ($mbResult == false || empty($mbResult)) {
		Messages::erreur('La requête à la base de données MusicBrainz n\'a pas aboutie', 'MusicBrainz');
		return null;
	} else return json_decode($mbResult);
}
// Fonction qui demande les informations sur la pochette
function getCover($releaseId) {
	$result = curl_get_contents($this->coverArchiveApiUrl.$releaseId, true);
	if ($result['result'] == false || empty($result['result'])) {
		Messages::erreur('La requête à la base de données Cover Art Archive n\'a pas aboutie', 'MusicBrainz');
		return null;
	} else return json_decode($result['result']);
}
 
// ID de l'album à chercher
$releaseId = '99769b03-eb81-4f6b-ab4e-b5d2fdb0d590';
// Récupérer le JSON de l'album
$album = getMbJson('release', $releaseId, 'recordings+release-groups+labels'); // Ca marche bien, j'ai mes infos en JSON
// Récupérer le JSON de la pochette
$cover = getCover($releaseId); // Ca ne marche pas ! curl_exec() renvoi false.
Ce qu'il se passe c'est que les infos d'album sont récupérées directement sur la page appelée. Mais les informations de pochette sont redirigées sur 3 pages :

Pourtant cRUL est paramétré pour suivre les redirections, elles sont bien toutes en https.
Mettre AUTOREFERER à True ou donner un CURLOPT_REFERER ne changent rien.

Si j'interroge directement le dernier site ça fait des erreurs 404 au lieu de donner les informations dans les entêtes de réponse comme indiqué ici https://musicbrainz.org/doc/Cover_Art_Archive/API ce qui est moins pratique.
En tout cas, ça me renvoi FALSE et je ne sais pas pourquoi.

Merci pour votre aide !