extraire current song pour une radio shoutcast

Eléphanteau du PHP | 23 Messages

19 oct. 2010, 01:17

Voilà, pour cette "radio tendance ouest" par exemple:
j'ai http://str80.streamakaci.com:7290 comme adresse pour lire le stream
si on rentre comme adresse dans le navigateur http://str80.streamakaci.com on a une page avec l'info current song
Je ne sais pas comment récupérer current song .
j'ai essayé ce script que je ne comprends pas complétement :
$ip = "http://str80.streamakaci.com"; 
$port = "7290"; 
$fp = @fsockopen("$ip", "$port", $errno, $errstr, 30); 

if(!$fp) 
{ 

$etat = "Serveur déconnecté."; 
} 

else 
{ 
fputs($fp, "GET /7.html HTTP/1.0\r\nUser-Agent: Mozilla/4.0\r\n\r\n"); 
$content="";
while(!feof($fp)) 
{ 
$content .= fgets($fp,1000); 
} 

fclose($fp); 
$debut = strpos($content, '<body>') + strlen('<body>'); 
$fin = strpos($content, '</body>', $debut); 
$servi = substr($content, $debut, $fin - $debut); 
$option = explode(',', $servi); 

if ($option[1] == 0) 
{ 

// Serveur connecter aucune source stream // 


$etat = "Aucune source serveur connectée."; 
} 

else 
{ 

// Serveur connecté stream ok // 


$titre = $option[6]; 
$etat = "Source connectée serveur connecté serveur Ok !"; 
} 
} 

$titre = str_replace("&yuml;","&eacute;",$titre); 

echo $titre ; 
echo $etat ;
Il fonctionne pour une autre radio mais pour la radio ci-dessus
echo $titre ne donne rien
echo $etat donne Serveur déconnecté
toute aide sera vivement appréciée :priere:

ViPHP
ViPHP | 5462 Messages

19 oct. 2010, 09:39

avec DOMDocument :wink:

Eléphanteau du PHP | 23 Messages

19 oct. 2010, 14:09

ça fait deux sujet que tu me réponds la même chose stealth35!!!
Alors je suis allé voir la doc sur domdocument mais c'est pour extraire un .xml : là c'est pas le cas (et dans l'autre sujet non plus).
expliques toi un peu ou arrêtes de répondre aussi succinctement!

ViPHP
ViPHP | 5462 Messages

19 oct. 2010, 14:14

ça fait deux sujet que tu me réponds la même chose stealth35!!!
Alors je suis allé voir la doc sur domdocument mais c'est pour extraire un .xml : là c'est pas le cas (et dans l'autre sujet non plus).
expliques toi un peu ou arrêtes de répondre aussi succinctement!
c'est que t'as pas tout lu, DOMDocument c'est faire pour lire du DOM et du DOM c'est du HTML, et n'oublie pas que je suis pas obligé de te répondre.

Eléphanteau du PHP | 23 Messages

19 oct. 2010, 15:28

ok ok je me suis peut être emporté un peu vite :oops:
j'essaie
$doc = new DOMDocument();
$doc->loadHTMLFile("http://str80.streamakaci.com/index.html");
et j'ai :
Warning: DOMDocument::load(http://str80.streamakaci.com/index.html) [domdocument.load]: failed to open stream: HTTP request failed! ICY 404 Resource Not Found in /homez.383 etc.
pourtant la page existe bien
http://str80.streamakaci.com/index.html
merci d'avance

ViPHP
ViPHP | 5462 Messages

19 oct. 2010, 15:39

a mon avis il attend un User agent, mais surpise si tu fais juste :
print_r(get_headers('http://str80.streamakaci.com/', true));
t'as tout les infos direct :wink: pas besion de parser la page

Eléphanteau du PHP | 23 Messages

19 oct. 2010, 16:04

ta ligne de code ne renvoie pas d'erreur mais le résultat le contient pas current song que je cherche à récupérer... :

Code : Tout sélectionner

Array ( [0] => ICY 200 OK [icy-notice1] => This stream requires Winamp [icy-notice2] => SHOUTcast Distributed Network Audio Server/Linux v1.9.8 [icy-name] => ALOUETTE [icy-genre] => Top 40 [icy-url] => http://www.alouette.fr [content-type] => audio/mpeg [icy-pub]
merci de chercher avec moi

ViPHP
ViPHP | 5462 Messages

19 oct. 2010, 16:11

t'as regarder dans la doc de shoutcast comment on récupère les données de l'extérieur ?

Eléphanteau du PHP | 23 Messages

19 oct. 2010, 16:53

t'as regarder dans la doc de shoutcast comment on récupère les données de l'extérieur ?
je cherche et cherche de partout depuis des jours :(
c'est quand même dingue de se prendre la tête pour un truc qui devrait être simple : afficher le titre en cours d'une radio web

ViPHP
ViPHP | 5462 Messages

19 oct. 2010, 16:56

t'as regarder dans la doc de shoutcast comment on récupère les données de l'extérieur ?
je cherche et cherche de partout depuis des jours :(
c'est quand même dingue de se prendre la tête pour un truc qui devrait être simple : afficher le titre en cours d'une radio web
dans l'admin y'a pas une page XML ?

mais sinon c'est pas grave fais ton code de depart melangé au DOMDocument sauf que cette fois ci tu fais loadHTML($content)

Eléphanteau du PHP | 23 Messages

19 oct. 2010, 17:18

peux tu être un peu plus précis :priere:
Pour l'instant j'ai des warning avec fsockopen ou avec DOMDocument
impossible d'accéder à l'information grrrrr

ViPHP
ViPHP | 5462 Messages

19 oct. 2010, 17:26

tu peux direct mettre le user-agent quand tu le charge, et les warning c'est normale leur page n'est pas valide, il faut éteindre les erreurs
la requete pour allé chercher le son c'est pareil y'a pas d'id ni rien,
$context = stream_context_create();
stream_context_set_option($context, 'http', 'header', 'user-agent:' . $_SERVER['HTTP_USER_AGENT']);

libxml_set_streams_context($context);
libxml_use_internal_errors(true);

$doc = new DOMDocument();
$doc->loadHTMLFile('http://str80.streamakaci.com/');

$xpath = new DOMXPath($doc);
$query = $xpath->query('//td[contains(., "Current Song")]/../td[position() = last()]');

$song = $query->item(0)->nodeValue;

echo $song;
donc on va chercher :
le dernier noeud du type "td" du noeud parent au noeud du type "td" qui contient "Current Song" :mrgreen:

Eléphanteau du PHP | 23 Messages

19 oct. 2010, 18:11

merci beaucoup, ça marche : je vais étudier tout ça =D>
Dis moi y'a un moyen d'apprendre ce ce code diabolique avec les //*^^[}' (même un tire de bouquin)
encore merci :D

ViPHP
ViPHP | 5462 Messages

19 oct. 2010, 18:13

merci beaucoup, ça marche : je vais étudier tout ça =D>
Dis moi y'a un moyen d'apprendre ce ce code diabolique avec les //*^^[}' (même un tire de bouquin)
encore merci :D
c'est du xpath :wink:
http://fr.wikipedia.org/wiki/XPath
http://www.w3.org/TR/xpath/

Eléphanteau du PHP | 23 Messages

19 oct. 2010, 22:15

encore une tit' question :oops:
Lorsque le serveur est down j'ai bien évidemment un beau
Warning: DOMDocument::loadHTMLFile(http://str80.streamakaci.com/) [domdocument.loadhtmlfile]: failed to open stream: Connection timed out in

Est-il possible de faire une condition du style if (le serveur répond pas) {echo 'serveur down'} else {le script qui va bien};