Spotipy - ввод любого имени пользователя и запрос информации для входа - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь настроить скрипт, который запускает воспроизведение 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

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

1 Ответ

0 голосов
/ 14 мая 2018

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

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

* 1005 Е.Г. *

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

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

...