获取Spotify当前播放的曲目

Posted

技术标签:

【中文标题】获取Spotify当前播放的曲目【英文标题】:Get spotify currently playing track 【发布时间】:2016-02-26 06:52:24 【问题描述】:

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

我正在编写一个 python 脚本,我希望它告诉我 Spotify 当前正在播放的歌曲。

我尝试寻找可以帮助我的库,但没有找到任何仍在维护和工作的库。 我还查看了 Spotify 的网络 API,但它没有提供任何获取该信息的方法。

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

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

如何应用我已经尝试使用的方法(从程序中获取窗口的标题),无论是在纯 python 中还是使用中间 shell 脚本。

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


原帖:

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

在他们的官方网络 API 中似乎没有类似的东西。我也没有找到任何可以做到这一点的第三方库。我发现的大多数库要么在 spotify 发布了它们当前的 API 后被弃用,要么它们基于所述 API,但不能满足我的要求。

我也在这里阅读了一堆类似的问题,其中大部分没有答案,或者已弃用的解决方案。

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

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

知道我该怎么做吗?

如果我的方法是你能想到的唯一方法,你知道如何让它真正起作用吗?

您的帮助将不胜感激。

【问题讨论】:

请澄清您的具体问题或添加其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。请参阅“如何提问”页面以获得澄清此问题的帮助。 @IanAuld 希望这会更好。谢谢。 ***.com/help/mcve 另一个很好的检查资源是ubuntuforums.org/showthread.php?t=1797848,一旦你set_dbus_adress,你就可以通过qdbus org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get org.mpris.MediaPlayer2.Player Metadata获得正在播放的元数据 【参考方案1】:

对于窗户:

该库可以在 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() 仅返回第一位艺术家。我开始研究另一个库 spoteta.py 来解决这个问题。但是,这还没有达到 100%。

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

如果发生错误,spotima.artists() 将只返回第一个艺术家(通过 spotilib.artist() 找到)

【讨论】:

【参考方案2】:

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

【讨论】:

Windows客户端没有这样的api。 OS X 有一个 Applescript API。 developer.spotify.com/applescript-api 最终,您将能够在 Web API 中查询当前正在播放的曲目。 github.com/spotify/web-api/issues/12 正是我想要的!谢谢!

以上是关于获取Spotify当前播放的曲目的主要内容,如果未能解决你的问题,请参考以下文章

获取 Spotify 用户当前播放的曲目名称 [Web API]

iOS:是不是真的不可能获取第三方应用程序(如 Spotify)中正在播放的当前曲目的信息?

Spotify - 如何暂停曲目和恢复曲目

2015 年 3 月更新后从 Spotify 应用获取当前曲目信息

Spotify + AppleScript:将当前曲目添加到播放列表

Spotify 给出当前曲目的错误值(AppleScript)