获取Spotify当前播放的曲目
编辑:让我们来澄清一下这一切。
我正在写一个Python脚本,想让它告诉我Spotify当前正在播放的歌曲。
我试着找一些可以帮忙的库,但没有找到任何还在维护并且能用的库。我也查看了Spotify的网页API,但它没有提供获取这些信息的方法。
我找到的唯一可能的解决办法是获取我Spotify(桌面应用)窗口的标题。但到目前为止,我还没能做到这一点。
所以基本上,我想问的是有没有人知道:
如何使用我已经尝试的方法(从程序中获取窗口标题),无论是用纯Python还是通过中间的shell脚本。
或者
有没有其他方法可以从Spotify的桌面应用或网页客户端提取这些信息。
原始帖子:
我在考虑为Linux环境制作一个Python状态栏,没什么花哨的,就是一个适合我自己使用的脚本。我现在想做的是显示Spotify当前播放的曲目(也就是艺术家和标题)。
在他们的官方网页API中似乎没有这样的功能。我也没有找到任何第三方库可以做到这一点。我找到的大多数库自从Spotify发布了他们当前的API后就不再维护,或者是基于那个API,但不能满足我的需求。
我还在这里读了一堆类似的问题,大多数都没有答案,或者是过时的解决方案。
我考虑过获取窗口标题,因为它确实显示了我需要的信息。但这似乎非常复杂,我也很难实现。我试着在我的脚本中运行Linux命令xdotools和xprop的组合来获取它。
值得一提的是,由于我已经在使用psutil库获取其他信息,我已经可以访问Spotify的进程ID(PID)。
有没有什么主意可以让我做到这一点?
如果我的方法是你能想到的唯一方法,有没有什么建议可以让我实际实现它?
非常感谢你的帮助。
相关文章:
- 暂无相关问题
2 个回答
对于Windows用户:
这个库可以在GitHub上找到,链接是:https://github.com/XanderMJ/spotilib。请注意,这个项目还在不断完善中。
只需要把文件复制到你的Python/Lib目录下就可以了。
import spotilib
spotilib.artist() #returns the artist of the current playing song
spotilib.song() #returns the song title of the current playing song
spotilib.artist()这个函数只会返回第一个艺术家。我开始着手开发另一个库spotimeta.py来解决这个问题。不过,目前这个库还没有完全做好。
import spotimeta
spotimeta.artists() #returns a list of all the collaborating artists of the track
如果出现错误,spotimeta.artists()这个函数也只会返回第一个艺术家(这个艺术家是通过spotilib.artist()找到的)。
在Linux上,Spotify客户端使用了一种叫做MPRIS的接口,这个接口的全名是媒体播放器远程接口规范。
http://specifications.freedesktop.org/mpris-spec/latest/index.html
你可以通过Python来获取歌曲标题(以及其他一些信息),方法如下:
import dbus
session_bus = dbus.SessionBus()
spotify_bus = session_bus.get_object("org.mpris.MediaPlayer2.spotify",
"/org/mpris/MediaPlayer2")
spotify_properties = dbus.Interface(spotify_bus,
"org.freedesktop.DBus.Properties")
metadata = spotify_properties.Get("org.mpris.MediaPlayer2.Player", "Metadata")
# The property Metadata behaves like a python dict
for key, value in metadata.items():
print(key, value)
# To just print the title
print(metadata['xesam:title'])