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

Скрипты для Icecast

 

95
Артур @NoExist
При попытке вывести Описание потока выходит пустая строчка, помогите =(

  1. <?php
  2. echo "<meta http-equiv='refresh' content='10'>";
  3. $ip = "localhost";
  4. $port = "8000";
  5. $ice2_station = "Сервер вещания:";
  6. $page = "";
  7. $fp = @fsockopen("$ip", $port, $errno, $errstr, 10);
  8. $success=-999;
  9. if(!$fp) {
  10. $success=2;
  11. //Если сервер вещания не запущен
  12. echo'
  13. <tr>
  14. <td align="center" width="100%" colspan="2"><b>
  15. <font face="Arial" size="3" style="font-size: 9pt; ">
  16. <span style="color: rgb(255, 255, 255);">
  17. Эфир <br> временно отключен!</b></td>
  18. </tr>
  19. ';
  20. }
  21. if($success!=2) //if connection
  22. {
  23. fputs($fp,"GET /status2.xsl HTTP/1.0\r\nUser-Agent: Icecast2 XSL Parser (Mozilla Compatible)\r\n\r\n"); //get status2.xsl
  24. while(!feof($fp)) {
  25. $page .= fgets($fp, 1000);
  26. }
  27. fclose($fp); //close connection
  28. $page = ereg_replace(".*<pre>", "", $page);
  29. $page = ereg_replace("</pre>.*", ",", $page);
  30. $numbers = explode(",",$page);
  31. $mount = $numbers[0];
  32. $connections = $numbers[1];
  33. $stream_n = $numbers[2];
  34. $listeners = $numbers[3];
  35. $desc = $numbers[4];
  36. $cur_song = $numbers[5];
  37. $str_url = $numbers[6];
  38. $client_info = $numbers[7];
  39. $test1 = $numbers[8];
  40. $mount = $numbers[11];
  41. $connections = $numbers[12];
  42. $station =$numbers[13];
  43. $listeners = $numbers[14];
  44. $description = $numbers[15];
  45. $cur_song = $numbers[16];
  46. $www_url = $numbers[17];
  47. //Если сервер вещания запущен, но нет потока
  48. if (strlen($mount)<2) echo
  49. '
  50. <tr>
  51. <td align="center" width="100%"><b>
  52. <font face="Arial" size="3" style="font-size: 9pt; ">
  53. <span style="color: #6c6565;"><b>Статус эфира:</b></span> <span style="color: #ff0000;">Технические работы на сервере!</b></span></td>
  54. </tr>
  55. </tr>
  56. <br><br>
  57. <tr>
  58. <td align="center" width="100%"><b>
  59. <font face="Arial" size="3" style="font-size: 9pt; ">
  60. <span style="color: #6c6565;"><b>Слушателей:</b> 0</b></span></td>
  61. </tr>
  62. ';
  63. //Если сервер вещания запущен и идёт поток
  64. else echo
  65. '
  66. <tr>
  67. <td align="center" width="100%"><b>
  68. <font face="Arial" size="3" style="font-size: 9pt; ">
  69. <span style="color: #6c6565;"><b>Эфир ведет:</b> '.$description.'</b></span></td>
  70. </tr>
  71. <br>
  72. <tr>
  73. <td align="center" width="100%"><b>
  74. <font face="Arial" size="3" style="font-size: 9pt; ">
  75. <span style="color: #6c6565;"><b>В эфире:</b> '.$cur_song.'</b></span></td>
  76. </tr>
  77. <br>
  78. <tr>
  79. <td align="center" width="100%"><b>
  80. <font face="Arial" size="3" style="font-size: 9pt; ">
  81. <span style="color: #6c6565;"><b>Слушателей:</b> '.$listeners.'</b></span></td>
  82. </tr>
  83. ';
  84. }
  85. ?>

0
6245
Тарас @tarasian666
посмотрите свой status2.xsl и проверьте на каком месте стоит description (не именно слово, а описание)

0
95
Артур @NoExist
tarasian666 пишет:

посмотрите свой status2.xsl и проверьте на каком месте стоит description (не именно слово, а описание)


Его там вообще нет "facepalm" Можно как то добавить?

  1. <pre>
  2. MountPoint,Connections,Stream Name,Current Listeners,Description,Currently Playing,Stream URL Global,Client:2162 Source: ,,0,,
  3. </pre>

Отредактировано NoExist - 24.09.2013
0
1
Milar @Milar
Dr.And пишет:

попробуй убрать - \n


Ай спасибо.Целое утро ломал голову, в чем проблема. Убрал - заработало.
Респект!
А код их status.xsl действительно спрессован )

Блин, а что же делать с такими? - 109.120.144.213:8000/status.xsl
Это сервер вКонтакте...


Привет от Радио Рекорд -)
Наиболее удобно парсить текущий трек можно с JSON-файла: //www.radiorecord.ru/xml/record_online_v3.txt
Также, доступен стандартный //air.radiorecord.ru:8101/rr_128.xspf

В общем целом плане парсинга данных текущей станции с icecast - есть замечательнейший скрипт, находящийся по адресу: //code.google.com/p/icecast-now-playing-script/ - крайне советую обратить на него внимания.

И, спешу огорчить. Что в случае с Радио Рекорд у вас просто так не получится получить текущее количество слушателей. Дело в том, что по адресу //air.radiorecord.ru:8101 (кстати, online - устаревший домен) работает аж 3 сервера Icecast. Это работает RR-DNS балансировщик нагрузки (вы можете посмотреть как он работает, запустив ping air.radiorecord.ru - вы время от времени будете видеть разные IP-адреса). Поэтому получать данные возможно вручную обращаясь именно на IP: 78.140.251.[2-4]. Далее, суммируя количества получить правильные данные.

Сравнить ваши данные с нашей статистикой можно по адресу: //stat.radiorecord.ru/radiorecord.ru/air.radiorecord.ru/index.html#radio
Там есть данные количества слушателей на каждую станцию, каждый поток и суммарно.

Если что - обращайтесь )

0
8
Иван @zim0vik
Доброе время суток.

При попытке вывести:
  1.  
  2. <?php
  3. $fl = file_get_contents('http://109.194.162.95:9300/');
  4. if (preg_match('#<td>Current Song\:<\/td><td class=\"streamdata\">(.*)<\/td>#Ui',$fl,$m)) {
  5. $song = $m[1];
  6. echo "<b>Now playing:</b> {$song}<br \>";
  7. } else {
  8. echo "<b>Now playing:</b> Нет потока<br \>";
  9. }
  10. ?>

Пишет: "Нет потока".
Хотя поток есть. С другим радио работает идеально, а с моим нет.

0
6245
Тарас @tarasian666
а если так
  1.  
  2. if (preg_match('#<td>Current Song\:<\/td>\n<td class=\"streamdata\">(.*)<\/td>#Ui',$fl,$m)) {

0
8
Иван @zim0vik
tarasian666 пишет:

а если так
  1.  
  2. if (preg_match('#<td>Current Song\:<\/td>\n<td class=\"streamdata\">(.*)<\/td>#Ui',$fl,$m)) {


Огромное спасибо, всё работает :3

Отредактировано zim0vik - 25.11.2013
0
5
butthead @butthead
Всем привет)
нужен скриптик который выводил бы последние 20 треков на хтмд страничку.
заделитесь плз

0
20
y4eHuK @y4eHuK
Я понимаю, что тема заезжена уже, но все таки:
Скиньте кто нибудь пример парсинга с моей странички.
**********
а то пытаюсь уже фиг знает сколько и не получается.
Буду очень благодарен!

0
1
Ярослав @modi_1
tarasian666 пишет:

$mass берем по счету
0) 21/Jul/2010:19:04:41 +0400|
1) /live21|
2) 3|
3) лилия - ты и я (remix)
т.е. $mass[3] последняя проиграная песня

Показать текст

отображает последних 20


немного измененный скрипт, учитывает плейлист для определенного потока, выдает последние 5 треков:
  1.  
  2. <?PHP
  3. error_reporting(0);
  4. $data = file("/usr/local/share/icecast/logs/playlist.log");
  5. $track_count=0;
  6. for($i=count($data)-2;$i>0;$i--){
  7. $mass = explode("|",$data[$i]);
  8. if ($mass[1] == '/play_64_aac'){
  9. if ($track_count>0){
  10. echo $mass[3]."<br>";
  11. }
  12. if ($track_count++==5) break;
  13. }
  14. }
  15. ?>

Отредактировано modi_1 - 24.04.2014
0
25
djgelius @djgelius
Подскажите в чем косяк читает только 1 мант
  1.  
  2. <meta http-equiv="refresh" content="60">
  3. <?php
  4. $xml[1] = simplexml_load_file("http://s1.edmradio.ru:8000/live.xspf");
  5. $xml[2] = simplexml_load_file("http://s1.edmradio.ru:8000/play.xspf");
  6. $xml[3] = simplexml_load_file("http://s1.edmradio.ru:8000/128.xspf");
  7. $xml[4] = simplexml_load_file("http://s1.edmradio.ru:8000/64m.xspf");
  8. $xml[5] = simplexml_load_file("http://s1.edmradio.ru:8000/48aac.xspf");
  9. $xml[6] = simplexml_load_file("http://s1.edmradio.ru:8000/32aac.xspf");
  10. //по необходимости увеличиваем
  11. $kp=6; //количество потоков
  12. $i=1;
  13. $vsego=0;
  14. while ($i <= $kp) {
  15. $ano = $xml[$i]->trackList->track->annotation;
  16. $mass=explode("\n", $ano);
  17. $kol=substr($mass[4],19);
  18. $i=$i+1;
  19. $vsego=$vsego+$kol;
  20. }
  21. echo "<b>Всего слушает: </b>" .$vsego;
  22. ?>

0
6245
Тарас @tarasian666
  1.  
  2. <meta http-equiv="refresh" content="60">
  3. <?php
  4. $xml[1] = simplexml_load_file("http://s1.edmradio.ru:8000/live.xspf");
  5. $xml[2] = simplexml_load_file("http://s1.edmradio.ru:8000/play.xspf");
  6. $xml[3] = simplexml_load_file("http://s1.edmradio.ru:8000/128.xspf");
  7. $xml[4] = simplexml_load_file("http://s1.edmradio.ru:8000/64m.xspf");
  8. $xml[5] = simplexml_load_file("http://s1.edmradio.ru:8000/48aac.xspf");
  9. $xml[6] = simplexml_load_file("http://s1.edmradio.ru:8000/32aac.xspf");
  10. $vsego=0;
  11. foreach ($xml as $m) {
  12. $ano = $m->trackList->track->annotation;
  13. $mass=explode("\n", $ano);
  14. $vsego += substr($mass[3],19); /* у меня почему-то так: 0 - Stream Title, 1 - Stream Description, 2 - Content Type, 3 - Current Listeners, 4 - Peak Listeners, 5 - Stream Genre*/
  15. }
  16. echo "<b>Всего слушает: </b>" .$vsego;
  17. ?>

0
25
djgelius @djgelius
tarasian666 пишет:

  1.  
  2. <meta http-equiv="refresh" content="60">
  3. <?php
  4. $xml[1] = simplexml_load_file("http://s1.edmradio.ru:8000/live.xspf");
  5. $xml[2] = simplexml_load_file("http://s1.edmradio.ru:8000/play.xspf");
  6. $xml[3] = simplexml_load_file("http://s1.edmradio.ru:8000/128.xspf");
  7. $xml[4] = simplexml_load_file("http://s1.edmradio.ru:8000/64m.xspf");
  8. $xml[5] = simplexml_load_file("http://s1.edmradio.ru:8000/48aac.xspf");
  9. $xml[6] = simplexml_load_file("http://s1.edmradio.ru:8000/32aac.xspf");
  10. $vsego=0;
  11. foreach ($xml as $m) {
  12. $ano = $m->trackList->track->annotation;
  13. $mass=explode("\n", $ano);
  14. $vsego += substr($mass[3],19); /* у меня почему-то так: 0 - Stream Title, 1 - Stream Description, 2 - Content Type, 3 - Current Listeners, 4 - Peak Listeners, 5 - Stream Genre*/
  15. }
  16. echo "<b>Всего слушает: </b>" .$vsego;
  17. ?>

Спасибо большое! заработало, но по вашему коду считает только mp3 поток а у меня еще есть и ААС, мой код работает с ААС
но как оказалось 128 и 64m не считает вообще!

Отредактировано djgelius - 04.07.2014
0
382
Grigorij @gyurgin_1
Если icecast свой то почему не получить напрямую, Делаем xsl
  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" /><xsl:strip-space elements="*"/>
  3. <xsl:template match = "/icestats" >
  4. <xsl:value-of select="listeners" />
  5. </xsl:template>
  6. </xsl:stylesheet>

Помещаем его в webroot icecast-а и натравливаем на него file_get_contents, проще некуда.

0
6245
Тарас @tarasian666
djgelius пишет:

tarasian666 пишет:

  1.  
  2. <meta http-equiv="refresh" content="60">
  3. <?php
  4. $xml[1] = simplexml_load_file("http://s1.edmradio.ru:8000/live.xspf");
  5. $xml[2] = simplexml_load_file("http://s1.edmradio.ru:8000/play.xspf");
  6. $xml[3] = simplexml_load_file("http://s1.edmradio.ru:8000/128.xspf");
  7. $xml[4] = simplexml_load_file("http://s1.edmradio.ru:8000/64m.xspf");
  8. $xml[5] = simplexml_load_file("http://s1.edmradio.ru:8000/48aac.xspf");
  9. $xml[6] = simplexml_load_file("http://s1.edmradio.ru:8000/32aac.xspf");
  10. $vsego=0;
  11. foreach ($xml as $m) {
  12. $ano = $m->trackList->track->annotation;
  13. $mass=explode("\n", $ano);
  14. $vsego += substr($mass[3],19); /* у меня почему-то так: 0 - Stream Title, 1 - Stream Description, 2 - Content Type, 3 - Current Listeners, 4 - Peak Listeners, 5 - Stream Genre*/
  15. }
  16. echo "<b>Всего слушает: </b>" .$vsego;
  17. ?>

Спасибо большое! заработало, но по вашему коду считает только mp3 поток а у меня еще есть и ААС, мой код работает с ААС
но как оказалось 128 и 64m не считает вообще!


значит смотреть все эти xspf и искать различия, возможно надо сделать более умный парсер, а не просто счет по строкам и столбцам

0
25
djgelius @djgelius
tarasian666 пишет:


значит смотреть все эти xspf и искать различия, возможно надо сделать более умный парсер, а не просто счет по строкам и столбцам

У меня RadioCMS + liquidsoap
Можно просто не конвертировать в RadioCMS а это все предоставить liquidsoap, тогда которая мною взята была версия скрипта будет работать и считать все потоки, но пока что у меня проблека с liquidsoap я не знаю как в автозапуск закинуть через cron с задержкой чтобы сначала RadioCMS запускалось а потом уже liquidsoap

0
34
Артём @Artyom_Glazunov
Не пойму в чем беда...

Вставил код на сайт:
  1. <?php
  2. $fl = file_get_contents('http://radio.tehmir.com.ua:8000/status.xsl?mount=/tech_radio');
  3. function antara($string, $start, $end){
  4. $string = " ".$string;
  5. $ini = strpos($string,$start);
  6. if ($ini == 0) return "";
  7. $ini += strlen($start);
  8. $len = strpos($string,$end,$ini) - $ini;
  9. return substr($string,$ini,$len);
  10. }
  11. $song = antara($fl, "<td>Current Song:</td>\n<td class="streamdata">", "</td>");
  12. echo "В эфире",$song;
  13. ?>


А появляется на сайте, вместо названия трека, кусок кода:
  1. Current Song:", ""); echo "В эфире",$song; ?>



В айсе status.xsl выводит название трека вот так:
  1. <tr><td>Current Song:</td><td class="streamdata">
  2. <xsl:if test="artist"><xsl:value-of select="artist" /> - </xsl:if><xsl:value-of select="title" /></td></tr>



Помогите пожалуйста, я в этих языках вообще чайник...

Вот как все выглядит сейчас, когда код установлен: test1.tehmir.com.ua

0
727
Leff27 @Leff27
Artyom.Glazunov пишет:

Помогите пожалуйста, я в этих языках вообще чайник...

В конце кода заменить схожую строку на эту
  1.  
  2. $song = antara( $fl, '<td>Current Song:</td>\n<td class="streamdata">', '</td>');

Отредактировано Leff27 - 10.07.2014
0
34
Артём @Artyom_Glazunov
Leff27 пишет:


В конце кода заменить схожую строку на эту


Не помогло:
  1. Current Song:\n', ''); echo "В эфире",$song; ?>


Снова фигня выводится

0
727
Leff27 @Leff27
Artyom.Glazunov пишет:


Снова фигня выводится

Последние строчки, проверил, работает:
  1. $song = antara($fl, "<td>Current Song:</td>\n<td class=\"streamdata\">", "</td>");
  2. echo "В эфире: " . $song;
  3. ?>

0





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

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