Получение треков из плейлиста с использованием Spotipy идет медленно

Я взаимодействую с веб-API Spotify для проекта django, который позволяет пользователям загружать свои списки воспроизведения для их ранжирования в соответствии с определенными параметрами, а именно аудио-функциями, которые spotify назначает всем трекам.

Я использую библиотеку Spotipy для запроса API Spotify с помощью Python. Это молниеносно для пользователя и данных плейлиста, но, следуя инструкциям Spotipy о том, как получить треки из плейлиста, я обнаружил, что ответ крайне медленный.

Время ожидания для треков примерно пропорционально длине плейлиста в треках. Я думаю, что это связано с неэффективностью того, как библиотека spotipy упаковывает и отправляет запросы.

Кто-нибудь когда-нибудь сталкивался с подобным горлышком бутылки в отношении получения треков и скорости?

Я был бы очень признателен.. наш проект как бы зависит от этого на данный момент.

1 ответ

Spotipy совсем не медленный.

В любом случае, вы можете попробовать делать запросы самостоятельно.

import requests
import json

затем получите желаемую конечную точку: (см.: Справочник по конечной точке Spotify Web API)

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 скорость.

Другие вопросы по тегам