8140 sujets

Développement web côté serveur, CMS

Bonsoir,

Je poste ce topic sur ce forum car après avoir arraché tous mes cheveux de la tête, je suis en quête de solution que je n'arrive pas à trouver par moi-même...

J'essaie d'utiliser un script qui me permet de récupérer le titrage et la pochette d'une musique en cours (via un lien de streaming) grâce à l'API SPOTIFY. Jusque là, aucun problème puisque j'obtiens bien quelque chose (regardez ici : https://taylor.moncmsradio.fr/onair.php?url=http://manager1.creativradio.pro:1065&type=/stream )

D'ici, j'aimerai pouvoir récupérer et exploiter ces données, mais je retourne un résultat vide depuis quelques temps, je ne comprends pas pourquoi...

Voici les scripts sur mes pages :

Page onair.php :

<?php header('Content-Type: application/json');
session_start();

// ini_set('display_errors', 1);
// ini_set('display_startup_errors', 1);
// error_reporting(E_ALL);
require 'configuration.php';

// TEST LE LIEN
function get_http_response_code($url) {
    $headers = get_headers($url);
    return substr($headers[0], 9, 3);
}

$reponse = $db->query("SELECT spotify_refresh FROM configuration");
while ($donnees = $reponse->fetch())
{	
	$session->refreshAccessToken($donnees['spotify_refresh']);

	$_SESSION['accessToken'] = $session->getAccessToken();
}


// RECUPERE LES INFOS DE LA POCHETTE
function search($searchTerm){
	
	$opts = [
		"http" => [
			"header" => "Authorization: Bearer ".$_SESSION['accessToken']
		]
	];
	
	$context = stream_context_create($opts);

	$string = $searchTerm;
	if ( preg_match("~\b&amp;\b~",$string) ){

		$str = str_replace("&amp;", "&", $searchTerm, $searchTerm);
	}
    $url = "https://api.spotify.com/v1/search?q=". urlencode($searchTerm)."&type=track&market=FR&limit=1";

	$result = file_get_contents($url, false, $context);
	
	//print_r($result);

    if($result !== false){
		//print_r($result);
		//echo $result['tracks']['items'][0]['albums']['images'][0]['url'];
        return json_decode($result, true);
    }
    return false;
}
  
function propre($string) {

$string = preg_replace('#\((.+)\)#U', '', $string);
$string = preg_replace('#\[(.+)\]#U', '', $string);
$string = preg_replace('#\FT(.+)\-#U', '', $string);
$string = str_replace(';', ' ', $string);
$string = str_replace('_', ' ', $string);
$string = htmlspecialchars($string);
return $string;
}

function limitString($chaine) {
$max = 30;

if (strlen($chaine) >= $max) {
$chaine = substr($chaine, 0, $max);
$espace = strrpos($chaine, " ");
$chaine = substr($chaine, 0, $espace)."...";
     }
return $chaine;
}

if(!empty($_GET['url'])):

$url = $_GET['url'];

	if($_GET['type'] == "/stream"): // SHOUTCAST

		$source = file_get_contents($url.'/stats?sid=1&json=1');
		$shoutcast = json_decode($source);

		$track = propre($shoutcast->{'songtitle'});

	elseif($_GET['type'] == "/live"): // ICECAST

		$source = file_get_contents($url.'/status-json.xsl');
		$icecast = json_decode($source);

		if(!empty($icecast->{'icestats'}->{'source'}->{'title'})):
		$track = propre($icecast->{'icestats'}->{'source'}->{'title'});
		else:
		$track = propre($icecast->{'icestats'}->{'source'}[0]->{'title'});
		endif;



	endif;

	$recherche = search($track);

	$image = $pochette_img;

	//print_r($recherche['tracks']);
	//$image=$recherche['results']['tracks']['items'][0]['album']['images'][0]['url'];
	if(isset($recherche['tracks']['items'][0]['album']['images'][0]['url'])){
		$image=$recherche['tracks']['items'][0]['album']['images'][0]['url'];
	}

	$decoupe = explode(" - ", $track);

	if(!$decoupe[0] or !$decoupe[1]):

	$artist = $track;

	endif;

	$artist = limitString($decoupe[0]);
	$titre = limitString($decoupe[1]);

	$tableau = ['track'=>$track, 'title'=>$titre, 'artist'=>$artist, 'picture'=>$image];
	$tableau_json = json_encode($tableau);
	echo($tableau_json);

endif;
?>


Et au niveau du script qui me permet d'exploiter et de récupérer les données de ce fichier :


<?php
require 'vote.php';

function get_current_track($streamIp, $streamPort, $streamProto) {
	$actual_link = 'http://'.$_SERVER['HTTP_HOST'].'/';
	$onair = file_get_contents($actual_link.'onair.php?url=http://'.$streamIp.':'.$streamPort.'&type='.$streamProto);
	$currentTrack = json_decode($onair);
	return $currentTrack;
}

// On récupère le TOP
$top = db_get_top($dbh, $nbTop);

?>										

<?= get_current_track(STREAM_IP, STREAM_PORT, STREAM_PROTO)->track ?>


Cela fonctionnait avant lorsque j'utilisais l'API iTunes, mais plus maintenant également... De plus, je ne comprends pas pourquoi au début de cette page (https://taylor.moncmsradio.fr/onair.php?url=http://manager1.creativradio.pro:1065&type=/stream ), il y a comme un espace entre la droite du site et le premier "{"...

Si mon problème est complexe, je suis disponible via Skype, TeamViewer, Discord ou autre.

J'espère que vous pourrez m'aider car je n'en peux vraiment plus de ce script qui me bloque pour finaliser mon projet...



En vous remerciant,

Bonne soirée,
Modifié par Taylor10 (10 Jan 2020 - 23:25)