基本的には、Shoutcast ラジオがオンラインかどうかを確認し、それに基づいてコードを出力する単純なスクリプトです。
file_get_contents と eregi でこれを実行しようとしましたが、動作していないようでした。
乾杯。
:)
サーバーが実行されていることを確認したいだけなら、Sorkiの答えは問題ありませんが、Gumboが指摘したように、「オンライン」にはさまざまなレベルがあります。
たとえば、サーバーを無効にして、ストリーム接続を受け入れないようにすることができます。サーバーはストリーム接続を受け入れている可能性がありますが、ソースが切断されている可能性があります。
このためには、/7.htmlでステータスを確認する必要があります。どこかのユーザーエージェント文字列の「Mozilla」でこれをヒットします。次のようなものが返されます。
2,1,22,625,2,128,How Far To Austin - Don't Get Me Wrong
データフィールドは次のとおりです。
listeners, status, peak listeners, maximum listeners, unique listeners, bitrate, track meta
解析は簡単です...それに対してexplode()を実行するだけです。
fsockopen を使用して、エラーを確認します。
$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
}
試して決定する必要timeout
がありますが、cron を使用してバックグラウンドで定期的に大きなタイムアウトでこれを実行し、結果をどこかに保存するのが最善の場合があります。
ラジオの場合 (パスワードとユーザー名を知っている場合)、CURL を使用できます。そのコードから $xml->STREAMSTATUS 値を取得してみてください:
<?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!');
}
?>
楽しい