Получение данных из словаря списков из запроса Spotify API - PullRequest
0 голосов
/ 02 июня 2018

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

tracks_response = spotify.current_user_saved_tracks(limit=1, offset=0)
print(tracks_response) 

, я получаю что-то вроде этого:

 {'href': 'https://api.spotify.com/v1/me/tracks?offset=0&limit=1', 'items': 
 [{'added_at': '2018-05-31T18:59:42Z', 'track': {'album': {'album_type': 
 'album', 'artists': [{'external_urls': {'spotify': 
 'https://open.spotify.com/artist/4AA8eXtzqh5ykxtafLaPOi'}, 'href': 
 'https://api.spotify.com/v1/artists/4AA8eXtzqh5ykxtafLaPOi', 'id': 
 '4AA8eXtzqh5ykxtafLaPOi', 'name': 'What So Not', 'type': 'artist', 'uri': 
 'spotify:artist:4AA8eXtzqh5ykxtafLaPOi'}], 'available_markets': [...], 
 'external_urls': {'spotify': 
 'https://open.spotify.com/album/3XaUNjcSJ6oyhoaFTqRbLb'}, 'href': 
 'https://api.spotify.com/v1/albums/3XaUNjcSJ6oyhoaFTqRbLb', 'id': 
 '3XaUNjcSJ6oyhoaFTqRbLb', 'images': [{'height': 640, 'url': 
 'https://i.scdn.co/image/3a6afacbac6870ec6025694f4f7d931fe3d0e383', 
 'width': 640}, {'height': 300, 'url': 
 'https://i.scdn.co/image/64e4b200281890ec57c239591666b31eba03e6b8', 
 'width': 300}, {'height': 64, 'url': 
 'https://i.scdn.co/image/f217a511095e82b4a34dbaa379e2d58b4f9fe9ef', 
 'width': 64}], 'name': 'Divide & Conquer (Remixes)', 'release_date': '2017- 
  06-16', 'release_date_precision': 'day', 'type': 'album', 'uri': 
 'spotify:album:3XaUNjcSJ6oyhoaFTqRbLb'}, 'artists': [{'external_urls': 
 {'spotify': 'https://open.spotify.com/artist/4AA8eXtzqh5ykxtafLaPOi'}, 
 'href': 'https://api.spotify.com/v1/artists/4AA8eXtzqh5ykxtafLaPOi', 'id': 
 '4AA8eXtzqh5ykxtafLaPOi', 'name': 'What So Not', 'type': 'artist', 'uri': 
 'spotify:artist:4AA8eXtzqh5ykxtafLaPOi'}, {'external_urls': {'spotify': 
 'https://open.spotify.com/artist/6sUbCA1obWzdoJ1FM3I9Ks'}, 'href': 
 'https://api.spotify.com/v1/artists/6sUbCA1obWzdoJ1FM3I9Ks', 'id': 
 '6sUbCA1obWzdoJ1FM3I9Ks', 'name': 'GANZ', 'type': 'artist', 'uri':  
 'spotify:artist:6sUbCA1obWzdoJ1FM3I9Ks'}, {'external_urls': {'spotify': 
 'https://open.spotify.com/artist/2sphpXGg1u97VSzbm5gR2P'}, 'href': 
 'https://api.spotify.com/v1/artists/2sphpXGg1u97VSzbm5gR2P', 'id': 
 '2sphpXGg1u97VSzbm5gR2P', 'name': 'JOY.', 'type': 'artist', 'uri': 
 'spotify:artist:2sphpXGg1u97VSzbm5gR2P'}, {'external_urls': {'spotify': 
 'https://open.spotify.com/artist/3C1R0cMeIfSFxpAFxCh5yQ'}, 'href': 
 'https://api.spotify.com/v1/artists/3C1R0cMeIfSFxpAFxCh5yQ', 'id': 
 '3C1R0cMeIfSFxpAFxCh5yQ', 'name': 'Slow Hours', 'type': 'artist', 'uri': 
 'spotify:artist:3C1R0cMeIfSFxpAFxCh5yQ'}], 'available_markets': [...], 
 'disc_number': 1, 'duration_ms': 272999, 'explicit': False, 'external_ids': 
 {'isrc': 'AUDCB1600994'}, 'external_urls': {'spotify': 
 'https://open.spotify.com/track/3c5Og78p3plOCBbNLg5K9L'}, 'href': 
 'https://api.spotify.com/v1/tracks/3c5Og78p3plOCBbNLg5K9L', 'id': 
 '3c5Og78p3plOCBbNLg5K9L', 'name': 'Lone (feat. JOY.) - Slow Hours Remix', 
 'popularity': 53, 'preview_url': 'https://p.scdn.co/mp3- 
 preview/cc865407083054f5be6f1adbe9eb93295e53c670? 
 cid=6bf27521c6ff4eb2bf72698c63a1d9e8', 'track_number': 2, 'type': 'track', 
 'uri': 'spotify:track:3c5Og78p3plOCBbNLg5K9L'}}], 'limit': 1, 'next': 
 'https://api.spotify.com/v1/me/tracks?offset=1&limit=1', 'offset': 0, 
 'previous': None, 'total': 1369}

Я думал, что это обычный словарь, поэтому я легко смогу получить Исполнителя, используя обычный словарь.синтаксис типа

 print(tracks_response['items']['track']['artists']['name'])

Но когда я звоню, я получаю сообщение об ошибке:

 TypeError: list indices must be integers or slices, not str

Но если я изменяю вызов на:

 print(tracks_response['items'])

, я получаю:

 [{'added_at': '2018-05-31T18:59:42Z', 'track': {'album': {'album_type': 
 'album', 'artists': [{'external_urls': {'spotify': 
 'https://open.spotify.com/artist/4AA8eXtzqh5ykxtafLaPOi'}, 'href': 
 'https://api.spotify.com/v1/artists/4AA8eXtzqh5ykxtafLaPOi', 'id': 
 '4AA8eXtzqh5ykxtafLaPOi', 'name': 'What So Not',...

То же самое, что и выше, но начинается с клавиши 'items' ... Похоже, что остальная часть словаря - это списки с парами ключ-значение в них, как бы я получитьданные, которые я хочу получить из них?

Любая помощь приветствуется, спасибо.

1 Ответ

0 голосов
/ 02 июня 2018

На самом деле tracks_response['items'] возвращает массив.Внимательно посмотрите на ответ. Вам нужно перебрать список элементов, чтобы получить объект «track».Если вам нужно напечатать имя каждого художника из списка художников, код будет,

for item in tracks_response['items']:
    for artist in item['track']['album']['artists']:
         print(artist['name'])   
...