<?php /* * Этот файл поставляется в составе мини-сайта и разработан в рамках портала Radio-Tochka.com * Copyright (C) 2011 Radio-Tochka.com <info@radio-tochka.com> * Все права защищены. Не удаляйте этот копирайт. */ header("Content-Type: text/html;charset=utf-8"); include("config.php"); function getShoutcast1Stats( $ip, $port, $pass ){ $hostname = Array(); $connecttime = Array(); $useragent = Array(); $fp = @fsockopen( $ip, $port, $errno, $errstr, 30); if( $fp ){ fputs($fp,"GET /admin.cgi?pass=$pass&mode=viewxml HTTP/1.0\r\nUser-Agent: XML Getter (Mozilla Compatible)\r\n\r\n"); //get XML page $page = ""; while(!feof($fp)) { $page .= fgets($fp, 1000); } $m = Array(); //preg_match( "/\<LISTENER\>.*\<\/LISTENER\>/", $page, $m ); preg_match_all( "|<LISTENER>(.*)</LISTENER>|U", $page, $m ); if( count($m[1]) > 0 ){ for( $i = 0; $i < count($m[1]); $i++ ){ $hm_m = Array(); if( preg_match( "/\<HOSTNAME\>(.*?)\<\/HOSTNAME\>/", $m[1][$i], $hn_m ) ){ $ct_m = Array(); if( preg_match( "/\<CONNECTTIME\>(.*?)\<\/CONNECTTIME\>/", $m[1][$i], $ct_m ) ){ $ua_m = Array(); if( preg_match( "/\<USERAGENT\>(.*?)\<\/USERAGENT\>/", $m[1][$i], $ua_m ) ){ $hostname[] = $hn_m[1]; $connecttime[] = $ct_m[1]; $useragent[] = $ua_m[1]; } } } } } } else{ //print "Shoutcast connection error: ".$errstr; } @fclose($fp); return Array( $hostname, $connecttime, $useragent ); } function getIcecastStats( $ip, $port, $mount, $pass ){ $hostname = Array(); $connecttime = Array(); $useragent = Array(); $url = "http://admin:".$pass."@".$ip.":".$port."/admin/listclients?mount=".$mount; $page = strtolower(file_get_contents($url)); $listeners = new SimpleXMLElement($page); foreach ($listeners->source[0]->listener as $listener) { $hostname[] = $listener->ip; $connecttime[] = $listener->connected; $useragent[] = $listener->useragent; } return Array( $hostname, $connecttime, $useragent ); } $db = @mysql_connect( $db_host, $db_user, $db_pass ); if($db){ if( @mysql_select_db( $db_name, $db ) ){ // Получить админский пароль сервера $sql = "SELECT `s_type`,`ip_address`,`port`,`mount_point`,`password` FROM `main_channel` WHERE `server_id`=".$server_id." AND `active`"; $res = mysql_query( $sql ); $hostname = Array(); $connecttime = Array(); $useragent = Array(); if( $res && mysql_num_rows($res) > 0 ){ while ( $row=mysql_fetch_array($res) ){ $ip = $row[1]; $port = $row[2]; $mount = $row[3]; $pass = $row[4]; if( $row['s_type'] == "shoutcast1" ){ $r = getShoutcast1Stats( $ip, $port, $pass ); } else if( $row['s_type'] == "icecast" ){ $r = getIcecastStats( $ip, $port, $mount, $pass ); } else{ continue; } $hostname = array_merge( $hostname, $r[0] ); $connecttime = array_merge( $connecttime, $r[1] ); $useragent = array_merge( $useragent, $r[2] ); } } else{ die("Ошибка подключения к серверу."); } } else{ die("Ошибка соединения с базой данных."); } } else{ die("Ошибка соединения с базой данных."); } @mysql_close($db); ?> <html> <body onload="initialize()" style="margin:0px;"> <div id="map_canvas" style="width:800px; height: 600px; margin:0px;"></div> <script src="http://maps.google.com/maps/api/js?sensor=false&language=ru&v=3" type="text/javascript"></script> <script type="text/javascript"> function initialize() { var myLatlng = new google.maps.LatLng(40.397, 10.644); var myOptions = { zoom: 3, center: myLatlng, mapTypeId: google.maps.MapTypeId.ROADMAP } var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); <?php $ii = 0; for( $i = 0; $i < count($hostname); $i++ ){ $d = @geoip_record_by_name($hostname[$i]); if($d){ $ii+=1; print "var pos".$ii." = new google.maps.LatLng( ".$d['latitude'].", ".$d['longitude'].")\n"; print "var marker".$ii." = new google.maps.Marker({map: map, position: pos".$ii.", title: '".$d['city']."' });\n"; print "var i".$ii." = new google.maps.InfoWindow();\n"; if( $d['city'] ){ $d['city'] = $d['city'].", ".$d['country_name']; } else{ $d['city'] = $d['country_name']; } $s = (int)$connecttime[$i]; $m = floor( $s / 60); $s = $s % 60; $h = floor($m / 60); $m = $m % 60; $dd = floor( $h / 24 ); $h = $h % 24; $h += 24 * $dd; if ($h > 0){ $l_time = "Слушает ".$h." ч. ".$m." мин. ".$s." сек."; } else{ $l_time = "Слушает ".$m." мин. ".$s." сек."; } print "i".$ii.".setContent('<img src=\"http://radio-tochka.com/awstats/icons/flags/".strtolower($d['country_code']).".png\"><b style=\"font-size: 14px\">".$d['city']."</b><br><span style=\"font-size: 12px\">".$useragent[$i]."</span><br><span style=\"font-size: 12px\">".$l_time."</span><br><i style=\"font-size: 12px; color: #909090\">".$hostname[$i]."</i>');\n"; print "google.maps.event.addListener(marker".$ii.", 'click', function() {i".$ii.".open(map, marker".$ii.");});\n"; } } /* * Этот файл поставляется в составе мини-сайта и разработан в рамках портала Radio-Tochka.com * Copyright (C) 2012 Radio-Tochka.com <info@radio-tochka.com> * Все права защищены. Не удаляйте этот копирайт. */ ?> } </script> </body> </html>