获取spotify目前正在播放的曲目

编辑:让我们试图澄清这一切。

我正在编写一个python脚本,我想让它告诉我Spotify正在播放的歌曲。

我试过寻找可以帮助我,但没有发现任何仍然保持和工作的图书馆。 我也浏览了Spotify的web API,但是没有提供任何方式来获取这些信息。

我发现唯一的潜在解决scheme是获取我的Spotify(桌面应用程序)窗口的标题。 但是到目前为止我还没有做到这一点。

所以基本上,我问的是,是否有人知道:

  • 如何应用我已经尝试使用的方法(从程序中获取窗口的标题),使用纯Python或使用中间shell脚本。

    要么

  • 从Spotify的桌面应用程序或Web客户端提取信息的任何其他方式。


原文:

我摆弄着一个linux环境的python状态栏的想法,没有什么幻想,只是一个为我自己的用法量身定做的脚本。 我现在要做的是显示当前正在播放的spotify(即艺术家和标题)的曲目。

在他们的官方web API中似乎没有这样的东西。 我还没有find任何第三方库可以做到这一点。 我发现的大多数库都是被弃用的,因为Spotify发布了他们当前的API,或者他们是基于所谓的API,而不是我想要的。

我也在这里读了一堆类似的问题,其中大部分都没有答案,或者是一个废弃的解决scheme。

我想了解一下窗口标题,因为它确实显示了我需要的信息。 但是,这不仅似乎真的很复杂,我也有困难做到这一点。 我试图通过在我的脚本中运行linux命令xdotools和xprop的组合。

值得一提的是,由于我已经使用psutil lib来获取其他信息,所以我已经可以访问spotify的PID了。

任何想法我怎么能做到这一点?

如果我的方法是你能想到的唯一的方法,那么怎么才能真正实现它呢?

您的帮助将不胜感激。

Solutions Collecting From Web of "获取spotify目前正在播放的曲目"

Linux上的Spotify客户端实现了称为MPRIS – 媒体播放器远程接口规范的D-Bus接口。

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']
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'] 

对于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来解决这个问题。 但是,这还不是100%的工作。

 import spotimeta spotimeta.artists() #returns a list of all the collaborating artists of the track 

如果发生错误, spotimeta.artists()将只返回第一个艺术家(用spotilib.artist()发现)