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

Тема в разделе "PHP", создана пользователем Panzers^), 8 апр 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Panzers^)

    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 файл имя которого будет дата.месяц.год. А как наступили новые сутки, то он будет писать уже в новый файл (короче говоря чтобы разделялись по датам). Потом написать скрипт, и в него загонять список..он и будет считать сколько какая песня проиграла. Вот с реализацией хреново тут. Даже примеров где глянуть нету.
     
  2. Panzers^)

    Panzers^) Постоялец

    Регистр.:
    7 окт 2007
    Сообщения:
    69
    Симпатии:
    0
    В общем пока жду совета/помощи успел тут кое что накатать:
    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 - Эй, детка!" то она туда повторно не записывается. Как такое реализовать?
     
  3. uNknownMark

    uNknownMark

    Регистр.:
    22 сен 2007
    Сообщения:
    393
    Симпатии:
    169
    Можешь попробовать перед записью файла загружать уже записанные песни в массив, а потом проверять текущию песню на наличие в этом массиве, например, функцией "in_array". Она позволяет проверить, присутствует ли в массиве значение. Если присутствует значит песню не пишем, если нет тогда пишем. Но если много песен и большой файл будет и часто его дергать возможно это может создать большую нагрузку на север.
     
    Panzers^) нравится это.
  4. Panzers^)

    Panzers^) Постоялец

    Регистр.:
    7 окт 2007
    Сообщения:
    69
    Симпатии:
    0
    Идея!!
    Сделал так (запутанно как то:(
    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
    
    И все =(( Чет не пойму нифига..((
     
  5. Casper_R

    Casper_R Создатель

    Регистр.:
    3 май 2007
    Сообщения:
    85
    Симпатии:
    25
    хех, кто же так массивы в файл записывает?
    тебе надо сперва либо сериализовать массив
    PHP:
    fwrite($fileserialize($s)); 
    либо слить массив в строку
    PHP:
    fwrite($fileimplode(",",$file));
     
  6. Panzers^)

    Panzers^) Постоялец

    Регистр.:
    7 окт 2007
    Сообщения:
    69
    Симпатии:
    0
    Ошибка:
    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(); не катит, т.к. я наоборот на массив разбил, чтобы потом сравнить массив из файла, и массив который получаем от скрипта. Т.е. проще говоря нужно произвести проверку, если такая строка в файле уже есть, то ее туда не записываем. А если нету - то пишем.
     
  7. Casper_R

    Casper_R Создатель

    Регистр.:
    3 май 2007
    Сообщения:
    85
    Симпатии:
    25
    тьфу меня за ногу.
    опечатался (пост свой подправил). верно так:
    PHP:
    fwrite($fileserialize($s));
    и так
    PHP:
    fwrite($fileimplode(",",$file)); 
    последнее не используем, раз не катит. ну и соответственно, если твой код верно подсчитывает массивы, то на выходе в файле получишь нужные сведения
     
Статус темы:
Закрыта.