Spotipy - введите любое имя пользователя и запросите информацию для входа

Я пытаюсь настроить скрипт, который запускает воспроизведение Spotify при выборе этой опции через простое меню в терминале.

Дело в том, что я хочу, чтобы этот скрипт был динамическим, мне нужно ввести имя пользователя, и при перенаправлении на странице веб-авторизации Spotify запрашивать логин и пароль, а не спрашивать принятие скрипта python.

На данный момент у меня есть этот код:

import sys
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
import json
import os
import spotipy.util as util
from json.decoder import JSONDecodeError

os.environ['SPOTIPY_CLIENT_ID'] = 'b0g0000Myclientid000000'
os.environ['SPOTIPY_CLIENT_SECRET'] = 'b0g0000Myclientsecret000000'
os.environ['SPOTIPY_REDIRECT_URI'] = 'https://google.com/'

# Get the spotify username from the terminal
username = sys.argv[1]
scope = 'user-read-private user-read-email user-read-playback-state user-modify-playback-state'

try:
    token = util.prompt_for_user_token(username, scope)
except:
    os.remove(f".cache-{username}")
    token = util.prompt_for_user_token(username, scope)

# Creation of the spotify object
sp = spotipy.Spotify(auth=token)

user = sp.current_user()

try:
    devices = sp.devices()
    deviceID = devices['devices'][0]['id']
except:
    print("No devices found...")

print(json.dumps(devices, sort_keys=True, indent=4))
playback = sp.current_user_playing_track()

if playback != None:
    current_artist = playback['item']['artists'][0]['name']
    current_track_name = playback['item']['name']
    print('************** Currently playing : ************** \n Artist:        ' + current_artist + '\n Track name:    ' + current_track_name)
track = sp.search(playback, 1, 0, 'track')
# print(json.dumps(track, sort_keys=True, indent=4))

# For testing purposes : print(json.dumps(playback, sort_keys=True, indent=4))

while True:
    print("\n\nWhat to do ?\n- Play spotify [0]:\n- Play a specific song [1]:\n- Quit [q]")
    menu_answer = input()

    if menu_answer == '0':
        is_playing = playback['is_playing']
        if is_playing == False:
            sp.start_playback()
            print("Started playing the playback (Current song: " + current_track_name + " by " + current_artist + ")")
        else:
            print("Already playing ;)")
    elif menu_answer == '1':
        print("we will play a song")
    elif menu_answer == 'q':
        break
    else:
        pass

Помощь очень ценится!


person unterfield    schedule 09.05.2018    source источник


Ответы (1)


Невозможно реализовать поток OAuth для авторизации пользователей без отображения им экрана для авторизации вашего скрипта. Это необходимо сделать для любого нового пользователя.

Однако вы можете сохранить учетные данные для пользователей и использовать их для получения данных авторизации для того, кто уже авторизовал ваш скрипт.

E.g.

  1. Пользователь вводит имя пользователя, и у вас нет сохраненных учетных данных, поэтому вы отображаете экран авторизации, и они принимают. Вы получаете код авторизации и код обновления и сохраняете их где-нибудь вместе с идентификатором пользователя.
  2. Когда пользователь вводит имя пользователя и у вас есть сохраненные учетные данные, вам не нужно отображать экран авторизации, поскольку они уже авторизовали ваш скрипт. Вы можете сразу отобразить свое меню с параметрами для управления воспроизведением.

Дайте мне знать, если я вообще неправильно понял вопрос.

person Rach Sharp    schedule 14.05.2018
comment
Привет, спасибо за ваш ответ и извините за задержку. После использования нескольких учетных записей я увидел, что был совершенно глуп, потому что мы не можем получить доступ к учетной записи из другой, поэтому то, что я пытался сделать, было бессмысленным. Spotipy определяет, какая учетная запись зарегистрирована на машине, и, если мы не вошли в систему Spotify, перед авторизацией приложения предлагает нам ввести имя пользователя и пароль. - person unterfield; 04.06.2018