Sonos Music API 首次请求时出现“无法浏览音乐”错误
Sonos Music API implementation “Unable to browse music” error on first request
在我们实施 Sonos Music API 时,我 运行 遇到了请求专辑容器的问题。第一次请求相册时,总是失败并显示消息 "Unable to browse music"。如果您然后按返回键,并再次打开同一张专辑,它会正常打开并显示曲目列表和专辑详细信息。
我确实检查了我们服务器在第一次和第二次请求之间的响应是否有任何差异,但没有差异。也没有任何时间差异(在我的开发站上请求加载(两次)不到 200 毫秒)。
我还使用 SoapUI 来验证 Soap 服务器 returns 正确的数据,并且验证没有任何错误。
测试套件也returns没有错误或警告。
有没有办法查看实际错误?或者关于如何处理这个问题的任何建议?
典型的请求如下所示:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<credentials xmlns="http://www.sonos.com/Services/1.1">
<sessionId>f42257a8-c046-11e6-82d0-d4bed9ed478a</sessionId>
<deviceId>xx-xx-00-00-00-00:x</deviceId>
<deviceProvider>Sonos</deviceProvider>
</credentials>
</s:Header>
<s:Body>
<getMetadata xmlns="http://www.sonos.com/Services/1.1">
<id>album:112779295</id>
<index>0</index>
<count>30</count>
</getMetadata>
</s:Body>
</s:Envelope>
和响应:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.sonos.com/Services/1.1">
<SOAP-ENV:Body>
<ns1:getMetadataResponse>
<ns1:getMetadataResult>
<ns1:index>0</ns1:index>
<ns1:count>13</ns1:count>
<ns1:total>13</ns1:total>
<ns1:mediaCollection>
<ns1:id>album:112779295</ns1:id>
<ns1:itemType>album</ns1:itemType>
<ns1:displayType>list</ns1:displayType>
<ns1:title>Kenny B - Kenny B</ns1:title>
<ns1:summary>blop</ns1:summary>
<ns1:isFavorite>true</ns1:isFavorite>
<ns1:language>NL</ns1:language>
<ns1:country>NL</ns1:country>
<ns1:genreId>genre:1</ns1:genreId>
<ns1:genre>Nederlands</ns1:genre>
<ns1:twitterId/>
<ns1:liveNow>false</ns1:liveNow>
<ns1:onDemand>true</ns1:onDemand>
<ns1:artist>Kenny B</ns1:artist>
<ns1:artistId>artist:1425214</ns1:artistId>
<ns1:canScroll>true</ns1:canScroll>
<ns1:canPlay>true</ns1:canPlay>
<ns1:canEnumerate>true</ns1:canEnumerate>
<ns1:canAddToFavorites>true</ns1:canAddToFavorites>
<ns1:containsFavorite>false</ns1:containsFavorite>
<ns1:canCache>false</ns1:canCache>
<ns1:canSkip>false</ns1:canSkip>
<ns1:albumArtURI>https://mobile.unplug.de/artwork.php?id=112779295&w=300</ns1:albumArtURI>
<ns1:authRequired>false</ns1:authRequired>
<ns1:homogeneous>false</ns1:homogeneous>
<ns1:canAddToFavorite>true</ns1:canAddToFavorite>
</ns1:mediaCollection>
<ns1:mediaMetadata>
<ns1:id>track:610294458</ns1:id>
<ns1:itemType>track</ns1:itemType>
<ns1:displayType>List</ns1:displayType>
<ns1:title>Alleen Jij</ns1:title>
<ns1:mimeType>application/x-mpegURL</ns1:mimeType>
<ns1:trackMetadata>
<ns1:artistId>artist:1425214</ns1:artistId>
<ns1:artist>Kenny B</ns1:artist>
<ns1:albumId>album:112779295</ns1:albumId>
<ns1:albumArtistId>artist:1425214</ns1:albumArtistId>
<ns1:duration>223</ns1:duration>
<ns1:rating>1</ns1:rating>
<ns1:albumArtURI>https://mobile.unplug.de/artwork.php?id=112779295&w=300</ns1:albumArtURI>
<ns1:trackNumber>1</ns1:trackNumber>
<ns1:canPlay>true</ns1:canPlay>
<ns1:canSkip>true</ns1:canSkip>
<ns1:canAddToFavorites>true</ns1:canAddToFavorites>
</ns1:trackMetadata>
</ns1:mediaMetadata>
<ns1:mediaMetadata>
<ns1:id>track:610294459</ns1:id>
<ns1:itemType>track</ns1:itemType>
<ns1:displayType>List</ns1:displayType>
<ns1:title>Als Je Gaat</ns1:title>
<ns1:mimeType>application/x-mpegURL</ns1:mimeType>
<ns1:trackMetadata>
<ns1:artistId>artist:1425214</ns1:artistId>
<ns1:artist>Kenny B</ns1:artist>
<ns1:albumId>album:112779295</ns1:albumId>
<ns1:albumArtistId>artist:1425214</ns1:albumArtistId>
<ns1:duration>191</ns1:duration>
<ns1:rating>1</ns1:rating>
<ns1:albumArtURI>https://mobile.unplug.de/artwork.php?id=112779295&w=300</ns1:albumArtURI>
<ns1:trackNumber>2</ns1:trackNumber>
<ns1:canPlay>true</ns1:canPlay>
<ns1:canSkip>true</ns1:canSkip>
<ns1:canAddToFavorites>true</ns1:canAddToFavorites>
</ns1:trackMetadata>
</ns1:mediaMetadata>
...
</ns1:getMetadataResult>
</ns1:getMetadataResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
显然这是在响应中有 mediaCollection 时引起的。经过大量调试和尝试后,我发现只需从响应中删除它即可解决问题。
我也遇到过这个问题,我不确定是什么原因造成的,但是一旦我在 SQL 查询的末尾添加了一个 LIMIT 来获取曲目,它就停止了,只要限制为 <= 99(Sonos 在 getMetadata post 中请求的默认项目数)。我认为这与返回的物品数量多于 Sonos 的预期有关。
在我们实施 Sonos Music API 时,我 运行 遇到了请求专辑容器的问题。第一次请求相册时,总是失败并显示消息 "Unable to browse music"。如果您然后按返回键,并再次打开同一张专辑,它会正常打开并显示曲目列表和专辑详细信息。
我确实检查了我们服务器在第一次和第二次请求之间的响应是否有任何差异,但没有差异。也没有任何时间差异(在我的开发站上请求加载(两次)不到 200 毫秒)。
我还使用 SoapUI 来验证 Soap 服务器 returns 正确的数据,并且验证没有任何错误。
测试套件也returns没有错误或警告。
有没有办法查看实际错误?或者关于如何处理这个问题的任何建议?
典型的请求如下所示:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<credentials xmlns="http://www.sonos.com/Services/1.1">
<sessionId>f42257a8-c046-11e6-82d0-d4bed9ed478a</sessionId>
<deviceId>xx-xx-00-00-00-00:x</deviceId>
<deviceProvider>Sonos</deviceProvider>
</credentials>
</s:Header>
<s:Body>
<getMetadata xmlns="http://www.sonos.com/Services/1.1">
<id>album:112779295</id>
<index>0</index>
<count>30</count>
</getMetadata>
</s:Body>
</s:Envelope>
和响应:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.sonos.com/Services/1.1">
<SOAP-ENV:Body>
<ns1:getMetadataResponse>
<ns1:getMetadataResult>
<ns1:index>0</ns1:index>
<ns1:count>13</ns1:count>
<ns1:total>13</ns1:total>
<ns1:mediaCollection>
<ns1:id>album:112779295</ns1:id>
<ns1:itemType>album</ns1:itemType>
<ns1:displayType>list</ns1:displayType>
<ns1:title>Kenny B - Kenny B</ns1:title>
<ns1:summary>blop</ns1:summary>
<ns1:isFavorite>true</ns1:isFavorite>
<ns1:language>NL</ns1:language>
<ns1:country>NL</ns1:country>
<ns1:genreId>genre:1</ns1:genreId>
<ns1:genre>Nederlands</ns1:genre>
<ns1:twitterId/>
<ns1:liveNow>false</ns1:liveNow>
<ns1:onDemand>true</ns1:onDemand>
<ns1:artist>Kenny B</ns1:artist>
<ns1:artistId>artist:1425214</ns1:artistId>
<ns1:canScroll>true</ns1:canScroll>
<ns1:canPlay>true</ns1:canPlay>
<ns1:canEnumerate>true</ns1:canEnumerate>
<ns1:canAddToFavorites>true</ns1:canAddToFavorites>
<ns1:containsFavorite>false</ns1:containsFavorite>
<ns1:canCache>false</ns1:canCache>
<ns1:canSkip>false</ns1:canSkip>
<ns1:albumArtURI>https://mobile.unplug.de/artwork.php?id=112779295&w=300</ns1:albumArtURI>
<ns1:authRequired>false</ns1:authRequired>
<ns1:homogeneous>false</ns1:homogeneous>
<ns1:canAddToFavorite>true</ns1:canAddToFavorite>
</ns1:mediaCollection>
<ns1:mediaMetadata>
<ns1:id>track:610294458</ns1:id>
<ns1:itemType>track</ns1:itemType>
<ns1:displayType>List</ns1:displayType>
<ns1:title>Alleen Jij</ns1:title>
<ns1:mimeType>application/x-mpegURL</ns1:mimeType>
<ns1:trackMetadata>
<ns1:artistId>artist:1425214</ns1:artistId>
<ns1:artist>Kenny B</ns1:artist>
<ns1:albumId>album:112779295</ns1:albumId>
<ns1:albumArtistId>artist:1425214</ns1:albumArtistId>
<ns1:duration>223</ns1:duration>
<ns1:rating>1</ns1:rating>
<ns1:albumArtURI>https://mobile.unplug.de/artwork.php?id=112779295&w=300</ns1:albumArtURI>
<ns1:trackNumber>1</ns1:trackNumber>
<ns1:canPlay>true</ns1:canPlay>
<ns1:canSkip>true</ns1:canSkip>
<ns1:canAddToFavorites>true</ns1:canAddToFavorites>
</ns1:trackMetadata>
</ns1:mediaMetadata>
<ns1:mediaMetadata>
<ns1:id>track:610294459</ns1:id>
<ns1:itemType>track</ns1:itemType>
<ns1:displayType>List</ns1:displayType>
<ns1:title>Als Je Gaat</ns1:title>
<ns1:mimeType>application/x-mpegURL</ns1:mimeType>
<ns1:trackMetadata>
<ns1:artistId>artist:1425214</ns1:artistId>
<ns1:artist>Kenny B</ns1:artist>
<ns1:albumId>album:112779295</ns1:albumId>
<ns1:albumArtistId>artist:1425214</ns1:albumArtistId>
<ns1:duration>191</ns1:duration>
<ns1:rating>1</ns1:rating>
<ns1:albumArtURI>https://mobile.unplug.de/artwork.php?id=112779295&w=300</ns1:albumArtURI>
<ns1:trackNumber>2</ns1:trackNumber>
<ns1:canPlay>true</ns1:canPlay>
<ns1:canSkip>true</ns1:canSkip>
<ns1:canAddToFavorites>true</ns1:canAddToFavorites>
</ns1:trackMetadata>
</ns1:mediaMetadata>
...
</ns1:getMetadataResult>
</ns1:getMetadataResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
显然这是在响应中有 mediaCollection 时引起的。经过大量调试和尝试后,我发现只需从响应中删除它即可解决问题。
我也遇到过这个问题,我不确定是什么原因造成的,但是一旦我在 SQL 查询的末尾添加了一个 LIMIT 来获取曲目,它就停止了,只要限制为 <= 99(Sonos 在 getMetadata post 中请求的默认项目数)。我认为这与返回的物品数量多于 Sonos 的预期有关。