Настройка учетных данных Spotify с помощью Spotipy

Я испытываю spotipy с Python 2.7.10, предустановленным на моем Mac 10.10, в частности [add_a_saved_track.py][1] Вот код, скопированный с github:

# Add tracks to 'Your Collection' of saved tracks

import pprint
import sys

import spotipy
import spotipy.util as util

scope = 'user-library-modify'

if len(sys.argv) > 2:
    username = sys.argv[1]
    tids = sys.argv[2:]
else:
    print("Usage: %s username track-id ..." % (sys.argv[0],))
    sys.exit()

token = util.prompt_for_user_token(username, scope)

if token:
    sp = spotipy.Spotify(auth=token)
    sp.trace = False
    results = sp.current_user_saved_tracks_add(tracks=tids)
    pprint.pprint(results)
else:
    print("Can't get token for", username)

Я зарегистрировал приложение на developer.spotify.com/my-applications и получил client_id и client_secret. Я немного не уверен насчет выбора redirect_uri, поэтому я установил его на " https://play.spotify.com/collection/songs"

Запустив это из терминала, я получаю сообщение об ошибке:

You need to set your Spotify API credentials. You can do this by
setting environment variables like so:
export SPOTIPY_CLIENT_ID='your-spotify-client-id'
export SPOTIPY_CLIENT_SECRET='your-spotify-client-secret'
export SPOTIPY_REDIRECT_URI='your-app-redirect-url'

Я поместил это в мой код с id, secret и url в виде строк, просто следуя импорту, но выше метода util.prompt_for_user_token.

Это вызвало трассировку:

File "add-track.py", line 8
export SPOTIPY_CLIENT_ID='4f...6'
                       ^
SyntaxError: invalid syntax

Я заметил, что Text Wrangler не распознает "экспорт" как специальное слово. И я искал docs.python.org для "экспорта" и не нашел ничего полезного. Что такое экспорт? Как я использую это неправильно?

Затем я попытался передать client_id, client_secret и redirect_uri в качестве аргументов в методе util.prompt_for_user_token следующим образом:

util.prompt_for_user_token(username,scope,client_id='4f...6',client_secret='xxx...123',redirect_uri='https://play.spotify.com/collection/songs')

Когда я попробовал это, вот что происходит в терминале:

User authentication requires interaction with your
        web browser. Once you enter your credentials and
        give authorization, you will be redirected to
        a url.  Paste that url you were directed to to
        complete the authorization.


Opening https://accounts.spotify.com/authorize?scope=user-library-modify&redirect_uri=https%3A%2F%2Fplay.spotify.com%2Fcollection%2Fsongs&response_type=code&client_id=4f...6 in your browser


Enter the URL you were redirected to: 

Я вошел в https://play.spotify.com/collection/songs а затем получил эту трассировку:

Traceback (most recent call last):
File "add-track.py", line 21, in <module>
token = util.prompt_for_user_token(username, scope, client_id='4f...6', client_secret='xxx...123', redirect_uri='https://play.spotify.com/collection/songs')
File "/Library/Python/2.7/site-packages/spotipy/util.py", line 86, in prompt_for_user_token
token_info = sp_oauth.get_access_token(code)
File "/Library/Python/2.7/site-packages/spotipy/oauth2.py", line 210, in get_access_token
raise SpotifyOauthError(response.reason)
spotipy.oauth2.SpotifyOauthError: Bad Request

Кажется, я что-то упустил, возможно, нужно импортировать другую часть Spotipy или какой-то другой модуль python. Кажется, мне не хватает части, которая устанавливает учетные данные клиента. Как я могу это сделать? Я довольно новичок в этом (если это не было очевидно). Пожалуйста помоги.

ОБНОВЛЕНИЕ: я изменил redirect_uri на localhost:8888/callback. Это приводит к тому, что вкладка Firefox открывается с ошибкой - "невозможно подключиться к серверу". (Поскольку у меня нет запущенного сервера. Я думал об установке node.js, как в учебном пособии по Spotify Web API, но пока не сделал этого). Затем скрипт python просит меня скопировать и вставить URL, на который я был перенаправлен. Хотя FF не может открыть страницу, я заставил это работать, скопировав весь URL, включая "code=BG...", который следует за localhost:8888/callback? Я не уверен, что это идеальная установка, но, по крайней мере, она работает.

Имеет ли значение, если я настрою node.js или нет?

1 ответ

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

Для учетных данных вы можете установить их непосредственно в своем терминале, выполнив каждую из команд экспорта. Узнайте больше об экспорте здесь: https://www.cyberciti.biz/faq/linux-unix-shell-export-command/

Другие вопросы по тегам