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

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

 

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

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

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

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

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

}
return $result;

А вот что он может выводить (кстати первый раз вижу чтобы из массива дергали (причем двумерного???) )

if ($file = file_get_contents($addr))
{
preg_match_all('#(\<td class=\"streamdata\"[^\>]*\>).+?(\<\/td\>)#is',$file , $matches,PREG_PATTERN_ORDER );
$stream_title = strip_tags("{$matches[0][0]}");
$stream_description = strip_tags("{$matches[0][1]}");
$content_type = strip_tags("{$matches[0][2]}") ;
$mount_started = strip_tags("{$matches[0][3]}") ;
$bitrate = strip_tags("{$matches[0][4]}") ;
$current_listeners = strip_tags("{$matches[0][5]}") ;
$peak_listeners = strip_tags("{$matches[0][6]}") ;
$stream_genre = strip_tags("{$matches[0][7]}") ;
$current_song = strip_tags("{$matches[0][8]}") ;
}

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

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

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

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


Так и приводите default.php в соответствие желаемому

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


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


При этом в helper.php

if (strlen($current_song)<2)
{
$result->status = 1;
}
else
{
$result->status = 0;
$result->mount = $params->get('point');
$result->listeners = $current_listeners;
$result->listfake = $current_listeners + $params->get('fake');
$result->cur_song = $current_song;
$result->stream_description = $stream_description;
}
return $result;


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

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

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

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

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

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

62
Фёдор @Крик
как говориться всё, да не всё. Вывести вывел, а вот с обновлением пока беда. именно с обновление Description. Я в принципе понимаю почему, потому что в update.js и ajax.php не задано соответствующего контента.
Файл update.js содиржимое:

IceCastUpdater = new Class({
title: '',
el: Class.empty,
active: false,

initialize: function(id, el) {
this.id = id;
this.el = el;
this.update.periodical(5000, this);
},

update: function() {
var t = this;
if (this.active) return;
this.active = true;
var myAjax = new Ajax(siteroot + '/modules/mod_icecast/ajax.php?id=' + this.id + '&ts=' + $time(), {
method: 'get',
onComplete: function(response) {
t.active = false;
var result = Json.evaluate(response);

$ES('.icecast-song', t.el).setText(result.title);
$ES('.icecast-listeners', t.el).setText(result.listeners);
}
}).request();
}
});
window.addEvent('domready', function() {
$$('.icecast_title').each(function(el) {
new IceCastUpdater(el.getText(), el.getParent());
});
});


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

и ajax.php

<?php
/**
* ICECAST - A Joomla internet radio statistic module
* @version 1.0.9
* @package mod_icecast.zip
* @copyright (C) 2010 by sli
*/

/*
* Поскольку этот скрипт является отдельной точкой входа,
* инициализируем фреймворк так же, как это сделано в /index.php
*/

define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(dirname(dirname(__FILE__))) );
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();

// Подключаем хелпер
require_once(dirname(__FILE__).DS.'helper.php');
jimport('joomla.application.module.helper');

function paramsById($id)
{
$db = JFactory::getDBO();
$db->setQuery('SELECT params FROM #__modules WHERE id = '. $db->quote($id));
return new JParameter($db->loadResult());
}

$data = ModHelperIceCast::getParams(paramsById(JRequest::getInt('id')));
if (!isset($data->listeners)) {
$data->listeners = 0;
$data->cur_song = 'n/a';
}
echo '{listeners: ', $data->listeners, ', title: "', str_replace('"', '\'\'', $data->cur_song), '"}';
?>

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

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

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

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

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

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

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

62
Фёдор @Крик

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

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

36
DragonZX @DragonZX
Ну я не знаю здесь как он что обновляет, предполагаю что да
update.js
update: function() {
var t = this;
if (this.active) return;
this.active = true;
var myAjax = new Ajax(siteroot + '/modules/mod_icecast/ajax.php?id=' + this.id + '&ts=' + $time(), {
method: 'get',
onComplete: function(response) {
t.active = false;
var result = Json.evaluate(response);

$ES('.icecast-song', t.el).setText(result.title);
$ES('.icecast-listeners', t.el).setText(result.listeners);
$ES('.icecast-description', t.el).setText(result.description);
}

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

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

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