Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.05.2020, 12:00
Новичок на форуме
Отправить личное сообщение для vengenz0 Посмотреть профиль Найти все сообщения от vengenz0
 
Регистрация: 09.05.2020
Сообщений: 2

Парсинг названия аудиопотока из 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);
});


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

Последний раз редактировалось vengenz0, 09.05.2020 в 12:04.
Ответить с цитированием
  #2 (permalink)  
Старый 09.05.2020, 17:30
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

И где на http://live.sovaradio.ru:8000/stream JSON, если ответ это аудиопоток?
Ответить с цитированием
  #3 (permalink)  
Старый 09.05.2020, 19:05
Кандидат Javascript-наук
Отправить личное сообщение для od0201 Посмотреть профиль Найти все сообщения от od0201
 
Регистрация: 07.05.2020
Сообщений: 105

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

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

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

жмем Ф12 - network -XHR
видим какие запросы делает страница и какие ответы получает
status-json.xsl это наше,
смотрим в ответе где лежит наша информация и
в коде меняем запрос на
https://live.sovaradio.ru/status-json.xsl
ну и в объекте данные будут лежать немного в другом месте
Ответить с цитированием
  #4 (permalink)  
Старый 09.05.2020, 19:17
Новичок на форуме
Отправить личное сообщение для vengenz0 Посмотреть профиль Найти все сообщения от vengenz0
 
Регистрация: 09.05.2020
Сообщений: 2

Сообщение от laimas Посмотреть сообщение
И где на http://live.sovaradio.ru:8000/stream JSON, если ответ это аудиопоток?
Сообщение от od0201 Посмотреть сообщение
Для начало вбейте вашу адресную строку и строку из примера в браузер и посмотрите что на выходе

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

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

жмем Ф12 - network -XHR
видим какие запросы делает страница и какие ответы получает
status-json.xsl это наше,
смотрим в ответе где лежит наша информация и
в коде меняем запрос на
https://live.sovaradio.ru/status-json.xsl
ну и в объекте данные будут лежать немного в другом месте
Прошу прощения, все на свете попутал. Про xsl-файл знал. Модер, закрой тему, решение нашел. Нужные данные располагаются по пути meta.icestats.source[0].title
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужен скрипт, заменяющий названия json-переменных по заданному шаблону qzaki Работа 6 13.03.2018 11:05
Поиск по началу названия id faforty Общие вопросы Javascript 8 20.11.2011 16:09