Code: Select all
<?php
// Ramon Fincken, Phpbbinstallers.com
// Changed all Echo's to $shoutcast_phpbb_output .=
// shoutcastxml.php
// A SHOUTcast XML parser for PHP and Apache
// Copyright Peter Manchester B.Sc.
// All rights reserved
// 20th October 2002
// Web: www.petermanchester.co.uk
// Email: [email protected]
// turn off error reporting
error_reporting(0);
// DEBUG constant can be set to provide extra output when required
define ("DEBUG", "0");
// parameters for your SHOUTcast server - ** YOU WILL NEED TO CHANGE THESE **
$shoutcast_host = 'rgtunez.co.uk'; // SHOUTcast station url
$shoutcast_port = '8002'; // SHOUTcast station port number
$shoutcast_password = ''; // SHOUTcast password
$shoutcast_url = "http://" . $shoutcast_host . ':' . $shoutcast_port . "/listen.pls";
// end of parameters for your SHOUTcast server
// timeout period in seconds while contacting station
$fsock_time_out = 1;
// error number to be returned
$fsock_error_number = 0;
// error text to be returned
$fsock_error_text = "";
// an associative array to store the items we are interested in
$shoutcast_data = array('streamstatus' => '',
'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, '<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) {
$shoutcast_phpbb_output .= $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
$shoutcast_phpbb_output .= '<p>';
$shoutcast_phpbb_output .= $shoutcast_data['servertitle'];
$shoutcast_phpbb_output .= '<br />Streaming at ';
$shoutcast_phpbb_output .= $shoutcast_data['bitrate'];
$shoutcast_phpbb_output .= ' kbps.</p>';
$shoutcast_phpbb_output .= '<p>Currently playing: ';
$shoutcast_phpbb_output .= $shoutcast_data['songtitle'];
$shoutcast_phpbb_output .= '</p>';
$shoutcast_phpbb_output .= '<p>Current listeners: ';
$shoutcast_phpbb_output .= $shoutcast_data['currentlisteners'];
$shoutcast_phpbb_output .= ' (only ';
$shoutcast_phpbb_output .= $shoutcast_data['maxlisteners'];
$shoutcast_phpbb_output .= ' allowed).</p>';
if (intval($shoutcast_data['currentlisteners'])
< intval($shoutcast_data['maxlisteners'])) {
$shoutcast_phpbb_output .= "<p>If you have Real Player installed, then ";
$shoutcast_phpbb_output .= "click the Play button on the console above. ";
$shoutcast_phpbb_output .= "Otherwise, to listen using Winamp ";
$shoutcast_phpbb_output .= "click <a href=\"$shoutcast_url\">here</a>.</p>";
} else {
$shoutcast_phpbb_output .= "<p>Please wait until another listener can be added.</p>";
}
} else {
// no streaming content is available
$shoutcast_phpbb_output .= '<p>Radio is currently offline.</p>';
}
}
else {
// parsing failed
if (DEBUG) {
$shoutcast_phpbb_output .= 'XML Parser reported the following error:' . '<br />';
$shoutcast_phpbb_output .= xml_error_string(xml_get_error_code($xml_parser)) . ' in line ';
$shoutcast_phpbb_output .= 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
$shoutcast_phpbb_output .= '<p>The station is offline.</p>';
}
?>
Code: Select all
index.php
Code: Select all
$template->pparse('body');
Code: Select all
// shoutcast Panel - START
// MOD Ramon Fincken, Phpbbinstallers.com
include_once($phpbb_root_path . 'shoutcastparser.'.$phpEx);
$template->assign_block_vars('chield', array(
"SHOUTCAST_PHPBB_OUTPUT" => $shoutcast_phpbb_output));
// MOD Ramon Fincken
// shoutcast - END
Code: Select all
templates/[yourtemplatename]/index_body.tpl
Code: Select all
<table width="100%" border="0" cellpadding="0" cellspacing="0" class="forumline"><tr><td>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td class="catHead" colspan="2" height="28"><span class="cattitle">Radio</span></td>
</tr>
<tr><td class="row1" align="left"><p class="genmed">
<!-- BEGIN shoutcastparser -->
{shoutcastparser.SHOUTCAST_PHPBB_OUTPUT}
<!-- END shoutcastparser -->
<br /><br /></p></td></tr>
</table>
</td></tr></table>
Code: Select all
#edit
#// parameters for your SHOUTcast server - ** YOU WILL NEED TO CHANGE THESE **
#$shoutcast_host = 'rgtunez.co.uk'; // SHOUTcast station url
#$shoutcast_port = '8002'; // SHOUTcast station port number
#$shoutcast_password = ''; // SHOUTcast password
#$shoutcast_url = "http://" . $shoutcast_host . ':' . $shoutcast_port . "/listen.pls";
#// end of parameters for your SHOUTcast server