从 Spotify API 请求的列表字典中获取数据
Getting data out of dictionary of lists from Spotify API request
嗨,我需要帮助使用 Spotipy 从对 Spotify API 的调用中获取正确的信息。我对 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' 键开始...看来字典的其余部分是其中包含键值对的列表,我将如何获取我的数据想要他们吗?
感谢任何帮助,
谢谢。
实际上tracks_response['items']
returns一个数组。仔细查看 reponse.You 必须迭代项目列表才能获得 'track' 对象。如果您需要从艺术家列表中打印每个艺术家的名字,代码将是,
for item in tracks_response['items']:
for artist in item['track']['album']['artists']:
print(artist['name'])
试试 R 中的 spotifyr。我对这两种语言都很陌生,一直在努力专注于学习 python,但是 spotifyr mod 更好,returns dataframes只需几行代码。 Spotipy 对我来说似乎一团糟,需要很多行代码和循环才能查看数据。
例如,在 spotifyr 中,您可以在数据框中查看艺术家每首歌曲的所有属性:
library(spotifyr)
library(tidyverse)
library(knitr)
client_id <- 'your_client_id_here'
client_secret <- 'your_client_secret_here'
Sys.setenv(SPOTIFY_CLIENT_ID = client_id)
Sys.setenv(SPOTIFY_CLIENT_SECRET = client_secret)
access_token <- get_spotify_access_token()
audio_features_df <- get_artist_audio_features('Artist_name_here')
仔细查看 the documentation,您似乎可以在很短的时间内使用 spotifyr 获取 spotpy 中所有内容的数据帧。希望这有帮助
嗨,我需要帮助使用 Spotipy 从对 Spotify API 的调用中获取正确的信息。我对 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' 键开始...看来字典的其余部分是其中包含键值对的列表,我将如何获取我的数据想要他们吗?
感谢任何帮助, 谢谢。
实际上tracks_response['items']
returns一个数组。仔细查看 reponse.You 必须迭代项目列表才能获得 'track' 对象。如果您需要从艺术家列表中打印每个艺术家的名字,代码将是,
for item in tracks_response['items']:
for artist in item['track']['album']['artists']:
print(artist['name'])
试试 R 中的 spotifyr。我对这两种语言都很陌生,一直在努力专注于学习 python,但是 spotifyr mod 更好,returns dataframes只需几行代码。 Spotipy 对我来说似乎一团糟,需要很多行代码和循环才能查看数据。
例如,在 spotifyr 中,您可以在数据框中查看艺术家每首歌曲的所有属性:
library(spotifyr)
library(tidyverse)
library(knitr)
client_id <- 'your_client_id_here'
client_secret <- 'your_client_secret_here'
Sys.setenv(SPOTIFY_CLIENT_ID = client_id)
Sys.setenv(SPOTIFY_CLIENT_SECRET = client_secret)
access_token <- get_spotify_access_token()
audio_features_df <- get_artist_audio_features('Artist_name_here')
仔细查看 the documentation,您似乎可以在很短的时间内使用 spotifyr 获取 spotpy 中所有内容的数据帧。希望这有帮助