ТОП песен на радио

Статус
В этой теме нельзя размещать новые ответы.

Panzers^)

Постоялец
Регистрация
7 Окт 2007
Сообщения
69
Реакции
0
ТОП-10 песен за неделю.

Есть кусок кода (показывает 20 последних песен:(
PHP:
<?php
// Функция извлечения данных
function xyStrRead($strp, $xp, $yp) 
{
      $jumpx1 = stripos($strp, $xp) + strlen($xp); 
      $jumpx = substr($strp, $jumpx1);
      if($yp === "null") return $jumpx;
      $XPos = 0;
      $YPos = stripos($jumpx, $yp) - $XPos;
      $ZPos = substr($jumpx, $XPos, $YPos);
      return $ZPos;
}


   $to = 0.05;  
//Функция последних 20 проигранных треков
function radio($radio,$port)
{
 global $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"))  
    {
     echo ""; 
    }
   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");  
       $s=fgets($fp); $s=fgets($fp); $s=fgets($fp); $s=fgets($fp);  
       $pos=strpos($s,$pos);
       $pos=strpos($s,$pos);
       $pos1=strpos($s,$pos+100);
       $s=substr($s,$pos+2473,$pos1-$pos-600); 

       $gt = explode(">", $s);
       if ($gt[0] == "AD")
        {
         $s = "loading...";
        }  
       print "<b><font color='black'>20 Последних песен прозвучавшие в нашем эфире:</font></b$s";
            }
    }}}

radio("IP","8000");
?>
Нужно как то подсчитать, сколько раз какая песня играла за неделю и записать в файл на сервере. Как это проще всего сделать?

Есть у меня такая идея: скрипт пишет все треки которые прозвучали за день в *.txt файл имя которого будет дата.месяц.год. А как наступили новые сутки, то он будет писать уже в новый файл (короче говоря чтобы разделялись по датам). Потом написать скрипт, и в него загонять список..он и будет считать сколько какая песня проиграла. Вот с реализацией хреново тут. Даже примеров где глянуть нету.
 
В общем пока жду совета/помощи успел тут кое что накатать:
PHP:
<?php
$ip = "12.13.145.167";
$port = "8000";
$timeout = 0.90;
$date = date("d.m.y"); 
$filename = "$date.html";

$fp = fsockopen ($ip, $port, $errno, $errstr, $timeout);
if (!$fp) {
echo "$errstr ($errno)<br>";
} 
else {
fputs ($fp, "GET /played.html HTTP/1.0\r\nUser-Agent: Mozilla/2.0\r\n\r\n");
$s=fgets($fp); $s=fgets($fp); $s=fgets($fp); $s=fgets($fp); 
$pos=strpos($s,$pos);
$pos=strpos($s,$pos);
$pos1=strpos($s,$pos+100);
$s=substr($s,$pos+2473,$pos1-$pos-600);
$zamena = array("'Current Song'", "'b>'", "'<<\/'", "'<table cellpadding=0 cell'");
$na = "";
$s = preg_replace($zamena,$na,$s);
$s = "<table><tr>$s";
$file = fopen("$filename", "a+");

if (fwrite($file, $s) === FALSE) { 
echo "Не могу произвести запись в файл"; 
exit; 
}
else {
fclose($file);
echo "Обновление списка прошло успешно!";
}
}
?>

Записывает в файл "дата.html".
Но как сделать чтобы повторы не записывались в файл?
Например если там в файле есть уже строка "16:21:43 Monster DJs feat. Reno - Эй, детка!" то она туда повторно не записывается. Как такое реализовать?
 
Можешь попробовать перед записью файла загружать уже записанные песни в массив, а потом проверять текущию песню на наличие в этом массиве, например, функцией "in_array". Она позволяет проверить, присутствует ли в массиве значение. Если присутствует значит песню не пишем, если нет тогда пишем. Но если много песен и большой файл будет и часто его дергать возможно это может создать большую нагрузку на север.
 
Можешь попробовать перед записью файла загружать уже записанные песни в массив, а потом проверять текущию песню на наличие в этом массиве, например, функцией "in_array". Она позволяет проверить, присутствует ли в массиве значение. Если присутствует значит песню не пишем, если нет тогда пишем. Но если много песен и большой файл будет и часто его дергать возможно это может создать большую нагрузку на север.
Идея!!
Сделал так (запутанно как то:(
PHP:
$s = explode("<tr>", $s);

if (file_exists($filename)) {
$file = fopen("$filename", "a+");
fwrite($file, $s);
fclose($file);
}
else {
$file = explode("<tr>", file("$filename"));
if (in_array($s, $file) === FALSE) {
fclose($file);
}
else {
fwrite($file, $s);
fclose($file);
}
}

И в результате в файле получается:
HTML:
Array

И все =(( Чет не пойму нифига..((
 
хех, кто же так массивы в файл записывает?
тебе надо сперва либо сериализовать массив
PHP:
fwrite($file, serialize($s));
либо слить массив в строку
PHP:
fwrite($file, implode(",",$file));
 
Ошибка:
HTML:
Warning: fwrite(): supplied argument is not a valid stream resource in x:\home\localhost\www\test\test.php on line 25

25-я строка:
PHP:
fwrite(serialize($file), $s);

Эээ... ваще че то не пойму((

implode(); не катит, т.к. я наоборот на массив разбил, чтобы потом сравнить массив из файла, и массив который получаем от скрипта. Т.е. проще говоря нужно произвести проверку, если такая строка в файле уже есть, то ее туда не записываем. А если нету - то пишем.
 
тьфу меня за ногу.
опечатался (пост свой подправил). верно так:
PHP:
fwrite($file, serialize($s));
и так
PHP:
fwrite($file, implode(",",$file));
последнее не используем, раз не катит. ну и соответственно, если твой код верно подсчитывает массивы, то на выходе в файле получишь нужные сведения
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху