首页 文章

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

提问于
浏览
6

EDIT : Let's try to clarify all this.

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

我试过寻找可以帮助我的图书馆,但没有找到任何仍然维护和工作的图书馆 . 我还查看了Spotify的Web API,但它没有提供任何获取该信息的方法 .

我找到的唯一可能的解决方案是获取我的Spotify(桌面应用程序)窗口的 Headers . 但到目前为止我还没有成功 .

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

  • 如何应用我已经尝试使用的方法(从程序中获取窗口的 Headers ),可以是纯python或使用中间shell脚本 .

要么

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

Original post :

我正在摆弄一个Linux环境的python状态栏的想法,没什么特别的,只是根据我自己的用法量身定制的脚本 . 我现在要做的是从spotify(即艺术家和 Headers )显示当前播放的曲目 .

在他们的官方Web API中似乎没有类似的东西 . 我还没有找到任何可以做到这一点的第三方库 . 我找到的大多数库都被弃用了,因为spotify发布了他们当前的API,或者他们是基于所谓的API,它没有做我想要的 .

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

我想 grab 窗口 Headers ,因为它确实显示了我需要的信息 . 但这不仅令人费解,我也难以实现这一点 . 我试图通过在我的脚本中运行linux命令xdotools和xprop的组合来获得它 .

值得一提的是,由于我已经将psutil lib用于其他信息,因此我已经可以访问spotify的PID .

知道我怎么能这样做吗?

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

我们将不胜感激 .

2 回答

  • 18

    Linux上的Spotify客户端实现了一个名为MPRIS的D-Bus接口 - 媒体播放器远程接口规范 .

    http://specifications.freedesktop.org/mpris-spec/latest/index.html

    您可以从python访问 Headers (和其他元数据),如下所示:

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

    对于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()找到)

相关问题