莫比迪亚皮
mopidyapi的Python项目详细描述
MOPIDIAPI
MopidyAPI
是用于与
Mopidy通过它的JSON RPC
API。
MopidyAPI
使用http调用rpc方法,使用websockets侦听事件。
它兼容mopidy 2.2中的所有功能。
安装
pip install mopidyapi
用法
MopidyAPI
包含映射到每个the Mopidy v2.2 core API functions.的函数
例如文档中的mopidy.core.PlaybackController.pause()
映射到这里的MopidyAPI.playback.pause()
。
快速示例
>>>frommopidyapiimportMopidyAPI>>>m=MopidyAPI()>>>tracks=m.tracklist.get_tracks()>>>tracks[0].name'I'veSeenFootage'>>>tracks[0].artists[Artist(name='Death Grips',uri='spotify:artist:5RADpgYLOuS2ZxDq7ggYYH')]>>>tracks[0]._fields('album','name','disc_no','uri','length','track_no','artists','date','bitrate')
连接到mopidy
要连接到mopidy,需要实例化一个MopidyAPI
对象。
默认情况下,它将连接到位于localhost:6680
的mopidy,
所以您可能不需要给构造函数任何参数。
frommopidyapiimportMopidyAPIm=MopidyAPI(host='my.mopidy.host.com',port=6680)
您还可以传递use_websockets=False
,以防止启动WebSocket侦听器,
在一个单独的线程中运行。但是,事件侦听(如下所述)不适用于此集合。
调用mopidy函数
中描述的所有功能
Mopidy 2.2 core API documentation
在MopidyAPI
中可用。
mopidy文档中命名为core.<ControllerName>Controller.<functionname>()
的函数,
将使用名称MopidyAPI.<controllername>.<functionname>()
例如,您可以通过调用m.playback.pause()
暂停音乐,
或者可以通过调用来搜索歌曲,例如m.library.search(artist='Rick Astley')
,其中m = MopidyAPI()
。
函数将返回
Python native ^{
事件监听
您可以使用函数装饰器来标记事件到达时要调用的特定函数。参见下面的示例。
使用的事件在Mopidy's core events documentation.
frommopidyapiimportMopidyAPIm=MopidyAPI()@m.on_event('volume_changed')defprint_volume(event):print(f"Volume changed to: {event.volume}")@m.on_event('track_playback_started')defprint_newtracks(event):print(f"Started playing track: {event.track.name}")
与函数调用一样,传递的事件是namedtuples.
事件侦听器装饰器的一个重要警告, 它不会以任何方式警告您,如果您使用无效的事件名称(例如,您拼错了事件名称)。
关于选择namedtuples
的说明
为什么namedtuples
?
名字的选择可能看起来不寻常(甚至不方便)。 但是对于这个应用程序,它们比字典有许多优势:
1。比听写要少一些冗长。
event.tl_track.track.album.name
比
event['tl_track']['track']['album']['name']
2。它们打印得更整齐。
Artist(name='Death Grips', uri='spotify:artist:5RADpgYLOuS2ZxDq7ggYYH')
比
{'name': 'Death Grips', 'uri': 'spotify:artist:5RADpgYLOuS2ZxDq7ggYYH'}
。
3。namedtuples
准确地表示数据的不可变性质。
允许对来自mopidy的数据进行变异可能会让人认为这会改变mopidy内部的数据,但事实显然并非如此。
…但是,我知道格言!
好吧,如果你需要.keys()
,你可以使用._fields()
,
如果你真的需要一个dict,你可以使用._asdict()
,
它将返回一个实际的dict。
贡献
请通过github issue tracker告诉我有关bug的信息。
如果你有心情帮助我改进这个项目,也可以随便写。我不咬人:)
许可证
这个项目是根据gplv3授权的。
有关详细信息,请参见LICENSE
文件。