Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Парсинг названия аудиопотока из XSL (https://javascript.ru/forum/misc/80205-parsing-nazvaniya-audiopotoka-iz-xsl.html)

vengenz0 09.05.2020 12:00

Парсинг названия аудиопотока из XSL
 
Всем привет! Я ньюфаг, и понемногу пытаюсь изучать JS на примере чужого кода. У меня есть рабочий код для вывода названия трека на jQuery, но теперь я хочу обойтись без jQuery. В поисках наткнулся на этот код:

function getTitle(){
    if(typeof meta.title != "undefined"){
        return meta.title;
    } else {
        return defaultSongTitle
    }
}

var radioMetaUpdated = new Event('radioMetaUpdated');

audio.addEventListener('playing', function () {
    console.log('plays');
    chrome.browserAction.setIcon({
        path: {"38": 'pause.png'}
    });

    if (metaRefreshTimer !== null) {
        clearInterval(metaRefreshTimer);
        console.log('clearInterval');
    }
    function refreshMeta() {
        function reqListener() {
            var new_meta = JSON.parse(this.responseText);
            new_meta.title = new_meta.artist + ' - ' + new_meta.track;
            if (new_meta.title != getTitle()){
                meta = new_meta;
                audio.dispatchEvent(radioMetaUpdated);
                chrome.browserAction.setTitle({"title": new_meta.title});
                gaSendEvent('User', 'listening', new_meta.title);
            }
        }

        var oReq = new XMLHttpRequest();
        oReq.addEventListener("load", reqListener);
        oReq.open("GET", "http://api.radioskovoroda.com:3000/api/stream/current/radio");
        oReq.send();
    }
    refreshMeta();
    metaRefreshTimer = setInterval(refreshMeta, 5000);
});


Проблема в том, что этот код отлично работает для "своего" аудиопотока, ведь у него данные о композиции хранятся в переменных "artist" и "track", но когда я его пытаюсь приладить под нужды моего (в котором данные о композиции хранятся в одной переменной "title"), то все ломается и не работает:

function getTitle(){
    if(typeof meta.title != "undefined"){
        return meta.title;
    } else {
        return defaultSongTitle
    }
}

var radioMetaUpdated = new Event('radioMetaUpdated');

audio.addEventListener('playing', function () {
    console.log('plays');
    chrome.browserAction.setIcon({
        path: {"38": 'pause.png'}
    });

    if (metaRefreshTimer !== null) {
        clearInterval(metaRefreshTimer);
        console.log('clearInterval');
    }
    function refreshMeta() {
        function reqListener() {
            var new_meta = JSON.parse(this.responseText);
            new_meta.title = new_meta[0].title;
            if (new_meta.title != getTitle()){
                meta = new_meta;
                audio.dispatchEvent(radioMetaUpdated);
                chrome.browserAction.setTitle({"title": new_meta.title});
                gaSendEvent('User', 'listening', new_meta.title);
            }
        }

        var oReq = new XMLHttpRequest();
        oReq.addEventListener("load", reqListener);
        oReq.open("GET", "http://live.sovaradio.ru:8000/stream");
        oReq.send();
    }
    refreshMeta();
    metaRefreshTimer = setInterval(refreshMeta, 5000);
});


Неделю уже бьюсь :help: :help: :help:
Заранее большое спасибо!

laimas 09.05.2020 17:30

И где на http://live.sovaradio.ru:8000/stream JSON, если ответ это аудиопоток?

od0201 09.05.2020 19:05

Для начало вбейте вашу адресную строку и строку из примера в браузер и посмотрите что на выходе

как узнать откуда брать данные?

в Хроме заходим на
http://sovaradio.ru/
для верности жмем плей (но не обязательно)

жмем Ф12 - network -XHR
видим какие запросы делает страница и какие ответы получает
status-json.xsl это наше,
смотрим в ответе где лежит наша информация и
в коде меняем запрос на
https://live.sovaradio.ru/status-json.xsl
ну и в объекте данные будут лежать немного в другом месте

vengenz0 09.05.2020 19:17

Цитата:

Сообщение от laimas (Сообщение 524010)
И где на http://live.sovaradio.ru:8000/stream JSON, если ответ это аудиопоток?

Цитата:

Сообщение от od0201 (Сообщение 524019)
Для начало вбейте вашу адресную строку и строку из примера в браузер и посмотрите что на выходе

как узнать откуда брать данные?

в Хроме заходим на
http://sovaradio.ru/
для верности жмем плей (но не обязательно)

жмем Ф12 - network -XHR
видим какие запросы делает страница и какие ответы получает
status-json.xsl это наше,
смотрим в ответе где лежит наша информация и
в коде меняем запрос на
https://live.sovaradio.ru/status-json.xsl
ну и в объекте данные будут лежать немного в другом месте

Прошу прощения, все на свете попутал. Про xsl-файл знал. Модер, закрой тему, решение нашел. Нужные данные располагаются по пути meta.icestats.source[0].title


Часовой пояс GMT +3, время: 06:08.