无法浏览新 SONOS 集成的音乐

Unable to browse music for new SONOS integration

我目前正在开发新的 SONOS 集成。我已经构建了 here 概述的最低限度功能,并且 python 测试套件通过了所有测试:

SUITE Summary: Passed. Passed: 60, Warnings: 0, Failed: 0.

我在新 SID 上添加了自定义服务描述,包括服务名称、两个端点、轮询间隔、匿名身份验证、正确的字符串 URL、音乐服务容器类型和未选择的功能.

我可以在我的 SONOS 客户端中添加我的服务,但收到消息 "Unable to browse music"。我知道可能有很多因素在起作用,但是这里有什么东西跳出来了吗?我的大脑很疲惫,我想我错过了一些明显的东西! :)

感谢您的帮助!

编辑:

这是一个示例 "root" getMetadata 请求:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:SOAPServerWSDL" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
    <ns1:getMetadata>
        <id xsi:type="xsd:string">root</id>
        <index xsi:type="xsd:integer">0</index>
        <count xsi:type="xsd:integer">10</count>
        <recursive xsi:type="xsd:boolean">false</recursive>
    </ns1:getMetadata>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

及其结果:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://api-server.dev/index.php/sonos" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
    <ns1:getMetadataResponse xmlns:ns1="urn:SOAPServerWSDL">
        <getMetadataResult xsi:type="tns:metadata">
            <index xsi:type="xsd:integer">0</index>
            <count xsi:type="xsd:integer">2</count>
            <total xsi:type="xsd:integer">2</total>
            <mediaCollection xmlns="" xsi:type="tns:mediaCollection">
                <id xsi:type="xsd:string">genres</id>
                <title xsi:type="xsd:string">Playlists</title>
                <itemType xsi:type="xsd:string">collection</itemType>
            </mediaCollection>
            <mediaCollection xmlns="" xsi:type="tns:mediaCollection">
                <id xsi:type="xsd:string">my_playlists</id>
                <title xsi:type="xsd:string">My Playlists</title>
                <itemType xsi:type="xsd:string">collection</itemType>
            </mediaCollection>
        </getMetadataResult>
    </ns1:getMetadataResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

这些以及其他功能都通过了 python 自检。 ¯\_(ツ)_/¯

"Unable to to browse music" 通常意味着 Sonos 无法连接到您的服务器。如果您从音乐服务中删除您的帐户并尝试重新登录,它也不会允许您。如果您成功通过测试,请尝试删除并再次添加您的服务并检查所有 URL。希望能帮助到你。

我终于在 SONOS 中有了我们的播放列表和曲目!

首先,SOAP 对我来说是新的。之前没有使用过它,我正在 PHP 中构建我们的 SONOS 集成。我使用的是 NuSOAP 库,我通过它构建了自己的 WSDL 文件,然后在我的 SOAP 服务器下使用它。

相反,我现在使用 API 文档中可用的 WSDL 并使用标准 PHP SoapServer class 从头开始​​重建我的 SOAP 服务器。这导致 WSDL 结构和服务器响应发生了一些微妙的变化。

如果有人入门有困难,我建议使用 SONOS 自己的 WSDL,如下所示:

$server = new SoapServer(
    'sonos.wsdl', 
    array('encoding'=>'ISO-8859-1')
    );

不要忘记更新文件底部的 wsdl:service 值:

  <soap:address location="{endpoint}"/>

我不知道的是,像这样接近解决方案有助于突出显示您错误命名或省略参数或响应值的任何地方,因为 SOAP 服务器已经知道数据是什么样的(而不是依赖于您的自己的自定义 WSDL 文件)。