<?php //сперва счетчик слушателей всех маунтов $file_name='http://188.40.124.23:8206/status2.xsl'; $r=fopen($file_name,'r'); $text=fread($r,300); fclose($r); $mass=explode(",", $text); $listens=$mass [9]; include "max.php"; //для отображения пикового значения if ($listens>$max) { $txtout='<?php'."\r\n"; $txtout=$txtout. '$max=' .$listens. ";\r\n"; $txtout=$txtout."\r\n".'?>'; $fp = fopen ("max.php", "w"); fwrite($fp,$txtout); fclose($fp); $max=$listens; } //дальше парсинг плейлистов для получения текущего исполнителя и песни и описания потока //записываем их в таком порядке: сперва прямой эфир, потом фоллбэки $xml[0] = "http://188.40.124.23:8206/radio.xspf"; $xml[1] = "http://188.40.124.23:8206/playlist.xspf"; $xml[2] = "http://188.40.124.23:8206/nonstop.xspf"; $xml0 = simplexml_load_file($xml[0]); //обращение к xspf файлу текущего потока $creator = $xml0->trackList->track->creator; //выбираем значение из <trackList><track><creator> $title = $xml0->trackList->track->title; $ano = $xml0->trackList->track->annotation; //выбираем значение из <trackList><track><annotation> $mss=explode("\n", $ano); //разбиваем знаечение на масив (т.к. там много чего а нам надо тока строку "Stream Description") $stream=substr($mss[1],20); //строка "Stream Description" вторая, (не забываем, что счет с нуля, т.е. это будет 1) //берем значение начиная с 20 символа чтобы не захватывать "Stream Description:" if ($stream =='') //если в Stream Description пусто, то первый маунт не вещает, переходим ко второму потоку { $xml1 = simplexml_load_file($xml[1]); $creator = $xml1->trackList->track->creator; $title = $xml1->trackList->track->title; $ano = $xml1->trackList->track->annotation; $mss=explode("\n", $ano); $stream=substr($mss[1],20); } if ($stream =='') //если в Stream Description второго потока пусто, переходим к третьему потоку { $xml2 = simplexml_load_file($xml[2]); $creator = $xml2->trackList->track->creator; $title = $xml2->trackList->track->title; $ano = $xml2->trackList->track->annotation; $mss=explode("\n", $ano); $stream=substr($mss[1],20); } echo $creator . " - "; // вывод имени исполнителя echo $title . "<br>"; //вывод названия песни echo "Слушателей: ".$listens . "<br>"; //вывод кол-ва слушателей // echo "Max listens: ".$max . "<br>"; //вывод пикового к-ва слушателей, раскомментировать, если нужен echo $stream . "<br>"; //вывод описания текущего потока ?>
elseif ($stream =='') //если в Stream Description второго потока пусто, переходим к третьему потоку
if ($stream =='') //если в Stream Description второго потока пусто, переходим к третьему потоку
<?php //данные для парсинга слушателей всех маунтов //можно написать их здесь сколько угодно $mount[0] = '[url]http://188.40.124.23:8206/status2.xsl?mount=/radio[/url]'; $mount[1] = '[url]http://188.40.124.23:8206/status2.xsl?mount=/playlist[/url]'; $mount[2] = '[url]http://188.40.124.23:8206/status2.xsl?mount=/nonstop[/url]'; //считаем сколько у нас маунтов с которых считаем слушателей $mounts = count($mount); //данные для парсинга плейлистов для получения текущего исполнителя и песни и описания потока //записываем их в таком порядке: сперва прямой эфир, потом фоллбэки //можно написать их здесь сколько угодно $xml[0] = "[url]http://188.40.124.23:8206/radio.xspf[/url]"; $xml[1] = "[url]http://188.40.124.23:8206/playlist.xspf[/url]"; $xml[2] = "[url]http://188.40.124.23:8206/nonstop.xspf[/url]"; //считаем сколько у нас маунтов с которых берем теги $xmls = count($xml); //считаем всех слушателей $i = 0; while($i<$mounts) { $text= file_get_contents($mount[$i]); $mass=explode(",", $text); $listens += $mass [14]; $i ++; } //парсим по очереди все маунты пока не добьемся положительного результата $i = 0; while($stream['descr'] =='') { $xml1 = simplexml_load_file($xml[$i]); //обращение к xspf файлу текущего потока $stream['creator'] = $xml1->trackList->track->creator; //выбираем значение из <trackList><track><creator> $stream['title'] = $xml1->trackList->track->title; $ano = $xml1->trackList->track->annotation; //выбираем значение из <trackList><track><annotation> $mss=explode("\n", $ano); //разбиваем знаечение на масив (т.к. там много чего а нам надо тока строку "Stream Description") $stream['descr']=substr($mss[1],20); //строка "Stream Description" вторая, (не забываем, что счет с нуля, т.е. это будет 1) //берем значение начиная с 20 символа чтобы не захватывать "Stream Description:" $i ++; //если все перепарсили а данных нет останавливаеся с ошибкой if($i>$xmls){ $stream['descr'] = "offline"; } } include "max.php"; //для отображения пикового значения слушателей if ($listens>$max) { $txtout="<?php\r\n".'$max='.$listens. ";\r\n?>"; $fp = fopen ("max.php", "w"); fwrite($fp,$txtout); fclose($fp); $max=$listens; } echo $stream['creator'] . " - "; // вывод имени исполнителя echo $stream['title'] . "<br>"; //вывод названия песни echo "Слушателей: ".$listens . "<br>"; //вывод кол-ва слушателей //echo "Max listens: ".$max . "<br>"; //вывод пикового к-ва слушателей, раскомментировать, если нужен echo $stream['descr'] . "<br>"; //вывод описания текущего потока ?>
$listens=0; $tim=0.5; //таймаут для fsockopen $file_name[]='http://адрес:порт/status2.xsl?mount=/mp3_2'; $url[]='адрес'; $port[]=порт $file_name[]='http://адрес2:порт/status2.xsl?mount=/mp3_3'; $url[]='адрес2'; $port[]=порт for ($i=0;$i<sizeof($file_name)-1;$i++){ $fp = fsockopen ($url[$i], $port[$i], $errno, $errstr, $tim1); if (!$fp) { //внезапно я забыл элементарное условие, поэтому вот так через задний проход $temp=1; } else { $r=fopen($file_name[$i],'r'); $text=fread($r,1000); fclose($r); $mass=explode(",", $text); $listens=$listens+$mass [14]; } } echo $listens;
<?php $tim=0.5; // таймаут для fsockopen error_reporting(0); // убираем ошибки $file_name='http://ИП:порт/status2.xsl?mount=/mp3_1'; // страница с информацией (?mount=/mp3_1 в данном случае нужный нам маунт) $fp = fsockopen ('ИП', порт, $errno, $errstr, $tim); // проверяем на доступность if (!$fp) {} else { $r=fopen($file_name,'r'); $text=fread($r,1000); fclose($r); $mass=explode(",", $text); $current=$mass [16]; $listens=$listens+$mass [14]; } // при условии если вы снимаете статистику только с задоного маунта $cm=explode(" - ", $current); $file_name='http://ИП:порт/status2.xsl?mount=/mp3_2'; // страница с информацией (?mount=/mp3_2 в данном случае нужный нам маунт) $fp = fsockopen ('ИП', порт, $errno, $errstr, $tim); // проверяем на доступность if (!$fp) {} else { $r=fopen($file_name,'r'); $text=fread($r,1000); fclose($r); $mass=explode(",", $text); $listens=$listens+$mass [14]; } // при условии если вы снимаете статистику только с задоного маунта $file_name='http://ИП:порт/status2.xsl'; // страница с информацией $fp = fsockopen ('ИП', порт, $errno, $errstr, $tim); // проверяем на доступность if (!$fp) {} else { $r=fopen($file_name,'r'); $text=fread($r,1000); fclose($r); $mass=explode(",", $text); $listens=$listens+$mass [9]; } //при условии если вы снимаете со всех маунтов статистику include ("max.php"); if ($listens>$max) { $txtout='<?php'."\r\n"; $txtout=$txtout. '$max=' .$listens. ";\r\n"; $txtout=$txtout."\r\n".'?>'; $fp = fopen ("max.php", "w"); fwrite($fp,$txtout); fclose($fp); $max=$listens; } echo "<b>Listens: ".$listens." Max: ".$max."</b>"; ?>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/ libs/jquery/1.3.0/jquery.min.js"></script> <script type="text/javascript"> var auto_refresh = setInterval( function () { $('#info').load('info.php?_=' +Math.random()).fadeIn("slow"); //#info - div, куда будет выводиться информация //info.php - скрипт, выводящий необходимую нам информацию }, 10000); //интервал обновления, в миллисекундах </script>
<div id="info"> <?php include("info.php"); ?> </div>
<?php set_time_limit(10); //если за 10 секунд скрипт не завершится, то будет прекращен принудительно require('Scrobbler.php'); //php-скробблер $xml[1] = "http://ourdomain:port/live.xspf"; $xml[2] = "http://ourdomain:port/fallback1.xspf"; $xml[3] = "http://ourdomain:port/fallback2.xspf"; //маунты, которые собираемся скробблить, по порядку - от верхнего к фоллбекам //парсим по очереди все маунты, пока не дойдем до последнего. $i = 1; $stream['descr'] = ''; while($stream['descr'] =='') { $xml1 = simplexml_load_file($xml[$i]); //обращение к xspf файлу текущего потока $stream['creator'] = $xml1->trackList->track->creator; //выбираем значение из <trackList><track><creator> - исполнитель $stream['title'] = $xml1->trackList->track->title; //выбираем значение из <trackList><track><title> - название трека $ano = $xml1->trackList->track->annotation; //выбираем значение из <trackList><track><annotation> $mss=explode("\n", $ano); //разбиваем знаечение на масив (т.к. там много чего а нам надо тока строку "Stream Description") $stream['descr']=substr($mss[1],20); $i ++; if ($i>3) break; //цифра - количество наших маунтов минус один. если нужно парсить только первые два или один, //то вместо "3" пишем соответственно "2" или "1" } //читаем данные о исполнителе и песне из last.xml $lastfm = "http://ourdomain/last.xml"; //last.xml - файл, куда записывается текущая песня $lastxml = simplexml_load_file($lastfm); $last['creator'] = $lastxml->creator; $last['title'] = $lastxml->title; if ((strcmp ($last['title'], $stream['title'])) != 0 or (strcmp ($last['creator'], $stream['creator'])) != 0) //сравниваем данные last.xml с только что полученными данными. если отличается, то: { //записываем новые значения в last.xml $txtout="<?xml version='1.0' encoding='UTF-8'?>\r\n<last>\r\n<creator>".$stream['creator']."</creator>\r\n<title>".$stream['title']."</title>\r\n</last>"; $fp = fopen ("/home/user/domains/domains/public_html/last.xml", "w"); //путь к файлу last.xml можно прописать как локальный, так и http:// fwrite($fp,$txtout); fclose($fp); //отправляем на last.fm текущего исполнителя и песню: $scrobbler = new md_Scrobbler('lastfm_user', 'lasfm_password'); $scrobbler->add($stream['creator'], $stream['title'], '', 6000); $scrobbler->submit(); } ?>