Я знаю, что есть несколько способов сделать это, и я успешно получил все идентификаторы треков от одного исполнителя, используя дискографию пользовательского плейлиста. Но я хотел бы придумать программу Python, которая не полагается на уже существующий список воспроизведения пользователя.
Я пытаюсь извлечь идентификаторы треков из данных альбомов в файле .json, созданном, когда несколько альбомов передаются в sp.albums в Spotipy.
У меня есть этот список идентификаторов альбомов, который я передаю в sp.albums, это все записи одной из моих любимых групп, Fugazi.
album_ids = ['6ZyP2KPr2AkAbUWbsHmzEg','2bU6BaHfovn3rvxxxHSkWd','3tnzZhTTjRTExYc9odG0dt','1hatewdVYKH0xqEkdOLQLb','3kPxFCpws7ZyzI1cMME4dV','3zBQ2UZzCzgCnIkFYMOWlY','3QpmoxpWCacHLsZMhLn1ag','3ZnF1cPxlqB48RyLiecDnv','21wERoyBas2JCRCgysPDJX']
Затем я передаю этот список в sp.albums:
fugazi_songs = sp.albums(album_ids)
Файл .json для fugazi_songs слишком длинный, чтобы публиковать его здесь.
Но вот код с самого начала, в котором есть данные из первой песни из первого альбома:
{"albums": [{
"album_type": "album",
"artists": [{
"external_urls": {
"spotify": "https://open.spotify.com/artist/62sC6lUEWRjbFqXpMmOk4G"
},
"href": "https://api.spotify.com/v1/artists/62sC6lUEWRjbFqXpMmOk4G",
"id": "62sC6lUEWRjbFqXpMmOk4G",
"name": "Fugazi",
"type": "artist",
"uri": "spotify:artist:62sC6lUEWRjbFqXpMmOk4G"
}],
"available_markets": ["AD", "AE", "AL", "AR", "AT", "AU", "BA", "BE", "BG", "BH", "BO", "BR", "BY", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "DZ", "EC", "EE", "EG", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HR", "HU", "ID", "IE", "IL", "IN", "IS", "IT", "JO", "JP", "KW", "KZ", "LB", "LI", "LT", "LU", "LV", "MA", "MC", "MD", "ME", "MK", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "OM", "PA", "PE", "PH", "PL", "PS", "PT", "PY", "QA", "RO", "RS", "RU", "SA", "SE", "SG", "SI", "SK", "SV", "TH", "TN", "TR", "TW", "UA", "US", "UY", "VN", "XK", "ZA"],
"copyrights": [{
"text": "Dischord Records",
"type": "C"
}, {
"text": "Dischord Records",
"type": "P"
}],
"external_ids": {
"upc": "0643859181027"
},
"external_urls": {
"spotify": "https://open.spotify.com/album/6ZyP2KPr2AkAbUWbsHmzEg"
},
"genres": [],
"href": "https://api.spotify.com/v1/albums/6ZyP2KPr2AkAbUWbsHmzEg",
"id": "6ZyP2KPr2AkAbUWbsHmzEg",
"images": [{
"height": 640,
"url": "https://i.scdn.co/image/ab67616d0000b2737c6b218a0797b44ace3f237b",
"width": 640
}, {
"height": 300,
"url": "https://i.scdn.co/image/ab67616d00001e027c6b218a0797b44ace3f237b",
"width": 300
}, {
"height": 64,
"url": "https://i.scdn.co/image/ab67616d000048517c6b218a0797b44ace3f237b",
"width": 64
}],
"label": "Dischord Records",
"name": "First Demo",
"popularity": 32,
"release_date": "2014-11-18",
"release_date_precision": "day",
"total_tracks": 11,
"tracks": {
"href": "https://api.spotify.com/v1/albums/6ZyP2KPr2AkAbUWbsHmzEg/tracks?offset=0&limit=50",
"items": [{
"artists": [{
"external_urls": {
"spotify": "https://open.spotify.com/artist/62sC6lUEWRjbFqXpMmOk4G"
},
"href": "https://api.spotify.com/v1/artists/62sC6lUEWRjbFqXpMmOk4G",
"id": "62sC6lUEWRjbFqXpMmOk4G",
"name": "Fugazi",
"type": "artist",
"uri": "spotify:artist:62sC6lUEWRjbFqXpMmOk4G"
}],
"available_markets": ["AD", "AE", "AL", "AR", "AT", "AU", "BA", "BE", "BG", "BH", "BO", "BR", "BY", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "DZ", "EC", "EE", "EG", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HR", "HU", "ID", "IE", "IL", "IN", "IS", "IT", "JO", "JP", "KW", "KZ", "LB", "LI", "LT", "LU", "LV", "MA", "MC", "MD", "ME", "MK", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "OM", "PA", "PE", "PH", "PL", "PS", "PT", "PY", "QA", "RO", "RS", "RU", "SA", "SE", "SG", "SI", "SK", "SV", "TH", "TN", "TR", "TW", "UA", "US", "UY", "VN", "XK", "ZA"],
"disc_number": 1,
"duration_ms": 190459,
"explicit": false,
"external_urls": {
"spotify": "https://open.spotify.com/track/4PKl6Tt8YQaJIJmlnwELi7"
},
"href": "https://api.spotify.com/v1/tracks/4PKl6Tt8YQaJIJmlnwELi7",
"id": "4PKl6Tt8YQaJIJmlnwELi7",
"is_local": false,
"name": "Waiting Room - Demo",
"preview_url": "https://p.scdn.co/mp3-preview/d9d339d1c8426d37d8a8ed30a8eb6e4a10ee84d3?cid=ff4c1e3515504e8397510b8d452c0eab",
"track_number": 1,
"type": "track",
"uri": "spotify:track:4PKl6Tt8YQaJIJmlnwELi7"
},
Вот код первой песни со второго альбома, который идет сразу после окончания данных первого альбома:
{
"album_type": "album",
"artists": [{
"external_urls": {
"spotify": "https://open.spotify.com/artist/62sC6lUEWRjbFqXpMmOk4G"
},
"href": "https://api.spotify.com/v1/artists/62sC6lUEWRjbFqXpMmOk4G",
"id": "62sC6lUEWRjbFqXpMmOk4G",
"name": "Fugazi",
"type": "artist",
"uri": "spotify:artist:62sC6lUEWRjbFqXpMmOk4G"
}],
"available_markets": ["AD", "AE", "AL", "AR", "AT", "AU", "BA", "BE", "BG", "BH", "BO", "BR", "BY", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "DZ", "EC", "EE", "EG", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HR", "HU", "ID", "IE", "IL", "IN", "IS", "IT", "JO", "JP", "KW", "KZ", "LB", "LI", "LT", "LU", "LV", "MA", "MC", "MD", "ME", "MK", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "OM", "PA", "PE", "PH", "PL", "PS", "PT", "PY", "QA", "RO", "RS", "RU", "SA", "SE", "SG", "SI", "SK", "SV", "TH", "TN", "TR", "TW", "UA", "US", "UY", "VN", "XK", "ZA"],
"copyrights": [{
"text": "Dischord Records",
"type": "C"
}, {
"text": "Dischord Records",
"type": "P"
}],
"external_ids": {
"upc": "0718751962026"
},
"external_urls": {
"spotify": "https://open.spotify.com/album/3tnzZhTTjRTExYc9odG0dt"
},
"genres": [],
"href": "https://api.spotify.com/v1/albums/3tnzZhTTjRTExYc9odG0dt",
"id": "3tnzZhTTjRTExYc9odG0dt",
"images": [{
"height": 640,
"url": "https://i.scdn.co/image/ab67616d0000b273528034c2cfe590178ac6657a",
"width": 640
}, {
"height": 300,
"url": "https://i.scdn.co/image/ab67616d00001e02528034c2cfe590178ac6657a",
"width": 300
}, {
"height": 64,
"url": "https://i.scdn.co/image/ab67616d00004851528034c2cfe590178ac6657a",
"width": 64
}],
"label": "Dischord Records",
"name": "Instrument Soundtrack",
"popularity": 53,
"release_date": "1999",
"release_date_precision": "year",
"total_tracks": 18,
"tracks": {
"href": "https://api.spotify.com/v1/albums/3tnzZhTTjRTExYc9odG0dt/tracks?offset=0&limit=50",
"items": [{
"artists": [{
"external_urls": {
"spotify": "https://open.spotify.com/artist/62sC6lUEWRjbFqXpMmOk4G"
},
"href": "https://api.spotify.com/v1/artists/62sC6lUEWRjbFqXpMmOk4G",
"id": "62sC6lUEWRjbFqXpMmOk4G",
"name": "Fugazi",
"type": "artist",
"uri": "spotify:artist:62sC6lUEWRjbFqXpMmOk4G"
}],
"available_markets": ["AD", "AE", "AL", "AR", "AT", "AU", "BA", "BE", "BG", "BH", "BO", "BR", "BY", "CA", "CH", "CL", "CO", "CR", "CY", "CZ", "DE", "DK", "DO", "DZ", "EC", "EE", "EG", "ES", "FI", "FR", "GB", "GR", "GT", "HK", "HN", "HR", "HU", "ID", "IE", "IL", "IN", "IS", "IT", "JO", "JP", "KW", "KZ", "LB", "LI", "LT", "LU", "LV", "MA", "MC", "MD", "ME", "MK", "MT", "MX", "MY", "NI", "NL", "NO", "NZ", "OM", "PA", "PE", "PH", "PL", "PS", "PT", "PY", "QA", "RO", "RS", "RU", "SA", "SE", "SG", "SI", "SK", "SV", "TH", "TN", "TR", "TW", "UA", "US", "UY", "VN", "XK", "ZA"],
"disc_number": 1,
"duration_ms": 227000,
"explicit": false,
"external_urls": {
"spotify": "https://open.spotify.com/track/7dcMZLssGtsCJq9VdI22XC"
},
"href": "https://api.spotify.com/v1/tracks/7dcMZLssGtsCJq9VdI22XC",
"id": "7dcMZLssGtsCJq9VdI22XC",
"is_local": false,
"name": "Pink Frosty Demo",
"preview_url": "https://p.scdn.co/mp3-preview/8dd834d95f6d4d74a36d71f24be422212545c881?cid=ff4c1e3515504e8397510b8d452c0eab",
"track_number": 1,
"type": "track",
"uri": "spotify:track:7dcMZLssGtsCJq9VdI22XC"
},
Анализ файла fugazi_songs .json показывает мне эту иерархию, которая указывает на идентификатор отдельного трека:
альбомы.item.tracks.items.item.artists.item.id
Я использую цикл for, чтобы попытаться получить все идентификаторы треков из каждой песни, которая находится в файле .json, используя этот путь.
track_ids = []
for i in range(len(fugazi_songs['albums'])):
track_ids.append(fugazi_songs['albums'][i]['tracks']['items'][i]['id'])
Вывод дает мне track_id только для одного альбома.
track_ids
['4PKl6Tt8YQaJIJmlnwELi7', '44ETQCGE31ypmEc5ut3WMe','18CrxbPSUzPlibPB7jjsbi','2iNaUrp1SRBFoJnJqhbwS8','3SdaSSuc4prTO9IKFZEvxd','21ObFu22NhjfhXJm51Idij','2jKNbuegISV7YPdvXu3vaB','7r5rLLUes9m2bKvdmESzBP','6JPcT2uMbQzmdp6VJFa9bA']
Я уверен, что решение простое, но я потратил часы, пытаясь понять это.
Как получить все треки для нескольких альбомов, собранных в файле .json, сгенерированном из sp.albums?
Большое спасибо, что нашли время, чтобы прочитать это, и я ценю ваш вклад!