获取URL和Capture XML响应 - SAM Broadcaster

时间:2013-06-20 10:21:34

标签: xml delphi parsing variables pascal

我有一个网址和端口... mysite.com:8000

当HTTP接近时,返回XML,我需要在树<title>

下提取并转换<source mount="/live">

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

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

我需要使用Pascal提取<title>的值,然后使用第一个连字符将其展开。

因此,如果XML具有“Michael Jackson - Beat IT - Thriller”的价值,我需要输出......

艺术家=迈克尔杰克逊 song = Beat IT - Thriller

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

我道歉,我还没有尝试过。我是一名学习编码的电台程序员。如果有人能给我一个良好的开端,我可能会把它充实。

我在PAL中编译它,它基于Pascal / Delphi并在SAM Broadcaster中运行。

2 个答案:

答案 0 :(得分:1)

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

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

您的问题分为两部分:

  1. 通过HTTP下载XML内容
  2. 将XML翻译成Delphi对象
  3. 对于第二部分,请使用XML data binding wizard。一个很好的视频展示了here。这取决于MSXML DOM。如果你没有这个,你将不得不找到一个XML库或自己进行XML解析(这可能非常棘手)。

    对于第一部分,我将使用Indy TIdHttp组件,例如以这里询问的方式:How can I download a huge file via TIdHTTP?

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

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

答案 1 :(得分:0)

我最终能够很简单地解决这个问题。首先,我通过向服务器添加自定义XSLT文件来修改原始XML输出,在这种情况下,它是一个Icecast服务器。将它放在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脚本,SAM广播公司中基于delphi的shell)WebtoFile来创建一个本地文本文件,TStringList用于存储和解析文本文件到我需要的变量它们。

“ - ”爆炸是通过posdelete命令的组合实现的。

完整的工作脚本包含大量错误处理,并且太大而无法在此处粘贴。那个,讨论(进一步的背景)可以找到here