获取 URL 并捕获 XML 响应 - SAM Broadcaster

Posted

技术标签:

【中文标题】获取 URL 并捕获 XML 响应 - SAM Broadcaster【英文标题】:GET URL and Capture XML response - SAM Broadcaster 【发布时间】:2013-06-20 10:21:33 【问题描述】:

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

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

还有其他节点,但是层次结构是这样的

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

我需要使用 Pascal 提取 &lt;title&gt; 的值,然后使用第一个连字符分解它。

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

艺术家=迈克尔杰克逊 song=Beat IT - 惊悚片

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

抱歉,我还没有在这里尝试过。我是一名学习编程的站内程序员。如果有人能给我一个先机,我可能会充实它。

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

【问题讨论】:

请不要在标题中添加标签信息。这里的标签系统非常擅长对事物进行分类,不需要帮助。 :-) 请参阅Should questions include "tags" in their titles?。谢谢。 公平点虽然我不允许添加 SAM 或 PAL,因为它们不是预定义的标签,而且我的街道信誉低于 1500。我猜他们被埋在身体里了。希望它能吸引合适的人群。 基本上你想解析 icecast/shoutcast 输出,对吧?如果是这样,那么输出取决于服务器的配置方式:wiert.me/2010/11/22/… 正确。我可以配置它。但更喜欢我的脚本来处理默认的 Win32 Icecast Stats XML 页面。如果有帮助,我可以提供一个测试 Icecast 服务器实例。 请做。周末后我会尝试写一些示例代码。在Skype上ping我。当他们在 Delphi 中工作时,我将在此处发布结果。它应该为您提供一个让 PAL 在 SAM 下工作的起点。 【参考方案1】:

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

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

您的问题分为两部分:

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

对于第二部分,使用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 服务器将确定歌曲信息的表示方式,因此您向流式服务器提供流式传输的实际设备不必担心这一点(我一直在做流媒体)。

【讨论】:

你是对的。我正在考虑抓取 Icecast 元数据以在我的脚本中使用。我可能不得不自己解析它,因为 PAL 是一个封闭系统。据我所知,你不能抢图书馆。我被告知可以做到(仅通过 PAL/Delphi)。但我没有能力编写它。不过,我会检查你的参考资料。感谢那。 SAM 是 SAM Broadcaster,电台自动化软件。 PAL 是播放列表自动化语言。 SAM 内部的一个 shell,它使用 Pascal/Dephi 来做任何事情。 support.spacialaudio.com/wiki/PAL_Quick_Start 感谢您的澄清。是否有可用的 SAM/PAL 试用版?如果是这样,我可以尝试帮助你。我应该在某个地方有一个 icecast 虚拟机。 是的,我相信您有 30 天的试用期。非常感谢您查看此内容。【参考方案2】:

我最终能够非常简单地解决这个问题。首先,我通过将自定义 XSLT 文件添加到服务器(在本例中是 Icecast 服务器)来修饰原始 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 脚本,SAM 广播器中基于 delphi 的 shell)WebtoFile 创建一个本地文本文件,并使用TStringList 存储文本文件并将其解析为我需要的变量。

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

完整的工作脚本包含很多错误处理,并且太大,无法粘贴到此处。那和讨论(进一步的上下文)可以找到here

【讨论】:

以上是关于获取 URL 并捕获 XML 响应 - SAM Broadcaster的主要内容,如果未能解决你的问题,请参考以下文章

使用 alamofire 和 Swift4 IOS 获取 XML HTTP url 的响应

在 php 中解析 solr 响应并在 html 表中显示它们

Google 登录 API 挂起并出现未捕获的错误无法从 URL 哈希获取父源

如何快速获取对特定网址的查询 [关闭]

捕获 Django views.py 中的所有 URL 参数?

捕获http json body响应并转换为角度ionic5中的数组