semplice controllo (PHP) per vedere se Shoutcast radio è on-line?
Domanda
In sostanza, solo un semplice script che può controllare per vedere se una radio Shoutcast è in linea o no, e l'uscita di un codice basato su di esso.
Ho provato a fare questo con file_get_contents e eregi, ma non sembra funzionare, o era waaaaay a rallentare.
Saluti.
:)
Soluzione
Utilizzare fsockopen e controllare l'errore.
$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
}
Si deve cercare di determinare l'timeout
ma potrebbe essere migliore per eseguire questo con grande timeout regolarmente sul fondo con cron e salvare i risultati da qualche parte.
Altri suggerimenti
La risposta di Sorki va bene se si desidera solo per determinare che il server è in esecuzione, ma come Gumbo ha sottolineato, ci sono diversi livelli di "on-line".
Ad esempio, il server può essere disattivata in modo che non accetta le connessioni del flusso. Il server potrebbe essere accettando i collegamenti del flusso, ma la fonte può essere scollegata.
Per questo, è necessario controllare lo stato in /7.html. Hit questo con "Mozilla" nella stringa user-agent da qualche parte. Otterrete qualcosa di simile:
2,1,22,625,2,128,How Far To Austin - Don't Get Me Wrong
Il campo dati sono:
listeners, status, peak listeners, maximum listeners, unique listeners, bitrate, track meta
facile da analizzare ... basta fare un esplodere () su di esso.
Se è la radio (si sa password e nome utente), è possibile utilizzare un ricciolo. Prova ottenere un $ XML> Valore STREAMSTATUS da quel pezzo di codice:
<?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!');
}
?>
godere