Создание ajax-радио с помощью php

26 Дек
2011

Здравствуйте, сегодня я расскажу вам, как с помощью чистого php можно создать своё радио.

Теория

Схема будет следующая: администратор(dj) посылает на сервер название песни, в это время слушатель посылает запрос на сервер с частотой t секунд. Далее если у слушателя стоит не тот трек, который загрузил администратор, то у него открывается новый трек.
Таким образом при изменении трека слушатель будет автоматически его менять.

Практика

Начнём с основной страницы, которую будет видеть слушатель, назовём её listenme.php:
<html>
<head>
<title>AK Radio</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(document).ready(function () {
    setInterval("Load();", 250);
});    

var last_id = 0; 
var load_in_process = false; 

function Load() { // Функция создания запроса
    if(!load_in_process) // Если загрузка ещё не началась(в случае медленного сервера или интернет-соединения)
    {
	    load_in_process = true; // Говорим, что загрузка идёт
    	$.get("index.php",  // Создаём запрос
    	{
      	    p: "ajax",  // Указываем, что мы загружаем данные о текущем треке
      	    last: last_id // передаём id текущего трека
    	},
   	    function (result) { // Функция получения результата
		    eval(result); // Исполняем полученный скрипт 
		    load_in_process = false;  // Говорим, что загрузка завершена
    	});
    }
}
</script>

<body>
<center>Более-менее полноценное радио)</center>
<div id="main">Этот div нужен, чтобы выводить в него iframe с музыкой</div>
</body>
</html>



Далее создадим скрипт проигрывания музыки, назовём его listen.php:

<?php  
  if(isset($_GET['name'])){ // если нам дано название песни 
    echo '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="96" height="20" align="middle">
<param name="allowScriptAccess" value="sameDomain" /> 
<param name="movie" value="mp3_player.swf?file=music/'.$name.'&startplay=true" /> 
<embed src="mp3_player.swf?file=music/'.$name.'&startplay=true" quality="high" width="96" height="20" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> 
</object>'; // выводим плеер
  } 
?>


А теперь самое интересное, создадим админ-панель и обработчик ajax запросов, как было видно в первом скрипте, его стоит назвать index.php:

<?php
$main_text = "<head>\n<script>\n function ctrlEnter(event, formElem){ \n if((event.ctrlKey) && ((event.keyCode == 0xA)||(event.keyCode == 0xD))){ \n formElem.submit.click(); \n } \n } \n </script> \n </head> \n <center> \n <h1>AK Radio</h1> \n  Standart code: <form action=index.php method=post> \n <input type=hidden name=p value=new> \n <input type=text name=text value=Text> \n <input type=submit value=Ok> \n </form></br> \n  Large text: <form action=index.php method=post onkeydown='ctrlEnter(event, this);'><input type=hidden name=p value=new><input type=hidden name=l value=1><textarea name=text cols=50 rows=10></textarea></br><input type=submit value=Отправить></form></br> Music: <form action=index.php method=post><input type=hidden name=p value=new><input type=hidden name=i value=1><input type=text name=text><input type=submit value=Ok></form></center>"; // в этой переменной будет лежать стандартное содержимое админ-панели

session_start();

$login = "login"; // логин администратора(dj)
$pass = "password"; // пароль администратора(dj)

  if($_GET['p'] == "ajax"){ // если нам нужно ответить на запрос слушателя
Header("Cache-Control: no-cache, must-revalidate"); 
Header("Pragma: no-cache");
Header("Content-Type: text/javascript; charset=windows-1251"); // говорим, что будем загружать javascript
$file = file("radio_id.txt"); // выбираем файл с id нашей последней песни(в смысле последней песни на радио, а не у пользователя)  
$id = $file[0]; // обзываем это число id
  if($id > $_GET['last']){ // если песня, которая играется у пользователя уже устарела
    $text_file = file("radio_command.txt"); // открываем файл с командой
	$count = count($text_file); // обрабатываем этот файл
    $last = $id;
    echo "var main = $('#main'); \n";
	for($i = 0; $i < 1; $i++){
	  $s = $text_file[$i];
      while(strpos($s, chr(92)) !== false){
        $s = str_replace(chr(92), "", $s);
      }
	  echo $s; // выводим файл
	}
	echo "\n";
    echo "last_message_id = $id;"; // выводим новый id
}
  }elseif(((isset($_GET['p']) && $_GET['p'] == "new") || (isset($_POST['p']))) && isset($_SESSION['pass'])){ // если-же мы хотим обновить команду(аудио-трек)
$file = file("radio_id.txt");
$id = $file[0];
$fh = fopen("radio_command.txt", "w+");
$get_text = $_POST['text'];
$gt = $get_text;
if(isset($_POST['l'])){
  $get_text = "main.html('<center><h1>$gt</h1></center>');";
}elseif(isset($_POST['i'])){ // если мы добавляем музыку
  $get_text = "main.html('<iframe src=listen.php?name=$gt frameborder=0></iframe>');"; // выводим в iframe содержимое listen.php?name=<имя нового музыкального файла>
}
while(strpos($get_text, "\r\n") !== false){
  $get_text = str_replace("\r\n", "</br>", $get_text); // убираем все переводы строк
}
fwrite($fh, $get_text); // записываем файлы
fclose($fh);
$fhn = fopen("monitor_id.txt", "w+");
fwrite($fhn, $id + 1);
fclose($fhn);
    echo $main_text; // выводим админ-панель

  }elseif(($_GET['p'] == "admin") || ($_POST['p'] == "admin")){ // если мы хотим стать админом(войти)
    if(!isset($_SESSION['pass'])){ // если мы уже не вошли
      if(!isset($_POST['password'])){ // если мы не пытались ничего вводить
	    echo "<form action=index.php method=POST><input type=hidden name=p value=admin>Login: <input type=text name=login></br> Password: <input type=password name=password></br><input type=submit value=Ok></form>";
	  }else{
	    if($_POST['login'] == $login && $_POST['password'] == $pass){ // проверяем логин-пароль
	      $_SESSION['pass'] = $pass; // если они верные, то входим
  		  echo $main_text; // выводим админ-панель
	    }else{
	      echo "Password incorrect";
	    }
	  }
	}else{
      echo $main_text; // если мы уже вошли, то выводим админ-панель
	}
  }elseif(!isset($_GET['p']) || !isset($_POST['p'])){
    include("listenme.php"); // если мы не ввели никаких параметров, значит хотим просто послушать музыку
  }
?>


Спасибо за внимание!

Вот таким образом можно создать простое интернет-радио…
Плеер я использовал этот, чтобы не усложнять загрузку.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх