如何在没有流的情况下使用php和ajax保持html与shoutcast元数据的最新状态';谁的密码?

如何在没有流的情况下使用php和ajax保持html与shoutcast元数据的最新状态';谁的密码?,php,html,ajax,shoutcast,Php,Html,Ajax,Shoutcast,首先让我解释一下我来自哪里。 我对javascript、html和css以及客户端的东西有很好的掌握。像php这样的服务器端代码和像ajax这样的服务器客户端代码不是我的强项。从我读到的每一篇文章中,大部分都是关于从流点提取元数据的。 然后有人说,只要使用php和ajax!这不是很有帮助,也不是很直接,因为我只是两者兼而有之。 我还没有真正了解任何关于头文件和使用get请求的知识,所以我对这种方法一无所知 我还发现了一篇关于查找shoutcast类php的文章,这是到目前为止我发现最有用的,这就

首先让我解释一下我来自哪里。 我对javascript、html和css以及客户端的东西有很好的掌握。像php这样的服务器端代码和像ajax这样的服务器客户端代码不是我的强项。从我读到的每一篇文章中,大部分都是关于从流点提取元数据的。 然后有人说,只要使用php和ajax!这不是很有帮助,也不是很直接,因为我只是两者兼而有之。 我还没有真正了解任何关于头文件和使用get请求的知识,所以我对这种方法一无所知

我还发现了一篇关于查找shoutcast类php的文章,这是到目前为止我发现最有用的,这就是我现在正在使用的。这一个假设我知道我正在寻找的流的密码(不理想),但幸运的是我知道。

我所理解的这两种方法都是不同的,第一种是伪代码,用于在元数据在流中经过时捕获元数据,第二种只是从Web服务器中提取相同元数据的xml

我假设这是一个简单的切换,可以稍微更改类以从7.html中提取相同的信息,而不需要密码

我最初被卡住的地方:在稍微修改了上面的shoutcast类脚本之后,我在一个变量中得到了歌曲和流标题。我已经将它作为getInfo.php保存在与index.html文件相同的文件夹中(并对其进行了测试,以便知道它确实使用echo输出了正确的信息)

<?php //shoutcast class script from above link followed by

$stream = shoutcast("ip","port","pass"); //constructing the class
$streamData = stream.getShoutcastData(); //getting array of shoutcast metadata
$streamTitle = streamData["SERVERTITLE"]; //gets the server's title
$streamSong = streamData["SONGTITLE"]; //gets the current song playing artist and track
$playerText = "You're listening to {$streamTitle} <br> Song: {$streamSong}"
echo $streamTitle;
?>

您正在运行哪个版本的DNAS?在2.0+中,您应该能够从
http://ip:port/statistics
。下面是一个(希望如此)您正试图使用JS实现的实例:

为了解决XMLHttpRequest中的跨域/端口限制(本例中通常为80对8000),我有一个本地服务器脚本,每分钟运行一次wget,将ShoutCAST XML文件下载到web服务器根路径(公开:
http://ip/stats.xml
)。这在你的情况下可能不可行,但我想我会分享我的拼凑解决方案

只要您的web服务器上有XML,您就应该能够对单个流站使用类似于此的内容:

<head>
<script>
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest()
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
}
function scMetaData() {
xmlhttp.open("GET", "stats.xml", false);
xmlhttp.send();
xmlDoc = xmlhttp.responseXML;
document.getElementById("info").innerHTML = "<b>Now Playing:</b> " + xmlDoc.getElementsByTagName("STREAM")[0].getElementsByTagName("SONGTITLE")[0].childNodes[0].nodeValue
}
setInterval(scMetaData, 10000);
</script>
</head>

<body onload="scMetaData();">
<span id="info"></span>
</body>

if(window.XMLHttpRequest){
xmlhttp=newxmlhttprequest()
}否则{
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”)
}
函数scMetaData(){
open(“GET”,“stats.xml”,false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
document.getElementById(“info”).innerHTML=“正在播放:”+xmlDoc.getElementsByTagName(“流”)[0]。getElementsByTagName(“SONGTITLE”)[0]。子节点[0]。节点值
}
设置间隔(scMetaData,10000);

创建XMLHttpRequest对象后,剩余的存储在函数中,由
setInterval(scMetaData,10000)以指定的毫秒间隔调用以及加载时的
。我链接的实时示例添加了一个FOR循环来解析2个ShoutCAST流的XML跟踪id。

您运行的是哪个版本的DNAS?在2.0+中,您应该能够从
http://ip:port/statistics
。下面是一个(希望如此)您正试图使用JS实现的实例:

为了解决XMLHttpRequest中的跨域/端口限制(本例中通常为80对8000),我有一个本地服务器脚本,每分钟运行一次wget,将ShoutCAST XML文件下载到web服务器根路径(公开:
http://ip/stats.xml
)。这在你的情况下可能不可行,但我想我会分享我的拼凑解决方案

只要您的web服务器上有XML,您就应该能够对单个流站使用类似于此的内容:

<head>
<script>
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest()
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
}
function scMetaData() {
xmlhttp.open("GET", "stats.xml", false);
xmlhttp.send();
xmlDoc = xmlhttp.responseXML;
document.getElementById("info").innerHTML = "<b>Now Playing:</b> " + xmlDoc.getElementsByTagName("STREAM")[0].getElementsByTagName("SONGTITLE")[0].childNodes[0].nodeValue
}
setInterval(scMetaData, 10000);
</script>
</head>

<body onload="scMetaData();">
<span id="info"></span>
</body>

if(window.XMLHttpRequest){
xmlhttp=newxmlhttprequest()
}否则{
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”)
}
函数scMetaData(){
open(“GET”,“stats.xml”,false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
document.getElementById(“info”).innerHTML=“正在播放:”+xmlDoc.getElementsByTagName(“流”)[0]。getElementsByTagName(“SONGTITLE”)[0]。子节点[0]。节点值
}
设置间隔(scMetaData,10000);

创建XMLHttpRequest对象后,剩余的存储在函数中,由
setInterval(scMetaData,10000)以指定的毫秒间隔调用以及加载时的
。我链接的实时示例添加了一个FOR循环来解析2个ShoutCAST流的XML track ID。

我刚刚检查了DNA,我试图让它运行的ShoutCAST服务器正在运行1.9.3,它永远不会被更新,所以我不能完全使用该示例。我在前一段时间编辑了原始php脚本来刮取7.html,尽管从我在更新的shoutcast版本7.html中听到的消息来看,它并不存在。所以现在我对使用第一种方法对脚本进行未来验证更感兴趣。据我所知,我既可以从中获取元数据,也可以以任何格式将其流回到客户端(假设我可以制作php解码器和编码器)。我知道如果服务器是最新的,你的答案就行了。我刚刚检查了DNA,我试图让它运行的shoutcast服务器正在运行1.9.3,它永远不会被更新,所以我不能完全使用这个例子。我确实在前一段时间编辑了原始的php脚本来刮取7.html,尽管从我在更新的shoutcast版本7.html中听到的消息来看,它并不存在。所以现在我对使用第一种方法对脚本进行未来验证更感兴趣。据我所知,我既可以从中获取元数据,也可以以任何格式将其流回到客户端(假设我可以制作php解码器和编码器)。我知道,如果服务器是最新的,您的答案就行了。
<head>
<script>
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest()
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
}
function scMetaData() {
xmlhttp.open("GET", "stats.xml", false);
xmlhttp.send();
xmlDoc = xmlhttp.responseXML;
document.getElementById("info").innerHTML = "<b>Now Playing:</b> " + xmlDoc.getElementsByTagName("STREAM")[0].getElementsByTagName("SONGTITLE")[0].childNodes[0].nodeValue
}
setInterval(scMetaData, 10000);
</script>
</head>

<body onload="scMetaData();">
<span id="info"></span>
</body>