Pull to refresh

Comments 26

Информацию-то мы сгенерировали, но вот беда: при помощи JavaScript нельзя обращаться к другому домену или даже порту.

JSONP
Но как сделать с JSONP автообновление?
Так же. А в чем проблема-то?

Только вместо ajax используем jsonp.
Ну, вообще, я упор делал на генерацию валидного JSON (ибо я реально долго промучился с этим) и как принять в общем виде. А там уже — кто во что горазд.
Это я писал тот пост «почему вы дергаете статистику с помощью PHP?»
Как-раз jsonp и пользовал сначала.
Очень приятно вас видеть тут :D
Я в свое время просто пар ил последнюю строку лога ) и мне вполне хватало )
Когда я решал такую же задачу, я смог добиться реалтаймового обновления: по факту информация о песне обновлялась даже перед тем, как она менялась в потоке. использовали php, модуль inotify к php и логи icecast2
Задача статьи состояла в том, чтобы обойти парсинг средствами PHP.
Ведь гораздо легче сгенерировать код самим icecast'ом, чем парсить файло.
я не парсил ничего в php. у меня был запущен демоном конвейер из tail -f и awk, который разбирал общий лог по каналам, поэтому никаких разборов в момент запроса не было
А задача моего поста на том форуме была вообще обойтись без пхп.
Например для использования на статических сайтах))
Задача этого — то же самое. Здесь просто логическое ударение на слове «обойти», а не на «средствами PHP», затем и выделил.
В принципе, если бы не полтики безопасности JS, можно было бы вообще без проксирующего компонента обойтись, более того, как сказано ранее, apache2 и nginx сами умеют проксировать.
На Github можно найти кастомные версии айсика который почти всю статистику умеет отдавать сразу в формате json и нинадо никаких xsl делать.
Лучше всего все-же парсить логи или постить из айсика в бд(если нужна информация о слушателях) ибо по HTTP теребить айскаст лишний раз не очень хорошо. Каждый раз когда мы подключаемся к нему чтобы получить статистику, мы занимаем слот слушателя т.к. в айскасте кол-во клиентов учитывается общее будь то слушатель и посетитель странички со статистикой. Если данные о кол-ве слушателей не нужны, то лучше узнавать играющий трек от автодиджея или попросить автодиджея постить в last.fm или twitter и оттуда дергать статистику через их API — рельно даст серверу продохнуть. Можно еще поставить на крон чтобы играющий трек и кол-во слушателей обновлялись например раз в несколько секунд, и все это дампилось в файлик stats.json и клалось в доступное место и тогда уже этот статичный файл раздавать клиенту с высокой скоростью.
О CRON тоже мысль была. И, думаю, её и сделаю.
Зачем нужен пункт 2? Апач, нгникс и лайти умеют проксировать сами.
Как обстоят дела с разными кодировками? Сам столкнулся с проблемой, когда от одной радиостанции данные приходили в windows-1250 (да, именно в 1250 а не в 1251). Собственно я этот процесс до конца не довёл, так как сменил ту работу, но если есть нормальное решение — было бы интересно его узнать.
Вот с этим я пока не разобрался.
Я транслирую поток с помощью SAM Broadcaster, но у него нет нигде параметра «кодировка тэгов».
Чет не работает у меня это. Could not parse XSLT file.
Значит неправильно XSL составили.
Также появилась ошибка Could not parse XSLT file, вылечилось удалением тега

<xsl:value-of select="<hh user=mount>" />

Для валидного выполнения скрипта просто прописал вместо нее

"/radio":

(точка монтирования у нас все равно одна)

Далее, в js файле getXmlHttp упрямо выдавал undefined. Вылечилось полной заменой функции getXmlHttp() на валидный кроссбраузерный вариант:

function getXmlHttp() {
  if (typeof XMLHttpRequest === 'undefined') {
    XMLHttpRequest = function() {
      try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
        catch(e) {}
      try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
        catch(e) {}
      try { return new ActiveXObject("Msxml2.XMLHTTP"); }
        catch(e) {}
      try { return new ActiveXObject("Microsoft.XMLHTTP"); }
        catch(e) {}
      throw new Error("This browser does not support XMLHttpRequest.");
    };
  }
  return new XMLHttpRequest();
}
«Could not parse...» выдавалось потому, что Хабрахабр заменял (собака)mount на ссылку на хабраюзера.
Вместо этого рекомендую использовать jQuery, а не изобретать велосипед, как я.
Собственно, улучшенная версия этого JS здесь:
nyanserver.com/asset/engine/track.js
xsl:output следует добавить media-type=«application/json» что бы MIME для JSON был верным
а лучше вот так
media-type="application/json; charset=utf-8"


У меня только после этого стала нормально кодировка в Android`е приходить
А для кроссдоменного запроса просто делаем так:
callback(
{
"/ns":
      {
      "name" : "Nyan-nyan :3",
      "listeners" : "3",
      "description" : "This is sparta~",
      "title" : "Freaking On Shpongle - Dorset Perception Remix",
      "genre" : "Kircore",
      "url" : "http://*********.com"
      }
}
);


а потом на javascript тут с jquery пример:
$.getJSON('http://example.com:8000/info.xsl', function(data) {
//данные в data
});
ребзя, дайте пример кода на вывод данных, потому что javascript не фурычит, или я криворукий и не знающий оного…
Sign up to leave a comment.

Articles

Change theme settings