Чтение информации с радио-серверов
Я думаю, многие пользователи локальных сетей и сети Интернет хоть раз в жизни сталкивались с радио-серверами на базе SHOUTcast, к которым можно приконнектится винампом и спокойно слушать музыку. И у некоторых из этих пользователей возникала мысль о том, как прочитать информацию с этих серверов. И если перед вами эта статья, то по-видимому вас тоже такая мысль посещала.
Итак перейдем конкретно к изучению возможностей SHOUTcast-сервера. Если мы в винампе нажмем Ctrl+L и введем адрес радио сервера (например url=http://www.some-server.com:8000]http://www.some-server.com:8000/url]), то мы получим обычный звуковой поток, а если мы этот же адрес введем в каком-нибудь из браузеров, то нам откроется страничка с некоторой информацией с радио сервера, такой как: количество слушателей в данный момент, максимальное количество юзеров, битрейт, название текущей композиции, историю проигранных композиций и т.д.
Всё бы хорошо, но многим бы хотелось эту информацию видеть не в виде стандартной страницы, генерируемой радио-сервером, а в виде страницы с собственным дизайном и наполнением.
Далее я приведу конкретно скрипт, читающий информацию с радио сервера. Я попытался как можно более подробно расставить комментарии, поэтому надеюсь ни у кого вопросов возникнуть не должно.
<?php
$to = 0.05; // таймаут для открытия сокета
function radio($radio,$port)
{
global $to; // объявляем переменную $to внутри функции
@$fs=fsockopen($radio,$port,$err1,$err2,$to); // открываем сокет на радио сервер
if ($fs) // если сокет открыт, то…
{
// этим заголовком мы даем серверу понять то, что мы браузер а не какой-то там винамп
, и читаем содержимое главной страницы
fputs($fs,“GET / HTTP/1.0\r\nUser-Agent: Mozilla/2.0\r\n\r\n”);
$d=fgets($fs); $d=fgets($fs); $d=fgets($fs); $d=fgets($fs); // читаем строку с содержимым главной страницы
if (strpos($d,“Server is currently down”)) // если находим строку “Server is currently down”, то делаем вывод, что сервер выключен
{
echo “<font face=\”Verdana\” style=\”font-size: 11px;\”>
Радио <a href=\”http://$radio:$port\” style=\”color: #ff0000\” target=\”_blank\”><b>$radio:$port</b></a>:
<br>В данный момент сервер не запущен
</font>”; // сообщаем пользователю о том что сервер выключен
}
else // в противном случае делаем вывод о том, что сервер включен
{
$pos=strpos($d,“kbps with”);
$pos1=strpos($d,” “,$pos+10);
$d=substr($d,$pos+10,$pos1-$pos-10); // ищем и запоминаем информацию б количестве активных пользователей
@$fp=fsockopen($radio,$port,$err1,$err2,$to); // открываем новый сокет
if ($fp)
{
fputs($fp,“GET /played.html HTTP/1.0\r\nUser-Agent: Mozilla/2.0\r\n\r\n”); // опять говорим серверу, что мы браузер и читаем содержимое страницы с историей композиций - played.html
$s=fgets($fp); $s=fgets($fp); $s=fgets($fp); $s=fgets($fp); // переходим к строке с необходимой информацией
$pos=strpos($s,“<td>Played @</td>”);
$pos=strpos($s,“<tr><td>”,$pos);
$pos=strpos($s,“</td><td>”,$pos);
$pos1=strpos($s,“<td>”,$pos+9);
$s=substr($s,$pos+9,$pos1-$pos-9); // ищем и читаем информацию об активной композиции
$gt = explode(“>”, $s);
if ($gt[0] == “AD”)
{
$s = “ничего не играет”;
} // если активной композиции нет, делаем вывод о том, что ничего не играет
print “<font face=\”Verdana\” style=\”font-size: 11px;\”>
Радио <a href=\”http://$radio:$port\” target=\”_blank\” style=\”color: #ff0000\” target=\”_blank\”><b>$radio:$port</b></a>:<p>
Сейчас на радио: <b>$s</b><br>
Слушателей: <b>$d</b><p>
</b>Подключиться к радио: <a href=\”http://$radio:$port/listen.pls\” target=\”_blank\”><b>listen.pls</b></a>”;
// выводим информацию
}
}
}
else // если нам не удалось открыть сокет, делаем вывод о том, что сервер не запущен
{
print “<font face=\”Verdana\” style=\”font-size: 11px;\”>
Радио <a href=\”http://$radio:$port\” style=\”color: #ff0000\” target=\”_blank\”><b>$radio:$port</b></a>:
<br>В данный момент сервер не запущен
</font>”;
}
return;
}
radio(“172.25.137.71″,“8000″);
print “<hr width=\”100%\” size=\”1\” color=\”#7E2B01\”>”;
radio(“172.25.136.30″,“8000″);
// так вызывается функция
?>
Вот и вся программа. Как вы заметили, моя программа читает только информацию об количестве слушателей и активной композиции, но я думаю вам теперь не составит труда по надобности добавить сюда еще что-нибудь. Успехов!
P.S. тестировалось с SHOUTcast-сервером версии 1.9.2
взято с http://php.com.ua/ru/tips/shoutcast_info.htm