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

Парсинг файла DJin Lite в status-json'е

 

9
Евгений @Evgeniy_SHibeko
Здравствуйте форумчане, на данный момент используем DJin как вещалку, он выдаёт название текущего+следующего трека в таком стиле:
<?xml version="1.0" encoding="utf-8" ?><ELEM_LIST><ELEM PLAYER_NAME="TRANCESTATION.RU VK.COM/TRSTATION" SCH_ID="0" SCH_NAME="Default" STATUS="playing"><START_TIME>02:58:07</START_TIME><START_DATE>2017-11-04</START_DATE><BLK_TYPE>М</BLK_TYPE><TYPE>М</TYPE><NAME>Don't Forget Me</NAME><ARTIST>Abide</ARTIST><AUTHOR></AUTHOR><ALBUM></ALBUM><DBID></DBID><FILE_NAME>D:\site_radio\music\trance\TR120816_006.mp3</FILE_NAME><DURATION>00:03:45</DURATION></ELEM><ELEM PLAYER_NAME="TRANCESTATION.RU VK.COM/TRSTATION +79789267837" SCH_ID="0" SCH_NAME="Default" STATUS="preloaded"><BLK_TYPE>М</BLK_TYPE><TYPE>М</TYPE><NAME>Safe Inside You</NAME><ARTIST>Rising Star ft. Betsie Larkin</ARTIST><AUTHOR></AUTHOR><ALBUM></ALBUM><DBID></DBID><FILE_NAME>D:\site_radio\music\trance\TR230816_014.mp3</FILE_NAME><DURATION>00:04:39</DURATION></ELEM></ELEM_LIST>
Подскажите, какой вид должен иметь файл status-json.xsl на сервере, чтобы на выходе получилось только артист - название.
По форуму искал, ссылки на годноту мёртвые....
Юзаю Icecast

Отредактировано Evgeniy_SHibeko - 04.11.2017
419
gyurgin_ @gyurgin_
Нифига не понятно при чем тут джин.. Тем более json тут при чем если надо онлу текст...
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output omit-xml-declaration="yes" method="text" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="no" encoding="UTF-8" /><xsl:strip-space elements="*"/>
<xsl:template match = "/icestats" >
<xsl:for-each select="source">
<xsl:if test="artist"><xsl:value-of select="artist" /> - </xsl:if><xsl:value-of select="title" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

Вот такой файл делаем и в вебрут айскаста, выдаст artist - title.

9
Евгений @Evgeniy_SHibeko
Сделал на сервере как сказано, но чуда не случилось - **********

245
radio_good @radio_good
спросите в группе у администратора или email vk.com/radioedge данное радио тоже работает на Djin и у них точно есть готовый написанный парсер под xml Djin'a /// может быть подскажут/продадут ..
если этого не случиться, то на фрилансе с пометкой DJin точно найдется исполнитель.

Отредактировано radio_good - 04.11.2017
419
gyurgin_ @gyurgin_
Evgeniy.SHibeko пишет:

Сделал на сервере как сказано, но чуда не случилось - **********

Вот что сделали то? Совсем без мозгов, сохраняем под ДРУГИМ именем, например metadata.xsl и обращаемся к нему так:
тут_все как_было/metadata.xsl?mount=/нужный_поток

Отредактировано gyurgin_ - 04.11.2017
9
Евгений @Evgeniy_SHibeko
Спокойнее, знал бы как сделать - не спрашивал. Запилил как вы написали второй раз, в отдельном файле, по ссылке всё по-старому **********

245
radio_good @radio_good
да откуда ваш icecast знает что такое </ELEM></ELEM_LIST> ? icecast работает со cвоими секциями и блоками xml

Вам нужно вывести название трека из джина на сайт и в плееры сл. чтоль ?
в качестве encoder у вас что работает ?
обратитесь за помощью тем кто работает с джином ... здесь на сайте есть парочка людей ..

можно здесь спросить еще .. vk.com/wall-51940928_33217
+ по-моему на сайте джин-лайт в FAQ есть инфо о том как вывести название титров на сайт
вопрос очень распространенный для джина и новичков )

Отредактировано radio_good - 04.11.2017
9
Евгений @Evgeniy_SHibeko
radio_good пишет:


Вам нужно вывести название трека из джина на сайт и в плееры сл. чтоль ?
в качестве encoder у вас что работает ?
обратитесь за помощью тем кто работает с джином ... здесь на сайте есть парочка людей ..

Да, по сути так, чтобы название писалось на отдельную страничку, а с неё уже во все места.
Использую RadioCaster.

419
gyurgin_ @gyurgin_
Удалил, смотрим рецепт ниже

Отредактировано gyurgin_ - 10.11.2017
9
Евгений @Evgeniy_SHibeko
gyurgin_ пишет:

Да вам xml разобрать всего навсего... Нахрена было тогда про status-json речь заводить, тока запутали всё.
********** сваял пример, код страницы смотрите, там несложно.

Спасибо тебе, добрейший человек!

419
gyurgin_ @gyurgin_
Ребят, переношу все свои тесты в другое место, поэтому как бы вкратце, код страницы
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>XML LOAD TEST</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
function seconds2time(seconds) {
var hours = Math.floor(seconds / 3600);
var minutes = Math.floor((seconds - (hours * 3600)) / 60);
var seconds = seconds - (hours * 3600) - (minutes * 60);
var time = "";
if (hours != 0) {
time = hours + ":";
}
if (minutes != 0 || time !== "") {
minutes = (minutes < 10 && time !== "") ? "0" + minutes : String(minutes);
time += minutes + ":";
}
if (time === "") {
if (seconds === 0) {
time = "";
} else {
time = "0:" + seconds;
}
} else {
time += (seconds < 10) ? "0" + seconds : String(seconds);
}
return time;
}

function time2seconds(str) {
var p = str.split(':'),
s = 0,
m = 1;
while (p.length > 0) {
s += m * parseInt(p.pop(), 10);
m *= 60;
}
return s;
}

function show_metadata() {
var timestamp = new Date().getTime();
$.ajax({
url: 'load_xml.php?' + timestamp,
dataType: 'xml',
success: function(data) {
var xml_node = $('ELEM_LIST', data);
var playing = xml_node.find('ELEM[STATUS="playing"]');
var artist = playing.find('ARTIST').text();
var title = playing.find('NAME').text();
var start_date = playing.find('START_DATE').text();
var start_time = playing.find('START_TIME').text();
var duration = playing.find('DURATION').text();
$.get('server_time.php?' + timestamp, function(server_time) {
$('#contdown').html(time2seconds(duration) + Date.parse(start_date + ' ' + start_time) / 1000 - server_time + time_correction);
});
$('#meta').html(artist + ' - ' + title);
},
error: function(data) {
console.log('Error loading XML data');
}
});
}

var time_correction = 10;

setInterval(function() {
var timer = Math.max(0, parseInt($('#contdown').html()));
if (timer > 0) {
timer--;
} else {
show_metadata();
}
$('#contdown').html(timer);
$('#time').html(seconds2time(timer));
}, 1000);
})
</script>
</head>
<body>
<div id="meta"></div>
<div id="time"></div>
<div id="contdown" style="display:none;">0</div>
</body>
</html>

PHP которые в примере
load_xml.php :
<?php
echo file_get_contents("(path to xml file)?" . time());
?>

это чтобы не заморачиваться с mixed content, ну понятно ....
server_time.php :
<?php
echo time();
?>

Это опорное время сервера, тут тоже надеюсь все понятно, берем с xml и отсюда - ну одно должно быть...
В идеале там надо пройти типы до music или что там показывется в джине, плюсануть к duration...
Короче, дальше сами сможете))