如何使用Python soco播放Sonos播放列表?

时间:2017-12-02 18:22:50

标签: python sonos

我正在尝试从Python soco加载一个sonos播放列表,以便我可以从我的PC控制音乐。

感谢soco的开发者。从我的音乐库和流媒体互联网音频播放单个曲目非常方便。我还没弄明白如何使用sonos播放列表。

让zone为表示Sonos扬声器或扬声器对的SoCo对象。每个区域都有一个存储在zone.contentDirectory中的当前队列。我想我需要用播放列表中的曲目替换此队列,但我还没有找到如何枚举播放列表中的曲目。此外,播放播放列表URI不起作用。

sonos播放列表列表随附

import soco

zone = soco.Soco('192.168.1.249')
zone.get_playlists()

特定播放列表的标题为

pl = zone.get_sonos_playlist_by_attr('title', 'Dance').

当我查看播放列表的详细信息时,唯一的跟踪信息 似乎是Sonos设备上的一个uri。

>>> pprint(pl.to_dict())
{u'desc': None,
 u'item_id': u'SQ:28',
 u'parent_id': u'SQ:',
 u'resources': [{u'bitrate': None,
                 u'bits_per_sample': None,
                 u'color_depth': None,
                 u'duration': None,
                 u'import_uri': None,
                 u'nr_audio_channels': None,
                 u'protection': None,
                 u'protocol_info': 'file:*:audio/mpegurl:*',
                 u'resolution': None,
                 u'sample_frequency': None,
                 u'size': None,
                 u'uri': 'file:///jffs/settings/savedqueues.rsq#28'}],
 u'restricted': True,
 u'title': u'Dance'}

但是这个uri不能用zone.play_uri()来播放。

>>> zone.play_uri('file:///jffs/settings/savedqueues.rsq#28')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/soco/core.py", line 104, in inner_function
    return function(self, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/soco/core.py", line 483, in play_uri
    ('CurrentURIMetaData', meta)
  File "/usr/local/lib/python2.7/dist-packages/soco/services.py", line 181, in _dispatcher
    return self.send_command(action, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/soco/services.py", line 408, in send_command
    self.handle_upnp_error(response.text)
  File "/usr/local/lib/python2.7/dist-packages/soco/services.py", line 469, in handle_upnp_error
    error_xml=xml_error
soco.exceptions.SoCoUPnPException: UPnP Error 714 received: Illegal MIME-Type from 192.168.1.249

我想我需要用播放列表uri中的曲目替换队列,但我该如何获取它们?

1 个答案:

答案 0 :(得分:2)

您必须使用其他方法。首先,您必须清除队列(如果要删除旧曲目),然后您可以使用add_uri_to_queue将播放列表曲目添加到Sonos队列,最后您可以使用play

import soco

sonos = soco.SoCo("192.168.1.249")

uri = "file:///jffs/settings/savedqueues.rsq#28"
sonos.clear_queue()
sonos.add_uri_to_queue(uri=uri)
sonos.play_from_queue(index=0)