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.

:)

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top