Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
45 / 25 / 16
Регистрация: 14.04.2011
Сообщений: 623

Сделать XSL парсер статистики

10.01.2014, 00:40. Показов 1960. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно сделать парсер статистики Icecast2, я в этом нуб, но откопал код, вроде правильный но не работает...
вот сам xsl:
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
<xsl:output method="xml" media-type="text/html" indent="yes" encoding="UTF-8"
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
    doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" />
 
<xsl:template match = "/icestats" >
<html>
<head>
<title>Icecast Streaming Media Server</title>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
 
<body>
 
<div class="main">
 
<!--mount point stats-->
<xsl:for-each select="source">
<div class="roundcont">
<div class="roundtop">
<img src="/images/corner_topleft.jpg" class="corner" style="display: none" alt=""/>
</div>
<div class="newscontent">
    <div class="streamheader">
        <table cellspacing="0" cellpadding="0">
            <colgroup align="left" />
            <colgroup align="right" width="300" />
            <tr>
                <td><h3>Mount Point <xsl:value-of select="@mount" /></h3></td>
                <xsl:choose>
                    <xsl:when test="authenticator">
                        <td align="right"><a class="auth" href="/auth.xsl">Login</a></td>
                    </xsl:when>
                    <xsl:otherwise>
                        <td align="right"> <a href="{@mount}.m3u">M3U</a> <a href="{@mount}.xspf">XSPF</a></td>
                    </xsl:otherwise>
                </xsl:choose>
        </tr></table>
    </div>
 
 
<table border="0" cellpadding="4">
<xsl:if test="server_name">
<tr><td>Stream Title:</td><td class="streamdata"> <xsl:value-of select="server_name" /></td></tr>
</xsl:if>
<xsl:if test="server_description">
<tr><td>Stream Description:</td><td class="streamdata"> <xsl:value-of select="server_description" /></td></tr>
</xsl:if>
<xsl:if test="server_type">
<tr><td>Content Type:</td><td class="streamdata"><xsl:value-of select="server_type" /></td></tr>
</xsl:if>
<xsl:if test="stream_start">
<tr><td>Mount Start:</td><td class="streamdata"><xsl:value-of select="stream_start" /></td></tr>
</xsl:if>
<xsl:if test="bitrate">
<tr><td>Bitrate:</td><td class="streamdata"> <xsl:value-of select="bitrate" /></td></tr>
</xsl:if>
<xsl:if test="quality">
<tr><td>Quality:</td><td class="streamdata"> <xsl:value-of select="quality" /></td></tr>
</xsl:if>
<xsl:if test="video_quality">
<tr><td>Video Quality:</td><td class="streamdata"> <xsl:value-of select="video_quality" /></td></tr>
</xsl:if>
<xsl:if test="frame_size">
<tr><td>Framesize:</td><td class="streamdata"> <xsl:value-of select="frame_size" /></td></tr>
</xsl:if>
<xsl:if test="frame_rate">
<tr><td>Framerate:</td><td class="streamdata"> <xsl:value-of select="frame_rate" /></td></tr>
</xsl:if>
<xsl:if test="listeners">
<tr><td>Current Listeners:</td><td class="streamdata"> <xsl:value-of select="listeners" /></td></tr>
</xsl:if>
<xsl:if test="listener_peak">
<tr><td>Peak Listeners:</td><td class="streamdata"> <xsl:value-of select="listener_peak" /></td></tr>
</xsl:if>
<xsl:if test="genre">
<tr><td>Stream Genre:</td><td class="streamdata"> <xsl:value-of select="genre" /></td></tr>
</xsl:if>
<xsl:if test="server_url">
<tr><td>Stream URL:</td><td class="streamdata"> <a target="_blank" href="{server_url}"><xsl:value-of select="server_url" /></a></td></tr>
</xsl:if>
<xsl:if test="video_preview">
<xsl:choose>
<xsl:when test="authenticator">
<tr><td>Preview:</td><td class="videopreview"> <a href="auth.xsl"><img src="{video_preview}" border="1" align="left" height="400" width="300" alt="frame preview" title="click to start watching the video!" /></a></td></tr>
</xsl:when>
<xsl:otherwise>
<tr><td>Preview:</td><td class="videopreview"> <a href="{@mount}.m3u"><img src="{video_preview}" border="1" align="left" height="200"  alt="frame preview" title="click to start watching the video!" /></a></td></tr>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
 
<tr><td>Current Song:</td><td class="streamdata"> 
<xsl:if test="artist"><xsl:value-of select="artist" /> - </xsl:if><xsl:value-of select="title" /></td></tr>
</table>
</div>
<div class="roundbottom">
<img src="/images/corner_bottomleft.jpg" class="corner" style="display: none" alt="" />
</div>
</div>
<br />
<br />
 
</xsl:for-each>
<xsl:text disable-output-escaping="yes">&amp;</xsl:text>nbsp;
 
<div class="poster">
Support Icecast development at <a target="_blank" href="http://www.icecast.org">www.icecast.org</a>
</div>
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

а вот парсер, который я откопал:
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php
 
//Icecast stats.xml parser
 
class Icestat {
 
private $xml = array();
private $stat = array();
var $current = array();
 
    function getfile() {
    
        $url = "http://example:8000/status.xsl";
        $this->xml = simplexml_load_file($url);    
        
    }    
        
    function parsefile() {
        
        $mcount = count($this->xml->source);
        
        for ($i=0; $i<$mcount; $i++) {
            
            foreach ($this->xml->source as $arr) {
        
                $mnt=str_replace("/","",$arr['mount']);
                $this->stat[$mnt]['mount_name'] = $mnt; //ID маунта (например: ices)
                $this->stat[$mnt]['audio_info'] = $arr->audio_info; //инфо маунта
                $this->stat[$mnt]['bitrate'] = $arr->bitrate; //битрейт
                $this->stat[$mnt]['genre'] = $arr->genre; //жанр    
                $this->stat[$mnt]['channels'] = $arr->ice-channels; //каналы (моно, стерео)
                $this->stat[$mnt]['listener_peak'] = $arr->listener_peak; //пик слушателей
                $this->stat[$mnt]['listeners'] = $arr->listeners; //текущее кол-во слушателей    
                $this->stat[$mnt]['max_listeners'] = $arr->max_listeners; //максимум слушателей            
                $this->stat[$mnt]['server_description'] = $arr->server_description; //описание маунта        
                $this->stat[$mnt]['server_name'] = $arr->server_name; //название маунта
                $this->stat[$mnt]['title'] = $arr->title; // название текущей песни
            }
            
        }
        
    }
    
    function currentmount() {
    
        //if (!$this->stat['ID маунта живого вещания (например: live)']['audio_info']) {
        if (!$this->stat['live']['audio_info']) {
        
            //$this->current = $this->stat['ID маунта нонстопа (например: play)'];
            $this->current = $this->stat['play']; 
        
        } else {
        
            $this->current = $this->stat['live']; 
        
        } 
 
        $this->stat = 0;
            
    }
    
    function printcurrent() {
    
    //Выводимая инфа (+ диз если нужно). Можно дополнять и изменять 
        print "
            <nowrap>
            Активный маунт: ".$this->current['mount_name']."<br />
            Название маунта: ".$this->current['server_name']."<br />
            Описание маунта: ".$this->current['server_description']."<br />
            Композиция: ".$this->current['title']."<br />";
    
        if (!$this->current['bitrate']) { 
 
        print "
            Битрейт: 96 Кб/с<br />";            
        
        } else {
        
        print "
            Битрейт: ".$this->current['bitrate']." Кб/с<br />";            
        
        }
 
        print "
            Слушателей: ".$this->current['listeners']."<br />
            Пик слушателей: ".$this->current['listener_peak']."
            </nowrap>";
    
    }
    
}
 
 
//Непосредственно вывод
 
$output = new Icestat;
//заполнить данные
//пример: $output->getfile();
$output->getfile();
$output->parsefile();
$output->currentmount();
$output->printcurrent();
 
//End of file
?>

почему он не парсит? недавно перешел на PHP 5.5 так сразу пошли какие то косяки...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.01.2014, 00:40
Ответы с готовыми решениями:

Парсер статистики в переменные
Добрый вечер. Есть лог модема вида (в атаче) Нужно парсить из него значения следующих параметров: US Connection Rate: 2490 DS...

Парсер для статистики
Добрый вечер. Если я ошибся с термином, извините. Уже достаточно давно появилось желание собирать и анализировать статистику чего-либо....

Парсер статистики трафика ADSL
Требуется сделать программу для парсинга со страницы провайдера, статистики платного входящего трафика. Прилаживаю JavaScript код данного...

2
177 / 125 / 28
Регистрация: 30.10.2013
Сообщений: 686
10.01.2014, 12:37
какие ошибки выводит?
0
45 / 25 / 16
Регистрация: 14.04.2011
Сообщений: 623
10.01.2014, 14:03  [ТС]
2014/01/10 14:01:20 [error] 31399#0: *2 FastCGI sent in stderr: "PHP Warning: simplexml_load_file(): http://example:8000/status.xsl:10: parser error : Entity 'nbsp' not defined in /http/example/www/p.php on line 14
PHP Warning: simplexml_load_file(): &lt;div class=&quot;main&quot;&gt;&amp;nbsp; in /http/example/www/p.php on line 14
PHP Warning: simplexml_load_file(): ^ in /http/example/www/p.php on line 14
PHP Notice: Undefined index: live in /http/example/www/p.php on line 47
PHP Notice: Undefined index: play in /http/example/www/p.php on line 50" while reading response header from upstream, client: 85.***.***.202, server: example, request: "GET /p.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "example"
вот это
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.01.2014, 14:03
Помогаю со студенческими работами здесь

SQL->XML->XSL - как построить такую XSL для таблицы?
вот выгреб из БД я нечто такое: +-------+-------------+------------+ | title | buildnumber | teststatus | ...

Сделать трансформацию XSL в XML
Доброе утро, дорогие форумчане! Подскажите как правильно сделать трансформацию XSL чтобы получить в результате один XML с данными сервисов...

Как сделать get, пользуясь XSL?
Из БД выгребается инфа (напр. Имя, Фамилия)и вываливается на динамически создаваемой странице в виде таблицы. А теперь нужно, чтобы она еще...

Есть ли способ послать переменную в xsl-документ с помощью ASP, чтобы xsl выбрал и показал то что надо из xml?
Есть ли способ послать переменную в xsl-документ с помощью ASP, чтобы xsl выбрал и показал то что надо из xml. Например есть...

Как сделать в XSL цикл n итераций
Делать цикл для повторяющихся элементов можно с помощью &lt;xsl:for-each select='элемент'&gt; Но у меня есть значение элемента...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru