Spotipy не может выполнить функцию user_playlists()Python

Программы на Python
Ответить
Anonymous
 Spotipy не может выполнить функцию user_playlists()

Сообщение Anonymous »

Я работаю над приложением-анализатором Spotify, и одной из данных, которые я получаю от пользователя, является user_id, с помощью которого я пытаюсь получить список словарей, содержащих данные о плейлисте пользователя, такие как имя плейлиста и идентификатор плейлиста. >
Весь код находится в классе со следующим конструктором

Код: Выделить всё

def __init__(self):
# Load credentials from environment variables
self._spotify_client_id = os.getenv("SPOTIFY_CLIENT_ID")
self._spotify_client_secret = os.getenv("SPOTIFY_CLIENT_SECRET")
self._spotify_redirect_uri = os.getenv("SPOTIFY_REDIRECT_URI")
self._scope = "user-top-read user-read-recently-played user-library-read playlist-read-private playlist-read-collaborative"
# Check if api keys are available
if not self._spotify_client_id or not self._spotify_client_secret:
raise ValueError("Spotify client ID and secret must be set in the environment variables.")
# Authenticate with Spotify using OAuth2
self._sp = spotipy.Spotify(auth_manager=SpotifyOAuth(
client_id=self._spotify_client_id,
client_secret=self._spotify_client_secret,
redirect_uri=self._spotify_redirect_uri,
scope=self._scope,
cache_path= os.path.join(os.getenv("SPOTIFY_CACHE_PATH") , ".cache")
))
#Private variables
self._user_id = ""
self._user_name = ""
self._Playlist_Details = []
self._current_playlist_content = []
self._liked_playlist_content = []
здесь при необходимости частные переменные обновляются с помощью методов класса.
перед запуском get_List_of_playlist() мы запускаем функцию для получите user_id и user_name и назначьте их частным переменным класса, которые инициализируются в конструкторе.
Функция получения user_id выглядит следующим образом:

Код: Выделить всё

def get_user_id(self):
"""
Fetch the current authenticated user's Spotify user ID.

Args:
sp: Spotipy client object.

Returns:
str: The user's Spotify ID.
str: The user's Spotify display name.
"""
try:
user_profile = self._sp.current_user()
# print(f"\n user profile details from response: {user_profile}")
user_id = user_profile.get('id')
user_name = user_profile.get('display_name')
self._user_id = user_id
self._user_name = user_name
return self._user_id,self._user_name
except Exception as e:
print(f"Error fetching user ID: {e}")
return None
Функция получения сведений о плейлисте следующая:

Код: Выделить всё

    def get_list_of_playlist(self,limit = 20):
"""
Fetch playlists of a specific Spotify user.

Args:
limit (int): Number of playlists to fetch per request.

Returns:
list: A list of playlists with names and IDs.
"""
try:
print(f"\nuser_id : {self._user_id}")
results = self._sp.user_playlists(user=self._user_id, limit=limit)
print(results)
playlists = [
{'name': item['name'], 'id': item['id']}
for item in results['items']
]
print(playlists)
#update class variable
self._Playlist_Details = playlists
return playlists
except Exception as e:
print(f"Error fetching user playlists:  {e}")
return []
Формат возврата для get_List_of_playlist() следующий:

Код: Выделить всё

[{"name":
,"id":}
{"name":,"id":}
{"name":,"id":}
.
.
.]
Код драйвера, который я использую, следующий:

Код: Выделить всё

sa.get_user_id()
list_of_playlists = sa.get_list_of_playlist()
print(f"\nLIST OF PLAYLISTS")
list_of_playlist_df = pd.DataFrame(list_of_playlists)
print(list_of_playlist_df)
но всякий раз, когда я пытаюсь получить выходные данные функции для списка воспроизведения с помощью кода драйвера, я получаю пустой ответ от Spotify.
вывод функции get_List_of_playlist():

Код: Выделить всё

user_id : 
{'href': 'https://api.spotify.com/v1/users//playlists?offset=0&limit=20', 'limit': 20, 'next': None, 'offset': 0, 'previous': None, 'total': 0, 'items': []}
[]

LIST OF PLAYLISTS
Empty DataFrame
Columns: []
Index: []
Я убедился, что у меня есть плейлисты в учетной записи, которую я использую для тестирования.
Я столкнулся с проблемой с API, поскольку он не работает. много раз выполнять такие задачи, как получение списка списка воспроизведения.
Это важная функция в моем коде, поскольку она заполняет self._Playlist_Details списком списка воспроизведения, и после этого я извлечет содержимое плейлиста с помощью функции get_playlist_content(self , playlist_id), которая вернет имя playlist_name из переменной self._Playlist_Details, соответствующее предоставленному playlist_id и содержимому списка воспроизведения.
Эти подробности будут переданы в save_user_data_csv(playlist_id), который сохранит содержимое списка воспроизведения в виде файла csv с именем playlist_name и соответствующим ему именем. content.
Функция получения содержимого плейлиста по идентификатору следующая:

Код: Выделить всё

    def get_playlist_content(self , playlist_id):
"""
Fetch the contents of a Spotify playlist by ID and return details like
song name, artist name, genre, and album name.

Args:
playlist_id (str): The Spotify playlist ID.

Returns:
list: A list of dictionaries containing song details.
"""
try:
self._results = self._sp.playlist_items(playlist_id, additional_types=('track',))
self._playlist_content = []
self._playlist_name = ""
for playlist in self._Playlist_Details:
if playlist['id'] == playlist_id:
self._playlist_name = playlist['name']
while self._results:
for item in self._results['items']:
track = item['track']
#extract details from track
self._song_name = track['name']
self._artist_name = track['artists'][0]['name']
self._artist_id = track['artists'][0]['id']
self._album_name = track['album']['name']
self._artist_info = self._sp.artist(self._artist_id)
self._genre = ', '.join(self._artist_info['genres']) if self._artist_info['genres'] else 'Unknown'
#append details to self._playlist_content
self._playlist_content.append({
'song_name': self._song_name,
'artist_name': self._artist_name,
'artist_id': self._artist_id,
'genre': self._genre,
'album_name': self._album_name
})
# Get the next page of results if available
self._results = self._sp.next(self._results) if self._results['next'] else None

self._current_playlist_content = self._playlist_content
#print(self._current_playlist_content)
return self._playlist_name , self._playlist_content
except Exception as e:
print(f"Error fetching playlist content: {e}")
return "",[]
Код драйвера функций:

Код: Выделить всё

playlist_id = input("\nEnter playlist ID: ")
playlist_name , playlist_content = sa.get_playlist_content(playlist_id=playlist_id)
# print(f"Current playlist content: {sa._current_playlist_content}")
print(f"\nPLAYLIST {playlist_name} CONTENT\n")
playlist_df = pd.DataFrame(playlist_content)
print(playlist_df)
print(f"\n\nSAVING {playlist_name} INTO A CSV FILE\n\n")
sa.save_user_data_csv(playlist_id= playlist_id)
print("\n\nSAVING LIKED SONGS FINISHED")
выход:

Код: Выделить всё

Enter playlist ID:

PLAYLIST  CONTENT
song_name    artist_name               artist_id                                              genre                                         album_name
0                                Schism           TOOL  2yEwvVSSSUkcLeSTNyHKh8  alternative metal, art rock, nu metal, post-gr...                                          Lateralus
1                         Forty Six & 2           TOOL  2yEwvVSSSUkcLeSTNyHKh8  alternative metal, art rock, nu metal, post-gr...                                              Ænima
2                               The Pot           TOOL  2yEwvVSSSUkcLeSTNyHKh8  alternative metal, art rock, nu metal, post-gr...                                        10,000 Days
3                                 Sober           TOOL  2yEwvVSSSUkcLeSTNyHKh8  alternative metal, art rock, nu metal, post-gr...                                           Undertow
4                             Stinkfist           TOOL  2yEwvVSSSUkcLeSTNyHKh8  alternative metal, art rock, nu metal, post-gr...                                              Ænima
5                             Vicarious           TOOL  2yEwvVSSSUkcLeSTNyHKh8  alternative metal, art rock, nu metal, post-gr...                                         10,000 Days

SAVING  INTO A CSV FILE

user_id :
{'href': 'https://api.spotify.com/v1/users//playlists?offset=0&limit=20', 'limit': 20, 'next': None, 'offset': 0, 'previous': None, 'total': 0, 'items': []}
[]
[]

 : None
An error occurred: Playlist with ID '' not found.

SAVING LIKED SONGS FINISHED
Вывод:
Мой код может извлекать содержимое плейлиста, но не может получить список плейлиста
для заполнения переменной self._Playlist_Details, которая мне нужно, чтобы функция сохранения CSV работала.
может ли кто-нибудь сказать мне, почему я не могу получить список плейлистов?
я изначально использовал current_user_playlists() функция, но она решила перестать работать аналогичным образом, поэтому я решил использовать функцию user_playlists() Spotipy, но даже она получает нулевой ответ от API Spotify.

Подробнее здесь: https://stackoverflow.com/questions/793 ... s-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»