2009-10-03 13 views
2

Fondamentalement, juste un script simple qui peut vérifier pour voir si une radio shoutcast est en ligne ou non, et produire un code basé sur elle.Vérification simple (PHP) pour voir si la radio Shoutcast est en ligne?

J'ai essayé de le faire avec file_get_contents et eregi, mais cela n'a pas semblé fonctionner, ou était waaaaay de ralentir.

Cheers.

:)

+4

commencer à abandonner progressivement l'utilisation de 'eregi'. http://php.net/eregi – random

+3

Et ce qui indique que le shoutcase est en ligne? – Gumbo

Répondre

1

Utilisez fsockopen et vérifier l'erreur.

$fp = fsockopen("www.example.com", 8000, $errno, $errstr, 1); //last param is timeout in seconds 
if (!$fp) { 
    echo "$errstr ($errno)<br />\n"; // radio offline 
} else { 
    fclose($fp); // radio OK 
} 

Vous devez essayer de déterminer la timeout mais il pourrait être préférable d'exécuter ce avec un plus grand délai d'attente régulièrement sur fond avec Cron et enregistrer les résultats quelque part.

3

La réponse de Sorki est très bien si vous voulez juste déterminer que le serveur fonctionne, mais comme Gumbo l'a souligné, il existe différents niveaux de "online".

Par exemple, le serveur peut être désactivé afin qu'il n'accepte pas les connexions de flux. Le serveur peut accepter les connexions de flux, mais la source peut être déconnectée.

Pour cela, vous devez vérifier l'état dans /7.html. Frappez ceci avec "Mozilla" dans la chaîne user-agent quelque part. Vous obtiendrez quelque chose comme ceci:

2,1,22,625,2,128,How Far To Austin - Don't Get Me Wrong 

Le champ de données sont:

listeners, status, peak listeners, maximum listeners, unique listeners, bitrate, track meta 

Facile à analyser ... juste faire une explosion() sur elle.

0

Si c'est votre radio (vous connaissez le mot de passe et le nom d'utilisateur), vous pouvez utiliser un CURL. Essayez obtenir un xml- de $> Valeur STREAMSTATUS de ce morceau de code:

<?php 

$useragent = "Mozilla (DNAS 2 Statuscheck)"; 
$sc_host = '192.168.0.1'; 
$sc_port = '8000'; 
$sc_user = 'admin'; 
$sc_pass = 'XXXXX'; 
$sc_sid  = '1'; 


$ch = curl_init($sc_host . '/admin.cgi?mode=viewxml&sid=$sc_sid'); 

curl_setopt($ch, CURLOPT_PORT, $sc_port); 
curl_setopt($ch, CURLOPT_USERAGENT, $useragent); 
curl_setopt($ch, CURLOPT_TIMEOUT, 5); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
curl_setopt($ch, CURLOPT_USERPWD, $sc_user . ':' . $sc_pass); 

$curl = curl_exec($ch); 

if ($curl) 
{ 
    $xml = simplexml_load_string($curl); 


    // THIS IS THE ANSWER FOR YOUR QUESTION: 
    var_dump($xml->STREAMSTATUS); 

    // if retuns 1 - radio is online 
    // if retuns 0 - radio is offline  

} 
else 
{ 
    die('Could not connect to dnas-server!'); 
} 
?> 

profiter