首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Sonos音乐API实现“无法浏览音乐”错误

Sonos音乐API实现“无法浏览音乐”错误
EN

Stack Overflow用户
提问于 2016-02-23 19:02:32
回答 2查看 434关注 0票数 6

我正在尝试实现一个SMAPI服务,但是遇到了一些问题。

我构建了一个“假”服务,它为这些端点提供了硬编码的响应:

  • getMediaURI
  • getLastUpdate
  • getMediaMetadata
  • getMetadata
  • getExtendedMetadata
  • getSessionId

我遵循了添加自定义服务的说明,使所有功能都不受检查。

我在我的Sonos iPhone应用程序上看到了我的新测试服务,但是当我选择它时,我会看到屏幕上写着“无法浏览音乐”。

我真的不知道如何调试正在发生的事情,所以我觉得自己是在黑暗中捅人。我不想投机取巧地做一些可能与问题无关的改变--这似乎是浪费大量精力的良方。

有什么方法可以看到Sonos应用程序(客户端)的错误吗?,我已经检查了http://[device ip]:1400/support/aggregate日志,但是没有看到任何关于我的服务域名的内容,也没有看到任何似乎相关的内容。

我知道(至少有一些)请求正在影响我的服务,特别是调用getLastUpdategetMetadata。下面是日志的输出:

代码语言:javascript
运行
复制
2016-02-23T18:55:24.316373+00:00 app[web.1]: Started POST "/soap/action" for 213.86.218.202 at 2016-02-23 18:55:24 +0000
2016-02-23T18:55:24.316485+00:00 app[web.1]: Started POST "/soap/action" for 213.86.218.202 at 2016-02-23 18:55:24 +0000
2016-02-23T18:55:24.431603+00:00 app[web.1]: Processing by SoapController#get_last_update as HTML
2016-02-23T18:55:24.431611+00:00 app[web.1]: Processing by SoapController#get_last_update as HTML
2016-02-23T18:55:24.438452+00:00 app[web.1]: params.inspect: {}
2016-02-23T18:55:24.438458+00:00 app[web.1]: params.inspect: {}
2016-02-23T18:55:24.447855+00:00 app[web.1]:   Rendered vendor/bundle/ruby/2.2.0/gems/wash_out-0.10.0/app/views/wash_out/document/response.builder (7.6ms)
2016-02-23T18:55:24.447907+00:00 app[web.1]:   Rendered vendor/bundle/ruby/2.2.0/gems/wash_out-0.10.0/app/views/wash_out/document/response.builder (7.6ms)
2016-02-23T18:55:24.448279+00:00 app[web.1]: Completed 200 OK in 17ms (Views: 9.5ms | ActiveRecord: 0.0ms)
2016-02-23T18:55:24.457801+00:00 app[web.1]: Started POST "/soap/action" for 213.86.218.202 at 2016-02-23 18:55:24 +0000
2016-02-23T18:55:24.448327+00:00 app[web.1]: Completed 200 OK in 17ms (Views: 9.5ms | ActiveRecord: 0.0ms)
2016-02-23T18:55:24.464365+00:00 app[web.1]: Processing by SoapController#get_metadata as HTML
2016-02-23T18:55:24.457861+00:00 app[web.1]: Started POST "/soap/action" for 213.86.218.202 at 2016-02-23 18:55:24 +0000
2016-02-23T18:55:24.464428+00:00 app[web.1]: Processing by SoapController#get_metadata as HTML
2016-02-23T18:55:24.465101+00:00 app[web.1]: params.inspect: {"id"=>"root", "index"=>0, "count"=>100}
2016-02-23T18:55:24.465154+00:00 app[web.1]: params.inspect: {"id"=>"root", "index"=>0, "count"=>100}
2016-02-23T18:55:24.472056+00:00 app[web.1]:   Rendered vendor/bundle/ruby/2.2.0/gems/wash_out-0.10.0/app/views/wash_out/document/response.builder (3.4ms)
2016-02-23T18:55:24.472049+00:00 app[web.1]:   Rendered vendor/bundle/ruby/2.2.0/gems/wash_out-0.10.0/app/views/wash_out/document/response.builder (3.4ms)
2016-02-23T18:55:24.472248+00:00 app[web.1]: Completed 200 OK in 8ms (Views: 6.9ms | ActiveRecord: 0.0ms)
2016-02-23T18:55:24.472251+00:00 app[web.1]: Completed 200 OK in 8ms (Views: 6.9ms | ActiveRecord: 0.0ms)

任何帮助都将是非常感谢的!

UPDATE这里是通过SoapUI向我的假服务发出请求的输出:

  1. getLastUpdate http://schemas.xmlsoap.org/soap/envelope/“xmlns:xsd="http://www.w3.org/2001/XMLSchema”xmlns:tns="">http://www.sonos.com/Services/1.1"> 目录“最后更新2016-02-18 11:52:30用户: Rob最近更新的收藏夹2016-02-18 12:01:00
  2. getSessionId http://schemas.xmlsoap.org/soap/envelope/“xmlns:xsd="http://www.w3.org/2001/XMLSchema”xmlns:tns="">http://www.sonos.com/Services/1.1"> user0001
  3. getMetadata http://schemas.xmlsoap.org/soap/envelope/“xmlns:xsd=http://www.w3.org/2001/XMLSchema”xmlns:tns="">http://www.sonos.com/Services/1.1"> 2 some_id_1标题1音频/MP4曲目列表摘要案文1。some_id_2标题2音频/MP4曲目列表摘要文本2。
  4. getExtendedMetadata http://schemas.xmlsoap.org/soap/envelope/“xmlns:xsd="http://www.w3.org/2001/XMLSchema”xmlns:tns=">http://www.sonos.com/Services/1.1"> some_id_1标题1音频/MP4曲目列表摘要文本1。
  5. getMediaMetadata http://schemas.xmlsoap.org/soap/envelope/“xmlns:xsd="http://www.w3.org/2001/XMLSchema”xmlns:tns="">http://www.sonos.com/Services/1.1"> 伪曲目音频/mp4音轨艺术家:12345巴赫“satisfaction.jpg经典459真假
  6. getMediaURI http://schemas.xmlsoap.org/soap/envelope/“xmlns:xsd="http://www.w3.org/2001/XMLSchema”xmlns:tns="">http://www.sonos.com/Services/1.1"> https://sonos.therocketfuel.com/audio/960bpm.m4a
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-25 13:14:19

解决方案

我终于弄明白了,基本上我的服务是返回有效的XML,但是对于WSDL模式来说,这是不正确的。

我使用SoapUI进行了调试,如下所示:

  1. 创建一个新的SOAP项目
代码语言:javascript
运行
复制
- Project name: whatever you like
- Initial WSDL: points to where your service serves up the WSDL
- Check both "Create Requests" and "Create TestSuite"

  1. 单击TestSteps文件夹上的Ctrl-单击(右击)并单击“添加步骤”,然后选择"SOAP请求“。
  2. 给它起任何你喜欢的名字(我用的是actionName_validate)
  3. 选择要验证的SOAP操作/操作。
  4. 确保勾选“adds断言(添加响应符合其模式的验证)”复选框,然后单击OK
  5. 从左边的列表中双击新创建的测试步骤并运行它(单击左上角的绿色播放按钮)
  6. 如果您的服务的响应符合WSDL,您将在左下角看到一个绿色的圆圈,上面写着“断言”。如果不是,它将是红色的,它会给你一个完整的清单,所有的问题,你的反应。
  7. 一个接一个地修复模式的任何问题,直到它是绿色的

如果您正在使用Ruby,请提供额外的详细信息

此外,这里还有一些更多的细节,可以帮助在这种情况下的人,特别是如果您正在构建您的服务在Ruby.

Ruby中SOAP服务的工具不如Java (甚至PHP)好。我使用的是输出 gem,虽然它是一个全新的SOAP服务,但它的表达能力不足以让您定义与官方Sonos匹配的类型映射等。我也无法让它生成正确的XML响应(它遗漏了所需的关键xmlns属性,或者不会命名空间所有元素)。

我通过使用模板手动为XML响应提供服务来解决这一问题,因为这是最简单的方法。您可以使用.xml.erb模板,也可以将xml builder语法与.xml.builder模板一起使用。实际上,您可以以任何您想要的方式生成XML,例如to_xml或其他演示程序类型库。

对于WSDL,我转而使用官方的,只需将底层的服务地址更改为我的服务提供这个修改的WSDL的位置。

票数 1
EN

Stack Overflow用户

发布于 2016-02-23 22:45:43

您是否尝试过使用SoapUI,添加端点并直接命中它以查看您要返回的是什么?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35585961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档