获取URL和捕获XML响应- SAM广播器



我有一个url和端口…mysite.com: 8000

当HTTP接近时,它返回XML,其中我需要在树<source mount="/live">下提取和转换<title>

还有其他节点,但层次结构看起来像这样

<icestats>
   <source mount="/live">
      <title>Michael Jackson - Beat IT - Thriller</title>
   </source>
</icestats>

我需要使用Pascal提取<title>的值,然后使用第一个连字符爆炸它。

如果XML的值是"Michael Jackson - Beat IT - Thriller",我需要输出…

=艺术家迈克尔·杰克逊歌曲=Beat IT - Thriller

这些需要作为变量提取,以包含在脚本的单独部分中。

我很抱歉,我还没有在这里尝试。我是一名正在学习编程的电台程序员。如果有人能给我一个开始,我可能会充实它。

我在PAL中编译这个,它是基于Pascal/Delphi的,在SAM广播中运行。

我不确定SAM或PAL是什么,以及它们是否可以使用Delphi提供的所有底层技术。

所以我将从Delphi的角度来回答这个问题。

你的问题有两个部分:

  1. 通过HTTP下载XML内容
  2. 将XML转换为Delphi对象

对于第二部分,使用XML数据绑定向导。这里有一个很好的视频。它取决于MSXML DOM。如果没有,就必须自己找一个XML库或自己进行XML解析(这可能非常棘手)。

对于第一部分,我将使用Indy TIdHttp组件,例如这里所问的方式:我如何通过TIdHttp下载一个大文件?

如果XML是关于解释Icecast/Shoutcast歌曲信息的,那么格式高度依赖于流媒体服务器的配置方式(参见http://wiert.me/2010/11/22/streaming-your-mp3-collection-through-an-icecast-server-using-ezstream/)。

关于icecast和shoutcast最酷的事情是你可以流到它,并且icecast服务器将决定如何表示歌曲信息,所以你的实际设备向流服务器提供流不必担心(我一直在流媒体方面的事情)。

最后我很简单地解决了这个问题。首先,我通过向服务器(在本例中是一个Icecast服务器)添加一个自定义XSLT文件来修饰原始XML输出。这是一个简单的问题,把它放到web文件夹,但你确实需要访问它。

下面是我用来提取所需的三个标记的代码。注意,这是完整的示例,而不是上面的简化示例。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="text"/>
    <xsl:template match="/">
        <xsl:value-of select="/icestats/source[@mount='/live']/title" />
      <xsl:text>
</xsl:text>
      <xsl:value-of select="/icestats/source[@mount='/live']/genre" />
      <xsl:text>
</xsl:text>
        <xsl:value-of select="/icestats/source[@mount='/live']/server_name" />
    </xsl:template>
</xsl:stylesheet>
<!-- Do not change the formatting or spacing in this document. It will affect the output and could break processes down the chain -->

然后我简单地使用delphi (PAL脚本,基于delphi的shell在SAM广播)WebtoFile创建一个本地文本文件和TStringList来存储和解析文本文件通过变量,因为我需要他们。

"-"的爆炸是由posdelete命令组合完成的。

完整的工作脚本包含许多错误处理,太大而不能粘贴在这里。

最新更新