<?php
error_reporting(0);
define ("DEBUG", "0");
$shoutcast_host = '72.142.194.142'; // SHOUTcast station url
$shoutcast_port = '2962'; // SHOUTcast station port number
$shoutcast_password = 'nopassword'; // SHOUTcast password
$shoutcast_url = "http://" . $shoutcast_host . ':' . $shoutcast_port . "/listen.pls";
$fsock_time_out = 1;
$fsock_error_number = 0;
$fsock_error_text = "";
$shoutcast_data = array('streamstatus' => '',
'bitrate' => '',
'currentlisteners' => '',
'maxlisteners' => '',
'servertitle' => '',
'songtitle' => '');
$shoutcast_xml = "";
global $shoutcast_data, $shoutcast_xml_element;
if (!function_exists('startElement')) {
function startElement($parser, $name, $attrs) {
global $shoutcast_xml_element;
// track which xml element is being parsed
$shoutcast_xml_element = strtolower($name);
}
}
if (!function_exists('endElement')) {
function endElement($parser, $name) {
global $shoutcast_xml_element;
// forget which xml element was being parsed
$shoutcast_xml_element = '';
}
}
if (!function_exists('handleData')) {
function handleData($parser, $data) {
global $shoutcast_data, $shoutcast_xml_element;
$shoutcast_data[$shoutcast_xml_element] .= $data;
}
}
if (!function_exists('defaultHandler')) {
function defaultHandler($parser, $data) {}
}
$shoutcast_fp = fsockopen($shoutcast_host,
$shoutcast_port,
$fsock_error_number,
$fsock_error_text,
$fsock_time_out);
if($shoutcast_fp) {
// socket connection is established, so the station is on-line
// set 1 second timeout for communication with the station
// stream_set_timeout($shoutcast_fp, 1);
// build a string containing an HTTP request to your SHOUTcast server
$shoutcast_httpreq = "GET /admin.cgi?pass=$shoutcast_password&mode=viewxml
HTTP/1.0\r\nUser-Agent: SHOUTcast Song Status (Mozilla Compatible)\r\n\r\n";
// send HTTP request to shoutcast server
fputs($shoutcast_fp, $shoutcast_httpreq);
// read entire xml output stream
while(!feof($shoutcast_fp)) {
$shoutcast_xml .= fgets($shoutcast_fp, 1000);
}
// close the socket now we no longer need it
fclose($shoutcast_fp);
// if we have got some XML back then we need to strip away some
// stuff that we don't need
if ($shoutcast_xml != '')
$shoutcast_xml = strstr($shoutcast_xml, '<SHOUTCASTSERVER>');
// create an instane of the EXPAT XML parser
$xml_parser = xml_parser_create();
// set element start and end element handler functions
xml_set_element_handler($xml_parser, 'startElement', 'endElement');
// set character data handler function
xml_set_character_data_handler($xml_parser, 'handleData');
xml_set_default_handler($xml_parser, 'defaultHandler');
// activate the XML parser
$parsed = xml_parse($xml_parser, $shoutcast_xml, 1);
// some debugging code
if (DEBUG) {
echo $shoutcast_xml;
print_r ($shoutcast_data);
}
// check that the parsing operation worked correctly
if ($parsed) {
// it worked, so report the station status
if ($shoutcast_data['streamstatus'] == '1') {
// streaming content is available
echo '<p>';
echo $shoutcast_data['servertitle'];
echo '<br />Streaming at ';
echo $shoutcast_data['bitrate'];
echo ' kbps.</p>';
echo '<p>Currently playing: ';
echo $shoutcast_data['songtitle'];
echo '</p>';
echo '<p>Current listeners: ';
echo $shoutcast_data['currentlisteners'];
echo ' (only ';
echo $shoutcast_data['maxlisteners'];
echo ' allowed).</p>';
if (intval($shoutcast_data['currentlisteners'])
< intval($shoutcast_data['maxlisteners'])) {
echo "<p>If you have Real Player installed, then ";
echo "click the Play button on the console above. ";
echo "Otherwise, to listen using Winamp ";
echo "click <a href=\"$shoutcast_url\">here</a>.</p>";
} else {
echo "<p>Please wait until another listener can be added.</p>";
}
} else {
// no streaming content is available
echo '<p>The station is online but service has been interrupted.</p>';
}
}
else {
// parsing failed
if (DEBUG) {
echo 'XML Parser reported the following error:' . '<br />';
echo xml_error_string(xml_get_error_code($xml_parser)) . ' in line ';
echo xml_get_current_line_number($xml_parser) . '<br />';
}
}
// the xml parser is no longer required
xml_parser_free($xml_parser);
} else {
// socket connection could not be established
echo '<p>The station is offline.</p>';
}
?>