Получение треков из плейлиста с использованием 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
скорость.