Поток аутентификации Spotify (Spotify API) - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь разрешить пользователям входить в систему с помощью Spotify ( с использованием библиотеки Spotipy ), чтобы обеспечить аутентификацию для создания списка воспроизведения на их учетной записи и заполнения списка воспроизведения. После того, как пользователь войдет в систему, я покажу список воспроизведения, который он только что создал, в шаблоне перенаправления через встроенный проигрыватель Spotify (используя идентификатор списка воспроизведения недавно созданного списка воспроизведения).

У меня есть поле для ввода формы в Мой шаблон HTML, который принимает данные от пользователя (его имя пользователя Spotify). У меня также есть список URI Spotify для треков, готовых для заполнения списка воспроизведения.

Я следовал Документация Spotipy относительно получения токена для пользователей для аутентификации следующим образом (я удалил свой клиент- id & secret) .. Я не уверен, почему это не работает:

import os
import spotipy
import spotipy.util as util
from json.decoder import JSONDecodeError
from datetime import date

@login_required
def save_playlist(request, data='Default_Data'):

    username = data.split('/')[0] #spotify username
    track_ids = data.split('/')[1:11] #list of spotify IDs for playlist tracks
    client_id =  '****'
    client_secret = '****'
    scope = 'playlist-modify-public, playlist-modify-private'
    redirect_uri = 'http://127.0.0.1:8000/save_playlist/'

    #check if username is already in cache, if not, create cache 
    try:
        token = util.prompt_for_user_token(username, 
            scope=scope,client_id=client_id, 
            client_secret=client_secret,redirect_uri=redirect_uri)
    except (AttributeError, JSONDecodeError):
        os.remove(f".cache-{username}")
        token = util.prompt_for_user_token(username, 
            scope=scope,client_id=client_id, 
            client_secret=client_secret,redirect_uri=redirect_uri)


    sp=spotipy.Spotify(auth=token)
    today = date.today()
    date_string = (str(today.day) + ' - ' + str(today.month) + ' - ' + str(today.year))

    #playlist title
    playlist_name = f"GENIE - " + username + ' | ' + date_string
    #create a new public playlist to be populated
    sp.user_playlist_create(username, name=playlist_name, public=True)
    #id of playlist we just created
    playlist_id = sp.current_user_playlists(limit=1)['items'][0]['id']
    #add playlist tracks to this playlist
    sp.user_playlist_add_tracks(username,playlist_id,tracks=track_ids)

    return render(request, 'blog/save_playlist.html', {'playlist_id':playlist_id})

Когда пользователь вводит свое имя пользователя и логины в Spotify, несколько windows продолжают появляться, а не один ( см терминал ниже). Я полагаю, что проблема заключается в получении токена.

вывод терминала при попытке входа в систему

Я установил URI перенаправления в консоли разработчика Spotify на быть таким же, как указано выше ('http://127.0.0.1: 8000 / save_playlist / ').

Заранее спасибо!

1 Ответ

1 голос
/ 26 марта 2020

Вместо использования Spotipy, быстрое решение - от go до https://pypi.org/project/spotify-token/, это сценарий Python, который может генерировать токен Spotify, если указаны имя пользователя и пароль Spotify.

С учетом вышесказанного, просто имейте в виду, что не все добровольно предоставят свои имя пользователя и пароль. Ура! * * 1006

...