【问题标题】:Getting tracks from a playlist using Spotipy is slow使用 Spotipy 从播放列表中获取曲目很慢
【发布时间】:2018-03-12 13:40:58
【问题描述】:

我正在与一个 django 项目的 Spotify Web API 进行交互,该项目允许用户上传他们的播放列表,以便根据某些参数对他们进行排名,即 Spotify 分配给所有曲目的音频功能。

我正在使用 Spotipy 库通过 python 查询 spotify API。用户和播放列表数据的速度快如闪电,但是按照关于如何从播放列表中获取曲目的 Spotipy 教程,我发现响应速度非常慢。

曲目的等待时间与曲目中播放列表的长度成正比。我认为这与 spotipy 库打包和发送请求的效率低下有关。

在获取轨道和速度方面,有没有人遇到过类似的瓶颈?

我将非常感激..我们的项目在这一点上取决于它。

【问题讨论】:

  • 你能给出任何比你预期慢的具体例子吗?您对这些请求的速度期望是什么?否则很难评估。您是按原样使用文档示例还是完全修改它们?您是否尝试过使用像 wireshark 这样的工具来查看底层的 http 请求?您可以查看库或 spotify 网络服务中是否存在延迟。

标签: python django spotify spotipy


【解决方案1】:

Spotipy 一点也不慢。

无论如何,您可以尝试自己提出请求。

import requests
import json

然后得到你想要的端点:(参考:Spotify Web API Endpoint Reference

SEARCH_PLAYLIST_ENDPOINT ='https://api.spotify.com/v1/search?type=playlist'
AUDIO_FEATURES_ENDPOINT = 'https://api.spotify.com/v1/audio-features/{id}'

如果您有访问令牌,请按名称过滤播放列表:

def search_playlist(name):
    path = 'token.json'
    with open(path) as t:
        token = json.load(t)
    myparams = {'type': 'playlilst'}
    myparams['q'] = name
    resp = requests.get(SEARCH_PLAYLIST_ENDPOINT, params=myparams, headers={"Authorization": "Bearer {}".format(token)})
    return resp.json()

显然,查询播放列表项的响应时间取决于播放列表曲目的数量,这可能会有很大差异。

那么你就可以使用这个函数来获取音频的特征了:

# https://developer.spotify.com/web-api/get-related-artists/
def get_audio_features(track_id):
    path = 'token.json'
    with open(path) as t:
        token = json.load(t)
    url = AUDIO_FEATURES_ENDPOINT.format(id=track_id)
    resp = requests.get(url, headers={"Authorization": "Bearer {}".format(token)})
    return resp.json()

对其他请求遵循相同的逻辑。对此进行测试并与Spotipy 速度进行比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 2017-09-09
    相关资源
    最近更新 更多