PHP Classes

File: ShoutcastInfo.class.php

Recommend this page to a friend!
  Classes of MC Breit   Shoutcast Info   ShoutcastInfo.class.php   Download  
File: ShoutcastInfo.class.php
Role: Class source
Content type: text/plain
Description: The main class
Class: Shoutcast Info
Get status information from shoutcast servers
Author: By
Last change:
Date: 17 years ago
Size: 11,580 bytes
 

Contents

Class file image Download
<?php /*************************************************************************** * 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 * ***************************************************************************/ /*************************************************************************** * * 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 $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, $timeout=30) { $this->hostname = $hostname; $this->port = $port; $this->timeout = $timeout; } // 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 { 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 / HTTP/1.0\r\n" ."Host: 127.0.0.1\r\n" ."User-Agent: Mozilla/4.0 (compatible; ShoutCastInfoClass/0.0.2; ".PHP_OS.")\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 <B>', $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_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 Title: </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_icq( void ) * returns and resetts the actual Stream ICQ. */ function get_icq() { //Is stream up? if( $this->pdatas['status'] == 0 ) { $this->pdatas['icq'] = FALSE; return FALSE; } $this->pdatas['icq'] = $this->_extract_datas('ICQ: </font></td><td><font class=default><b><a href="http://wwp.icq.com/scripts/contact.dll?msgto=', '"'); //ICQ is aviable? $this->pdatas['icq'] = ( $this->pdatas['icq'] == 'NA' ) ? FALSE : $this->pdatas['icq']; return $this->pdatas['icq']; } // get_icq() /***** * string get_aim( void ) * returns and resetts the actual Stream AIM. */ function get_aim() { //Is stream up? if( $this->pdatas['status'] == 0 ) { $this->pdatas['aim'] = FALSE; return FALSE; } $this->pdatas['aim'] = $this->_extract_datas('AIM: </font></td><td><font class=default><b><a href="aim:goim?screenname=', '"'); //AIM is aviable? $this->pdatas['aim'] = ( $this->pdatas['aim'] == 'NA' ) ? FALSE : $this->pdatas['aim']; return $this->pdatas['aim']; } // get_aim() /***** * string get_irc( void ) * returns and resetts the actual Stream IRC. * Note: This often is not a valid form of URL! */ function get_irc() { //Is stream up? if( $this->pdatas['status'] == 0 ) { $this->pdatas['irc'] = FALSE; return FALSE; } $this->pdatas['irc'] = $this->_extract_datas('Stream IRC: </font></td><td><font class=default><b><a href="'); $this->pdatas['irc'] = strstr($this->pdatas['irc'], '">'); $this->pdatas['irc'] = substr($this->pdatas['irc'], 2); return $this->pdatas['irc']; } // get_irc() /***** * string get_track( void ) * returns and resetts the current track informations. */ function get_track() { //Is stream up? if( $this->pdatas['status'] == 0 ) { $this->pdatas['track'] = FALSE; return FALSE; } $this->pdatas['track'] = $this->_extract_datas('Current Song: </font></td><td><font class=default><b>'); return $this->pdatas['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_peak(); $this->get_title(); $this->get_content_type(); $this->get_genre(); $this->get_url(); $this->get_icq(); $this->get_aim(); $this->get_irc(); $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! // ?>