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

Здравствуйте форумчане, на данный момент используем 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 07:20:50)

2

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

Нифига не понятно при чем тут джин.. Тем более 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.

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

Сделал на сервере как сказано, но чуда не случилось - http://trancestation.ru:8001/status-json.xsl

4

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

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

Отредактировано radio_good (04-11-2017 16:04:19)

5

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

Evgeniy.SHibeko пишет:

Сделал на сервере как сказано, но чуда не случилось - http://trancestation.ru:8001/status-json.xsl

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

Отредактировано gyurgin_ (04-11-2017 16:33:02)

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

Спокойнее, знал бы как сделать - не спрашивал. Запилил как вы написали второй раз, в отдельном файле, по ссылке всё по-старому http://trancestation.ru:8001/metadata.xsl?mount=/live

7

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

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

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

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

Отредактировано radio_good (04-11-2017 18:11:01)

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

radio_good пишет:

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

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

9

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

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

Отредактировано gyurgin_ (10-11-2017 04:06:38)

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

gyurgin_ пишет:

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

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

11

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

Ребят, переношу все свои тесты в другое место, поэтому как бы вкратце, код страницы

<!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...
Короче, дальше сами сможете))