【发布时间】:2019-09-05 15:29:38
【问题描述】:
我想创建一个函数,使用 Spotipy 从 Spotify 播放列表中编译曲目 URI 列表。我写的函数现在可以工作了,它只是返回了太多的信息,我对如何过滤掉我想要的东西感到困惑。
我尝试自己索引结果并弄乱了 sp.the user_playlist_tracks() 函数中的字段参数,但似乎没有任何东西只返回轨道 URI。
以下函数从 'playlist_id' 参数指定的 Spotify 播放列表中抓取任何曲目:
def get_playlist_tracks(auth_client, username, playlist_id):
# Ref - https://stackoverflow.com/questions/39086287/spotipy-how-to-read-more-than-100-tracks-from-a-playlist?noredirect=1&lq=1
results = sp.user_playlist_tracks(username,playlist_id)
tracks = results['items']
while results['next']:
results = sp.next(results)
tracks.extend(results['items'])
return tracks
函数返回 JSON 格式的对象列表:
[{'album_type': 'album', 'artists': [{'external_urls': {'spotify': 'https://open.spotify.com/artist/4WVDlzQCHAIWzBP5iZwuOJ'}, 'href': 'https://api.spotify.com/v1/artists/4WVDlzQCHAIWzBP5iZwuOJ', 'id': '4WVDlzQCHAIWzBP5iZwuOJ', 'name': 'Sybyr', 'type': 'artist', 'uri': 'spotify:artist:4WVDlzQCHAIWzBP5iZwuOJ'}], 'available_markets': ['AD', 'AE', 'AR', 'AT', 'AU', 'BE', 'BG', 'BH', 'BO', 'BR', 'CA', 'CH', 'CL', 'CO', 'CR', 'CY', 'CZ', 'DE', 'DK', 'DO', 'DZ', 'EC', 'EE', 'EG', 'ES', 'FI', 'FR', 'GB', 'GR', 'GT', 'HK', 'HN', 'HU', 'ID', 'IE', 'IL', 'IN', 'IS', 'IT', 'JO', 'JP', 'KW', 'LB', 'LI', 'LT', 'LU', 'LV', 'MA', 'MC', 'MT', 'MX', 'MY', 'NI', 'NL', 'NO', 'NZ', 'OM', 'PA', 'PE', 'PH', 'PL', 'PS', 'PT', 'PY', 'QA', 'RO', 'SA', 'SE', 'SG', 'SK', 'SV', 'TH', 'TN', 'TR', 'TW', 'US', 'UY', 'VN', 'ZA'], 'external_urls': {'spotify': 'https://open.spotify.com/album/4c64we435X1d5Bz6YAgrOZ'}, 'href': 'https://api.spotify.com/v1/albums/4c64we435X1d5Bz6YAgrOZ', 'id': '4c64we435X1d5Bz6YAgrOZ', 'images': [{'height': 640, 'url': 'https://i.scdn.co/image/e95d7e36e91eebde585841005d5e384b5a751c9f', 'width': 640}, {'height': 300, 'url': 'https://i.scdn.co/image/0fb974f445a9e757456f95875621b471f36e3601', 'width': 300}, {'height': 64, 'url': 'https://i.scdn.co/image/72435c83decf6b49ce5f117ea86d442245c67b97', 'width': 64}], 'name': 'Anti-World', 'release_date': '2016-03-11', 'release_date_precision': 'day', 'total_tracks': 19, 'type': 'album', 'uri': 'spotify:album:4c64we435X1d5Bz6YAgrOZ'}, 'artists': [{'external_urls': {'spotify': 'https://open.spotify.com/artist/4WVDlzQCHAIWzBP5iZwuOJ'}, 'href': 'https://api.spotify.com/v1/artists/4WVDlzQCHAIWzBP5iZwuOJ', 'id': '4WVDlzQCHAIWzBP5iZwuOJ', 'name': 'Sybyr', 'type': 'artist', 'uri': 'spotify:artist:4WVDlzQCHAIWzBP5iZwuOJ'}], 'available_markets': ['AD', 'AE', 'AR', 'AT', 'AU', 'BE', 'BG', 'BH', 'BO', 'BR', 'CA', 'CH', 'CL', 'CO', 'CR', 'CY', 'CZ', 'DE', 'DK', 'DO', 'DZ', 'EC', 'EE', 'EG', 'ES', 'FI', 'FR', 'GB', 'GR', 'GT', 'HK', 'HN', 'HU', 'ID', 'IE', 'IL', 'IN', 'IS', 'IT', 'JO', 'JP', 'KW', 'LB', 'LI', 'LT', 'LU', 'LV', 'MA', 'MC', 'MT', 'MX', 'MY', 'NI', 'NL', 'NO', 'NZ', 'OM', 'PA', 'PE', 'PH', 'PL', 'PS', 'PT', 'PY', 'QA', 'RO', 'SA', 'SE', 'SG', 'SK', 'SV', 'TH', 'TN', 'TR', 'TW', 'US', 'UY', 'VN', 'ZA'], 'disc_number': 1, 'duration_ms': 196257, 'episode': False, 'explicit': True, 'external_ids': {'isrc': 'QM42K1611819'}, 'external_urls': {'spotify': 'https://open.spotify.com/track/1t3hLzPZV1BBl9BoQXPHVg'}, 'href': 'https://api.spotify.com/v1/tracks/1t3hLzPZV1BBl9BoQXPHVg', 'id': '1t3hLzPZV1BBl9BoQXPHVg', 'is_local': False, 'name': 'I Like Being', 'popularity': 41, 'preview_url': 'https://p.scdn.co/mp3-preview/d50e51258de77503b0944764adcc67df48e45a5d?cid=de8dcc8f79484e728e1c16279585f8a1', 'track': True, 'track_number': 11, 'type': 'track', 'uri': 'spotify:track:1t3hLzPZV1BBl9BoQXPHVg'}, 'video_thumbnail': {'url': None}}, ....]
有谁知道如何索引返回结果以仅获取轨道 URI?或者知道如何使用 field 参数只抓取轨道 URI?我查看了 Spotify API 和 Spotipy 文档,但似乎没有任何东西可以回答这个具体问题。
【问题讨论】:
-
所以给定播放列表 ID,您希望函数返回仅包含此字段的列表? 'spotify': 'open.spotify.com/artist/4WVDlzQCHAIWzBP5iZwuOJ'
-
这是艺术家 URI,我有兴趣获取特定的曲目 URI(即 'uri': 'spotify:track:1t3hLzPZV1BBl9BoQXPHVg')
标签: python json spotify spotipy