Я пытаюсь реализовать простой python клиент для API Spotify. Согласно Руководству по авторизации Spotify *1002* приложение может быть авторизовано двумя способами:
- Авторизация приложения: Spotify авторизует ваше приложение для доступа к платформе Spotify (API, SDKs). и виджеты).
- Авторизация пользователя: Spotify, как и пользователь, предоставляет вашему приложению разрешение на доступ и / или изменение собственных данных пользователя. Для получения информации об Аутентификации пользователя посмотрите Аутентификацию пользователя с OAuth 2.0. Для вызова Spotify Web API требуется авторизация пользователя вашего приложения. Чтобы получить эту авторизацию, ваше приложение генерирует вызов к конечной точке службы учетных записей / авторизации Spotify, передавая список областей, для которых запрашивается разрешение.
ПОЛНОМОЧИЯ КЛИЕНТА
В моей первой попытке использовалась авторизация приложения с использованием модуля oauth2 из Spotipy , поскольку для него не требуется передавать маркер, а только идентификатор клиента и секрет клиента, которые принадлежат разработчику приложения.
client.py
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
class SpotifyWrapper(spotipy.Spotify):
def category_playlists(self, category, limit=50, offset=0):
return self._get('browse/categories/%s/playlists' % category,
limit=limit,
offset=offset)
def get_api_client():
# create a client authentication request
client_cred = SpotifyClientCredentials(
client_id=DevelopmentConfig.SPOTIFY_CLIENT_ID,
client_secret=DevelopmentConfig.SPOTIFY_CLIENT_SECRET
)
# create a spotify client with a bearer token,
# dynamically re-created if necessary
return SpotifyWrapper(auth=client_cred.get_access_token())
Тогда я бы импортировал и объявил это здесь:
spotify_utilities.py
from app.resources.spotify.client import get_api_client
sp = get_api_client()
И чтобы отправлять запросы и получать плейлисты пользователей, передайте его так:
def get_user_playlist(username, sp):
ids=[]
playlists = sp.user_playlists(username)
for playlist in playlists['items']:
ids.append(playlist['id'])
print("Name: {}, Number of songs: {}, Playlist ID: {} ".
format(playlist['name'].encode('utf8'),
playlist['tracks']['total'],
playlist['id']))
return ids
Это работает и будет получать пользовательский контент, , где пользователь является разработчиком приложения. .
IMPLICIT FLOW
Теперь я хочу перейти к Implicit Flow, посредством чего приложение запрашивает ЛЮБОГО пользователя, который использует для доступа и областей, и для этого потребуется токен.
Как только я получу токен, используя Javascript, я знаю, что могу использовать его для получения пользовательских данных, попадающих в API с помощью простых запросов:
GET_USER_PROFILE_ENDPOINT = 'https://api.spotify.com/v1/users/{user_id}'
GET_USER_PLAYLISTS_ENDPOINT = 'https://api.spotify.com/v1/users/{user_id}/playlists'
def get_user_profile(token, user_id):
url = GET_USER_PROFILE_ENDPOINT.format(id=user_id)
resp = requests.get(url, headers={"Authorization": "Bearer {}".format(token)})
print (len(resp.json()))
return resp.json()
def get_user_playlists(token, user_id):
url = GET_USER_PLAYLISTS_ENDPOINT..format(id=user_id)
resp = requests.get(url, headers={"Authorization": "Bearer {}".format(token)})
print (len(resp.json()))
return resp.json()
, но по порядку чтобы сначала получить (и изменить) пользовательские данные, мне нужно использовать этот токен для получения идентификатора пользователя .
Кроме того, в следующем примере формы Spotipy docs пользователь должен предоставить свое имя пользователя на терминале:
if __name__ == '__main__':
if len(sys.argv) > 1:
username = sys.argv[1]
else:
print("Whoops, need your username!")
print("usage: python user_playlists.py [username]")
sys.exit()
token = util.prompt_for_user_token(username)
if token:
sp = spotipy.Spotify(auth=token)
playlists = sp.user_playlists(username)
После прочтения документов из Spotify и Spotify, некоторые вещи, которые до сих пор не ясны:
Можно ли получить этот идентификатор пользователя только путем передачи токена?
Должен ли пользователь приложения обязательно указывать свой Spotify username через форму в браузере, помимо авторизации приложения при запросе аутентификации?
Возможно ли настроить оболочку выше и реализовать клиент, который рассматривает параметры, необходимые для неявного потока? Будет просто spotify = spotipy.Spotify(auth=token)
работать и получать текущие данные usr?