p0rt
16th September 2011, 04:09
fully works and returns array of standard stats from sc_serv 2
use this function anywhere in while() { etc
/**
* SHOUTCAST - NULL NUKE
* get shoutcast server info
* $in_host = 127.0.0.1
* $in_port = 8000
* $in_sid = 1 [ DNAS stream id 1-7]
* $in_timeout = 1sec timeout to get stats
*/
function shoutcast($in_host, $in_port = 8000, $in_sid = 1, $in_timeout = 1) {
global $phpEx;
// /*
// RETURN/s
// $array['status']
// $array['listener']
// $array['maxlisteners']
// $array['peak']
// $array['title']
// $array['content_type']
// $array['genre']
// $array['url']
// $array['track']
// */
include_once "core_ShoutcastInfo.php";
$_SERVER['shoutcast'] = new ShoutcastInfo( '', '', '', '');
return $_SERVER['shoutcast'] -> ShoutcastInfo($in_host, $in_port, $in_sid, $in_timeout);
}
save the following code as core_ShoutcastInfo.php
<?php
/**
/* p0rt = NULL NUKE = MADE RETURN ARRAY - SC_SERV 2
*/
/***************************************************************************
* ShoutcastInfo Class
* -------------------
* begin : Wednesday, Aug 18, 2004 - 4:12
* copyright : (C) 2004 MC Breit
* email : support@mcb.cc - MCB.CC - Free and Open Sources
* last modified : 18/08/04 - 06:26 - MC Breit
* version : 0.0.2
*
* last modified : 16/09/11 - 06:26 - p0rt
* version : 0.0.x
*
***************************************************************************/
/***************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
***************************************************************************/
//
// Begin ShoutcastInfo class.
//
class ShoutcastInfo
{
//
// Begin of class variables
//
/*****
* @var $sock
* contains the socket handler.
*/
var $sock = FALSE;
/*****
* @var $error
* saves errorstr and numbers as array(no,str)
*/
var $error = array(NULL, NULL);
/*****
* @var $host
* contains the hostname for shoutcast server
*/
var $hostname = NULL;
/*****
* @var $port
* contains the port used for connection
*/
var $port = NULL;
/*****
* @var $sid
* contains the stream id used for sc_serv 2
*/
var $sid = NULL;
/*****
* @var $timeout
* the timeout for connection
*/
var $timeout = NULL;
/*****
* @var $parsed
* is true when datas where parsed
*/
var $parsed = FALSE;
/****
* @var $datas
* contains the unparsed datas
*/
var $datas = NULL;
/*****
* @var $pdatas
* assitioative array of parsed datas
*/
var $pdatas = NULL;
//
// Begin of class functions
//
/*****
* object ShoutcastInfo(string hostname [, int port [, int timeout])
* Crates an new Shoutcast Object. (Is the Class Creator)
*/
function ShoutcastInfo($hostname, $port=8888, $sid=1, $timeout=1)
{
$this->hostname = $hostname;
$this->port = $port;
$this->sid = $sid;
$this->timeout = $timeout;
if ( $this->connect() ) {
$this->send();
$array['status'] = $this->get_stat();
$array['listener'] = $this->get_listener();
$array['maxlisteners'] = $this->get_maxlisteners();
$array['peak'] = $this->get_peak();
$array['title'] = $this->get_title();
$array['content_type'] = $this->get_content_type();
$array['genre'] = $this->get_genre();
$array['url'] = $this->get_url();
$array['track'] = $this->get_track();
echo $array['track'];
$this->close();
return $array;
} else {
return (bool)FALSE;
}
} // ShoutcastInfo()
//
// Begin of socket and connection functions
//
/*****
* bool connect( void )
* creates server connection, returns true on success, else retruns false.
*/
function connect()
{
if( !$this->sock )
{
//Connect
$this->sock = fsockopen($this->hostname, $this->port, $this->error[0] , $this->error[1], $this->timeout);
}
//Check connection
if( $this->sock )
{
return TRUE;
}
else
{
$this->close();
return FALSE;
}
} // connect()
/*****
* bool close( void )
* closes current connection
*/
function close()
{
if( $this->sock )
{
fclose($this->sock);
}
} // close()
/*****
* bool refresh( void )
* closes connection and opens it again to get new datas.
* parsed datas will not replaced, but parsing will be
* able again.
*/
function refresh()
{
$this->close();
$this->sock = NULL;
if( !$this->connect() )
{
return FALSE;
}
$this->parsed = FALSE;
$this->send();
return TRUE;
} // refresh()
/*****
* void send( void )
* Sends http header and recives datas from server
*/
function send()
{
if( $this->sock )
{
//Send HTTP Header
fputs($this->sock, "GET /index.html?sid=". $this->sid ." HTTP/1.1\r\n"
."Host: 127.0.0.1/\r\n"
."User-Agent: Mozilla/5.0 Firefox/3.6.12)\r\n"
."Connection: Close\r\n"
."\r\n"
);
//Get datas
$this->datas = NULL;
while( !feof($this->sock) )
{
$this->datas .= fgets($this->sock, 128);
}
}
} // send()
/*****
* mixed error( [bool return])
* if return is true it will return a error message,
* else it will print it out (HTML Formatted!).
*/
function error($return=FALSE)
{
if( $return == FALSE )
{
print "<br><b>Error:</b> {$this->error[1]} (<i>{$this->error[0]}</i>)<br>";
return;
}
return "{$this->error[1]} ({$this->error[0]})";
}
//
// Begin of public functions
//
/*****
* bool get_stat( void )
* Checks that stream will be up and private/public.
*/
function get_stat()
{
if( strstr($this->datas, 'Server is currently up and') )
{
$this->pdatas['status'] = 1;
return TRUE;
}
else
{
$this->pdatas['status'] = 0;
return FALSE;
}
} // get_stat()
/*****
* integer get_listener( void )
* returns and resets the number of accutal listener.
*/
function get_listener()
{
//Is stream up?
if( $this->pdatas['status'] == 0 )
{
$this->pdatas['listener'] = 0;
return 0;
}
$this->pdatas['listener_max'] = explode('kbps with', $this->datas);
$this->pdatas['listener'] = explode(' of ', $this->pdatas['listener_max'][1]);
$this->pdatas['listener_max'] = $this->pdatas['listener'][1];
$this->pdatas['listener'] = $this->pdatas['listener'][0];
$this->pdatas['listener_max'] = explode(' l', $this->pdatas['listener_max']);
$this->pdatas['listener_max'] = $this->pdatas['listener_max'][0];
return $this->pdatas['listener'];
} // get_listener()
/*****
* integer get_maxlisteners( void )
* return max listeners - limit.
*/
function get_maxlisteners()
{
//Is stream up?
if( $this->pdatas['status'] == 0 )
{
$this->pdatas['listener'] = 0;
return 0;
}
$this->pdatas['listener_max'] = explode('kbps with ', $this->datas);
$this->pdatas['listener'] = explode(' of ', $this->pdatas['listener_max'][1]);
$this->pdatas['listener_max'] = $this->pdatas['listener'][1];
$this->pdatas['listener'] = $this->pdatas['listener'][0];
$this->pdatas['listener_max'] = explode(' l', $this->pdatas['listener_max']);
$this->pdatas['listener_max'] = $this->pdatas['listener_max'][0];
return $this->pdatas['listener_max'];
} // get_listener()
/*****
* integer get_peak( void )
* returns the listener peak from stream and resets it.
*/
function get_peak()
{
$this->pdatas['peak'] = $this->_extract_datas('Listener Peak: </font></td><td><font class="default"><b>');
return $this->pdatas['peak'];
} // get_peak()
/*****
* string get_title( void )
* returns and resetts the actual moderator/dj/stream_title at stream.
*/
function get_title()
{
//Is stream up?
if( $this->pdatas['status'] == 0 )
{
$this->pdatas['title'] = FALSE;
return FALSE;
}
$this->pdatas['title'] = $this->_extract_datas('Stream Name: </font></td><td><font class="default"><b>');
return $this->pdatas['title'];
} // get_title()
/*****
* string get_content_type( void )
* returns and resetts the actual ContentType at stream.
*/
function get_content_type()
{
//Is stream up?
if( $this->pdatas['status'] == 0 )
{
$this->pdatas['content_type'] = FALSE;
return FALSE;
}
$this->pdatas['content_type'] = $this->_extract_datas('Content Type: </font></td><td><font class="default"><b>');
return $this->pdatas['content_type'];
} // get_content_type()
/*****
* string get_genre( void )
* returns and resetts the actual Stream Genre.
*/
function get_genre()
{
//Is stream up?
if( $this->pdatas['status'] == 0 )
{
$this->pdatas['genre'] = FALSE;
return FALSE;
}
$this->pdatas['genre'] = $this->_extract_datas('Stream Genre: </font></td><td><font class="default"><b>');
return $this->pdatas['genre'];
} // get_genre()
/*****
* string get_url( void )
* returns and resetts the actual Stream URL.
*/
function get_url()
{
//Is stream up?
if( $this->pdatas['status'] == 0 )
{
$this->pdatas['url'] = 'none';
return 'none';
}
$this->pdatas['url'] = $this->_extract_datas('Stream URL: </font></td><td><font class="default"><b><a href="', '"');
return $this->pdatas['url'];
} // get_url()
/*****
* string get_track( void )
* returns and resetts the current track informations.
*/
function get_track()
{
//Is stream up?
if( $this->pdatas['status'] == 0 )
{
$this->pdatas['get_track'] = 'none';
return 'none';
}
// $sid =
$this->pdatas['get_track'] = $this->_extract_datas('Current Song: </font></td><td><font class="default"><b><a href="currentsong?sid='. $this->sid .'">', '"');
return $this->pdatas['get_track'];
} // get_track()
/*****
* array parse( void )
* get all the items aviable and return an assoc array.
* Note: Use this only if you need ALL the informations!
*/
function parse()
{
if( $this->parsed != TRUE )
{
//get all single infos
$this->get_stat();
$this->get_listener();
$this->get_maxlisteners();
$this->get_peak();
$this->get_title();
$this->get_content_type();
$this->get_genre();
$this->get_url();
$this->get_track();
//set parsed stat
$this->parsed = TRUE;
}
return $this->pdatas;
} // parse()
/*****
* mixed get_parsed_value( string key )
* Sucht aus dem geparsten array einen wert herraus und gibt ihn zurück
* wenn er noch nicht gesetzt ist wird NULL zurückgegeben.
*/
function get_parsed_value($key)
{
return ( isset($this->pdatas[$key]) ) ? $this->pdatas[$key] : FALSE;
} // get_parsed_value()
//
// Begin private functions
//
/*****
* private mixed _extract_datas(string match_str [, string ending])
* extracts and returns datas after an match_string and before net html tag or ending.
*/
function _extract_datas($match_str, $ending='<')
{
$datas = strstr($this->datas, $match_str);
//remove match_str because strstr starts before..
$datas = str_replace($match_str, '', $datas);
//split text after ending mark and throw all away isnt needed.
$datas = explode($ending, $datas);
return $datas[0];
} // _extract_datas()
} // ShoutcastInfo class
//
// Thats it folks!
//
?>
use this function anywhere in while() { etc
/**
* SHOUTCAST - NULL NUKE
* get shoutcast server info
* $in_host = 127.0.0.1
* $in_port = 8000
* $in_sid = 1 [ DNAS stream id 1-7]
* $in_timeout = 1sec timeout to get stats
*/
function shoutcast($in_host, $in_port = 8000, $in_sid = 1, $in_timeout = 1) {
global $phpEx;
// /*
// RETURN/s
// $array['status']
// $array['listener']
// $array['maxlisteners']
// $array['peak']
// $array['title']
// $array['content_type']
// $array['genre']
// $array['url']
// $array['track']
// */
include_once "core_ShoutcastInfo.php";
$_SERVER['shoutcast'] = new ShoutcastInfo( '', '', '', '');
return $_SERVER['shoutcast'] -> ShoutcastInfo($in_host, $in_port, $in_sid, $in_timeout);
}
save the following code as core_ShoutcastInfo.php
<?php
/**
/* p0rt = NULL NUKE = MADE RETURN ARRAY - SC_SERV 2
*/
/***************************************************************************
* ShoutcastInfo Class
* -------------------
* begin : Wednesday, Aug 18, 2004 - 4:12
* copyright : (C) 2004 MC Breit
* email : support@mcb.cc - MCB.CC - Free and Open Sources
* last modified : 18/08/04 - 06:26 - MC Breit
* version : 0.0.2
*
* last modified : 16/09/11 - 06:26 - p0rt
* version : 0.0.x
*
***************************************************************************/
/***************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
***************************************************************************/
//
// Begin ShoutcastInfo class.
//
class ShoutcastInfo
{
//
// Begin of class variables
//
/*****
* @var $sock
* contains the socket handler.
*/
var $sock = FALSE;
/*****
* @var $error
* saves errorstr and numbers as array(no,str)
*/
var $error = array(NULL, NULL);
/*****
* @var $host
* contains the hostname for shoutcast server
*/
var $hostname = NULL;
/*****
* @var $port
* contains the port used for connection
*/
var $port = NULL;
/*****
* @var $sid
* contains the stream id used for sc_serv 2
*/
var $sid = NULL;
/*****
* @var $timeout
* the timeout for connection
*/
var $timeout = NULL;
/*****
* @var $parsed
* is true when datas where parsed
*/
var $parsed = FALSE;
/****
* @var $datas
* contains the unparsed datas
*/
var $datas = NULL;
/*****
* @var $pdatas
* assitioative array of parsed datas
*/
var $pdatas = NULL;
//
// Begin of class functions
//
/*****
* object ShoutcastInfo(string hostname [, int port [, int timeout])
* Crates an new Shoutcast Object. (Is the Class Creator)
*/
function ShoutcastInfo($hostname, $port=8888, $sid=1, $timeout=1)
{
$this->hostname = $hostname;
$this->port = $port;
$this->sid = $sid;
$this->timeout = $timeout;
if ( $this->connect() ) {
$this->send();
$array['status'] = $this->get_stat();
$array['listener'] = $this->get_listener();
$array['maxlisteners'] = $this->get_maxlisteners();
$array['peak'] = $this->get_peak();
$array['title'] = $this->get_title();
$array['content_type'] = $this->get_content_type();
$array['genre'] = $this->get_genre();
$array['url'] = $this->get_url();
$array['track'] = $this->get_track();
echo $array['track'];
$this->close();
return $array;
} else {
return (bool)FALSE;
}
} // ShoutcastInfo()
//
// Begin of socket and connection functions
//
/*****
* bool connect( void )
* creates server connection, returns true on success, else retruns false.
*/
function connect()
{
if( !$this->sock )
{
//Connect
$this->sock = fsockopen($this->hostname, $this->port, $this->error[0] , $this->error[1], $this->timeout);
}
//Check connection
if( $this->sock )
{
return TRUE;
}
else
{
$this->close();
return FALSE;
}
} // connect()
/*****
* bool close( void )
* closes current connection
*/
function close()
{
if( $this->sock )
{
fclose($this->sock);
}
} // close()
/*****
* bool refresh( void )
* closes connection and opens it again to get new datas.
* parsed datas will not replaced, but parsing will be
* able again.
*/
function refresh()
{
$this->close();
$this->sock = NULL;
if( !$this->connect() )
{
return FALSE;
}
$this->parsed = FALSE;
$this->send();
return TRUE;
} // refresh()
/*****
* void send( void )
* Sends http header and recives datas from server
*/
function send()
{
if( $this->sock )
{
//Send HTTP Header
fputs($this->sock, "GET /index.html?sid=". $this->sid ." HTTP/1.1\r\n"
."Host: 127.0.0.1/\r\n"
."User-Agent: Mozilla/5.0 Firefox/3.6.12)\r\n"
."Connection: Close\r\n"
."\r\n"
);
//Get datas
$this->datas = NULL;
while( !feof($this->sock) )
{
$this->datas .= fgets($this->sock, 128);
}
}
} // send()
/*****
* mixed error( [bool return])
* if return is true it will return a error message,
* else it will print it out (HTML Formatted!).
*/
function error($return=FALSE)
{
if( $return == FALSE )
{
print "<br><b>Error:</b> {$this->error[1]} (<i>{$this->error[0]}</i>)<br>";
return;
}
return "{$this->error[1]} ({$this->error[0]})";
}
//
// Begin of public functions
//
/*****
* bool get_stat( void )
* Checks that stream will be up and private/public.
*/
function get_stat()
{
if( strstr($this->datas, 'Server is currently up and') )
{
$this->pdatas['status'] = 1;
return TRUE;
}
else
{
$this->pdatas['status'] = 0;
return FALSE;
}
} // get_stat()
/*****
* integer get_listener( void )
* returns and resets the number of accutal listener.
*/
function get_listener()
{
//Is stream up?
if( $this->pdatas['status'] == 0 )
{
$this->pdatas['listener'] = 0;
return 0;
}
$this->pdatas['listener_max'] = explode('kbps with', $this->datas);
$this->pdatas['listener'] = explode(' of ', $this->pdatas['listener_max'][1]);
$this->pdatas['listener_max'] = $this->pdatas['listener'][1];
$this->pdatas['listener'] = $this->pdatas['listener'][0];
$this->pdatas['listener_max'] = explode(' l', $this->pdatas['listener_max']);
$this->pdatas['listener_max'] = $this->pdatas['listener_max'][0];
return $this->pdatas['listener'];
} // get_listener()
/*****
* integer get_maxlisteners( void )
* return max listeners - limit.
*/
function get_maxlisteners()
{
//Is stream up?
if( $this->pdatas['status'] == 0 )
{
$this->pdatas['listener'] = 0;
return 0;
}
$this->pdatas['listener_max'] = explode('kbps with ', $this->datas);
$this->pdatas['listener'] = explode(' of ', $this->pdatas['listener_max'][1]);
$this->pdatas['listener_max'] = $this->pdatas['listener'][1];
$this->pdatas['listener'] = $this->pdatas['listener'][0];
$this->pdatas['listener_max'] = explode(' l', $this->pdatas['listener_max']);
$this->pdatas['listener_max'] = $this->pdatas['listener_max'][0];
return $this->pdatas['listener_max'];
} // get_listener()
/*****
* integer get_peak( void )
* returns the listener peak from stream and resets it.
*/
function get_peak()
{
$this->pdatas['peak'] = $this->_extract_datas('Listener Peak: </font></td><td><font class="default"><b>');
return $this->pdatas['peak'];
} // get_peak()
/*****
* string get_title( void )
* returns and resetts the actual moderator/dj/stream_title at stream.
*/
function get_title()
{
//Is stream up?
if( $this->pdatas['status'] == 0 )
{
$this->pdatas['title'] = FALSE;
return FALSE;
}
$this->pdatas['title'] = $this->_extract_datas('Stream Name: </font></td><td><font class="default"><b>');
return $this->pdatas['title'];
} // get_title()
/*****
* string get_content_type( void )
* returns and resetts the actual ContentType at stream.
*/
function get_content_type()
{
//Is stream up?
if( $this->pdatas['status'] == 0 )
{
$this->pdatas['content_type'] = FALSE;
return FALSE;
}
$this->pdatas['content_type'] = $this->_extract_datas('Content Type: </font></td><td><font class="default"><b>');
return $this->pdatas['content_type'];
} // get_content_type()
/*****
* string get_genre( void )
* returns and resetts the actual Stream Genre.
*/
function get_genre()
{
//Is stream up?
if( $this->pdatas['status'] == 0 )
{
$this->pdatas['genre'] = FALSE;
return FALSE;
}
$this->pdatas['genre'] = $this->_extract_datas('Stream Genre: </font></td><td><font class="default"><b>');
return $this->pdatas['genre'];
} // get_genre()
/*****
* string get_url( void )
* returns and resetts the actual Stream URL.
*/
function get_url()
{
//Is stream up?
if( $this->pdatas['status'] == 0 )
{
$this->pdatas['url'] = 'none';
return 'none';
}
$this->pdatas['url'] = $this->_extract_datas('Stream URL: </font></td><td><font class="default"><b><a href="', '"');
return $this->pdatas['url'];
} // get_url()
/*****
* string get_track( void )
* returns and resetts the current track informations.
*/
function get_track()
{
//Is stream up?
if( $this->pdatas['status'] == 0 )
{
$this->pdatas['get_track'] = 'none';
return 'none';
}
// $sid =
$this->pdatas['get_track'] = $this->_extract_datas('Current Song: </font></td><td><font class="default"><b><a href="currentsong?sid='. $this->sid .'">', '"');
return $this->pdatas['get_track'];
} // get_track()
/*****
* array parse( void )
* get all the items aviable and return an assoc array.
* Note: Use this only if you need ALL the informations!
*/
function parse()
{
if( $this->parsed != TRUE )
{
//get all single infos
$this->get_stat();
$this->get_listener();
$this->get_maxlisteners();
$this->get_peak();
$this->get_title();
$this->get_content_type();
$this->get_genre();
$this->get_url();
$this->get_track();
//set parsed stat
$this->parsed = TRUE;
}
return $this->pdatas;
} // parse()
/*****
* mixed get_parsed_value( string key )
* Sucht aus dem geparsten array einen wert herraus und gibt ihn zurück
* wenn er noch nicht gesetzt ist wird NULL zurückgegeben.
*/
function get_parsed_value($key)
{
return ( isset($this->pdatas[$key]) ) ? $this->pdatas[$key] : FALSE;
} // get_parsed_value()
//
// Begin private functions
//
/*****
* private mixed _extract_datas(string match_str [, string ending])
* extracts and returns datas after an match_string and before net html tag or ending.
*/
function _extract_datas($match_str, $ending='<')
{
$datas = strstr($this->datas, $match_str);
//remove match_str because strstr starts before..
$datas = str_replace($match_str, '', $datas);
//split text after ending mark and throw all away isnt needed.
$datas = explode($ending, $datas);
return $datas[0];
} // _extract_datas()
} // ShoutcastInfo class
//
// Thats it folks!
//
?>