简单检查(PHP)以查看Shoutcast无线电是否在线?

时间:2009-10-03 14:49:40

标签: php radio status shoutcast

基本上,只是一个简单的脚本,可以检查shoutcast无线电是否在线,并输出基于它的代码。

我尝试使用file_get_contents和eregi执行此操作,但它似乎无法正常工作,或者可能会慢下来。

干杯。

:)

3 个答案:

答案 0 :(得分:3)

如果您只想确定服务器正在运行,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

易于解析...只需对其进行爆炸()。

答案 1 :(得分:1)

使用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的背景上定期运行更大的超时并在某处保存结果。

答案 2 :(得分:0)

如果是你的收音机(你知道密码和用户名),你可以使用CURL。尝试从该段代码中获取$ xml-&gt; 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!');
}
?> 

享受