【发布时间】:2022-10-08 03:01:22
【问题描述】:
我一直在使用 Spotipy 作为我的第一个中间项目,当我从我的帐户中获取数据时,它给了我一堆 JSON 格式的数据。有可能我只是做错了,但据我所见,使用 Web API 从 Spotify 用户那里获取超过 50 个给定项目真的很困难。这个限制很容易通过,只需使用多个带有偏移量的 API 调用。
我的目标是拥有一本可读性强的字典,这样我就可以获取我想要的任何给定数据。这是我到目前为止的字典设置,我正计划把它做得更大
spot_obj = spotipy.Spotify(auth=token_info['access_token'])
spot_dict['user'] = spot_obj.current_user()
spot_dict['liked_songs'] = spot_obj.current_user_saved_tracks()
spot_dict['playlists'] = spot_obj.current_user_playlists()
spot_dict['saved_albums'] = spot_obj.current_user_saved_albums()
spot_dict['num_of_liked_songs'] = spot_obj.current_user_saved_tracks()['total']
但是,当我尝试抓取 50 多个项目时,通过创建一个带有偏移量的 for 循环,新编辑的 JSON 文件具有不同的格式,因此 51 多首歌曲和其他歌曲都在其他地方。以下是此处响应中代码的编辑版本:Limits for Spotipy?
tracks = []
for x in range(1, 10):
response = spot_obj.current_user_saved_tracks(limit=50,offset=x * 50)
if len(response) == 0:
break
tracks.append(response)
return tracks
这里的问题是tracks.append(response) 创建了一个新列表(数组?它由[] 分隔)。这样,如果我想进行第二次迭代,我需要创建一个新的 for 循环来访问它。这确实效率低下且笨拙。 (if 语句也永远不会成为真的,因为 Spotify 总是会返回一些东西,只是这些字段会是空的)
本质上,我是在询问如何更轻松地清理 JSON 数据的方向,但我不确定内置的 json 将如何提供帮助。我确定它会在某个地方,但我认为这根本不是编码问题,Python 将所有这些视为字典、列表、字符串等。最好的是一个易于访问的模块,它可以通过这个进行解析,并且更容易绕过“50 限制”。我找不到任何可以做到这一点的东西,如果我弄清楚了,我会很高兴自己制作并发布它,我只需要一个指针
这就是我一直在格式化我想要的数据的方式,这就是为什么我需要在一个地方访问所有数据
song_list = []
for track in spot_dict['liked_songs']['items']:
song = track['track']['name']
artist = track['track']['album']['artists'][0]['name']
album = track['track']['album']['name']
release = track['track']['album']['release_date']
song_tup = (song, artist, album, release)
song_list.append(song_tup)
【问题讨论】:
标签: python json spotify spotipy