如何在 Python (Windows) 中获取 Spotify 当前正在播放的歌曲?

Posted

技术标签:

【中文标题】如何在 Python (Windows) 中获取 Spotify 当前正在播放的歌曲?【英文标题】:How to get Spotify current playing song in Python (Windows)? 【发布时间】:2015-05-17 17:03:55 【问题描述】:

我想在 16x2 LCD 上显示 Spotify 中当前正在播放的歌曲。 我正在考虑将 LCD 与我的 Arduino 连接,然后制作一个 Python 脚本,将当前播放的 Spotify 歌曲发送到 Arduino。

为了切入主题,我正在寻找一种在 Python 中获取 Spotify 当前正在播放的歌曲的方法。 (我使用的是 Windows 8。)我找到了一些类似 dbus 的方法,但它们要么适用于 Linux,要么适用于 Mac。

提前致谢! (抱歉英语语法不好。)

【问题讨论】:

我没用过,但你可能会觉得pytify很有帮助。 感谢您的回复。不幸的是,它仅适用于 Mac 和 Linux。 【参考方案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() 找到)

希望这会对您有所帮助(如果仍然需要)!

【讨论】:

谢谢,真棒你仍然努力回答这个问题,即使它已经 >1 岁了。我很快就会看看。如果我可以帮助您开发模块,请告诉我。 (虽然我不是 100% 能帮到你,但我至少会尝试。) En je zit ook op de TU Delft,太棒了哈哈。 Ik ga zelf nu beginnen aan het tweede jaar 电气工程学士学位。 Welk jaar civiel doe jij? / 你也在代尔夫特理工大学学习,太棒了。我将开始我的电气工程学士学位的第二年。你是哪一年的土木工程? @Kevin 很高兴认识一位同学!目前我正在开始我的土木工程第四年(仍然是batchelor tho)。 || Hoe zou ik 在联系 kunnen komen 遇到了jou? contact-at-kevinvandertoorn-dot-nl(遇见@i.p.v. -at- en punt i.p.v. -dot-)。 Ik moet ook nog een paar vakken van vorig jaar opnieuw doen haha​​。 (Kwantum mechanica 是持久的。:P) 哎呀... het moet email -at- kevinvandertoorn -dot- nl zijn,对不起。【参考方案2】:

最简单的方法可能是将当前播放的曲目从 Spotify 客户端抓取到 last.fm 帐户,然后使用 python 从那里获取。

Last.fm 允许您通过他们的 api 使用user.getRecentTracks 获取打乱的曲目,如果正在播放歌曲,它会提供nowplaying="true" 属性。它还为外部显示提供了一些其他有用的东西,例如专辑封面的链接和歌曲的 last.fm 页面。

这是一个快速示例,它将用户名和 api 密钥作为 cmd 行参数,并使用 requests 库获取该用户当前正在播放的内容。

from time import sleep
import requests
import json
from pprint import pprint
import sys    

def get_playing():
    base_url = 'http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user='
    user = sys.argv[1]
    key = sys.argv[2]
    r = requests.get(base_url+user+'&api_key='+key+'&format=json')
    data = json.loads(r.text)
    latest_track = data['recenttracks']['track'][0]
    try:
        if latest_track['@attr']['nowplaying'] == 'true':
            artist = latest_track['artist']['#text']
            song = latest_track['name']
            album = latest_track['album']['#text']
            print "\nNow Playing: 0 - 1, from the album 2.\n".format(artist, song, album)
    except KeyError:
        print '\nNothing playing...\n'    

def main():
    if len(sys.argv)<3:
        print "\nError: Please provide a username and api key in the format of: 'scrobble.py username api_key\n"
    else:
        get_playing()    

if __name__ == '__main__':
    main()

然而,在快速测试中,在暂停或退出 Spotify 客户端后,似乎需要一分钟左右才能意识到曲目不再播放。

【讨论】:

对于那些不加评论而投反对票的人:这有点粗鲁,违反了 SO 准则的精神。 这是一个很好的答案,但可以改进它解释的好处:这不仅适用于 Spotify,而且不会因 Spotify 客户端的更改而损坏(除非他们有一天删除了 Scrobble 支持)。此外,对于大多数人来说,解释或链接什么是 Scrobble “是”。干得好。【参考方案3】:

有不止一个 pytify 吗? 这对我有用,直到今天: https://code.google.com/p/pytify/

Spotify 已更新,现在歌曲不再显示在 Windows 标题中。

他们将带回“功能”: https://community.spotify.com/t5/ideas/v2/ideapage/blog-id/ideaexchange/article-id/73238/page/2#comments

【讨论】:

以上是关于如何在 Python (Windows) 中获取 Spotify 当前正在播放的歌曲?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 上使用 python 3.4 在 ptqt5 中获取 QtWebEngineView?

python如何获取windows文件属性的详细信息?

Python/Windows/ctypes:调用 WaitForMultipleObjects 后如何获取进程返回状态?

获取运行python脚本的Windows计算机的名称?

如何从 c/c++ 源代码获取适用于 Windows 的 python .pyd? (更新:如果你想要的话,现在在 Python 中很活跃)

我正在使用来自 python 的 powershell 命令获取一些数据,而 Windows 中没有 cmd!如何将此输出分配给字符串变量?