2015-11-24 112 views
4

编辑:让我们试着澄清这一切。获取Spotify正在播放的曲目

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

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

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

因此,基本上,什么我问的是,是否有人知道:

  • 如何申请我已经尝试使用(得到一个程序窗口的标题)的方法,无论是在纯Python或使用中介shell脚本。

    OR

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


原帖:

我有一个Python状态栏为Linux环境中,没有什么特别的,只是针对我自己的使用脚本的想法摆弄。我现在想要做的是显示当前正在播放的spotify(即艺术家和标题)的曲目。

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

我也在这里读了一堆类似的问题,其中大部分都没有答案,或者不推荐使用的解决方案。

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

值得一提的是,由于我已经在使用psutil库获取其他信息,因此我已经可以访问spotify的PID。

任何想法我可以做到这一点?

如果我的方法是你能想到的唯一的方法,任何想法如何实际使它工作?

您的帮助将不胜感激。

+0

请说明您的具体问题或添加额外的细节亮点正是你所需要的。正如目前所写,很难确切地说出你在问什么。请参阅“如何问问”页面以获取有关澄清此问题的帮助。 – IanAuld

+0

@IanAuld希望这样会更好。谢谢。 – kRYOoX

+0

http://stackoverflow.com/help/mcve – IanAuld

回答

15

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

Windows怎么样? – CoDEmanX

+0

Windows客户端没有像这样的api。 OS X有一个Applescript API。 https://developer.spotify.com/applescript-api/最终,您将能够查询当前播放曲目的Web API。 https://github.com/spotify/web-api/issues/12 – jooon

+0

正是我在找的东西!谢谢 ! – kRYOoX

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来解决这个问题。但是,这还没有达到100%。

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

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

相关问题