'', 'bitrate' => '', 'currentlisteners' => '', 'maxlisteners' => '', 'servertitle' => '', 'songtitle' => ''); $shoutcast_xml = ""; global $shoutcast_data, $shoutcast_xml_element; if (!function_exists('startElement')) { // start element handler for xml parser 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')) { // end element handler for xml parser function endElement($parser, $name) { global $shoutcast_xml_element; // forget which xml element was being parsed $shoutcast_xml_element = ''; } } if (!function_exists('handleData')) { // character data handler for xml parser function handleData($parser, $data) { global $shoutcast_data, $shoutcast_xml_element; $shoutcast_data[$shoutcast_xml_element] .= $data; } } if (!function_exists('defaultHandler')) { // default handler function defaultHandler($parser, $data) {} } //open socket connection to the shoutcast server $shoutcast_fp = fsockopen($shoutcast_host, $shoutcast_port, $fsock_error_number, $fsock_error_text, $fsock_time_out); // check that the socket is open before proceeding 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, ''); // 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 '

'; echo $shoutcast_data['servertitle']; echo '
Streaming at '; echo $shoutcast_data['bitrate']; echo ' kbps.

'; echo '

Currently playing: '; echo $shoutcast_data['songtitle']; echo '

'; echo '

Current listeners: '; echo $shoutcast_data['currentlisteners']; echo ' (only '; echo $shoutcast_data['maxlisteners']; echo ' allowed).

'; if (intval($shoutcast_data['currentlisteners']) < intval($shoutcast_data['maxlisteners'])) { echo "

If you have Real Player installed, then "; echo "click the Play button on the console above. "; echo "Otherwise, to listen using Winamp "; echo "click here.

"; } else { echo "

Please wait until another listener can be added.

"; } } else { // no streaming content is available echo '

The station is online but service has been interrupted.

'; } } else { // parsing failed if (DEBUG) { echo 'XML Parser reported the following error:' . '
'; echo xml_error_string(xml_get_error_code($xml_parser)) . ' in line '; echo xml_get_current_line_number($xml_parser) . '
'; } } // the xml parser is no longer required xml_parser_free($xml_parser); } else { // socket connection could not be established echo '

The station is offline.

'; } ?>