ОсновноеRadiotalkПользовательское
Технологии вещания, софт, скрипты
7   •   Посмотреть все темы

Получить список ip адресов слушателей

 

44
firefedot @firefedot
Доброе...
Стоит icecast 2.4.1 на Centos 6.6.
Слушатели подключаются через логин:пароль, соответсвенно, в админке видно видно и адрес и логин.
Не могу ни как спарсить эти значения, делаю вот так, создаю файл:

  1.  
  2. <xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
  3. <xsl:output omit-xml-declaration="no" method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Transitiona
  4. l//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" indent="yes" encodin
  5. g="UTF-8" />
  6. <xsl:template match = "/icestats" >
  7. <icecast>
  8. <xsl:for-each select="source">
  9. <source mount="{@mount}">
  10. <xsl:choose>
  11. <xsl:when test="listener">
  12. <xsl:for-each select="listener">
  13. <xsl:variable name = "themount"><xsl:value-of select="@mount" /></xsl:variable>
  14. <ip><xsl:value-of select="IP" /></ip>
  15. </xsl:for-each>
  16. </xsl:when>
  17. </xsl:choose>
  18. </source>
  19. </xsl:for-each>
  20. </icecast>
  21. </xsl:template>
  22. </xsl:stylesheet>


Взял пример из файла listclients.xsl
Пробовал разные варианты с <source mount="{@mount}"> и заменял это на <xsl:value-of select="@mount" />.
В итоге получаю только списки точек вещания.

при этом пробую сделать так:

  1.  
  2. <xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
  3. <xsl:output omit-xml-declaration="no" method="xml" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" indent="yes" encoding="UTF-8" />
  4. <xsl:template match = "/icestats" >
  5. <icecast>
  6. <xsl:for-each select="source">
  7. <source mount="{@mount}">
  8. <listeners><xsl:value-of select="listeners" /></listeners>
  9. <listener_peak><xsl:value-of select="listener_peak" /></listener_peak>
  10. <maxlisteners><xsl:value-of select="max_listeners" /></maxlisteners>
  11. <bitrate><xsl:value-of select="bitrate" /></bitrate>
  12. <title><xsl:value-of select="title" /></title>
  13. </source>
  14. </xsl:for-each>
  15. </icecast>
  16. </xsl:template>
  17. </xsl:stylesheet>


И на выходе получаю что нужно.
Файлы эти делаю с расширением xsl и сохраняю в webroot.

Как правильно написать, чтобы ip-адреса получить с логинами.

Спасибо.

0
44
firefedot @firefedot
Или даже так....
Откуда берутся берутся изначальные данные, кто их генерит. тот же, например, <xsl:template match = "/icestats" >.
Кто создает этот icestats?
Перелазил все установленные файлы от icecast и пока пришел к выводу. что это все скомпилировано уже в самом icecast...

0
89
Ok_go_love @Ok_go_love
Правильный вывод. IP-адреса можно парсить через админку например.

0
44
firefedot @firefedot
Но как?
если я не могу знать, что даже если там вывод типа xml ... к чему мне там обращаться?
Не html же парсить...
Или я не так понял?

0
382
Grigorij @gyurgin_1
Вот такой xml
  1. <xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
  2. <xsl:output omit-xml-declaration="yes" method="text" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="no" encoding="UTF-8" />
  3. <xsl:template match = "/icestats" >
  4. <xsl:for-each select="source">
  5. <xsl:for-each select="listener">
  6. <xsl:value-of select="IP" />
  7. <xsl:text> </xsl:text>
  8. </xsl:for-each>
  9. </xsl:for-each>
  10. </xsl:template>
  11. </xsl:stylesheet>
выдаст список ip адресов слушателей.
Если надо с именами пользователей попробуйте так (не проверял)
  1. <xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
  2. <xsl:output omit-xml-declaration="yes" method="text" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="no" encoding="UTF-8" />
  3. <xsl:template match = "/icestats" >
  4. <xsl:for-each select="source">
  5. <xsl:for-each select="listener">
  6. <xsl:if test="username"> (<xsl:value-of select="username" /><xsl:text> - </xsl:text>)</xsl:if><xsl:value-of select="IP" />
  7. <xsl:text> </xsl:text>
  8. </xsl:for-each>
  9. </xsl:for-each>
  10. </xsl:template>
  11. </xsl:stylesheet>

Опрашивать как всегда, через ?mount=/

Отредактировано gyurgin_1 - 05.01.2015
0
44
firefedot @firefedot
gyurgin_1 пишет:

Вот такой xml
  1. <xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
  2. <xsl:output omit-xml-declaration="yes" method="text" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="no" encoding="UTF-8" />
  3. <xsl:template match = "/icestats" >
  4. <xsl:for-each select="source">
  5. <xsl:for-each select="listener">
  6. <xsl:value-of select="IP" />
  7. <xsl:text> </xsl:text>
  8. </xsl:for-each>
  9. </xsl:for-each>
  10. </xsl:template>
  11. </xsl:stylesheet>
выдаст список ip адресов слушателей.

Опрашивать как всегда, через ?mount=/

И так)
1 - Создал файл text.xsl с предложенным вами содержимым - верно назвал его ?
2 - Положил в webroot - так? (/usr/share/icecast/web)
3 - В строке адреса вбиваю ********** - так? (/home - точка вещания на ней есть слушатель сейчас)

В ответ получаю чистый страниц...

Где я не так делаю что?)))

Отредактировано firefedot - 05.01.2015
0
382
Grigorij @gyurgin_1
Называйте как угодно, положили куда надо, вызвали правильно.
Давайте убедимся что он отрабатывается, после строки
  1. <xsl:template match = "/icestats" >
добавьте например
  1. <xsl:text> ACTIVE USERS: </xsl:text>
. По крайней мере хоть заголовок то покажет...

0
44
firefedot @firefedot
gyurgin_1 пишет:

добавьте например
  1. <xsl:text> ACTIVE USERS: </xsl:text>
. По крайней мере хоть заголовок то покажет...


Добавил, заголовок получил ACTIVE USERS:

0
382
Grigorij @gyurgin_1
Ну значит работает. Я проверял на icecast KH, сейчас посмотрю обычный дистрибутив, может чем отличается, хотя врядли.

0
44
firefedot @firefedot
Такое ощущение, что просто не видит эти значения. как будто их просто нет или они ему не доступны .. но странно то.что если я ввожу вместо ip количество или битрейт, то получаю результат.
Например вписав <listeners><xsl:value-of select="listeners" /></listeners> после <xsl:for-each select="source">
а вот именно в цикле слушателей про айпи - глухо)
Стоит сейчас icecast 2.4.1, тот же эффект был и на 2.3 версиях

0
382
Grigorij @gyurgin_1
Попробуйте перед обходом
  1. <xsl:for-each select="listener">
добавить
  1. <xsl:variable name = "themount"><xsl:value-of select="@mount" /></xsl:variable>
больше ничего не нашел что может повлиять, да и это врядли.

0
382
Grigorij @gyurgin_1
Попробуйте вызвать скрипт из админки, наконец проверьте стандартный (/admin/listclients.xsl?mount=/ ).

0
44
firefedot @firefedot
Дописал строку про mount - ситуация не изменилась, единственное, появилось число 10, которому взятся не откуда)

Положил файл в admin и получил 400 - Unrecognised command

Стандартная страница со списком работает как и работала

Отредактировано firefedot - 05.01.2015
0
382
Grigorij @gyurgin_1
Ну вот - взял стандартную страницу с icecast-2.4.1 и порезал там весь html, вываливает все в одну строчку
  1. <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  2. <xsl:output method="text" encoding="UTF-8" />
  3. <xsl:template match = "/icestats" >
  4. <xsl:for-each select="source">
  5. <xsl:choose>
  6. <xsl:when test="listener">
  7. <xsl:variable name = "themount"><xsl:value-of select="@mount" /></xsl:variable>
  8. <xsl:for-each select="listener">
  9. <xsl:value-of select="IP" />
  10. <xsl:if test="username">
  11. (<xsl:value-of select="username" />)
  12. </xsl:if>
  13. <xsl:value-of select="Connected" />
  14. <xsl:value-of select="UserAgent" />
  15. </xsl:for-each>
  16. </xsl:when>
  17. </xsl:choose>
  18. </xsl:for-each>
  19. </xsl:template>
  20. </xsl:stylesheet>
Проверил - работает.

0
44
firefedot @firefedot
а запускали из webroot?
я так же делал и ваш код вставлял в файл list.xsl - результат белый лист....
не пойму, что не то...

в логах такая строчка


[2015-01-05 23:59:17] DBUG auth/add_authenticated_listener Stats request, sending XSL transformed s
tats
[2015-01-05 23:59:17] DBUG xslt/xslt_get_stylesheet Using cached sheet 0


и да, если менять сам файл listclients.xsl, то он просто выведет текст... но вот как сделать так.что бы и файл был и данные получить?)

Отредактировано firefedot - 05.01.2015
0
382
Grigorij @gyurgin_1
В логах ничего криминального, такое ощущение, что icecast не желает отдавать данные, может это связано с аутенфикацией? Надо пробовать самый простой конфиг без аутенфикации. Если будет работать - поищем решение. У Вас я так понимаю через htpasswd, можно переделать на внешнюю.

0
44
firefedot @firefedot
Попробовал точку без пароля - тот же результат

У меня аутентификация происходит через файл

<authentication type="htpasswd">
<option name="filename" value="/path/home_auth"/>
<option name="allow_duplicate_users" value="0"/>
</authentication>


На внешнюю. это как? не понял...

Отредактировано firefedot - 05.01.2015
0
382
Grigorij @gyurgin_1
Читайте <authentication type="url">

0
44
firefedot @firefedot
да. посмотрел.. но что-то мне подсказывает , что это не решит проблему ...
такое ощущение, что эти данные находятся под паролем от админки самой...
То есть как бы у него запрашивается пароль., а он его не вбивает...
Может такое быть?

Отредактировано firefedot - 05.01.2015
0
44
firefedot @firefedot
В общем решил много времени пока не тратить на это.
Страницу listclients.xsl привел к виду xml
А везде, где есть ссылка на эту страницу, поменял ссылку на страницу, где используются данные... внешне сделаю их одинаковыми и думаю нормально все будет ...
А если, вдруг, кто читая потом найдет/подскажет решение, как правильно надо было сделать, буду искренне признателен )
Спасибо gyurgin_1 за помощь.

Отредактировано firefedot - 06.01.2015
0





Согласие на обработку данных на нашем сайте

Продолжая просматривать страницу, вы соглашаетесь с использованием файлов «Cookie» и с Политикой конфиденциальности «Privacy».
Наверху или внизу страницы вы можете изменить валюту и язык по умолчанию. Английская версия сайта ещё находится в доработке и доступна не полностью.