ОсновноеRadiotalkПользовательское
Общие вопросы по интернет радио вещанию
6   •   Посмотреть все темы

Не парсится информация с IceCast2

 

8
Тёма @Tyoma_Glazunov
Всем привет!

В общем такая вот делема
Имеется связка Icecast 2.4.99.1 + RadioBoss.
Все это стоит на VDS сервере с windows server 2012 R2

Все работает замечательно, НО!

Не парсится название трека с status.xsl

Система такая...
В корне сайта находится файл PHP с кодом:

<?php

$fl = file_get_contents('http://ra-light.ru:8000/status.xsl?mount=/light_pop');

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);
}

$song = antara($fl, "<td>Current Song:</td>\n<td class=\"streamdata\">", "</td>");
echo '<span class="track">'.$song.'</span>';
?>



Дальше на самом сайте стоит код парсинга AJAX с файла php через интервал времени:

<script type="text/javascript">
$.ajax({
url: 'прямой адрес к PHP файлу',
success: function(data) {
$('#trackholder').html(data);
}});
function refresh() {
$.ajax({
url: 'прямой адрес к PHP файлу',
success: function(data) {
$('#trackholder').html(data);
}});
};
setInterval(refresh, 5000);
</script>


Думал AJAX глючит, открыв сам файл pop.php в браузере тоже пусто.


Так вот, что это за хрень? и как с ней бороться?


P.S. в PHP и т.д. я не особо силен

8
Тёма @Tyoma_Glazunov
прямой адрес к PHP файлу - это **********

382
Grigorij @gyurgin_1
Если бы Вы хотя бы понимали что делаете, то в первую очередь посмотрели бы код страницы которую парсите, а там черным по белому: <!-- WARNING:
DO NOT ATTEMPT TO PARSE ICECAST HTML OUTPUT!
The web interface may change completely between releases.
If you have a need for automatic processing of server data,
please read the appropriate documentation. Latest docs:
**********
-->

как забрать и вывести данные с status-json.xsl я уже описывал, потрудитесь хотя бы по форуму поискать.

8
Тёма @Tyoma_Glazunov
Нашел на форуме пример кода парсинга со status-json.xsl
<script>
function show_station_title() {
$.getJSON('http://ra-light.ru:8000/status-json.xsl?mount=/nonstop', function(data) {
$('.track_title').html(data.icestats.source.title);
})
}
$(document).ready(function() {
show_station_title();
setInterval('show_station_title()', 3000)
});
</script>


Методом тыка я понял как вытянуть описание с той же страницы
<script>
function show_station_server_description() {
$.getJSON('мой сайт/status-json.xsl?mount=/nonstop', function(data) {
$('.track').html(data.icestats.source.server_description);
})
}
$(document).ready(function() {
show_station_server_description();
setInterval('show_station_server_description()', 3000)
});
</script>




Только до меня только сейчас дошло что мне то нужно в этом коде сделть как-то переключение между маунтами для вывода инфы.
То есть у меня основной маунт live, а nonstop это fallback-mount.

Музыка то переключается, все отлично. Но когда live не активен, а играет nonstop, то на live попросту инфы нет. Точнее есть, но не та, что нужна:
{"icestats":{"admin":"icemaster@localhost","host":"localhost","location":"Earth","server_id":"Icecast 2.4.99.1","server_start":"Mon, 10 Aug 2015 09:10:35 -0700","server_start_iso8601":"2015-08-10T09:10:35-0700","authentication":[null,null,null]}}

Как быть???

8
Тёма @Tyoma_Glazunov
Ну помогите, пожалуйста!

727
Leff27 @Leff27
Спарсить live, при отсутствии инфы - парсить nonstop

// Парсим лайв

if( !data.icestats.source || !data.icestats.source.server_description )
{
// Парсим nonstop
}

8
Тёма @Tyoma_Glazunov
Leff27 пишет:

Спарсить live, при отсутствии инфы - парсить nonstop

// Парсим лайв

if( !data.icestats.source || !data.icestats.source.server_description )
{
// Парсим nonstop
}


немного не понял... :(

727
Leff27 @Leff27

<script>
function show_station_server_description()
{
$.getJSON('адрес/status-json.xsl?mount=/live', function(data) {
if( !data.icestats || !data.icestats.source || !data.icestats.source.server_description )
{
$.getJSON('адрес/status-json.xsl?mount=/nonstop', function(data) {
if( !data.icestats || !data.icestats.source || !data.icestats.source.server_description )
$('.track').html( 'Поток выключен' );
else
$('.track').html(data.icestats.source.server_description);
});
}
else
$('.track').html(data.icestats.source.server_description);
});
}

$(document).ready(function() {
show_station_server_description();
setInterval('show_station_server_description()', 3000)
});
</script>

8
Тёма @Tyoma_Glazunov
Спасибо вам большое!