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

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

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

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

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

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


person Lewis Renfrew    schedule 12.03.2018    source источник
comment
Можете ли вы привести конкретные примеры, которые работают медленнее, чем вы ожидаете? и какова ваша ожидаемая скорость для этих запросов? В противном случае его сложно оценить. Вы используете примеры документации как есть или изменяете их вообще? Вы пробовали использовать такой инструмент, как wirehark, для просмотра базовых HTTP-запросов? Вы можете увидеть, существует ли задержка в библиотеке или веб-службе Spotify.   -  person Paul Rooney    schedule 13.03.2018


Ответы (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.

person 8-Bit Borges    schedule 13.03.2018