1

Тема: Грфическая информация о станции (icecast2+php)

Вообще давно нужно было вывести в отдельную тему, но простой граф юзер бар, это не сильно мощно, но т.к. данная тема позволит брать информацию о разных данных.
Плюс возникло желание, порасширять данную тему, так что пока сделаю копипаст по пожеланию

AlexIT пишет:

Klef респект за проделанную работу при создании мануальчика, такие фишки нужно в отдельные темы выносить, а то тут затеряюцца и фиг кто их найдет, а жалко...

Позже, дополню и расширю.




Здраствуй дорогой дружок. Сегодня я раскажу тебе сказку о кумулятиыных сведениях для создания графического информера, ака юзербара.

Предупреждение: данный пост содержит много кода, много текста, картинки и никакого смысла. Весь матеиал основан на использование php, icecast и sam broadcaster

Итак нам понадобяться:
- картинка заготовка
- прикольный шрифт в ttf формате
- веб сервер с php
- две руки со средней кривизной
- усидчивость


Сначало делаем картинку заготовку, на php моно делать всё и с нуля, но если руки под фотошоп заточены лучше, то проще и быстрей сделать заранее (либо поймать знакомого фотошопера и  заставить его)
http://wasteland.su/informer/blank.png
в работе можно использовать и другие форматы, такие как gif, jpg, но png мне как то нравиться больше.

Первым делом посмотрим, а как вообще писать на нашей картинки.
итак для этого на нашу тестовую площадку заливаем нашу картинку и шрифт.
Пишем следущий код:

<?php 
header ("Content-type: image/png");
$im = ImageCreateFromPng("blank.png");
$color = imagecolorallocate ($im, 255, 255, 255);
imagettftext ($im, 6, 0, 20, 30, $color, "ft.ttf", "1");
imagettftext ($im, 14, 45, 20, 60, $color, "ft.ttf", "2");
imagettftext ($im, 14, 0, 20, 90, $color, "ft.ttf", "3");
imagettftext ($im, 14, 170, 45, 120, $color, "ft.ttf", "4");
imagepng ($im);
imagedestroy ($im);
?>

результат:
http://wasteland.su/informer/step01.php
итак для тех кто не может открыть гугл коментарии
1. говорим браузеру, что он получает от нас
2. создаем изображение на основе нашего художества
3. присваиваем цвет (как видно в формате RGB)
4. 5. 6. 7. пишем текст, где первое значение: обрабатываемое изображние, второе: размер шрифта, далее: наклон, координата X, координата Y(начало отсчета в левом верхнем углу), цвет, шрифт (точнее путь к нему), текст
8. выдаем картинку браузеру.
9. разрушаем изображение (дабы не забивать память)

теперь берем под белы рученьки icecast и начинаем у него требовать информацию.

<?php 
header ("Content-type: image/png");
$im = ImageCreateFromPng("blank.png");
$color = imagecolorallocate ($im, 255, 255, 255);


$file_name='http://wasteland.su:8080/status2.xsl';
$r=fopen($file_name,'r');
$text=fread($r,1000);
fclose($r);
$mass=explode(",", $text);
$current="track".$mass [16];

imagettftext ($im, 6, 0, 15, 20, $color, "ft.ttf",$current);
imagepng ($im);
imagedestroy ($im);
?>

http://wasteland.su/informer/step02.php
кто читал данную тему раньше, сразу поймет, что мы запрашиваем строку статуса у icecast'a и зная, что где орабатываем нужные строки.

а теперь попробуем применить немного экспериментальной магии.

<?php 
header ("Content-type: image/png");
$im = ImageCreateFromPng("blank.png");
$color = imagecolorallocate ($im, 255, 255, 255);


$file_name='http://wasteland.su:8080/status2.xsl';
$r=fopen($file_name,'r');
$text=fread($r,1000);
fclose($r);
$mass=explode(",", $text);
$current=$mass [16];
$cm=explode(" - ", $current);

imagettftext ($im, 6, 0, 15, 20, $color, "ft.ttf","Artist: ".$cm[1]);
imagettftext ($im, 6, 0, 15, 30, $color, "ft.ttf","Song: ".$cm[2]);

imagepng ($im);
imagedestroy ($im);
?>

http://wasteland.su/informer/step03.php

но в этом есть одна большая опасность. если в название группы будет пробел, дефис, пробел, то результат может быть не тем.

переходим к следущему треку.
из самого icecat'а мы узнать что будет дальше не имеем возможности, т.к. он сам не знает, что поставить, но в случае если вы используете Sam Broadcast есть хитрый обходной маневр.

открываем сам, config, HTML output, и в General HTML output добавляем новую запись.
указываем источник шаблона и резальтирующий файл.

источник вида

<!--LOOP(queue,1)-->
<!--LOOP_HEADER-->
<!--LOOP_ROW-->
$queue.artist$
$queue.combine$
$queue.title$
<!--LOOP_FOOTER-->
<!--LOOP_END-->

результат же будет возращаться
типа

Jimi Hendrix
Jimi Hendrix - Pali Gap
Pali Gap

преобразуем код
соответсвенно не забывая указывать путь на файлы, там где лежат наши основные файлы (или в случае оазделения, использовать FTP доступ (сам и это может))

<?php 
header ("Content-type: image/png");
$im = ImageCreateFromPng("blank.png");
$color = imagecolorallocate ($im, 255, 255, 255);


$file_name='http://wasteland.su:8080/status2.xsl';
$r=fopen($file_name,'r');
$text=fread($r,1000);
fclose($r);
$mass=explode(",", $text);
$current=$mass [16];
$cm=explode(" - ", $current);

$file_name='zago.php';
$r=fopen($file_name,'r');
$text=fread($r,filesize($file_name));
fclose($r);
$mas=explode("\r\n", $text);


imagettftext ($im, 6, 0, 15, 20, $color, "ft.ttf","Artist: ".$cm[1]);
imagettftext ($im, 6, 0, 15, 30, $color, "ft.ttf","Song: ".$cm[2]);
imagettftext ($im, 6, 0, 15, 40, $color, "ft.ttf","Next track: ".$mas[3]);
imagettftext ($im, 6, 0, 15, 50, $color, "ft.ttf","Next artist: ".$mas[2]);
imagettftext ($im, 6, 0, 15, 60, $color, "ft.ttf","Next song: ".$mas[4]);

imagepng ($im);
imagedestroy ($im);
?>

http://wasteland.su/informer/step04.php

как вы поняли, мы добавили запрос к резултирующему файлу (он у нас зоветься zago.php) и разобрали его на части по символу "перевод строки" (\r\n) на unix хостингах будет "\n"

Добавляем "слушателей"

<?php 
header ("Content-type: image/png");
$im = ImageCreateFromPng("blank.png");
$color = imagecolorallocate ($im, 255, 255, 255);


$file_name='http://wasteland.su:8080/status2.xsl';
$r=fopen($file_name,'r');
$text=fread($r,1000);
fclose($r);
$mass=explode(",", $text);
$current=$mass [16];
$listens=$mass [9];
$cm=explode(" - ", $current);

$file_name='zago.php';
$r=fopen($file_name,'r');
$text=fread($r,filesize($file_name));
fclose($r);
$mas=explode("\r\n", $text);


imagettftext ($im, 6, 0, 15, 20, $color, "ft.ttf","Artist: ".$cm[1]);
imagettftext ($im, 6, 0, 15, 30, $color, "ft.ttf","Song: ".$cm[2]);
imagettftext ($im, 6, 0, 15, 40, $color, "ft.ttf","Next artist: ".$mas[2]);
imagettftext ($im, 6, 0, 15, 50, $color, "ft.ttf","Next song: ".$mas[4]);
imagettftext ($im, 6, 0, 15, 60, $color, "ft.ttf","Listns: ".$listens);

imagepng ($im);
imagedestroy ($im);
?>

http://wasteland.su/informer/step05.php
добавление в нашу, уже существующую конструкцию очень просто, в блоке разбирания строки состояния icecast'а добавляем присваивание переменной, где указываеться слушатели.

Максимальное количество.
Для этого нам нужно проявить смекалку и личную доблесть.
Можно канешно брать эту информацию из icecast'а, но в случае перезагрузки сервиса, оно обнулиться.
так что делаем замечательный финт ушами.
Создаем файл max.php

<?php
$ml=0;
?>

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

<?php 
header ("Content-type: image/png");
$im = ImageCreateFromPng("blank.png");
$color = imagecolorallocate ($im, 255, 255, 255);


$file_name='http://wasteland.su:8080/status2.xsl';
$r=fopen($file_name,'r');
$text=fread($r,1000);
fclose($r);
$mass=explode(",", $text);
$current=$mass [16];
$listens=$mass [9];
$cm=explode(" - ", $current);

include "max.php";
if ($listens>$max)
        {
            $txtout='<?php'."\r\n";
            $txtout=$txtout. '$max=' .$listens. ";\r\n";
            $txtout=$txtout."\r\n".'?>';
            $fp = fopen ("max.php", "w"); 
            fwrite($fp,$txtout); 
            fclose($fp);
            $max=$listens;
        }

$file_name='zago.php';
$r=fopen($file_name,'r');
$text=fread($r,filesize($file_name));
fclose($r);
$mas=explode("\r\n", $text);


imagettftext ($im, 6, 0, 15, 20, $color, "ft.ttf","Artist: ".$cm[1]);
imagettftext ($im, 6, 0, 15, 30, $color, "ft.ttf","Song: ".$cm[2]);
imagettftext ($im, 6, 0, 15, 40, $color, "ft.ttf","Next artist: ".$mas[2]);
imagettftext ($im, 6, 0, 15, 50, $color, "ft.ttf","Next song: ".$mas[4]);
imagettftext ($im, 6, 0, 15, 60, $color, "ft.ttf","Listns: ".$listens);
imagettftext ($im, 6, 0, 15, 70, $color, "ft.ttf","Max listens: ".$max);

imagepng ($im);
imagedestroy ($im);
?>

http://wasteland.su/informer/step06.php

но не збывайте, что если у вас данный информер не оторазилься, то число соответсвенно не провериться wink

Вот так за 6 шагов на римере мы научились делать странную фигню.
Я конечно оставил такие аспекты, как проблемы с кодировкой (iconv вам поможет), проверку на длину (а то вдруг за границу текст вылезет, центрирование (imagettfbbox очень полезная вещь).
но такого рода вопросы я вам оставляю на самостоятельное изучение.

[size=10]Если вам не понятны какиелибо команды на php, то гугл вам всегда поможет.
Если же и в этом случае не поняли, то видимо вам рано изучать php.[/size]


[center]http://wasteland.su/informer/[/center]

Отредактировано Klef (04-02-2012 01:17:29)

-------------------------------
R244390603111<- пиво лить сюда

2

Re: Грфическая информация о станции (icecast2+php)

если появляется ошибка что не может найти файл шрифта надо перед

imagettftext

добавить строчку 

putenv('GDFONTPATH=' . realpath('.'));

Отредактировано tarasian666 (22-12-2009 15:09:14)

3

Re: Грфическая информация о станции (icecast2+php)

Спасибо, очень полезная инфа, но тут вопрос по ходу...если у меня радио находится по адресу fmhost.ru:7557/82
Тут http://fmhost.ru:7557/status2.xsl
Статистика со всех станций, скрипт выводит статистику конкретно по 1-ой...а как мне забрать со своей?

http://radioheart.ru/banners/radioheart_400x40_banner.jpg
RadioHeart.ru: Функциональный радио хостинг с автодиджеем и нонстопом, а так же быстрый виртуальный хостинг. Возможность создать радио за 5 минут, подключить автодиджей и нонстоп.
Отзывы о хостинге

4

Re: Грфическая информация о станции (icecast2+php)

что то типа

function antara($string, $start, $end){
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}

$text = antara($text,'/82','/');

не проверено, так что ни чего не могу гарантировать

Отредактировано tarasian666 (22-12-2009 20:26:18)

5

Re: Грфическая информация о станции (icecast2+php)

2 tarasian666
в этих случаях мне проще указать полный путь wink

2 Falcon
в ближайщее время будет дополнен текст, вариантами на отдельный поток

-------------------------------
R244390603111<- пиво лить сюда

6

Re: Грфическая информация о станции (icecast2+php)

Klef пишет:

2 tarasian666
в этих случаях мне проще указать полный путь

а мне нет big_smile
к примеру если используеться несколько шрифтов чтоб каждый раз не прописывать (или копипастить) полный путь.
но здесь уж как кому нравится wink

7

Re: Грфическая информация о станции (icecast2+php)

Со скриптом разобрался...но возникла проблема теперь в другом...т.к. хостинг бесплатный, хост ругается на fopen
Пробовал заливать к другу на платный, тоже самое, пишет, что нету прав...Пожет есть еще какой-то вариант...Или может кто-нибудь поможет, разместит скрипт у себя, а я уже фреймом попытаюсь вставить

http://radioheart.ru/banners/radioheart_400x40_banner.jpg
RadioHeart.ru: Функциональный радио хостинг с автодиджеем и нонстопом, а так же быстрый виртуальный хостинг. Возможность создать радио за 5 минут, подключить автодиджей и нонстоп.
Отзывы о хостинге

8

Re: Грфическая информация о станции (icecast2+php)

а как вам вариант на своем компе скрипт запускать?
а если используется sam то можно грабить инфу только с него

Отредактировано tarasian666 (23-12-2009 01:34:13)

9

Re: Грфическая информация о станции (icecast2+php)

Именно так и делаю. Но тут вот такая проблема возникает. Когда в эфир выходит другой диджей, скрипта то у него нету, да и пароль от фтп я дать не могу по определенным соображениям, статистика соответственно накрывается( вот уже который день мучаюсь с этой идеей.

http://radioheart.ru/banners/radioheart_400x40_banner.jpg
RadioHeart.ru: Функциональный радио хостинг с автодиджеем и нонстопом, а так же быстрый виртуальный хостинг. Возможность создать радио за 5 минут, подключить автодиджей и нонстоп.
Отзывы о хостинге

10

Re: Грфическая информация о станции (icecast2+php)

2 Falcon

$file_name='http://fmhost.ru:7557/status2.xsl?mount=/82';

вместо
$mass [9];
использовать
$mass [14];

это для отдельного потока

Как именно ругается на fopen?

Отредактировано Klef (25-12-2009 07:08:15)

-------------------------------
R244390603111<- пиво лить сюда

11

Re: Грфическая информация о станции (icecast2+php)

Klef пишет:

$file_name='http://fmhost.ru:7557/status2.xsl?mount/82';

хм.. я затупил big_smile
но поправлю

$file_name='http://fmhost.ru:7557/status2.xsl?mount=/82';

Отредактировано tarasian666 (24-12-2009 13:32:19)

12

Re: Грфическая информация о станции (icecast2+php)

надо mass[16] и mass[14] для слушателей. Но тут вот такие траблы. При попытке вписать в функцию построения картинки русский текст, сразу пишет кракозябры, хотя русские названия и артисты отображаются корректно. Подскажите, как исправить. И вот, при попытке выполнить скрипт на хостинге такая ситуация:
1)Если создавать картинку, то оно тупо не создает ее.
2)Если не создавать картинку, то пишет следующее
Warning: fopen() [function.fopen]: URL file-access is disabled in the server configuration in /home/hdd1.ru/ultradio/sites/www/345.php on line 4

Warning: fopen(http://fmhost.ru:7557/status2.xsl?mount=/82) [function.fopen]: failed to open stream: no suitable wrapper could be found in /home/hdd1.ru/ultradio/sites/www/345.php on line 4

Warning: fread(): supplied argument is not a valid stream resource in /home/hdd1.ru/ultradio/sites/www/345.php on line 5

Warning: fclose(): supplied argument is not a valid stream resource in /home/hdd1.ru/ultradio/sites/www/345.php on line 6

http://radioheart.ru/banners/radioheart_400x40_banner.jpg
RadioHeart.ru: Функциональный радио хостинг с автодиджеем и нонстопом, а так же быстрый виртуальный хостинг. Возможность создать радио за 5 минут, подключить автодиджей и нонстоп.
Отзывы о хостинге

13

Re: Грфическая информация о станции (icecast2+php)

Falcon пишет:

URL file-access is disabled in the server configuration

значит на сервере запрещен доступ к файлам через URL
остальные ошибки уже следствие..

Отредактировано tarasian666 (24-12-2009 19:03:19)

14

Re: Грфическая информация о станции (icecast2+php)

В этом то все и дело. Подскажите мне хостинг(бесплатный желательно) на котором данная фукция будет работать. Спасибо)

http://radioheart.ru/banners/radioheart_400x40_banner.jpg
RadioHeart.ru: Функциональный радио хостинг с автодиджеем и нонстопом, а так же быстрый виртуальный хостинг. Возможность создать радио за 5 минут, подключить автодиджей и нонстоп.
Отзывы о хостинге

15

Re: Грфическая информация о станции (icecast2+php)

гугл в помощь

16

Re: Грфическая информация о станции (icecast2+php)

2 Falcon
в какой кодировке создаете скрипт?

о хостинге: бороться и искать, найти и перепрятать.

2 tarasian666
ну это уже очепятка wink

Отредактировано Klef (25-12-2009 07:10:52)

-------------------------------
R244390603111<- пиво лить сюда

17

Re: Грфическая информация о станции (icecast2+php)

В блокноте ANSI походу.
P.S. Хостинг нашел)

http://radioheart.ru/banners/radioheart_400x40_banner.jpg
RadioHeart.ru: Функциональный радио хостинг с автодиджеем и нонстопом, а так же быстрый виртуальный хостинг. Возможность создать радио за 5 минут, подключить автодиджей и нонстоп.
Отзывы о хостинге

18

Re: Грфическая информация о станции (icecast2+php)

notepad ++ спасет тебя

-------------------------------
R244390603111<- пиво лить сюда

Re: Грфическая информация о станции (icecast2+php)

что за скрипт

$file_name='zago.php';

конкретнее о zago.php

Сам придумал или из гугла скопировал?
========================================================================
FMGAMERADIO.RU - Уж както стараемся выделится big_smile

20

Re: Грфическая информация о станции (icecast2+php)

переходим к следущему треку.
из самого icecat'а мы узнать что будет дальше не имеем возможности, т.к. он сам не знает, что поставить, но в случае если вы используете Sam Broadcast есть хитрый обходной маневр.

открываем сам, config, HTML output, и в General HTML output добавляем новую запись.
указываем источник шаблона и резальтирующий файл.

источник вида
Код:

<!--LOOP(queue,1)-->
<!--LOOP_HEADER-->
<!--LOOP_ROW-->
$queue.artist$
$queue.combine$
$queue.title$
<!--LOOP_FOOTER-->
<!--LOOP_END-->
результат же будет возращаться
типа
Код:

Jimi Hendrix
Jimi Hendrix - Pali Gap
Pali Gap
преобразуем код
соответсвенно не забывая указывать путь на файлы, там где лежат наши основные файлы (или в случае оазделения, использовать FTP доступ (сам и это может))

Код:

<?php
header ("Content-type: image/png");
$im = ImageCreateFromPng("blank.png");
$color = imagecolorallocate ($im, 255, 255, 255);


$file_name='http://wasteland.spb.su:8080/status2.xsl';
$r=fopen($file_name,'r');
$text=fread($r,1000);
fclose($r);
$mass=explode(",", $text);
$current=$mass [16];
$cm=explode(" - ", $current);

$file_name='zago.php';
$r=fopen($file_name,'r');
$text=fread($r,filesize($file_name));
fclose($r);
$mas=explode("\r\n", $text);


imagettftext ($im, 6, 0, 15, 20, $color, "ft.ttf","Artist: ".$cm[1]);
imagettftext ($im, 6, 0, 15, 30, $color, "ft.ttf","Song: ".$cm[2]);
imagettftext ($im, 6, 0, 15, 40, $color, "ft.ttf","Next track: ".$mas[3]);
imagettftext ($im, 6, 0, 15, 50, $color, "ft.ttf","Next artist: ".$mas[2]);
imagettftext ($im, 6, 0, 15, 60, $color, "ft.ttf","Next song: ".$mas[4]);

imagepng ($im);
imagedestroy ($im);
?>


как вы поняли, мы добавили запрос к резултирующему файлу (он у нас зоветься zago.php) и разобрали его на части по символу "перевод строки" (\r\n) на unix хостингах будет "\n"

Отредактировано Klef (31-12-2009 20:56:18)

-------------------------------
R244390603111<- пиво лить сюда

21

Re: Грфическая информация о станции (icecast2+php)

Красава, спасибо за мануал.

Отредактировано Mafiozo (22-01-2010 11:58:58)

22

Re: Грфическая информация о станции (icecast2+php)

восстановил примеры, а то без иллюстраций было какое то время sad

-------------------------------
R244390603111<- пиво лить сюда

23

Re: Грфическая информация о станции (icecast2+php)

Чё то у меня не выходит сделать такую штуку, у меня не отображается даже пробная картинка с цифрами...

SLUXAI-FM Христианское интернет радио http://sluxai-fm.net/

24

Re: Грфическая информация о станции (icecast2+php)

а что пишет?

25

Re: Грфическая информация о станции (icecast2+php)

Да в том то и дело, что ничего, просто пустое место.

SLUXAI-FM Христианское интернет радио http://sluxai-fm.net/