MainRadiotalkCustom
Технологии вещания, софт, скрипты
6   •   Посмотреть все темы

Парсер инфы с другого сервера

 

42
Николай @Morty
Так уж вышло что я арендую IceCast хостинг у одного хостера, а сайт располагается у другого у которого к тому же проблемы с вызовом файлов.
Я пытался по разному парсить инфу (а именно, кто ведущий и название текущей песни).
Но увы, ничего не получалось, скрипт напрочь отказывается работать на том сервере где находится сайт.
Я уже отчаялся и стал подумывать о том, чтоб перенести сайт на тот хостинг где icecast (а это не особо хорошо т.к. у меня там всего 100мб, которые мне нужны под non stop) либо же искать другой хосинг для сайта.
Но искать хостинг для одного сайта как-то глупо (у меня на одном хостинге расположены несколько сайтов).
Я нашёл решение проблемы и решил поделится. Мало ли, может кому-то пригодится.
Для отображения нужной мне информации я воспользовался двумя скриптами.
///////Отображение ведущего когда он в эфире/////////
<?php
$handle = fopen("http://100.00.000.00:8008/status2.xsl?mount=/radio", "rb"); //Укажите Ваши ip, порт и основной маунт
$contents = '';
while (!feof($handle)) { $contents .= fread($handle, 8192); }
fclose($handle);
$mas=explode(",",$contents);
$dj=$mas[15]; $dj = str_replace ("~", " ICQ: ", $dj); if ($text =='' and $dj=='')
{
/////////////////////////////////////Отображение Non stop когда нету ведущего/////////
$handle = fopen("http://100.00.000.00:8008/status2.xsl?mount=/nonstop", "rb"); //Укажите Ваши ip, порт и нон-стоп маунт
$contents = '';
while (!feof($handle)) { $contents .= fread($handle, 8192); }
fclose($handle); $mas=explode(",",$contents); $dj='Non Stop'; }
echo 'Ведущий: '.$dj;
########################################################################################
//Далее вывод песни которая играет
$ip = "100.00.000.00"; //Адрес сервера или IP
$port = "8008"; //Порт
$ice2_station = "My Radio Station"; //Название станции или маунта
////////////////start the parsin action\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//opening socket
$fp = fsockopen("$ip", $port, &$errno, &$errstr, 30); //open connection
if(!$fp) {
$success=2; //set if no connection
}
if($success!=2){ //if connection
fputs($fp,"GET /status2.xsl HTTP/1.0\r\nUser-Agent: Icecast2 XSL Parser (Mozilla Compatible)\r\n\r\n"); //get status2.xsl
while(!feof($fp)) {
$page .= fgets($fp, 1000);
}
fclose($fp); //close connection
$page = ereg_replace(".*<pre>", "", $page); //extract data
$page = ereg_replace("</pre>.*", ",", $page); //extract data
$numbers = explode(",",$page); //bomb it and extract data
$cur_song = $numbers[5];
$cur_song = $numbers[16];

echo'<br/>Сейчас играет: '.$cur_song.'';
}
?>

Скрипты есть, они работают но информацию которую они дают нужно отобразить на другом сервере.
Тут мне на помощь пришёл простой парсер на php на который я наткнулся блуждая по результатам поисковых запросов в гугле
<?php
$ch = curl_init (); // инициализация
curl_setopt ($ch , CURLOPT_URL , "http://site.ru/inf.php"); // адрес страницы для скачивания
curl_setopt ($ch , CURLOPT_USERAGENT , "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7"); // каким браузером будем прикидываться (Это наверное не обязательно но я оставил)
curl_setopt ($ch , CURLOPT_RETURNTRANSFER , 1 ); // нам нужно вывести загруженную страницу в переменную
$content = curl_exec($ch); // скачиваем страницу
curl_close($ch); // закрываем соединение
echo ''.$content.''; //то что будет отображаться на странице
?>

Так же есть ещё отличный скрипт автообновления блока (вроде бы с этого сайта)
Это, чтоб пользователям не нужно было самим обновлять страницу.
Рекомендую ставить интервал не менее 100000
1000 = 1 секунда
<html>
<head>
<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('index.php?_=' +Math.random()).fadeIn("slow");
//#info - div, куда будет выводиться информация (та страница на которой отображается информация)
//info.php - скрипт, выводящий необходимую нам информацию
}, 150000); //интервал обновления, в миллисекундах
</script>
</head>
<body>
<!--Далее пример использования-->
<div id="info">
<?php include("info.php"); ?>
</div>
</body>
</html>

Теперь чуть подробнее.
Если у Вас возникла похожая проблема (или Вам прсто по каким-то причинам не удаётся парсить информацию напрямую) тогда сделайте следуещее:
На хостинге с icecast сервером создайте файл к примеру info.php
и поместите в него первый код.
Затем на том хостинге на котором нужно отображать информацию создайте файл к примеру info.php и поместите в него второй код.
После этого вставьте информацию в нужную Вам страницу используя третий код.
Если Вам не нужно автообновление то можете подключить сразу файл info.php
К примеру так
include 'info.php';
Если Вы используете движок DLE то в нужном месте шаблона вставьте
{include file='info.php'} при этом файл info.php должен находится в корневой папке домена.
Или же {include file='dir/info.php'} если в папке
Ну вот собственно и всё...
Есть правда один минус в скрипте, который выводит название песни. Он не дружит с русскими буквами, а может это уменя что-то не так на сервере :D
Надо проверить.

Оказывается всё дело в ID3 тегах. Перед заливокй надо переписывать...
Надеюсь это кому ни будь пригодится.
Спасибо за внимание :)

Отредактировано Morty - 17.02.2013
42
Николай @Morty
Ещё пара вариантов автообновления блока.
<script>
function show()
{
$.ajax({
url: "parse.php", //Тут указываем файл со скриптами
cache: false,
success: function(html){
$("#content").html(html);
}
});
}

$(document).ready(function(){
show();
setInterval('show()',60000); //Время в милесекундах
});
</script>
<div id="content">Тут то,чтонадо обновлять</div>

И ещё один, на аяксе
<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.min.js"></script>
<script type="text/javascript">
jQuery(document).ready(function(){
setInterval("jQuery('#timeA').load('# dl#timeB');",60000);
});
</script>
<dl id="timeA"><dl id="timeB">Тут то, что надо обновлять</dl></dl>

Отредактировано Morty - 04.04.2011
42
Николай @Morty
Небольшое дополнение для скрипта вывода текущей песни.
<a target="_blank" href="http://vkontakte.ru/gsearch.php?section=audio&q='.$cur_song.'">Найти Вконтакте</a>
Пи нажатии на ссылку производится поиск песни в контакте.

Отредактировано Morty - 05.04.2011
144
Руся @Ruskat
???????µ?»?????? ?? ???????????? ???°???°?±???????°???? ???»?? ?????µ??!!! ?????????????? ???????? ?? ?????µ?? ?????·?????? ?? ???????µ?? ???° ?»???±???????? ?????? ???µ?????? :)
?®?·?°?????µ ???° ?·?????????????µ. ???????? ???µ ?? ?»???? - ???????????µ?????????????µ???? ?? ???°???µ???? ???°??????!!!
<?php
$data = file_get_contents('http://???µ?????µ??:8000/status.xsl?mount=/ZED-FM');
$data2 = file_get_contents('http://???µ?????µ??:8000/status.xsl?mount=/ruskat');
//$data3 = file_get_contents('http://62.149.27.186:8000/status.xsl?mount=/live');

$admdata = file_get_contents('http://?»????????:???°?????»??@???µ?????µ??:8000/admin/stats.xsl?mount=/ZED-FM');

function antara($string, $start, $end){
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}
//$data = iconv("utf-8", "cp1251", $data);
$admdata = iconv("utf-8", "cp1251", $admdata);
$samprate = antara($admdata, "ice-samplerate</td>\n<td class=\"streamdata\">","</td>");
$title = antara($data, "Stream Title:</td>\n<td class=\"streamdata\">","</td>");
$description = antara($data, "Stream Description:</td>\n<td class=\"streamdata\">","</td>");
$content_type = antara($data, "Content Type:</td>\n<td class=\"streamdata\">","</td>");
$Mount_started = antara($data, "Mount started:</td>\n<td class=\"streamdata\">","</td>");
$Bitrate = antara($data, "Bitrate:</td>\n<td class=\"streamdata\">","</td>");
$Current_listeners = antara($data, "Current Listeners:</td>\n<td class=\"streamdata\">","</td>");
$Peak_listeners = antara($data, "Peak Listeners:</td>\n<td class=\"streamdata\">","</td>");
$Stream_genre = antara($data, "Stream Genre:</td>\n<td class=\"streamdata\">","</td>");
$Stream_url = antara($data, "Stream URL:</td>\n<td class=\"streamdata\">","</td>");
$Current_song = antara($data, "Current Song:</td>\n<td class=\"streamdata\">","</td>");
$server_name = antara($admdata, "server_name</td>\n<td class=\"streamdata\">","</td>");
//========???????? ???°?????????? ???µ?????»?????°============//
$Current_listeners2 = antara($data2, "Current Listeners:</td>\n<td class=\"streamdata\">","</td>");
$Peak_listeners2 = antara($data2, "Peak Listeners:</td>\n<td class=\"streamdata\">","</td>");
//-----------------//
$data3_curr_listeners = antara($data2, "Current Listeners:</td>\n<td class=\"streamdata\">","</td>");
$data3_peak_listeners = antara($data2, "Peak Listeners:</td>\n<td class=\"streamdata\">","</td>");
//======?????????????? ?? ?·?°???°?»?????? ?????»???????????? ???»?????°?????? ???° ????????=======//
$Curr_listens=$Current_listeners2+$Current_listeners+$data3_curr_listeners;
$Peak_listens=$Peak_listeners2+$Peak_listeners+$data3_peak_listeners;

$staylst=$Curr_listens+1;
//echo ''.$title.' <br> '.$description.' <br> '.$content_type.' <br> '.$Mount_started.' <br> '.$Bitrate.' <br> '.$Curr_listens.' <br> '.$Peak_listens.' <br> '.$Stream_genre.' <br> '.$Stream_url.' <br> '.$Current_song.' <br><br>???»?????°???? ???? ???°???????°?? <br>
//4m ZED-FM: ?·?°???°?· '.$Current_listeners.', ???????????? '.$Peak_listeners.'.<br>
//4m ruskat: ?·?°???°?· '.$Current_listeners2.', ???????????? '.$Peak_listeners2.'.<br>
//Hellp: ?·?°???°?· '.$data3_curr_listeners.', ???????????? '.$data3_peak_listeners.'.<br>
//'; str_replace ('%20','_',$file_name)

//$Current_song = iconv("cp1251", "utf-8", $Current_song);
echo '<script language=\'JavaScript\' type=\'text/javascript\' src=\'http://ruskat.at.ua/js/tt.js\'></script>
<style type="text/css">
#tooltip{
font-family:Courier New;
font-size:13px;
padding-left: 2px;
font-weight:bold;margin:0;padding:0;
background: url(http://ruskat.at.ua/img/s5_seg_f.png) repeat-x;
border:0px solid #023875;
color:#fff;
margin:0px;
padding:2px 5px;
position:absolute;
visibility:hidden
}
</style>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="70">
<marquee behavior="scroll" width="320" scrollamount="4"><font color="orange"> <img src="http://cdn1.iconfinder.com/data/icons/Futurosoft%20Icons%200.5.2/22x22/apps/vlc.png" width="18" height="18" alt="?????°??" /> <b>'.$Current_song.'</b></font> </marquee>
<marquee behavior="scroll" width="320" scrollamount="3" direction="left"><font color="lime"><img src="http://cdn1.iconfinder.com/data/icons/iconslandplayer/PNG/128x128/PlainBlue/MicrophonePressed.png" width="20" height="20" alt="???????? ???µ???µ" />'.$description.'. ???????°?? ?????°???????°???? '.$Mount_started.'. ???????µ?? '.$content_type.', ?±???????µ???? '.$Bitrate.' kb/p s, ???°?????????° '.$samprate.' ????. <b style= "color:#FA0000; background:#fff"><img src="http://www.iconsearch.ru/uploads/icons/futurosoft_icons/32x32/audacity.png" width="18" height="18" alt="???»?????°??????" /></b> <b style= "color:#fff; background:#3C52E3"> '.$Curr_listens.' </b>. ???°???±???»?????µ c?»?????°?»?? <b style= "color:#FA0000; background:#fff">  '.$Peak_listens.' </b>. ?????°???? <a href=\'\'onclick=\'javascript:window.open("http://ruskat.at.ua/radio/listen.html", "mywindow","toolbar=1,menubar=1,resizable=1,width=350,height=250");\'> <b style= "color:#FA0000; background:#fff"> '.$staylst.'-?? ???»?????°???µ?? </b></a>!</font></marquee>
</td>
<td align="right"><div align="center"><font color="white"> ???°?????? ??????????';
//???µ?»?°?µ?? ?·?°???µ???? ???????????»????//
$Current_song = str_replace(array('\'', '&', '&'), '', trim($Current_song));
$Current_song=preg_replace('/\s+/', ' ', $Current_song);
//$Current_song = ereg_replace('[\'&]+', '', $Current_song);
//?????µ?»?°?»?? ?·?°???µ???? ???????????»????//
//$Current_song = iconv("cp1251", "utf-8", $Current_song);
echo'<a href=\'\' onclick=\'javascript:window.open("http://muzgruz.ru/search/?section=audio&q='.$Current_song.'", "mywindow","toolbar=1,menubar=1,resizable=1,Scrollbars=1,width=850,height=400");\'><img src="http://cdn1.iconfinder.com/data/icons/DarkGlass_Reworked/128x128/apps/audacity.png" width="16" height="16" alt="?????°???°???? ???µ?????? ';
//$Current_song = iconv("utf-8", "cp1251", $Current_song);
echo''.$Current_song.' ???° ?????·???????·" /></a>
<a href=\'\' onclick=\'javascript:window.open("http://vkontakte.ru/gsearch.php?section=audio&q='.$Current_song.'&name=1", "mywindow","toolbar=1,menubar=1,resizable=1,Scrollbars=1,width=850,height=400");\'><img src="http://ruskat.at.ua/img/vkontakte-512x512.png" width="16" height="16" alt="???????°???? ???µ?????? '.$Current_song.' ???????????°?????µ" /></a> ?? ???????µ?? ';
//$Current_song = iconv("cp1251", "utf-8", $Current_song);
echo'<a href=\'\' onclick=\'javascript:window.open("http://www.youtube.com/results?search_query='.$Current_song.'&aq=f", "mywindow","toolbar=1,menubar=1,resizable=1,Scrollbars=1,width=850,height=400");\'><img src="http://s.ytimg.com/yt/favicon-vflZlzSbU.ico" width="" height="" alt="???????°???? ???»???? ';
//$Current_song = iconv("utf-8", "cp1251", $Current_song);
echo ''.$Current_song.' ???° YouTube" /></a>';
//RUtube
//$Current_song = iconv("utf-8", "koi8-r", $Current_song);
$Current_song = mb_convert_encoding($Current_song, "utf-8", "koi8-r");
echo'<a href=\'\' onclick=\'javascript:window.open("http://rutube.ru/search.html?page=index&search='.$Current_song.'&search_type=track", "mywindow","toolbar=1,menubar=1,resizable=1,Scrollbars=1,width=850,height=400");\'><img src="http://rutube.ru/favicon.ico" width="" height="" alt="???????°???? ???»???? ';
$Current_song = mb_convert_encoding($Current_song, "koi8-r", "utf-8");
//$Current_song = iconv("koi8-r", "utf-8", $Current_song);
echo ''.$Current_song.' ???° RUtube" /></a>';

echo'<a href=\'\' onclick=\'javascript:window.open("http://vkontakte.ru/gsearch.php?section=video&q='.$Current_song.'&name=1", "mywindow","toolbar=1,menubar=1,resizable=1,width=850,height=400");\'><img src="http://ruskat.at.ua/img/vkontakte-512x512.png" width="16" height="16" alt="???????°???? ???????µ?? '.$Current_song.' ???????????°?????µ" /></a><br> ?° ???°?? ?¶?µ
<a href=\'\' onclick=\'javascript:window.open("http://www.google.com.ua/search?client=opera&rls=ru&q='.$Current_song.'&name=1", "mywindow","toolbar=1,menubar=1,resizable=1,Scrollbars=1,width=850,height=400");\'><img src="http://cdn1.iconfinder.com/data/icons/yooicons_set01_socialbookmarks/128/social_google_box.png" width="16" height="16" alt="???????°???? '.$Current_song.' ?? Google" /></a> ?? ';
//$Current_song = iconv("cp1251", "utf-8", $Current_song);
echo' <a href=\'\' onclick=\'javascript:window.open("http://spaces.ru/music/?sid=&p=&search=1&word='.$Current_song.'&name=1", "mywindow","toolbar=1,menubar=1,resizable=1,Scrollbars=1,width=850,height=400");\'><img src="http://cdn1.iconfinder.com/data/icons/yooicons_set01_socialbookmarks/128/social_google_box.png" width="16" height="16" alt="???????°????';
//$Current_song = iconv("utf-8", "cp1251", $Current_song);
echo' '.$Current_song.' ???° Spaces" /></a>
</font>
</div></td>
</tr>
</table>
';
?>

46
Алексей @Алекс-Романтик
А какая может быть причина, если я всё сделал по инструкции как вы написали, но сайт вообще тогда не открывается. Пишет соединение... и ничего не происходит. приходится удалять файл info.php с хостинга сайта.

419
gyurgin_ @gyurgin_
Да Вы прежде на дату поста смотрите...