所以我试图更新以下监控icecast和shoutcast听众的代码,因为当我升级到shoutcast 2时它停止工作并且作者是擅离职守或至少选择不回答。
现在我认为我已经解决了正则表达式代码的问题,但它仍然无法正常工作。这让我觉得代码检索状态页面的方式和新的 URL 格式也是一个问题。
无论如何,我将不胜感激您在尝试解决此问题时能给我的任何帮助,谢谢!
第 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;
}
我在命令行运行插件得到的输出......
摇滚价值 B
弹出值 B
说唱值B
dnb.value B
精神恍惚值B
中断值 B
dubstep.value B
雷鬼值 B
技术价值B
环境值 B
完成。值 0
示例直播 v1 状态页面: http ://stream.radioamlo.info:8010/
示例直播 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 = "登录错误";'之后 返回以下错误:
<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