代码之家  ›  专栏  ›  技术社区  ›  Victor Bjelkholm

使用PHP显示Icecast2统计信息

  •  7
  • Victor Bjelkholm  · 技术社区  · 14 年前

    我有一些麻烦查看统计(观众,当前播放歌曲等)与PHP,我找不到任何信息如何做到这一点。

    Icecast2中包含了一些XLS文件,我可以用PHP将这些文件包含到我的站点中,但是我不想更新DIV,因为include是每5秒一次的,这对XLS文件不起作用。

    谢谢!

    3 回复  |  直到 14 年前
        1
  •  14
  •   Christian    14 年前

    你好,谢谢你的密码。 我从中创建了一个类并添加了一些检查,这样当服务器脱机时它就不会抱怨了。 既然我是从这里拿的,我会把课分享回去:

    <?php
    
    class IceCast {
        var $server = "http://localhost:8000";
        var $stats_file = "/status.xsl";
        var $radio_info=array();
    
        function __construct() {
            //build array to store our radio stats for later use        
            $this->radio_info['server'] = $this->server;
            $this->radio_info['title'] = 'Offline';
            $this->radio_info['description'] = 'Radio offline';
            $this->radio_info['content_type'] = '';
            $this->radio_info['mount_start'] = '';
            $this->radio_info['bit_rate'] = '';
            $this->radio_info['listeners'] = '';
            $this->radio_info['most_listeners'] = '';
            $this->radio_info['genre'] = '';
            $this->radio_info['url'] = '';
            $this->radio_info['now_playing'] = array();
            $this->radio_info['now_playing']['artist'] = 'Unknown';
            $this->radio_info['now_playing']['track'] = 'Unknown';
        }
    
        function setUrl($url) {
            $this->server=$url;
            $this->radio_info['server'] = $this->server;
        }
    
        private function fetch() {
            //create a new curl resource
            $ch = curl_init();
    
            //set url
            curl_setopt($ch,CURLOPT_URL,$this->server.$this->stats_file);
    
            //return as a string
            curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    
            //$output = our stauts.xsl file
            $output = curl_exec($ch);
    
            //close curl resource to free up system resources
            curl_close($ch);
    
            return $output;
        }
    
        function getStatus() {
            $output=$this->fetch();
    
            //loop through $ouput and sort into our different arrays
            $temp_array = array();
    
            $search_for = "<td\s[^>]*class=\"streamdata\">(.*)<\/td>";
            $search_td = array('<td class="streamdata">','</td>');
    
    
            if(preg_match_all("/$search_for/siU",$output,$matches)) {
               foreach($matches[0] as $match) {
                  $to_push = str_replace($search_td,'',$match);
                  $to_push = trim($to_push);
                  array_push($temp_array,$to_push);
               }
            }
    
            if(count($temp_array)) {
                //sort our temp array into our ral array
                $this->radio_info['title'] = $temp_array[0];
                $this->radio_info['description'] = $temp_array[1];
                $this->radio_info['content_type'] = $temp_array[2];
                $this->radio_info['mount_start'] = $temp_array[3];
                $this->radio_info['bit_rate'] = $temp_array[4];
                $this->radio_info['listeners'] = $temp_array[5];
                $this->radio_info['most_listeners'] = $temp_array[6];
                $this->radio_info['genre'] = $temp_array[7];
                $this->radio_info['url'] = $temp_array[8];
    
                if(isset($temp_array[9])) {
                    $x = explode(" - ",$temp_array[9]);
                    $this->radio_info['now_playing']['artist'] = $x[0];
                    $this->radio_info['now_playing']['track'] = $x[1];
                }
            }
            return $this->radio_info;
            }
    
    }
    ?>
    
        2
  •  6
  •   Victor Bjelkholm    14 年前

    通过使用这段代码,我让它工作了:

    <?php
    
    /*
     * SCRIPT CONFIGURATIONS
    */
    $SERVER = 'http://myserver.com:8000'; //URL TO YOUR ICECAST SERVER
    $STATS_FILE = '/status.xsl'; //PATH TO STATUS.XSL PAGE YOU CAN SEE IN YOUR BROWSER (LEAVE BLANK UNLESS DIFFERENT)
    
    ///////////////////// END OF CONFIGURATION --- DO NOT EDIT BELOW THIS LINE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    
    //create a new curl resource
    $ch = curl_init();
    
    //set url
    curl_setopt($ch,CURLOPT_URL,$SERVER.$STATS_FILE);
    
    //return as a string
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    
    //$output = our stauts.xsl file
    $output = curl_exec($ch);
    
    //close curl resource to free up system resources
    curl_close($ch);
    
    //build array to store our radio stats for later use
    $radio_info = array();
    $radio_info['server'] = $SERVER;
    $radio_info['title'] = '';
    $radio_info['description'] = '';
    $radio_info['content_type'] = '';
    $radio_info['mount_start'] = '';
    $radio_info['bit_rate'] = '';
    $radio_info['listeners'] = '';
    $radio_info['most_listeners'] = '';
    $radio_info['genre'] = '';
    $radio_info['url'] = '';
    $radio_info['now_playing'] = array();
       $radio_info['now_playing']['artist'] = '';
       $radio_info['now_playing']['track'] = '';
    
    //loop through $ouput and sort into our different arrays
    $temp_array = array();
    
    $search_for = "<td\s[^>]*class=\"streamdata\">(.*)<\/td>";
    $search_td = array('<td class="streamdata">','</td>');
    
    if(preg_match_all("/$search_for/siU",$output,$matches)) {
       foreach($matches[0] as $match) {
          $to_push = str_replace($search_td,'',$match);
          $to_push = trim($to_push);
          array_push($temp_array,$to_push);
       }
    }
    
    //sort our temp array into our ral array
    $radio_info['title'] = $temp_array[0];
    $radio_info['description'] = $temp_array[1];
    $radio_info['content_type'] = $temp_array[2];
    $radio_info['mount_start'] = $temp_array[3];
    $radio_info['bit_rate'] = $temp_array[4];
    $radio_info['listeners'] = $temp_array[5];
    $radio_info['most_listeners'] = $temp_array[6];
    $radio_info['genre'] = $temp_array[7];
    $radio_info['url'] = $temp_array[8];
    
    $x = explode(" - ",$temp_array[9]);
    $radio_info['now_playing']['artist'] = $x[0];
    $radio_info['now_playing']['track'] = $x[1];
    
    ?> 
    
        3
  •  3
  •   Community CDub    8 年前

    请看我的答案 over here 为什么使用这个脚本是一个非常糟糕的主意。