Nov-19-2017, 06:23 PM
Im getting the top artists from a specific country from lastfm api. Im getting the name of each artist and store in the artists{} with success with:
For example for each artist, I want to print 5 records, one for each album of the top5 albums of that artist like:
import requests api_key = "0929f1144e531702a5563c887cbbade0" "generated for the working example ID = 0 artists = {} for i in range(1, 3): artists_response = requests.get('http://ws.audioscrobbler.com/2.0/?method=geo.gettopartists&country=spain&format=json&page=' + str(i) + '&api_key=' + api_key) artists_data = artists_response.json() for artist in artists_data["topartists"]["artist"]: name = artist["name"] artists[ID] = {} artists[ID]['ID'] = ID artists[ID]['name'] = name ID += 1But now for each artist I want to get the top5 albums of the artist and store in the albums{} the artist name, the correspondent artist id from artists{}, the name the album, and the url of the album.
For example for each artist, I want to print 5 records, one for each album of the top5 albums of that artist like:
"Artist": "U2", "ID": 175, "ArtistID": 10, "Title": Achtung Baby", "Image": "https://lastfm-img2.akamaized.net/i/u/174s/a482040d21924ddacd5fe75dedbb1ef2.png"}, "URL": "https://www.last.fm/music/U2/Achtung+Baby"}, "487": {"Date": "2004-01-01" "Artist": "U2", "ID": 176, "ArtistID": 10, "Description": "None", "Title": "Boy", ... and then the same for the other 3 albums of the top5To get this I have the code below, but its not working correctly. The artistId appears always as "0" and it only appears the 5 albums of the first artist. Do you know where is the issue?
albums = {} for i,v in artists.items(): chosen = artists[i]['name'].replace(" ", "+") topalbums_response = requests.get('http://ws.audioscrobbler.com/2.0/?method=artist.gettopalbums&format=json&artist=' + chosen + '&api_key=' + api_key + '&limit=5') albums_data = topalbums_response.json() for album in albums_data['topalbums']['album']: name = album["name"] url = album["url"] albums[ID] = {} albums[ID]['ID'] = ID albums[ID]['artist'] = artists[i]['name'] albums[ID]['artistID'] = artists[i]['ID'] albums[ID]['name'] = name albums[ID]['url'] = url for image in album['image']: if (image["size"] == "large"): if (image["size"] is not None): image = image["#text"] albums[ID]['image'] = image ID += 1 print(albums)Full example
import requests api_key = "0929f1144e531702a5563c887cbbade0" "generated for the working example ID = 0 artists = {} for i in range(1, 3): artists_response = requests.get('http://ws.audioscrobbler.com/2.0/?method=geo.gettopartists&country=spain&format=json&page=' + str(i) + '&api_key=' + api_key) artists_data = artists_response.json() for artist in artists_data["topartists"]["artist"]: name = artist["name"] artists[ID] = {} artists[ID]['ID'] = ID artists[ID]['name'] = name ID += 1 albums = {} for i,v in artists.items(): chosen = artists[i]['name'].replace(" ", "+") topalbums_response = requests.get('http://ws.audioscrobbler.com/2.0/?method=artist.gettopalbums&format=json&artist=' + chosen + '&api_key=' + api_key + '&limit=5') albums_data = topalbums_response.json() for album in albums_data['topalbums']['album']: name = album["name"] url = album["url"] albums[ID] = {} albums[ID]['ID'] = ID albums[ID]['artist'] = artists[i]['name'] albums[ID]['artistID'] = artists[i]['ID'] albums[ID]['name'] = name albums[ID]['url'] = url for image in album['image']: if (image["size"] == "large"): if (image["size"] is not None): image = image["#text"] albums[ID]['image'] = image ID += 1 print(albums)