1.2 changes by shr: - file_get_contents() function has been replaced on the getIccupTeamPage() based on sockets - omptimized performance: the old filters have been removed due to changes in the code on the server side - added description of the full path to cache file and word 'full' has been replaced to 'absolute' for better understanding ver 1.0->1.1 changes by b1te: -added install steps instruction -fixed "ICCup is not accessible" while cached file is -fixed image tag parsing error, which lead to 'height=... text near country and rank images -changed user options configuration code -added statistics column order option -changed client-side html parsing code -omptimized overall performance installation: 1) edit CONFIG section of this file 2) save it to your web-server with the .php extension -on some servers it may be .php3 , .php4 or .php5 3) add this code line into place where you want ICCup statistics to be displayed: include_once('path'); where path - is a path to this file on yours web-server -important: this line must be inserted into some other php module, not into the site template. except, if you have smarty templates in your site`s engine then you can this code to it: {php}include_once('path');{/php} 4) enjoy :) */ //-------------------------- CONFIG ------------------------- // user defined options: // change value to false for temporary display disabling define('ICCUP_TEAM_STATISTICS_ENABLED',true); // team page on ICCup // if you use free hosting set parameters listed below to local page, u should // open http://www.iccup.com/teams/[your team id]/webstats.html , save // its output to your hard drive and manually upload on webserver // if your hosting support sockets/connections just change MY_TEAM parameter // http address of ICCup -no need to change define('ICCUP','http://www.iccup.com/'); // domain name of ICCup - no need to change define('ICCUP_DOMAIN','www.iccup.com'); // ICCup teams stats page -no need to change define('TEAMS_PAGE','/teams/webstats/'); // your team unique ID, replace 1 with it define('MY_TEAM','19156'); // set page output parameter for use in this script -no need to change define('PAGE_OUTPUT','.html'); // link to this page on ICCup from 1x1 table header define('LADDER_1X1_PAGE','ladder/1x1.html'); // link to this page on ICCup from 2x2 table header define('LADDER_2X2_PAGE','ladder/2x2.html'); //colors for rank icons //color for ultimate rank define('A2_COLOR','orange'); //color for A- A ranks define('A_COLOR','darkgreen'); //color for B ranks define('B_COLOR','blue'); //color for C ranks define('C_COLOR','yellow'); //color for D ranks define('D_COLOR','darkred'); // change to false if your server don`t support local file access // this file is used to cache created statistics table // its not reccomended turning off this feature define('CACHE_ENABLED',true); // absolute path to cache file on your host computer, e.g. from root derectory // for example, /home/username/domain.com/docs/iccup_stats.cache // in some cases you might have to create this file first time // manually, and set access permissions to 777 for it define('CACHE_FILE_PATH','iccup_stats.cache'); // ICCup statistics refresh interval time in seconds define('CACHE_EXPIRES',3600); // timeout in seconds for connecting and getting stats from iCCup define("SOCKET_TIMEOUT",30); // choose what you want to be displayed in stats table // true -display false -don`t // show 1x1 ICCup team statistics define('DISPLAY_1X1_STATISTICS_TABLE',true); // show title at top of 1x1 stats table define('DISPLAY_1X1_TABLE_TITLE',true); // show 2x2 ICCup team statistics define('DISPLAY_2X2_STATISTICS_TABLE',true); // show title at top of 2x2 stats table define('DISPLAY_2X2_TABLE_TITLE',true); // show column headers for both stats tables define('DISPLAY_COLUMN_HEADERS',true); // show last statistics update date&time define('DISPLAY_LAST_UPDATE',true); // you can change column order, by changing positions of each column in this // string. or just delete one of them, then it won`t be displayed. no spaces // allowed. separation only with comma`s. define('DISPLAY_COLUMNS_ORDER','country,rank,player,points,stats'); // show players with 0-0 stats in 1x1 stats table define('DISPLAY_1X1_NOT_PLAYED_TEAMMATES',true); // show players with 0-0 stats in 2x2 stats table define('DISPLAY_2X2_NOT_PLAYED_TEAMMATES',true); // style options, change css style of any element here: // your own style must be written inside string ' style=""' // don`t delete starting space or style= with quotes // 'div' element, container for all other html output // id="ICCupStatistics" define('STYLE_MAIN_CONTAINER',' style="width:auto;text-align:center;vertical-align:top;margin:0px;padding:0px"'); // 'a' element, in which 1x1 table title is placed define('STYLE_1X1_TABLE_TITLE',' style="width:90%;background:black;color:white;font:11pt/12.5pt \'Verdana\', serif;text-decoration:none;text-align:center;"'); // 'a' element, in which 2x2 table title is placed define('STYLE_2X2_TABLE_TITLE',' style="width:90%;background:black;color:white;font:11pt/12.5pt \'Verdana\', serif;text-decoration:none;text-align:center;"'); // 'table' element, for 1x1 stats define('STYLE_1X1_TABLE',' style="border:1px solid gray;width:100%"'); // 'table' element, for 2x2 stats define('STYLE_2X2_TABLE',' style="border:1px solid gray;width:100%"'); // 'tr' element, for each players 1x1 stats define('STYLE_1X1_TR',' style=""'); // 'tr' element, for each players 2x2 stats define('STYLE_2X2_TR',' style=""'); // 'td' element, for each 1x1 player stats column define('STYLE_1X1_TD',' style="text-align:center;color:black;font:7pt"'); // 'td' element, for each 2x2 player stats column define('STYLE_2X2_TD',' style="text-align:center;color:black;font:7pt"'); // 'th' element, for each column header in both tables define('STYLE_PLAYER_LINK',' style="color:black;font:700 8pt;text-decoration:none"'); // 'th' element, for each column header in both tables define('STYLE_COLUMN_HEADERS',' style="font-weight:bold;color:gray;font-size:8pt"'); // 'span' element, in which last update info is placed define('STYLE_LAST_UPDATE',' style="font-weight:lighter;color:black;font-size:7pt;text-align:center"'); // choose your page`s DOCTYPE here // XHTML -just leave ' /' HTML -change to '' // unsure? don`t care, and leave it intact define('XHTML',' /'); // do not edit anything under this line, unless you know, what are you doing //----------------------- END CONFIG ------------------------ define('BR',''); define('ICC_STYLE',''); define('ICCUP_TEAM_PAGE',TEAMS_PAGE.MY_TEAM.PAGE_OUTPUT); function _displayTable($x,&$ICCupStats,&$columns) { $thead=''; if(DISPLAY_COLUMN_HEADERS) { $thead=''; foreach($columns as $v) $thead.=''.ucfirst($v).''; $thead.=''; } $out=(constant('DISPLAY_'.$x.'_TABLE_TITLE')?(' ICCup '.str_replace('x','X',$x).' stats'):''). ''.$thead.''; foreach($ICCupStats[$x] as $ICCupPlayerStats) { $out.=''; for($q=0;$q'.($ICCupPlayerStats[$columns[$q]]!=''?$ICCupPlayerStats[$columns[$q]]:' ').''; $out.=''; } return $out.'
'; } function _parseICCupStatistics() { $columns=explode(',',strtolower(preg_replace('[^a-zA-Z,]','',DISPLAY_COLUMNS_ORDER))); $ICCupStats=array('1X1'=>array(),'2X2'=>array()); //$page=file_get_contents(ICCUP_TEAM_PAGE); $page = getIccupTeamPage(ICCUP_TEAM_PAGE); if(!($page>'' && eregi(';',$page))) { if(file_exists(CACHE_FILE_PATH)) return file_get_contents(CACHE_FILE_PATH); } else { $players=explode(';
',$page); foreach($players as $v) { $player=explode(';',$v); if(count($player)<9/* || !preg_match('',$v)*/) //TODO: it`l be nice to add here check for column format also continue; $player_link=''.$player[2].''; if(DISPLAY_1X1_NOT_PLAYED_TEAMMATES || $player[5]!='0 - 0') $ICCupStats['1X1'][]=array('country'=>$player[0],'player'=>$player_link,'rank'=>$player[3],'points'=>$player[4],'stats'=>$player[5]); if(DISPLAY_2X2_NOT_PLAYED_TEAMMATES || $player[8]!='0 - 0') $ICCupStats['2X2'][]=array('country'=>$player[0],'player'=>$player_link,'rank'=>$player[6],'points'=>$player[7],'stats'=>$player[8]); } } // for webmasters: for your own html code generation issues, delete following 9 lines // from 'if(DISPLAY_COLUMN_HEADERS)...' to '$output=...', also delete function _displayTable // declared upper, and fill $output string variable here as you want from // $ICCupStats 2-dimensional array ['1X1' and '2X2'][player counter][stats table column] $output=ICC_STYLE." ".''.((!empty($ICCupStats['1X1']) || !empty($ICCupStats['2X2']))?(((DISPLAY_1X1_STATISTICS_TABLE && !empty($ICCupStats['1X1']))? _displayTable('1X1',$ICCupStats,$columns):'').((DISPLAY_2X2_STATISTICS_TABLE && !empty($ICCupStats['2X2']))?_displayTable('2X2',$ICCupStats,$columns):'').'
'.( ' Last update: '.date('d M Y H:i:s').BR.'ICCup stats © unk & shr & b1te')):'ICCup is not accessible').'
'." "; if(strpos($output,'ICCup is not accessible')===false && CACHE_ENABLED && (!file_exists(CACHE_FILE_PATH) || (file_exists(CACHE_FILE_PATH) && is_writeable(CACHE_FILE_PATH)))) { $cache=fopen(CACHE_FILE_PATH,'w'); fwrite($cache,$output); fclose($cache); } return $output; } function getIccupTeamPage($page){ $socket = fsockopen(ICCUP_DOMAIN,80,$errno,$errstr,SOCKET_TIMEOUT); if($socket) { $query = "GET $page HTTP/1.0 Host: ".ICCUP_DOMAIN." User-Agent: iccup_webstat 1.2 Connection: close "; fputs($socket,$query); stream_set_blocking($socket,true); stream_set_timeout($socket,SOCKET_TIMEOUT); $info = stream_get_meta_data($socket); $data=''; while(!feof($socket) && (!$info['timed_out'])) { $data.= fgets($socket,1024); $info = stream_get_meta_data($socket); } fclose($socket); $data=substr($data,strpos($data,"\r\n\r\n")+4); return $data; } else echo "Either iccup.com is not avaliable now or your host do not support sockets. If iccup.com is reachable at this moment, we suggest using SCII.RU service"; } // ***************************************** // returns string with html ICCup statistics function getICCupStatistics() { if(!ICCUP_TEAM_STATISTICS_ENABLED) return ''; else if(CACHE_ENABLED && file_exists(CACHE_FILE_PATH) && filemtime(CACHE_FILE_PATH)+CACHE_EXPIRES>time()) return file_get_contents(CACHE_FILE_PATH); else return _parseICCupStatistics(); } Бесплатный конструктор сайтов - uCoz echo getICCupStatistics(); ?>