Spotipy доступ к трекам из публичного плейлиста без аутентификации

Я хочу поискать в публичных плейлистах и ​​найти треки. Пока у меня есть код, который может получать названия плейлистов, но не треков:

import spotipy
import sys
sp = spotipy.Spotify()

if len(sys.argv) > 1:
    artist_name = ' '.join(sys.argv[1:])
    results = sp.search(q=artist_name, limit=20, type='playlist')
    for i, t in enumerate(results['playlists']['items']):
        print(i,' ', t['name'])

Будет напечатан список первых 20 имен общедоступных плейлистов с учетом условия поиска. Я хочу также распечатать треки в каждом плейлисте! Я думал, что это будет просто, но после поиска кажется, что единственный способ - через аутентификацию, которая мне не нужна. Эти треки общедоступны, так зачем мне проходить аутентификацию, чтобы перечислять треки ?! Я так думаю по двум причинам. 1) если я добавлю (в цикле):

print t['tracks']

ответ на запрос говорит: «Этот запрос требует аутентификации». Кроме того, я нашел этот пример в документации Spotipy, что мне и нужно, но только для аутентифицированных пользователей. https://github.com/plamere/spotipy/blob/dd021c4087981b583ef0f2b276cd43bbc6fd429f/examples/user_playlists_contents.py Итак, есть ли способ просматривать треки без аутентификации в качестве владельца этого плейлиста? Открытие настольного приложения Spotify может быстро показать всем, что треки общедоступных плейлистов полностью доступны для поиска и просмотра, поэтому это должно быть возможно. Прошу прощения, если это чрезвычайно конкретный вопрос, но я не уверен, где еще спросить, поскольку я впервые использую этот API или вообще такой API. Я провел довольно много исследований по этой теме и теперь смирился с просьбой о помощи.


person skex    schedule 07.07.2016    source источник
comment
Вам необходимо пройти аутентификацию, так как вам нужно быть участником Spotify Premium, чтобы использовать их API.   -  person heinst    schedule 07.07.2016
comment
В приведенном выше коде, который я опубликовал (который просто печатает имена плейлистов с учетом поискового запроса), аутентификация НЕ используется. Я говорю об аутентификации, при которой вы даете идентификатор пользователя и возвращаете URL-адрес перенаправления. Я считаю, что, прочитав ссылку, которую я разместил выше, вы должны аутентифицироваться как владелец этого плейлиста, чтобы читать треки этого плейлиста так, как они это делали.   -  person skex    schedule 07.07.2016
comment
Почему вы спрашиваете нас о том, почему Spotify требует аутентификации в их API? Вы просто разглагольствуете?   -  person Two-Bit Alchemist    schedule 07.07.2016
comment
Нет, у нас должно быть недоразумение. Некоторые из их API не требуют аутентификации (например, поиск и т.п.), а некоторые (например, доступ к ЧАСТНЫМ плейлистам или изменение вашей личной библиотеки - что имеет смысл). Я спрашиваю, КАК читать общедоступные треки из общедоступного плейлиста без аутентификации этого пользователя, потому что это должно быть возможно. Если вы прочтете мой пост, то увидите, что я успешно выполнил поиск в общедоступных плейлистах, я просто не знаю, как получить доступ к трекам без аутентификации.   -  person skex    schedule 07.07.2016
comment
Я не нашел ничего, что явно говорило бы, что эта функция должна быть аутентифицирована, просто все примеры, похоже, обращаются только к собственным трекам плейлиста, а не к общедоступным трекам плейлиста. Я не нашел примера, который пытался бы достичь того, о чем я говорю. Если он находится в общедоступном пространстве поиска, и я могу получить доступ к названиям этих плейлистов, почему я не могу получить доступ к трекам? Они общедоступны и доступны для поиска в любом приложении Spotify. Кажется логичным, что это возможно, и я надеялся, что, возможно, кто-то, имеющий опыт работы с API, понимает.   -  person skex    schedule 07.07.2016
comment
@heinst Я видел это, я просто подумал, что, может быть, это было также для включения частных плейлистов, поскольку это единственная причина, по которой информация о плейлистах не будет общедоступной. Если это просто невозможно, я понимаю, но я просто надеялся получить подтверждение от кого-то, кто знаком с AP1. Для меня не имеет никакого смысла, что он не будет общедоступным через API, учитывая, что он уже общедоступен.   -  person skex    schedule 07.07.2016


Ответы (1)


Это типичная путаница с OAuth. Здесь потенциально задействованы три стороны.

  • Ваше приложение (этот крошечный фрагмент кода Python выше)
  • Spotify Web API
  • Пользователь Spotify

Если ваше приложение хотело найти и удалить плейлисты пользователя Spotify, начинающиеся с X, Spotify Web API потребовал бы, чтобы ваше приложение сначала вежливо запросило у пользователя разрешение на это. Кажется естественным ...

В этом сценарии ваше приложение Playlist X Deleter сначала должно пройти аутентификацию, чтобы доказать, что это действительно Playlist X Deleter. Затем пользователю необходимо пройти аутентификацию в Spotify, чтобы доказать, что это действительно пользователь, для которого средство удаления плейлиста X хотел удалить плейлисты. Затем пользователь, который, как мы теперь знаем, должен авторизовать Playlist X Deleter, теперь мы знаем, кто он такой, чтобы удалять плейлисты.

Итак, у вас есть приложение, которое выполняет аутентификацию, и пользователь, который аутентифицируется.

Для общедоступной информации нет очевидной причины, по которой пользователю необходимо пройти аутентификацию. Также нет очевидной причины, по которой приложение нуждается в аутентификации. Однако Spotify решил, что приложение должно пройти аутентификацию, чтобы получить информацию об общедоступном плейлисте. Может быть, он может отключить плохих пользователей, которые используют слишком много данных плейлистов или иным образом злоупотребляют API.

В этом случае, поскольку нет задействованных частных плейлистов и есть только права на чтение, пользователю не нужно ничего авторизовать. В мире OAuth это называется потоком учетных данных клиента https://tools.ietf.org/html/rfc6749#section-4.4

Перейдите в консоль разработчика и создайте приложение для получения client_id и client_secret:

https://developer.spotify.com/my-applications/#!/applications/create

Затем следуйте:

https://developer.spotify.com/web-api/authorization-guide/#client_credentials_flow

или в вашем случае укажите client_id и client_secret для Spotify через SpotifyClientCredentials

документ: http://spotipy.readthedocs.io/en/latest/#spotipy.oauth2.SpotifyClientCredentials

пример фрагмента (который ничего не заполняет): https://github.com/plamere/spotipy/blob/master/examples/client_credentials_flow.py

person jooon    schedule 12.07.2016