ОсновноеRadiotalkПользовательское
Общие вопросы по интернет радио вещанию
7   •   Посмотреть все темы

Плагин вывода статистики с Icecast2 в joomla нужна помощь

 

62
Фёдор @Крик
Доброго времени суток!
Есть плагин вывода статистику icecast для CMS Joomla

мне не нравится что он выводит не сколько слушает, а пик слушателей.
И хотелось бы чтоб вместо ссылки на сайт радио выводилось название потока с icecast

Собствено сам мод: **********

Отредактировано Крик - 22.06.2013
0
62
Фёдор @Крик
выглядет так:

0
36
DragonZX @DragonZX
Хм, возможно покажусь дебилом... А разве сейчас он делает не так? Там "стандартный" парсер с выводом всего необходимого.
Вот класс, отвечающий за вывод
  1. if (strlen($current_song)<2)
  2. {
  3. $result->status = 1;
  4. }
  5. else
  6. {
  7. $result->status = 0;
  8. $result->mount = $params->get('point');
  9. $result->listeners = $current_listeners + $params->get('fake');
  10. $result->listfake = $current_listeners + $params->get('fake');
  11. $result->cur_song = $current_song;
  12. }
  13. return $result;

А вот что он может выводить (кстати первый раз вижу чтобы из массива дергали (причем двумерного???) )
  1.  
  2. if ($file = file_get_contents($addr))
  3. {
  4. preg_match_all('#(\<td class=\"streamdata\"[^\>]*\>).+?(\<\/td\>)#is',$file , $matches,PREG_PATTERN_ORDER );
  5. $stream_title = strip_tags("{$matches[0][0]}");
  6. $stream_description = strip_tags("{$matches[0][1]}");
  7. $content_type = strip_tags("{$matches[0][2]}") ;
  8. $mount_started = strip_tags("{$matches[0][3]}") ;
  9. $bitrate = strip_tags("{$matches[0][4]}") ;
  10. $current_listeners = strip_tags("{$matches[0][5]}") ;
  11. $peak_listeners = strip_tags("{$matches[0][6]}") ;
  12. $stream_genre = strip_tags("{$matches[0][7]}") ;
  13. $current_song = strip_tags("{$matches[0][8]}") ;
  14. }

Сам шаблон вывода записан в tmpl/default.php

Отредактировано DragonZX - 20.06.2013
0
62
Фёдор @Крик
на скрине выше видно надпись bla-bla! это я прописывал в настройках плагина в админке и по факту учитывает пик слушателей а не сколько сейчас слушает.
А я хочу чтоб вместо Bla-Bla! Выводился stream title ибо там обычто пишет свой ник Dj ну и интереснее видеть сколько щас слушает людей радио

0
36
DragonZX @DragonZX
Крик пишет:

на скрине выше видно надпись bla-bla! это я прописывал в настройках плагина в админке и по факту учитывает пик слушателей а не сколько сейчас слушает.
А я хочу чтоб вместо Bla-Bla! Выводился stream title ибо там обычто пишет свой ник Dj ну и интереснее видеть сколько щас слушает людей радио


Так и приводите default.php в соответствие желаемому
  1.  
  2. <div align = "center" class="icecast<?php echo $params->get('moduleclass_sfx'); ?>">
  3. <script type="text/javascript">var siteroot = "<?php echo $baseurl ?>";</script> # Адрес радиостанции
  4. <span class='icecast_title' style='display:none'><?php echo $module->id ?></span>
  5. <a href="<?php echo $host ?>" target="_blank"><b><?php echo $ice2_station ?></b></a><p>
  6. <div class="icacast-song"><?php echo JText::_( 'PLAYING' );?> # Надпись сейчас играет
  7. <p /><p class="icecast-song"><?php echo $item->cur_song?></div> # текущая песня
  8. <?php echo JText::_( 'CLICK' );?>
  9. <div class="icacast-play">
  10. <a href="ht*tp://<?php echo $link?>">
  11. <img src="<?php echo $baseurl?>/media/mod_icecast/play.png" title="<?php echo JText::_( 'ALT_IMG' );?>" alt="<?php echo JText::_( 'ALT_IMG' );?>"></a>
  12. </div>
  13. <div class="icacast-list"><?php echo JText::_( 'PEOPLE' );?> <b class="icecast-listeners"><?php echo $item->listfake ?></b></div> # Количество людей вместе с фейковыми
  14. <div class="icacast-bitrate"><?php echo JText::_( 'BITRATE' );?> <b><?php echo $bitrate?></b> <?php echo JText::_( 'KBPS' );?></div>
  15. </div>


То есть как-то так
  1. <div align = "center" class="icecast<?php echo $params->get('moduleclass_sfx'); ?>">
  2. <p class="icecast-song"><?php echo $item->stream_description?></div></p><p>
  3. <div class="icacast-song"><?php echo JText::_( 'PLAYING' );?> # Надпись сейчас играет
  4. <p /><p class="icecast-song"><?php echo $item->cur_song?></div> # текущая песня
  5. <?php echo JText::_( 'CLICK' );?>
  6. <div class="icacast-play">
  7. <a href="ht*tp://<?php echo $link?>">
  8. <img src="<?php echo $baseurl?>/media/mod_icecast/play.png" title="<?php echo JText::_( 'ALT_IMG' );?>" alt="<?php echo JText::_( 'ALT_IMG' );?>"></a>
  9. </div>
  10. <div class="icacast-list"><?php echo JText::_( 'PEOPLE' );?> <b class="icecast-listeners"><?php echo $item->listeners ?></b></div> # Количество людей вместе с фейковыми
  11. <div class="icacast-bitrate"><?php echo JText::_( 'BITRATE' );?> <b><?php echo $bitrate?></b> <?php echo JText::_( 'KBPS' );?></div>
  12. </div>


При этом в helper.php
  1.  
  2. if (strlen($current_song)<2)
  3. {
  4. $result->status = 1;
  5. }
  6. else
  7. {
  8. $result->status = 0;
  9. $result->mount = $params->get('point');
  10. $result->listeners = $current_listeners;
  11. $result->listfake = $current_listeners + $params->get('fake');
  12. $result->cur_song = $current_song;
  13. $result->stream_description = $stream_description;
  14. }
  15. return $result;


Могу конечно и ошибаться, но вот как-то так (убрать звездочку ht*tp)

Отредактировано DragonZX - 20.06.2013
0
62
Фёдор @Крик
Не тогда после правки вобще работать перестаёт, вместе со статистикой исчезает и плеер и сколько людей на сайте

Отредактировано Крик - 20.06.2013
0
36
DragonZX @DragonZX
Возможно где-то синтаксическая ошибка. Сейчас тестировать на сервере я не имею возможности. Поймите логику и попробуйте сами. И да, включите отображение ошибок php. Естественно в случае ошибки скрипт работать не будет.
upd: логично, точку с запятой пропустил, исправил)

Отредактировано DragonZX - 20.06.2013
0
62
Фёдор @Крик
Всё я разобрался! DragonZX огромное тебе спасибо! Во век не забуду!

0
62
Фёдор @Крик
Появилась небольшая проблема: статистика в плагине перестала обновляться сама по себе, вроде ни чего связаного с с обновлением скрипта не трогал, кто посмотрит?
Плагин с моими переделками -> **********

0
62
Фёдор @Крик
Разобрался сам, всё работает .

0
62
Фёдор @Крик
как говориться всё, да не всё. Вывести вывел, а вот с обновлением пока беда. именно с обновление Description. Я в принципе понимаю почему, потому что в update.js и ajax.php не задано соответствующего контента.
Файл update.js содиржимое:
  1.  
  2. IceCastUpdater = new Class({
  3. title: '',
  4. el: Class.empty,
  5. active: false,
  6. initialize: function(id, el) {
  7. this.id = id;
  8. this.el = el;
  9. this.update.periodical(5000, this);
  10. },
  11. update: function() {
  12. var t = this;
  13. if (this.active) return;
  14. this.active = true;
  15. var myAjax = new Ajax(siteroot + '/modules/mod_icecast/ajax.php?id=' + this.id + '&ts=' + $time(), {
  16. method: 'get',
  17. onComplete: function(response) {
  18. t.active = false;
  19. var result = Json.evaluate(response);
  20. $ES('.icecast-song', t.el).setText(result.title);
  21. $ES('.icecast-listeners', t.el).setText(result.listeners);
  22. }
  23. }).request();
  24. }
  25. });
  26. window.addEvent('domready', function() {
  27. $$('.icecast_title').each(function(el) {
  28. new IceCastUpdater(el.getText(), el.getParent());
  29. });
  30. });

тут как я понял надо добавить строчку $ES('.icecast-description', t.el).setText(result.description); после $ES('.icecast-listeners', t.el).setText(result.listeners);

и ajax.php
  1.  
  2. <?php
  3. /**
  4. * ICECAST - A Joomla internet radio statistic module
  5. * @version 1.0.9
  6. * @package mod_icecast.zip
  7. * @copyright (C) 2010 by sli
  8. */
  9. /*
  10. * Поскольку этот скрипт является отдельной точкой входа,
  11. * инициализируем фреймворк так же, как это сделано в /index.php
  12. */
  13. define( '_JEXEC', 1 );
  14. define('JPATH_BASE', dirname(dirname(dirname(__FILE__))) );
  15. define( 'DS', DIRECTORY_SEPARATOR );
  16. require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
  17. require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
  18. $mainframe =& JFactory::getApplication('site');
  19. $mainframe->initialise();
  20. // Подключаем хелпер
  21. require_once(dirname(__FILE__).DS.'helper.php');
  22. jimport('joomla.application.module.helper');
  23. function paramsById($id)
  24. {
  25. $db = JFactory::getDBO();
  26. $db->setQuery('SELECT params FROM #__modules WHERE id = '. $db->quote($id));
  27. return new JParameter($db->loadResult());
  28. }
  29. $data = ModHelperIceCast::getParams(paramsById(JRequest::getInt('id')));
  30. if (!isset($data->listeners)) {
  31. $data->listeners = 0;
  32. $data->cur_song = 'n/a';
  33. }
  34. echo '{listeners: ', $data->listeners, ', title: "', str_replace('"', '\'\'', $data->cur_song), '"}';
  35. ?>

как я понял мне надо что-то дописать в этой части:
  1. if (!isset($data->listeners)) {
  2. $data->listeners = 0;
  3. $data->cur_song = 'n/a';
  4. }
  5. echo '{listeners: ', $data->listeners, ', title: "', str_replace('"', '\'\'', $data->cur_song), '"}';

Вот только мой прежний метод эксперементов не помог, прошу вашей помощи.

0
303
Сергей @Sergei
незнаю про этот мод но тот что мы с tarasian666 доработали кажется получше будет. там 2 потока добавлено (разный битрейт), вывод аваторки и ник DJ, какой трек играет, и я ещё туда плеер запихал. если надо то залил на яндекс диск **********

0
303
Сергей @Sergei
можно с двух один собрать

0
62
Фёдор @Крик
Спасибо! Скачал, поюзаю. Ну этот доработать всё же охото тут уже спортивный интерес!

0
62
Фёдор @Крик
Кстати в моём случае за основу взят тот же мод.

0
62
Фёдор @Крик
блин, что помочь некому? всего лишь то надо подсказать чуть, чуть и готовый плагин!

0
62
Фёдор @Крик

Вот чего я добился благодоря подсказке DragonZX, единственный косяк на данный момент - это кто в эфире не обновляется само по себе.

0
62
Фёдор @Крик
с слушателями решил проблему тоже.

0
36
DragonZX @DragonZX
Ну я не знаю здесь как он что обновляет, предполагаю что да
update.js
  1. update: function() {
  2. var t = this;
  3. if (this.active) return;
  4. this.active = true;
  5. var myAjax = new Ajax(siteroot + '/modules/mod_icecast/ajax.php?id=' + this.id + '&ts=' + $time(), {
  6. method: 'get',
  7. onComplete: function(response) {
  8. t.active = false;
  9. var result = Json.evaluate(response);
  10. $ES('.icecast-song', t.el).setText(result.title);
  11. $ES('.icecast-listeners', t.el).setText(result.listeners);
  12. $ES('.icecast-description', t.el).setText(result.description);
  13. }

и ajax.php
  1. if (!isset($data->listeners)) {
  2. $data->listeners = 0;
  3. $data->cur_song = 'n/a';
  4. $data->description = 'n/a';
  5. }
  6. echo '{listeners: ', $data->listeners, ', ''description: ', $data->description, ', title: "', str_replace('"', '\'\'', $data->cur_song), '"}';

Прошу проверить кавычки - мелко, не вижу.

Отредактировано DragonZX - 24.06.2013
0
36
DragonZX @DragonZX
Кстати вот тут
**********
у меня интересный скриптик который тут пригодится ;)

0





Согласие на обработку данных на нашем сайте

Продолжая просматривать страницу, вы соглашаетесь с использованием файлов «Cookie» и с Политикой конфиденциальности «Privacy».
Наверху или внизу страницы вы можете изменить валюту и язык по умолчанию. Английская версия сайта ещё находится в доработке и доступна не полностью.