Обновление кода плагина мониторинга munin shoutcast с версии 1 до 2

Поэтому я пытаюсь обновить следующий код, который отслеживает прослушиватели icecast и shoutcast, потому что когда я обновился до shoutcast 2, он перестал работать, и автор AWOL или, по крайней мере, решил не отвечать.

Теперь я думаю, что решил проблему с кодом регулярного выражения, но он все еще не работает. Что заставляет меня задуматься о том, каким образом код извлекает страницу состояния и новый формат URL, также является проблемой.

В любом случае, я был бы признателен за любую помощь, которую вы можете оказать мне в попытке решить, как это исправить, спасибо!

Исходный код: https://github.com/munin-monitoring/contrib/blob/f444e600c9718ba249d46d3b44d6b6ebaccb0aa3/plugins/network/radio

Старое регулярное выражение из строки 158:

preg_match_all( "/.*?Stream Status: \<\/td\>\<td\>\<b\>\Stream is up at \d*? kbps with (\d*?) of \d*? listeners\<\/b\>\<\/td\>\<\/tr\>/s", $xml, $parser );

Мой первый регулярное выражение:

preg_match_all( "/.*?Stream Status: \<\/font\>\<\/td\>\<td>\<font class\=default\>\<b\>Stream is up at (\d*?) kbps with \<B\>(\d*?) of (\d*?) listeners/s", $xml, $parser );

Код проблемы:

    function getShout( $host, $port, $name ) {
$error = false;
$fp = fsockopen( $host, $port, $errno, $errstr, 10 );
if ( !$fp ) {
$error = $errstr ."(". $errno .")";
} else {
fputs( $fp, "GET / HTTP/1.0\r\n" );
fputs($fp, "User-Agent: Mozilla\r\n");
fputs( $fp, "Connection: close\r\n\r\n" );

$xml = "";

while ( !feof( $fp ) ) {
$xml .= fgets($fp, 512);
}
fclose( $fp );

if ( stristr( $xml, "HTTP/1.0 200 OK" ) == true ) {
$xml = trim( substr( $xml, 42 ) );
} else {
$error = "Bad login";
}
if ( !$error ) {
$res = array( "found" => true );

preg_match_all( "/.*?Stream Status: \<\/font\>\<\/td\>\<td>\<font class\=default\>\<b\>Stream is up at (\d*?) kbps with \<B\>(\d*?) of (\d*?) listeners/s", $xml, $parser );

$res["listeners"] = $parser[1][0];
$res["name"] = $name;

} else {
$res = $error;
}
}
return $res;
}

Вывод я получаю от запуска плагина в командной строке …

рок.значение Б

pop.value B

Rap.value B

dnb.value B

psytrance.value B

breaks.value B

dubstep.value B

регги.значение Б

techno.value B

ambient.value B

complete.value 0

Пример страницы статуса shoutcast v1: http://stream.radioamlo.info:8010/

Пример страницы статуса shoutcast v2: http://91.221.151.237:8994/index.html?sid=1


ОБНОВЛЕНИЕ № 1: Мой второй регулярное выражение, которое выглядит лучше:

preg_match_all( "/.*?Stream Status: \<\/font\>\<\/td\>\<td>\<font class\=default\>\<b\>Stream is up at \d*? kbps with \<B\>(\d*?) of \d*?

ОБНОВЛЕНИЕ № 2: Добавление ‘echo $ xml;’ после ‘$ error = «Bad login»;’ возвращает следующую ошибку:

<html><head><title>Redirect</title></head><body>Click <a href="/index.html?sid=1">here</a> for redirect.</body></html>techno.value B
HTTP/1.1 302 Found
Content-Type:text/html;charset=utf-8
Location:index.html?sid=1
Content-Length:118

1

Решение

В соответствии с тем, что вы написали, проблема в том, что место, где вы получаете информацию, изменилось. Сообщение об ошибке, отправленное вами, уже сообщает новое местоположение (перед ним укажите имя хоста).

Я не очень знаком с fsock, бот, я думаю, что он не может справиться с перенаправлениями. Поэтому я бы посоветовал вам использовать вместо cURL: просто придерживайтесь первого примера на руководство cURL. Вывод cURL тогда просто заменяет ваш $xml, Не забудьте передать GET-информацию ?sid=1 КУРЛ также!

Просто проверьте это, и тогда вы увидите, есть ли еще ошибки в разборе строки. Если да, пожалуйста, напишите «новый $xml».

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]